use of org.wikipedia.dataclient.mwapi.MwQueryResponse in project apps-android-wikipedia by wikimedia.
the class PageFragmentLoadState method pageLoadLeadSectionComplete.
private void pageLoadLeadSectionComplete(PageLead pageLead, int startSequenceNum) {
if (!fragment.isAdded() || !sequenceNumber.inSync(startSequenceNum)) {
return;
}
if (pageLead.hasError()) {
ServiceError error = pageLead.getError();
if (error != null) {
commonSectionFetchOnCatch(new MwException((MwServiceError) error), startSequenceNum);
} else {
commonSectionFetchOnCatch(new IOException(getResources().getString(R.string.error_unknown)), startSequenceNum);
}
return;
}
Page page = pageLead.toPage(model.getTitle());
model.setPage(page);
model.setTitle(page.getTitle());
editHandler.setPage(model.getPage());
if (page.getTitle().getDescription() == null) {
app.getSessionFunnel().noDescription();
}
layoutLeadImage(() -> {
if (!fragment.isAdded()) {
return;
}
fragment.callback().onPageInvalidateOptionsMenu();
pageLoadRemainingSections(sequenceNumber.get());
});
// Update our history entry, in case the Title was changed (i.e. normalized)
final HistoryEntry curEntry = model.getCurEntry();
model.setCurEntry(new HistoryEntry(model.getTitle(), curEntry.getTimestamp(), curEntry.getSource()));
// Fetch larger thumbnail URL from the network, and save it to our DB.
new PageImagesClient().request(model.getTitle().getWikiSite(), Collections.singletonList(model.getTitle()), new PageImagesClient.Callback() {
@Override
public void success(@NonNull Call<MwQueryResponse> call, @NonNull Map<PageTitle, PageImage> results) {
if (results.containsKey(model.getTitle())) {
PageImage pageImage = results.get(model.getTitle());
app.getDatabaseClient(PageImage.class).upsert(pageImage, PageImageHistoryContract.Image.SELECTION);
updateThumbnail(pageImage.getImageName());
}
}
@Override
public void failure(@NonNull Call<MwQueryResponse> call, @NonNull Throwable caught) {
L.w(caught);
}
});
}
use of org.wikipedia.dataclient.mwapi.MwQueryResponse in project apps-android-wikipedia by wikimedia.
the class PageImagesClient method request.
@VisibleForTesting
Call<MwQueryResponse> request(@NonNull final WikiSite wiki, @NonNull Service service, @NonNull final List<PageTitle> titles, @NonNull final Callback cb) {
Call<MwQueryResponse> call = service.request(TextUtils.join("|", titles));
call.enqueue(new retrofit2.Callback<MwQueryResponse>() {
@Override
public void onResponse(@NonNull Call<MwQueryResponse> call, @NonNull Response<MwQueryResponse> response) {
Map<PageTitle, PageImage> pageImagesMap = new ArrayMap<>();
// error cases
if (response.body().success()) {
// nominal case
Map<String, PageTitle> titlesMap = new ArrayMap<>();
for (PageTitle title : titles) {
titlesMap.put(title.getPrefixedText(), title);
}
Map<String, String> thumbnailSourcesMap = new ArrayMap<>();
// noinspection ConstantConditions
for (MwQueryPage page : response.body().query().pages()) {
thumbnailSourcesMap.put(new PageTitle(null, page.title(), wiki).getPrefixedText(), page.thumbUrl());
if (!TextUtils.isEmpty(page.convertedFrom())) {
thumbnailSourcesMap.put(new PageTitle(null, page.convertedFrom(), wiki).getPrefixedText(), page.thumbUrl());
}
if (!TextUtils.isEmpty(page.redirectFrom())) {
thumbnailSourcesMap.put(new PageTitle(null, page.redirectFrom(), wiki).getPrefixedText(), page.thumbUrl());
}
}
for (String key : titlesMap.keySet()) {
if (thumbnailSourcesMap.containsKey(key)) {
PageTitle title = titlesMap.get(key);
pageImagesMap.put(title, new PageImage(title, thumbnailSourcesMap.get(key)));
}
}
cb.success(call, pageImagesMap);
} else if (response.body().hasError()) {
// noinspection ConstantConditions
cb.failure(call, new MwException(response.body().getError()));
} else {
cb.failure(call, new IOException("An unknown error occurred."));
}
}
@Override
public void onFailure(@NonNull Call<MwQueryResponse> call, @NonNull Throwable t) {
cb.failure(call, t);
}
});
return call;
}
Aggregations