Skip to content

Commit 48a4e10

Browse files
committed
#3808 Construct media objects that depict an item id correctly - use generator to construct media for DepictedImages
1 parent e96b7f6 commit 48a4e10

File tree

7 files changed

+35
-142
lines changed

7 files changed

+35
-142
lines changed

app/src/main/java/fr/free/nrw/commons/Media.java

+10-24
Original file line numberDiff line numberDiff line change
@@ -52,27 +52,6 @@ public Media() {
5252
pageId = UUID.randomUUID().toString();
5353
}
5454

55-
/**
56-
* Provide Media constructor
57-
* @param imageUrl Media image URL
58-
* @param filename Media filename
59-
* @param fallbackDescription Media description
60-
* @param dateUploaded Media date uploaded
61-
* @param creator Media creator
62-
*/
63-
public Media(final String imageUrl, final String filename,
64-
final String fallbackDescription,
65-
final Date dateUploaded,
66-
final String creator) {
67-
this();
68-
thumbUrl = imageUrl;
69-
this.imageUrl = imageUrl;
70-
this.filename = filename;
71-
this.fallbackDescription = fallbackDescription;
72-
this.dateUploaded = dateUploaded;
73-
this.creator = creator;
74-
}
75-
7655
/**
7756
* Constructor with all parameters
7857
*/
@@ -110,13 +89,20 @@ public Media(Media media) {
11089
this(media.getThumbUrl(), media.getImageUrl(), media.getFilename(),
11190
media.getFallbackDescription(), media.getDateUploaded(), media.getLicense(),
11291
media.getLicenseUrl(), media.getCreator(), media.getPageId(), media.getCategories(),
113-
media.getCoordinates(), media.getCaptions(),media.getDescriptions(),media.getDepictionIds());
92+
media.getCoordinates(), media.getCaptions(), media.getDescriptions(),
93+
media.getDepictionIds());
11494
}
11595

11696
public Media(final String filename,
11797
Map<String, String> captions, final String fallbackDescription,
11898
final String creator, final List<String> categories) {
119-
this(null, filename, fallbackDescription, new Date(), creator);
99+
this();
100+
thumbUrl = null;
101+
this.imageUrl = null;
102+
this.filename = filename;
103+
this.fallbackDescription = fallbackDescription;
104+
this.dateUploaded = new Date();
105+
this.creator = creator;
120106
this.categories = categories;
121107
this.captions=captions;
122108
}
@@ -132,7 +118,7 @@ protected Media(final Parcel in) {
132118
}
133119

134120
private static List<String> readList(Parcel in) {
135-
final ArrayList<String> list = new ArrayList<>();
121+
final List<String> list = new ArrayList<>();
136122
in.readStringList(list);
137123
return list;
138124
}

app/src/main/java/fr/free/nrw/commons/depictions/Media/DepictedImagesPresenter.java

+6-9
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import android.annotation.SuppressLint;
77
import fr.free.nrw.commons.Media;
8-
import fr.free.nrw.commons.explore.depictions.DepictsClient;
98
import fr.free.nrw.commons.kvstore.JsonKvStore;
109
import fr.free.nrw.commons.media.MediaClient;
1110
import io.reactivex.Scheduler;
@@ -27,7 +26,6 @@ public class DepictedImagesPresenter implements DepictedImagesContract.UserActio
2726
DepictedImagesContract.View.class.getClassLoader(),
2827
new Class[]{DepictedImagesContract.View.class},
2928
(proxy, method, methodArgs) -> null);
30-
DepictsClient depictsClient;
3129
MediaClient mediaClient;
3230
@Named("default_preferences")
3331
JsonKvStore depictionKvStore;
@@ -40,13 +38,13 @@ public class DepictedImagesPresenter implements DepictedImagesContract.UserActio
4038
* Ex: Q9394
4139
*/
4240
private List<Media> queryList = new ArrayList<>();
43-
private String entityId;
4441

4542
@Inject
46-
public DepictedImagesPresenter(@Named("default_preferences") JsonKvStore depictionKvStore, DepictsClient depictsClient, MediaClient mediaClient, @Named(IO_THREAD) Scheduler ioScheduler,
47-
@Named(MAIN_THREAD) Scheduler mainThreadScheduler) {
43+
public DepictedImagesPresenter(@Named("default_preferences") JsonKvStore depictionKvStore,
44+
MediaClient mediaClient,
45+
@Named(IO_THREAD) Scheduler ioScheduler,
46+
@Named(MAIN_THREAD) Scheduler mainThreadScheduler) {
4847
this.depictionKvStore = depictionKvStore;
49-
this.depictsClient = depictsClient;
5048
this.ioScheduler = ioScheduler;
5149
this.mainThreadScheduler = mainThreadScheduler;
5250
this.mediaClient = mediaClient;
@@ -68,11 +66,10 @@ public void onDetachView() {
6866
@SuppressLint("CheckResult")
6967
@Override
7068
public void initList(String entityId) {
71-
this.entityId = entityId;
7269
view.setLoadingStatus(true);
7370
view.progressBarVisible(true);
7471
view.setIsLastPage(false);
75-
compositeDisposable.add(depictsClient.fetchImagesForDepictedItem(entityId, 0)
72+
compositeDisposable.add(mediaClient.fetchImagesForDepictedItem(entityId, 0)
7673
.subscribeOn(ioScheduler)
7774
.observeOn(mainThreadScheduler)
7875
.subscribe(this::handleSuccess, this::handleError));
@@ -86,7 +83,7 @@ public void initList(String entityId) {
8683
@Override
8784
public void fetchMoreImages(String entityId) {
8885
view.progressBarVisible(true);
89-
compositeDisposable.add(depictsClient.fetchImagesForDepictedItem(entityId, queryList.size())
86+
compositeDisposable.add(mediaClient.fetchImagesForDepictedItem(entityId, queryList.size())
9087
.subscribeOn(ioScheduler)
9188
.observeOn(mainThreadScheduler)
9289
.subscribe(this::handlePaginationSuccess, this::handleError));

app/src/main/java/fr/free/nrw/commons/depictions/models/DepictionResponse.java

-73
This file was deleted.

app/src/main/java/fr/free/nrw/commons/explore/depictions/DepictsClient.kt

-27
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package fr.free.nrw.commons.explore.depictions
22

3-
import fr.free.nrw.commons.BuildConfig
4-
import fr.free.nrw.commons.Media
5-
import fr.free.nrw.commons.depictions.models.DepictionResponse
63
import fr.free.nrw.commons.depictions.subClass.models.SparqlResponse
74
import fr.free.nrw.commons.media.MediaInterface
85
import fr.free.nrw.commons.upload.depicts.DepictsInterface
@@ -43,30 +40,6 @@ class DepictsClient @Inject constructor(
4340
.map { it.entities().values.map(::DepictedItem) }
4441
}
4542

46-
/**
47-
* @return list of images for a particular depict entity
48-
*/
49-
fun fetchImagesForDepictedItem(query: String, sroffset: Int): Single<List<Media>> {
50-
return mediaInterface.fetchImagesForDepictedItem(
51-
"haswbstatement:" + BuildConfig.DEPICTS_PROPERTY + "=" + query,
52-
sroffset.toString()
53-
)
54-
.map { mwQueryResponse: DepictionResponse ->
55-
mwQueryResponse.query
56-
.search
57-
.map {
58-
Media(
59-
getUrl(it.title),
60-
it.title,
61-
"",
62-
safeParseDate(it.timestamp),
63-
""
64-
)
65-
}
66-
}
67-
}
68-
69-
7043
private fun getUrl(title: String): String {
7144
return getImageUrl(title, LARGE_IMAGE_SIZE)
7245
}

app/src/main/java/fr/free/nrw/commons/media/MediaClient.kt

+12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package fr.free.nrw.commons.media
22

3+
import fr.free.nrw.commons.BuildConfig
34
import fr.free.nrw.commons.Media
45
import fr.free.nrw.commons.depictions.Media.DepictedImagesFragment.PAGE_ID_PREFIX
56
import fr.free.nrw.commons.explore.media.MediaConverter
@@ -100,6 +101,17 @@ class MediaClient @Inject constructor(
100101
fun getMediaListFromSearch(keyword: String?, limit: Int, offset: Int) =
101102
responseToMediaList(mediaInterface.getMediaListFromSearch(keyword, limit, offset))
102103

104+
/**
105+
* @return list of images for a particular depict entity
106+
*/
107+
fun fetchImagesForDepictedItem(query: String, sroffset: Int): Single<List<Media>> {
108+
return responseToMediaList(mediaInterface.fetchImagesForDepictedItem(
109+
"haswbstatement:" + BuildConfig.DEPICTS_PROPERTY + "=" + query,
110+
sroffset.toString()
111+
))
112+
}
113+
114+
103115
private fun responseToMediaList(
104116
response: Single<MwQueryResponse>,
105117
key: String? = null

app/src/main/java/fr/free/nrw/commons/media/MediaInterface.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package fr.free.nrw.commons.media;
22

3-
import fr.free.nrw.commons.depictions.models.DepictionResponse;
43
import io.reactivex.Single;
54
import java.util.Map;
65
import org.wikipedia.dataclient.mwapi.MwQueryResponse;
@@ -123,7 +122,9 @@ Single<MwQueryResponse> getMediaListForUser(@Query("gaiuser") String username,
123122
* @param sroffset number od depictions already fetched, this is useful in implementing pagination
124123
*/
125124

126-
@GET("w/api.php?action=query&list=search&format=json&srnamespace=6")
127-
Single<DepictionResponse> fetchImagesForDepictedItem(@Query("srsearch") String query, @Query("sroffset") String sroffset);
125+
@GET("w/api.php?action=query&format=json&formatversion=2" + //Basic parameters
126+
"&generator=search&gsrnamespace=6" + //Search parameters
127+
MEDIA_PARAMS)
128+
Single<MwQueryResponse> fetchImagesForDepictedItem(@Query("gsrsearch") String query, @Query("gsroffset") String sroffset);
128129

129130
}

app/src/test/kotlin/fr/free/nrw/commons/depictions/DepictedImagesPresenterTest.kt

+3-6
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package fr.free.nrw.commons.depictions
33
import fr.free.nrw.commons.Media
44
import fr.free.nrw.commons.depictions.Media.DepictedImagesFragment
55
import fr.free.nrw.commons.depictions.Media.DepictedImagesPresenter
6-
import fr.free.nrw.commons.explore.depictions.DepictsClient
76
import fr.free.nrw.commons.kvstore.JsonKvStore
87
import fr.free.nrw.commons.media.MediaClient
98
import io.reactivex.Single
@@ -26,9 +25,6 @@ class DepictedImagesPresenterTest {
2625
@Mock
2726
lateinit var jsonKvStore: JsonKvStore
2827

29-
@Mock
30-
lateinit var depictsClient: DepictsClient
31-
3228
@Mock
3329
lateinit var mediaClient: MediaClient
3430

@@ -49,14 +45,15 @@ class DepictedImagesPresenterTest {
4945
testScheduler = TestScheduler()
5046
mediaList.add(mediaItem)
5147
testSingle = Single.just(mediaList)
52-
depictedImagesPresenter = DepictedImagesPresenter(jsonKvStore, depictsClient, mediaClient, testScheduler, testScheduler)
48+
depictedImagesPresenter = DepictedImagesPresenter(jsonKvStore,
49+
mediaClient, testScheduler, testScheduler)
5350
depictedImagesPresenter.onAttachView(view)
5451
}
5552

5653
@Test
5754
fun initList() {
5855
Mockito.`when`(
59-
depictsClient.fetchImagesForDepictedItem(ArgumentMatchers.anyString(),
56+
mediaClient.fetchImagesForDepictedItem(ArgumentMatchers.anyString(),
6057
ArgumentMatchers.anyInt())
6158
).thenReturn(testSingle)
6259
depictedImagesPresenter.initList("rabbit")

0 commit comments

Comments
 (0)