Search in sources :

Example 26 with MwQueryResponse

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);
        }
    });
}
Also used : MwServiceError(org.wikipedia.dataclient.mwapi.MwServiceError) ServiceError(org.wikipedia.dataclient.ServiceError) MwQueryResponse(org.wikipedia.dataclient.mwapi.MwQueryResponse) MwException(org.wikipedia.dataclient.mwapi.MwException) ReadingListPage(org.wikipedia.readinglist.database.ReadingListPage) IOException(java.io.IOException) PageImage(org.wikipedia.pageimages.PageImage) MwServiceError(org.wikipedia.dataclient.mwapi.MwServiceError) PageImagesClient(org.wikipedia.pageimages.PageImagesClient) HistoryEntry(org.wikipedia.history.HistoryEntry)

Example 27 with MwQueryResponse

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;
}
Also used : MwQueryPage(org.wikipedia.dataclient.mwapi.MwQueryPage) PageTitle(org.wikipedia.page.PageTitle) MwQueryResponse(org.wikipedia.dataclient.mwapi.MwQueryResponse) MwException(org.wikipedia.dataclient.mwapi.MwException) IOException(java.io.IOException) ArrayMap(android.support.v4.util.ArrayMap) Map(java.util.Map) VisibleForTesting(android.support.annotation.VisibleForTesting)

Aggregations

MwQueryResponse (org.wikipedia.dataclient.mwapi.MwQueryResponse)27 MwException (org.wikipedia.dataclient.mwapi.MwException)14 VisibleForTesting (android.support.annotation.VisibleForTesting)12 IOException (java.io.IOException)12 Test (org.junit.Test)7 MockWebServerTest (org.wikipedia.test.MockWebServerTest)7 MwQueryPage (org.wikipedia.dataclient.mwapi.MwQueryPage)5 Callback (org.wikipedia.gallery.GalleryItemClient.Callback)5 ArrayList (java.util.ArrayList)3 NonNull (android.support.annotation.NonNull)2 List (java.util.List)2 Map (java.util.Map)2 PageTitle (org.wikipedia.page.PageTitle)2 PageImage (org.wikipedia.pageimages.PageImage)2 PageImagesClient (org.wikipedia.pageimages.PageImagesClient)2 Bitmap (android.graphics.Bitmap)1 ArrayMap (android.support.v4.util.ArrayMap)1 JsonParseException (com.google.gson.JsonParseException)1 HashMap (java.util.HashMap)1 ServiceError (org.wikipedia.dataclient.ServiceError)1