Skip to content

Commit daad2d1

Browse files
authored
Merge pull request #82 from multim-dev/feature/misskey-v13
Feature/misskey v13
2 parents 5d6c02a + 02beb17 commit daad2d1

File tree

151 files changed

+5297
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

151 files changed

+5297
-1
lines changed

.github/workflows/gradle-publish.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ jobs:
3636
env:
3737
multim_misskey_token: ${{secrets.multim_misskey_token}}
3838
multim_misskey_instance: ${{secrets.multim_misskey_instance}}
39+
multim_misskeyv13_token: ${{secrets.multim_misskeyv13_token}}
40+
multim_misskeyv13_instance: ${{secrets.multim_misskeyv13_instance}}
3941
USERNAME: ${{ github.actor }}
4042
TOKEN: ${{ secrets.GITHUB_TOKEN }}
4143

.github/workflows/pr-test.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,7 @@ jobs:
3333
env:
3434
multim_misskey_token: ${{secrets.multim_misskey_token}}
3535
multim_misskey_instance: ${{secrets.multim_misskey_instance}}
36+
multim_misskeyv13_token: ${{secrets.multim_misskeyv13_token}}
37+
multim_misskeyv13_instance: ${{secrets.multim_misskeyv13_instance}}
3638
USERNAME: ${{ github.actor }}
3739
TOKEN: ${{ secrets.GITHUB_TOKEN }}

build.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,15 @@ subprojects {
8686
props.load(file("${project.rootProject.projectDir}/local.properties").inputStream())
8787
systemProperties("multim_misskey_token" to props["multim_misskey_token"])
8888
systemProperties("multim_misskey_instance" to props["multim_misskey_instance"])
89+
systemProperties("multim_misskeyv13_token" to props["multim_misskeyv13_token"])
90+
systemProperties("multim_misskeyv13_instance" to props["multim_misskeyv13_instance"])
8991

9092
} catch (e: Exception) {
9193
println("local.properties not found")
9294
systemProperties("multim_misskey_token" to System.getenv("multim_misskey_token"))
9395
systemProperties("multim_misskey_instance" to System.getenv("multim_misskey_instance"))
96+
systemProperties("multim_misskeyv13_token" to System.getenv("multim_misskeyv13_token"))
97+
systemProperties("multim_misskeyv13_instance" to System.getenv("multim_misskeyv13_instance"))
9498
}
9599

96100
useJUnitPlatform()

impl/misskeyv13/build.gradle.kts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
dependencies {
2+
implementation(project(":core"))
3+
}
4+
5+
sourceSets {
6+
test {
7+
kotlin {
8+
compileClasspath += project(":core").sourceSets.test.get().output
9+
runtimeClasspath += project(":core").sourceSets.test.get().output
10+
}
11+
}
12+
}
13+
14+
kotlin {
15+
16+
}
17+
18+
//tasks{
19+
// val sourcesJar by creating(Jar::class) {
20+
// archiveClassifier.set("sources")
21+
// from(sourceSets["main"].allSource)
22+
// }
23+
//}
24+
//
25+
//afterEvaluate {
26+
// publishing {
27+
// publications {
28+
//
29+
//
30+
// create<MavenPublication>("maven") {
31+
// groupId = project.group.toString()
32+
// artifactId = "multim-${project.name}"
33+
// version = project.version.toString()
34+
// from(components["kotlin"])
35+
// artifact(tasks["sourcesJar"])
36+
// }
37+
//
38+
//
39+
// }
40+
// }
41+
//}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package dev.usbharu.multim.misskey.v13
2+
3+
import dev.usbharu.multim.ServiceInfo
4+
import dev.usbharu.multim.misskey.v13.api.MisskeyApis
5+
import dev.usbharu.multim.misskey.v13.api.MisskeyMultiMApis
6+
import dev.usbharu.multim.misskey.v13.common.api.MisskeyAccountApi
7+
import dev.usbharu.multim.misskey.v13.common.api.MisskeyApiClient
8+
import dev.usbharu.multim.misskey.v13.common.api.MisskeyEmojiApi
9+
import dev.usbharu.multim.misskey.v13.common.api.MisskeyIApi
10+
import dev.usbharu.multim.misskey.v13.common.api.MisskeyStatusApi
11+
import dev.usbharu.multim.misskey.v13.common.api.MisskeyTimelineApi
12+
import dev.usbharu.multim.model.SingleTokenAuth
13+
14+
object MisskeyV13Info : ServiceInfo(
15+
Regex("misskey"),
16+
Regex("^13\\.[\\d.]+"),
17+
{ auth, baseUrl, client -> MisskeyApiClient(auth as SingleTokenAuth, baseUrl, client) },
18+
19+
{ apiClient -> MisskeyApis(apiClient as MisskeyApiClient) },
20+
{
21+
if (it is MisskeyApis) {
22+
MisskeyMultiMApis(
23+
MisskeyStatusApi(it),
24+
MisskeyAccountApi(it),
25+
MisskeyTimelineApi(it),
26+
MisskeyEmojiApi(it),
27+
MisskeyIApi(it)
28+
)
29+
} else {
30+
TODO()
31+
}
32+
}
33+
)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package dev.usbharu.multim.misskey.v13.api
2+
3+
import com.github.michaelbull.result.mapError
4+
import dev.usbharu.multim.error.*
5+
import dev.usbharu.multim.misskey.v13.common.api.MisskeyApiClient
6+
import dev.usbharu.multim.misskey.v13.model.ApShowRequest
7+
import dev.usbharu.multim.misskey.v13.model.ApShowResponse
8+
import io.ktor.client.plugins.*
9+
10+
class Ap(val client: MisskeyApiClient) {
11+
suspend fun show(apShowRequest: ApShowRequest): MultiMResult<ApShowResponse> {
12+
return client.post<ApShowRequest, ApShowResponse>(apShowRequest, "api/ap/show").mapError {
13+
val multiMError: MultiMError = when (it) {
14+
is HttpClientServerError -> MultiMHttpError(it.throwable as ServerResponseException)
15+
is HttpClientClientError -> MultiMHttpError(it.throwable as ClientRequestException)
16+
else -> MultiMError("Api Client Error", it.throwable, ErrorType.UNKNOWN)
17+
}
18+
multiMError
19+
}
20+
}
21+
}
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package dev.usbharu.multim.misskey.v13.api
2+
3+
import dev.usbharu.multim.error.MultiMResult
4+
import dev.usbharu.multim.error.mapMultiMError
5+
import dev.usbharu.multim.misskey.v13.common.api.MisskeyApiClient
6+
import dev.usbharu.multim.misskey.v13.model.*
7+
import io.ktor.client.call.*
8+
import io.ktor.client.request.forms.*
9+
import io.ktor.http.*
10+
11+
class Drive(val client: MisskeyApiClient) {
12+
@Suppress("MemberNameEqualsClassName")
13+
suspend fun drive(): MultiMResult<DriveResponse> {
14+
return client.postEmpty<DriveResponse>("api/drive").mapMultiMError()
15+
}
16+
17+
suspend fun files(filesRequest: DriveFilesRequest): MultiMResult<DriveFilesResponse> {
18+
return client.post<DriveFilesRequest, DriveFilesResponse>(filesRequest, "api/drive/files")
19+
.mapMultiMError()
20+
}
21+
22+
suspend fun folders(foldersRequest: DriveFoldersRequest): MultiMResult<DriveFoldersResponse> {
23+
return client.post<DriveFoldersRequest, DriveFoldersResponse>(
24+
foldersRequest,
25+
"api/drive/folders"
26+
).mapMultiMError()
27+
}
28+
29+
inner class Files {
30+
suspend fun attachedNotes(attachedNotesRequest: DriveFilesAttachedNotesRequest)
31+
: MultiMResult<DriveFilesAttachedNotesResponse> {
32+
return client.post<DriveFilesAttachedNotesRequest, DriveFilesAttachedNotesResponse>(
33+
attachedNotesRequest,
34+
"api/drive/files/attached-notes"
35+
).mapMultiMError()
36+
}
37+
38+
suspend fun checkExistence(checkExistenceRequest: DriveFilesCheckExistenceRequest)
39+
: MultiMResult<DriveFilesCheckExistenceResponse> {
40+
return client.post<DriveFilesCheckExistenceRequest, DriveFilesCheckExistenceResponse>(
41+
checkExistenceRequest,
42+
"api/drive/files/check-existence"
43+
).mapMultiMError()
44+
}
45+
46+
//TODO Result型対応
47+
suspend fun create(createRequest: DriveFilesCreateRequest): DriveFilesCreateResponse {
48+
return client.client.submitFormWithBinaryData(
49+
client.baseUrl + "api/drive/files/create",
50+
formData = formData {
51+
append("\"i\"", client.auth.token)
52+
append("\"file\"", createRequest.file, Headers.build {
53+
append(HttpHeaders.ContentDisposition, "filename=${createRequest.name}")
54+
})
55+
}).body()
56+
// return client.post(createRequest, "api/drive/files/create")
57+
}
58+
59+
suspend fun delete(deleteRequest: DriveFilesDeleteRequest): MultiMResult<Unit> {
60+
return client.postWithoutResponse(deleteRequest, "api/drive/files/delete")
61+
.mapMultiMError()
62+
}
63+
64+
suspend fun findByHash(findByHashRequest: DriveFilesFindByHashRequest)
65+
: MultiMResult<DriveFilesFindByHashResponse> {
66+
return client.post<DriveFilesFindByHashRequest, DriveFilesFindByHashResponse>(
67+
findByHashRequest,
68+
"api/drive/files/find-by-hash"
69+
).mapMultiMError()
70+
}
71+
72+
suspend fun find(findRequest: DriveFilesFindRequest): MultiMResult<DriveFilesFindResponse> {
73+
return client.post<DriveFilesFindRequest, DriveFilesFindResponse>(
74+
findRequest,
75+
"api/drive/files/find"
76+
).mapMultiMError()
77+
}
78+
79+
suspend fun show(showRequest: DriveFilesShowRequestByUrl): MultiMResult<DriveFilesShowResponse> {
80+
return client.post<DriveFilesShowRequestByUrl, DriveFilesShowResponse>(
81+
showRequest,
82+
"api/drive/files/show"
83+
).mapMultiMError()
84+
}
85+
86+
suspend fun show(showRequest: DriveFilesShowRequestByFileId): MultiMResult<DriveFilesShowResponse> {
87+
return client.post<DriveFilesShowRequestByFileId, DriveFilesShowResponse>(
88+
showRequest,
89+
"api/drive/files/show"
90+
).mapMultiMError()
91+
}
92+
93+
suspend fun update(updateRequest: DriveFilesUpdateRequest): MultiMResult<DriveFilesUpdateResponse> {
94+
return client.post<DriveFilesUpdateRequest, DriveFilesUpdateResponse>(
95+
updateRequest,
96+
"api/drive/files/update"
97+
).mapMultiMError()
98+
}
99+
100+
suspend fun uploadFromUrl(uploadFromUrlRequest: DriveFilesUploadFromUrlRequest): MultiMResult<Unit> {
101+
return client.postWithoutResponse(
102+
uploadFromUrlRequest,
103+
"api/drive/files/upload-from-url"
104+
).mapMultiMError()
105+
}
106+
}
107+
108+
inner class Folders {
109+
suspend fun create(foldersCreateRequest: DriveFoldersCreateRequest): MultiMResult<DriveFoldersCreateResponse> {
110+
return client.post<DriveFoldersCreateRequest, DriveFoldersCreateResponse>(
111+
foldersCreateRequest,
112+
"api/drive/folders/create"
113+
).mapMultiMError()
114+
}
115+
116+
suspend fun delete(foldersDeleteRequest: DriveFoldersDeleteRequest): MultiMResult<Unit> {
117+
return client.postWithoutResponse(foldersDeleteRequest, "api/drive/folders/delete")
118+
.mapMultiMError()
119+
}
120+
121+
suspend fun find(foldersFindRequest: DriveFoldersFindRequest): MultiMResult<DriveFoldersFindResponse> {
122+
return client.post<DriveFoldersFindRequest, DriveFoldersFindResponse>(
123+
foldersFindRequest,
124+
"api/drive/folders/find"
125+
).mapMultiMError()
126+
}
127+
}
128+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package dev.usbharu.multim.misskey.v13.api
2+
3+
import dev.usbharu.multim.error.MultiMResult
4+
import dev.usbharu.multim.error.mapMultiMError
5+
import dev.usbharu.multim.misskey.v13.common.api.MisskeyApiClient
6+
import dev.usbharu.multim.misskey.v13.model.*
7+
8+
class Following(val client: MisskeyApiClient) {
9+
suspend fun create(followingCreateRequest: FollowingCreateRequest): MultiMResult<FollowingCreateResponse> {
10+
return client.post<FollowingCreateRequest, FollowingCreateResponse>(
11+
followingCreateRequest,
12+
"api/following/create"
13+
).mapMultiMError()
14+
}
15+
16+
suspend fun delete(followingDeleteRequest: FollowingDeleteRequest): MultiMResult<FollowingDeleteResponse> {
17+
return client.post<FollowingDeleteRequest, FollowingDeleteResponse>(
18+
followingDeleteRequest,
19+
"api/following/delete"
20+
).mapMultiMError()
21+
}
22+
23+
suspend fun invalidate(followingInvalidateRequest: FollowingInvalidateRequest)
24+
: MultiMResult<FollowingInvalidateResponse> {
25+
return client.post<FollowingInvalidateRequest, FollowingInvalidateResponse>(
26+
followingInvalidateRequest,
27+
"api/following/invalidate"
28+
).mapMultiMError()
29+
}
30+
31+
inner class Requests {
32+
suspend fun accept(followingRequestsAcceptRequest: FollowingRequestsAcceptRequest): MultiMResult<Unit> {
33+
return client.postWithoutResponse(
34+
followingRequestsAcceptRequest,
35+
"api/following/requests/list"
36+
).mapMultiMError()
37+
}
38+
39+
suspend fun cancel(followingRequestsCancelRequest: FollowingRequestsCancelRequest): MultiMResult<Unit> {
40+
return client.postWithoutResponse(
41+
followingRequestsCancelRequest,
42+
"api/following/requests/cancel"
43+
).mapMultiMError()
44+
}
45+
46+
suspend fun list(): MultiMResult<FollowingRequestsListResponse> {
47+
return client.postEmpty<FollowingRequestsListResponse>("api/following/requests/list")
48+
.mapMultiMError()
49+
}
50+
51+
suspend fun reject(followingRequestsRejectRequest: FollowingRequestsRejectRequest): MultiMResult<Unit> {
52+
return client.postWithoutResponse(
53+
followingRequestsRejectRequest,
54+
"api/following/requests/reject"
55+
).mapMultiMError()
56+
}
57+
}
58+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package dev.usbharu.multim.misskey.v13.api
2+
3+
import dev.usbharu.multim.error.MultiMResult
4+
import dev.usbharu.multim.error.mapMultiMError
5+
import dev.usbharu.multim.misskey.v13.common.api.MisskeyApiClient
6+
import dev.usbharu.multim.misskey.v13.model.IIRequest
7+
import dev.usbharu.multim.misskey.v13.model.IIResponse
8+
9+
@Suppress("MemberNameEqualsClassName")
10+
class I(val misskeyApiClient: MisskeyApiClient) {
11+
suspend fun i(iiRequest: IIRequest = IIRequest()): MultiMResult<IIResponse> {
12+
return misskeyApiClient.post<IIRequest, IIResponse>(iiRequest, "api/i").mapMultiMError()
13+
}
14+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package dev.usbharu.multim.misskey.v13.api
2+
3+
import dev.usbharu.multim.error.MultiMResult
4+
import dev.usbharu.multim.error.mapMultiMError
5+
import dev.usbharu.multim.misskey.v13.common.api.MisskeyApiClient
6+
import dev.usbharu.multim.misskey.v13.model.MetaRequest
7+
import dev.usbharu.multim.misskey.v13.model.MetaResponse
8+
9+
@Suppress("MemberNameEqualsClassName")
10+
class Meta(val client: MisskeyApiClient) {
11+
suspend fun meta(metaRequest: MetaRequest): MultiMResult<MetaResponse> {
12+
return client.post<MetaRequest, MetaResponse>(metaRequest, "api/meta")
13+
.mapMultiMError()
14+
}
15+
}

0 commit comments

Comments
 (0)