Skip to content

Commit 85d9aef

Browse files
Feature: Show where file is being used on Commons & Other wikis (commons-app#6006)
* add url to build config Signed-off-by: parneet-guraya <gurayaparneet@gmail.com> * add network call functions Signed-off-by: parneet-guraya <gurayaparneet@gmail.com> * return response asynchronously Signed-off-by: parneet-guraya <gurayaparneet@gmail.com> * inject page size in the request Signed-off-by: parneet-guraya <gurayaparneet@gmail.com> * rename from Commons..Response.kt to ..Response.kt Signed-off-by: parneet-guraya <gurayaparneet@gmail.com> * convert to .kt Signed-off-by: parneet-guraya <gurayaparneet@gmail.com> * ui setup working Signed-off-by: parneet-guraya <gurayaparneet@gmail.com> * fix merge conflict Signed-off-by: parneet-guraya <gurayaparneet@gmail.com> * cleanup Signed-off-by: parneet-guraya <gurayaparneet@gmail.com> * fix CI Signed-off-by: parneet-guraya <gurayaparneet@gmail.com> * use suspend function for network calls Signed-off-by: parneet-guraya <gurayaparneet@gmail.com> * doc * doc * doc * doc * doc --------- Signed-off-by: parneet-guraya <gurayaparneet@gmail.com> Co-authored-by: Nicolas Raoul <nicolas.raoul@gmail.com>
1 parent 04a07ed commit 85d9aef

File tree

13 files changed

+2587
-1499
lines changed

13 files changed

+2587
-1499
lines changed

app/build.gradle

+5-2
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,14 @@ dependencies {
5252
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
5353

5454
// Jetpack Compose
55-
def composeBom = platform('androidx.compose:compose-bom:2024.08.00')
55+
def composeBom = platform('androidx.compose:compose-bom:2024.11.00')
5656

57-
implementation "androidx.activity:activity-compose:1.9.1"
57+
implementation "androidx.activity:activity-compose:1.9.3"
5858
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.8.4"
5959
implementation (composeBom)
6060
implementation "androidx.compose.runtime:runtime"
6161
implementation "androidx.compose.ui:ui"
62+
implementation "androidx.compose.ui:ui-viewbinding"
6263
implementation "androidx.compose.ui:ui-graphics"
6364
implementation "androidx.compose.ui:ui-tooling"
6465
implementation "androidx.compose.foundation:foundation"
@@ -313,6 +314,7 @@ android {
313314
buildConfigField "String", "SIGNUP_SUCCESS_REDIRECTION_URL", "\"https://commons.m.wikimedia.org/w/index.php?title=Main_Page&welcome=yes\""
314315
buildConfigField "String", "FORGOT_PASSWORD_URL", "\"https://commons.wikimedia.org/wiki/Special:PasswordReset\""
315316
buildConfigField "String", "PRIVACY_POLICY_URL", "\"https://github.com/commons-app/commons-app-documentation/blob/master/android/Privacy-policy.md\""
317+
buildConfigField "String", "FILE_USAGES_BASE_URL", "\"https://commons.wikimedia.org/w/api.php?action=query&format=json&formatversion=2\""
316318
buildConfigField "String", "ACCOUNT_TYPE", "\"fr.free.nrw.commons\""
317319
buildConfigField "String", "CONTRIBUTION_AUTHORITY", "\"fr.free.nrw.commons.contributions.contentprovider\""
318320
buildConfigField "String", "MODIFICATION_AUTHORITY", "\"fr.free.nrw.commons.modifications.contentprovider\""
@@ -348,6 +350,7 @@ android {
348350
buildConfigField "String", "SIGNUP_SUCCESS_REDIRECTION_URL", "\"https://commons.m.wikimedia.beta.wmflabs.org/w/index.php?title=Main_Page&welcome=yes\""
349351
buildConfigField "String", "FORGOT_PASSWORD_URL", "\"https://commons.wikimedia.beta.wmflabs.org/wiki/Special:PasswordReset\""
350352
buildConfigField "String", "PRIVACY_POLICY_URL", "\"https://github.com/commons-app/commons-app-documentation/blob/master/android/Privacy-policy.md\""
353+
buildConfigField "String", "FILE_USAGES_BASE_URL", "\"https://commons.wikimedia.org/w/api.php?action=query&format=json&formatversion=2\""
351354
buildConfigField "String", "ACCOUNT_TYPE", "\"fr.free.nrw.commons.beta\""
352355
buildConfigField "String", "CONTRIBUTION_AUTHORITY", "\"fr.free.nrw.commons.beta.contributions.contentprovider\""
353356
buildConfigField "String", "MODIFICATION_AUTHORITY", "\"fr.free.nrw.commons.beta.modifications.contentprovider\""
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package fr.free.nrw.commons.fileusages
2+
3+
import com.google.gson.annotations.SerializedName
4+
5+
/**
6+
* Show where file is being used on Commons and oher wikis.
7+
*/
8+
data class FileUsagesResponse(
9+
@SerializedName("continue") val continueResponse: CommonsContinue?,
10+
@SerializedName("batchcomplete") val batchComplete: Boolean,
11+
@SerializedName("query") val query: Query,
12+
)
13+
14+
data class CommonsContinue(
15+
@SerializedName("fucontinue") val fuContinue: String,
16+
@SerializedName("continue") val continueKey: String
17+
)
18+
19+
data class Query(
20+
@SerializedName("pages") val pages: List<Page>
21+
)
22+
23+
data class Page(
24+
@SerializedName("pageid") val pageId: Int,
25+
@SerializedName("ns") val nameSpace: Int,
26+
@SerializedName("title") val title: String,
27+
@SerializedName("fileusage") val fileUsage: List<FileUsage>
28+
)
29+
30+
data class FileUsage(
31+
@SerializedName("pageid") val pageId: Int,
32+
@SerializedName("ns") val nameSpace: Int,
33+
@SerializedName("title") val title: String,
34+
@SerializedName("redirect") val redirect: Boolean
35+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package fr.free.nrw.commons.fileusages
2+
3+
/**
4+
* Show where file is being used on Commons and oher wikis.
5+
*/
6+
data class FileUsagesUiModel(
7+
val title: String,
8+
val link: String?
9+
)
10+
11+
fun FileUsage.toUiModel(): FileUsagesUiModel {
12+
return FileUsagesUiModel(title = title, link = "https://commons.wikimedia.org/wiki/$title")
13+
}
14+
15+
fun GlobalFileUsage.toUiModel(): FileUsagesUiModel {
16+
// link is associated with sub items under wiki group (which is not used ATM)
17+
return FileUsagesUiModel(title = wiki, link = null)
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package fr.free.nrw.commons.fileusages
2+
3+
import com.google.gson.annotations.SerializedName
4+
5+
/**
6+
* Show where file is being used on Commons and oher wikis.
7+
*/
8+
data class GlobalFileUsagesResponse(
9+
@SerializedName("continue") val continueResponse: GlobalContinue?,
10+
@SerializedName("batchcomplete") val batchComplete: Boolean,
11+
@SerializedName("query") val query: GlobalQuery,
12+
)
13+
14+
data class GlobalContinue(
15+
@SerializedName("gucontinue") val guContinue: String,
16+
@SerializedName("continue") val continueKey: String
17+
)
18+
19+
data class GlobalQuery(
20+
@SerializedName("pages") val pages: List<GlobalPage>
21+
)
22+
23+
data class GlobalPage(
24+
@SerializedName("pageid") val pageId: Int,
25+
@SerializedName("ns") val nameSpace: Int,
26+
@SerializedName("title") val title: String,
27+
@SerializedName("globalusage") val fileUsage: List<GlobalFileUsage>
28+
)
29+
30+
data class GlobalFileUsage(
31+
@SerializedName("title") val title: String,
32+
@SerializedName("wiki") val wiki: String,
33+
@SerializedName("url") val url: String
34+
)

0 commit comments

Comments
 (0)