As per #3026, removed the obsolete classes in package mwapi (#3150)

This commit is contained in:
Ilgaz Er 2019-10-05 14:43:49 +03:00 committed by Ashish Kumar
parent 13d847ea77
commit ccd7b3d3d2
26 changed files with 40 additions and 632 deletions

View file

@ -6,7 +6,6 @@ import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import fr.free.nrw.commons.media.MediaClient; import fr.free.nrw.commons.media.MediaClient;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient; import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient;
import io.reactivex.Single; import io.reactivex.Single;
import timber.log.Timber; import timber.log.Timber;
@ -19,16 +18,13 @@ import timber.log.Timber;
*/ */
@Singleton @Singleton
public class MediaDataExtractor { public class MediaDataExtractor {
private final MediaWikiApi mediaWikiApi;
private final OkHttpJsonApiClient okHttpJsonApiClient; private final OkHttpJsonApiClient okHttpJsonApiClient;
private final MediaClient mediaClient; private final MediaClient mediaClient;
@Inject @Inject
public MediaDataExtractor(MediaWikiApi mwApi, public MediaDataExtractor(OkHttpJsonApiClient okHttpJsonApiClient,
OkHttpJsonApiClient okHttpJsonApiClient,
MediaClient mediaClient) { MediaClient mediaClient) {
this.okHttpJsonApiClient = okHttpJsonApiClient; this.okHttpJsonApiClient = okHttpJsonApiClient;
this.mediaWikiApi = mwApi;
this.mediaClient = mediaClient; this.mediaClient = mediaClient;
} }

View file

@ -43,7 +43,6 @@ import fr.free.nrw.commons.contributions.MainActivity;
import fr.free.nrw.commons.di.ApplicationlessInjection; import fr.free.nrw.commons.di.ApplicationlessInjection;
import fr.free.nrw.commons.explore.categories.ExploreActivity; import fr.free.nrw.commons.explore.categories.ExploreActivity;
import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.theme.NavigationBaseActivity; import fr.free.nrw.commons.theme.NavigationBaseActivity;
import fr.free.nrw.commons.utils.ConfigUtils; import fr.free.nrw.commons.utils.ConfigUtils;
import fr.free.nrw.commons.utils.ViewUtil; import fr.free.nrw.commons.utils.ViewUtil;
@ -64,9 +63,6 @@ import timber.log.Timber;
public class LoginActivity extends AccountAuthenticatorActivity { public class LoginActivity extends AccountAuthenticatorActivity {
@Inject
MediaWikiApi mwApi;
@Inject @Inject
SessionManager sessionManager; SessionManager sessionManager;

View file

@ -17,10 +17,8 @@ import javax.inject.Singleton;
import fr.free.nrw.commons.BuildConfig; import fr.free.nrw.commons.BuildConfig;
import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import io.reactivex.Completable; import io.reactivex.Completable;
import io.reactivex.Observable; import io.reactivex.Observable;
import timber.log.Timber;
/** /**
* Manage the current logged in user session. * Manage the current logged in user session.
@ -28,17 +26,14 @@ import timber.log.Timber;
@Singleton @Singleton
public class SessionManager { public class SessionManager {
private final Context context; private final Context context;
private final MediaWikiApi mediaWikiApi;
private Account currentAccount; // Unlike a savings account... ;-) private Account currentAccount; // Unlike a savings account... ;-)
private JsonKvStore defaultKvStore; private JsonKvStore defaultKvStore;
private static final String KEY_RAWUSERNAME = "rawusername"; private static final String KEY_RAWUSERNAME = "rawusername";
@Inject @Inject
public SessionManager(Context context, public SessionManager(Context context,
MediaWikiApi mediaWikiApi,
@Named("default_preferences") JsonKvStore defaultKvStore) { @Named("default_preferences") JsonKvStore defaultKvStore) {
this.context = context; this.context = context;
this.mediaWikiApi = mediaWikiApi;
this.currentAccount = null; this.currentAccount = null;
this.defaultKvStore = defaultKvStore; this.defaultKvStore = defaultKvStore;
} }
@ -146,7 +141,6 @@ public class SessionManager {
return Completable.fromObservable(Observable.fromArray(allAccounts) return Completable.fromObservable(Observable.fromArray(allAccounts)
.map(a -> accountManager.removeAccount(a, null, null).getResult())) .map(a -> accountManager.removeAccount(a, null, null).getResult()))
.doOnComplete(() -> { .doOnComplete(() -> {
mediaWikiApi.logout();
currentAccount = null; currentAccount = null;
}); });
} }

View file

@ -1,19 +1,21 @@
package fr.free.nrw.commons.category; package fr.free.nrw.commons.category;
import android.text.TextUtils; import android.text.TextUtils;
import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.upload.GpsCategoryModel;
import fr.free.nrw.commons.utils.StringSortingUtils;
import io.reactivex.Observable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Comparator; import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.upload.GpsCategoryModel;
import fr.free.nrw.commons.utils.StringSortingUtils;
import io.reactivex.Observable;
import timber.log.Timber; import timber.log.Timber;
/** /**
@ -22,7 +24,6 @@ import timber.log.Timber;
public class CategoriesModel{ public class CategoriesModel{
private static final int SEARCH_CATS_LIMIT = 25; private static final int SEARCH_CATS_LIMIT = 25;
private final MediaWikiApi mwApi;
private final CategoryClient categoryClient; private final CategoryClient categoryClient;
private final CategoryDao categoryDao; private final CategoryDao categoryDao;
private final JsonKvStore directKvStore; private final JsonKvStore directKvStore;
@ -32,11 +33,9 @@ public class CategoriesModel{
@Inject GpsCategoryModel gpsCategoryModel; @Inject GpsCategoryModel gpsCategoryModel;
@Inject @Inject
public CategoriesModel(MediaWikiApi mwApi, public CategoriesModel(CategoryClient categoryClient,
CategoryClient categoryClient,
CategoryDao categoryDao, CategoryDao categoryDao,
@Named("default_preferences") JsonKvStore directKvStore) { @Named("default_preferences") JsonKvStore directKvStore) {
this.mwApi = mwApi;
this.categoryClient = categoryClient; this.categoryClient = categoryClient;
this.categoryDao = categoryDao; this.categoryDao = categoryDao;
this.directKvStore = directKvStore; this.directKvStore = directKvStore;

View file

@ -4,15 +4,16 @@ package fr.free.nrw.commons.category;
import android.content.Intent; import android.content.Intent;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.os.Bundle; import android.os.Bundle;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.pedrogomez.renderers.RVRendererAdapter; import com.pedrogomez.renderers.RVRendererAdapter;
import java.util.ArrayList; import java.util.ArrayList;
@ -26,10 +27,8 @@ import butterknife.ButterKnife;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
import fr.free.nrw.commons.explore.categories.SearchCategoriesAdapterFactory; import fr.free.nrw.commons.explore.categories.SearchCategoriesAdapterFactory;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.utils.NetworkUtils; import fr.free.nrw.commons.utils.NetworkUtils;
import fr.free.nrw.commons.utils.ViewUtil; import fr.free.nrw.commons.utils.ViewUtil;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import timber.log.Timber; import timber.log.Timber;

View file

@ -1,9 +1,5 @@
package fr.free.nrw.commons.contributions; package fr.free.nrw.commons.contributions;
import static fr.free.nrw.commons.contributions.Contribution.STATE_FAILED;
import static fr.free.nrw.commons.contributions.MainActivity.CONTRIBUTIONS_TAB_POSITION;
import static fr.free.nrw.commons.utils.LengthUtils.formatDistanceBetween;
import android.Manifest; import android.Manifest;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
@ -17,12 +13,19 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentManager.OnBackStackChangedListener; import androidx.fragment.app.FragmentManager.OnBackStackChangedListener;
import androidx.fragment.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
import java.util.ArrayList;
import javax.inject.Inject;
import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import fr.free.nrw.commons.HandlerService; import fr.free.nrw.commons.HandlerService;
@ -41,7 +44,6 @@ import fr.free.nrw.commons.location.LocationServiceManager;
import fr.free.nrw.commons.location.LocationUpdateListener; import fr.free.nrw.commons.location.LocationUpdateListener;
import fr.free.nrw.commons.media.MediaDetailPagerFragment; import fr.free.nrw.commons.media.MediaDetailPagerFragment;
import fr.free.nrw.commons.media.MediaDetailPagerFragment.MediaDetailProvider; import fr.free.nrw.commons.media.MediaDetailPagerFragment.MediaDetailProvider;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient; import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient;
import fr.free.nrw.commons.nearby.NearbyController; import fr.free.nrw.commons.nearby.NearbyController;
import fr.free.nrw.commons.nearby.NearbyNotificationCardView; import fr.free.nrw.commons.nearby.NearbyNotificationCardView;
@ -57,11 +59,12 @@ import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import java.util.ArrayList;
import javax.inject.Inject;
import javax.inject.Named;
import timber.log.Timber; import timber.log.Timber;
import static fr.free.nrw.commons.contributions.Contribution.STATE_FAILED;
import static fr.free.nrw.commons.contributions.MainActivity.CONTRIBUTIONS_TAB_POSITION;
import static fr.free.nrw.commons.utils.LengthUtils.formatDistanceBetween;
public class ContributionsFragment public class ContributionsFragment
extends CommonsDaggerSupportFragment extends CommonsDaggerSupportFragment
implements implements
@ -72,7 +75,6 @@ public class ContributionsFragment
ICampaignsView, ContributionsContract.View { ICampaignsView, ContributionsContract.View {
@Inject @Named("default_preferences") JsonKvStore store; @Inject @Named("default_preferences") JsonKvStore store;
@Inject ContributionDao contributionDao; @Inject ContributionDao contributionDao;
@Inject MediaWikiApi mediaWikiApi;
@Inject NearbyController nearbyController; @Inject NearbyController nearbyController;
@Inject OkHttpJsonApiClient okHttpJsonApiClient; @Inject OkHttpJsonApiClient okHttpJsonApiClient;
@Inject CampaignsPresenter presenter; @Inject CampaignsPresenter presenter;

View file

@ -10,25 +10,12 @@ import android.content.SyncResult;
import android.database.Cursor; import android.database.Cursor;
import android.os.Bundle; import android.os.Bundle;
import android.os.RemoteException; import android.os.RemoteException;
import android.text.TextUtils;
import org.wikipedia.dataclient.mwapi.MwQueryLogEvent;
import org.wikipedia.dataclient.mwapi.MwQueryResult;
import org.wikipedia.util.DateUtil;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.di.ApplicationlessInjection; import fr.free.nrw.commons.di.ApplicationlessInjection;
import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.mwapi.LogEventResult;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.mwapi.UserClient; import fr.free.nrw.commons.mwapi.UserClient;
import timber.log.Timber; import timber.log.Timber;

View file

@ -27,8 +27,6 @@ import fr.free.nrw.commons.actions.PageEditInterface;
import fr.free.nrw.commons.category.CategoryInterface; import fr.free.nrw.commons.category.CategoryInterface;
import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.media.MediaInterface; import fr.free.nrw.commons.media.MediaInterface;
import fr.free.nrw.commons.mwapi.ApacheHttpClientMediaWikiApi;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient; import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient;
import fr.free.nrw.commons.mwapi.UserInterface; import fr.free.nrw.commons.mwapi.UserInterface;
import fr.free.nrw.commons.review.ReviewInterface; import fr.free.nrw.commons.review.ReviewInterface;
@ -78,14 +76,6 @@ public class NetworkingModule {
return httpLoggingInterceptor; return httpLoggingInterceptor;
} }
@Provides
@Singleton
public MediaWikiApi provideMediaWikiApi(Context context,
@Named("default_preferences") JsonKvStore defaultKvStore,
Gson gson) {
return new ApacheHttpClientMediaWikiApi(BuildConfig.WIKIMEDIA_API_HOST);
}
@Provides @Provides
@Singleton @Singleton
public OkHttpJsonApiClient provideOkHttpJsonApiClient(OkHttpClient okHttpClient, public OkHttpJsonApiClient provideOkHttpJsonApiClient(OkHttpClient okHttpClient,

View file

@ -3,15 +3,16 @@ package fr.free.nrw.commons.explore.categories;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.os.Bundle; import android.os.Bundle;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.pedrogomez.renderers.RVRendererAdapter; import com.pedrogomez.renderers.RVRendererAdapter;
import java.util.ArrayList; import java.util.ArrayList;
@ -31,10 +32,8 @@ import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
import fr.free.nrw.commons.explore.recentsearches.RecentSearch; import fr.free.nrw.commons.explore.recentsearches.RecentSearch;
import fr.free.nrw.commons.explore.recentsearches.RecentSearchesDao; import fr.free.nrw.commons.explore.recentsearches.RecentSearchesDao;
import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.utils.NetworkUtils; import fr.free.nrw.commons.utils.NetworkUtils;
import fr.free.nrw.commons.utils.ViewUtil; import fr.free.nrw.commons.utils.ViewUtil;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import timber.log.Timber; import timber.log.Timber;
@ -62,7 +61,6 @@ public class SearchCategoryFragment extends CommonsDaggerSupportFragment {
boolean isLoadingCategories; boolean isLoadingCategories;
@Inject RecentSearchesDao recentSearchesDao; @Inject RecentSearchesDao recentSearchesDao;
@Inject MediaWikiApi mwApi;
@Inject CategoryClient categoryClient; @Inject CategoryClient categoryClient;
@Inject @Inject

View file

@ -1,9 +1,5 @@
package fr.free.nrw.commons.media; package fr.free.nrw.commons.media;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
import static android.content.Context.DOWNLOAD_SERVICE;
import static fr.free.nrw.commons.Utils.handleWebUrl;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.DownloadManager; import android.app.DownloadManager;
import android.content.Intent; import android.content.Intent;
@ -18,10 +14,15 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Toast; import android.widget.Toast;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.ViewPager; import androidx.viewpager.widget.ViewPager;
import javax.inject.Inject;
import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import fr.free.nrw.commons.Media; import fr.free.nrw.commons.Media;
@ -37,18 +38,18 @@ import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
import fr.free.nrw.commons.explore.SearchActivity; import fr.free.nrw.commons.explore.SearchActivity;
import fr.free.nrw.commons.explore.categories.ExploreActivity; import fr.free.nrw.commons.explore.categories.ExploreActivity;
import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.utils.ImageUtils; import fr.free.nrw.commons.utils.ImageUtils;
import fr.free.nrw.commons.utils.NetworkUtils; import fr.free.nrw.commons.utils.NetworkUtils;
import fr.free.nrw.commons.utils.PermissionUtils; import fr.free.nrw.commons.utils.PermissionUtils;
import fr.free.nrw.commons.utils.ViewUtil; import fr.free.nrw.commons.utils.ViewUtil;
import javax.inject.Inject;
import javax.inject.Named;
import timber.log.Timber; import timber.log.Timber;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
import static android.content.Context.DOWNLOAD_SERVICE;
import static fr.free.nrw.commons.Utils.handleWebUrl;
public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment implements ViewPager.OnPageChangeListener { public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment implements ViewPager.OnPageChangeListener {
@Inject MediaWikiApi mwApi;
@Inject SessionManager sessionManager; @Inject SessionManager sessionManager;
@Inject @Named("default_preferences") JsonKvStore store; @Inject @Named("default_preferences") JsonKvStore store;
@Inject BookmarkPicturesDao bookmarkDao; @Inject BookmarkPicturesDao bookmarkDao;

View file

@ -1,63 +0,0 @@
package fr.free.nrw.commons.mwapi;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.AbstractHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.CoreProtocolPNames;
import org.wikipedia.util.DateUtil;
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import fr.free.nrw.commons.BuildConfig;
import fr.free.nrw.commons.CommonsApplication;
import timber.log.Timber;
/**
* @author Addshore
*/
public class ApacheHttpClientMediaWikiApi implements MediaWikiApi {
private AbstractHttpClient httpClient;
private CustomMwApi api;
public ApacheHttpClientMediaWikiApi(String apiURL) {
BasicHttpParams params = new BasicHttpParams();
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
final SSLSocketFactory sslSocketFactory = SSLSocketFactory.getSocketFactory();
schemeRegistry.register(new Scheme("https", sslSocketFactory, 443));
ClientConnectionManager cm = new ThreadSafeClientConnManager(params, schemeRegistry);
params.setParameter(CoreProtocolPNames.USER_AGENT, CommonsApplication.getInstance().getUserAgent());
httpClient = new DefaultHttpClient(cm, params);
if (BuildConfig.DEBUG) {
httpClient.addRequestInterceptor(NetworkInterceptors.getHttpRequestInterceptor());
}
api = new CustomMwApi(apiURL, httpClient);
}
/**
* Calls media wiki's logout API
*/
public void logout() {
try {
api.logout();
} catch (IOException e) {
Timber.e(e, "Error occurred while logging out");
}
}
}

View file

@ -1,122 +0,0 @@
package fr.free.nrw.commons.mwapi;
import org.apache.http.client.HttpClient;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import java.io.IOError;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import in.yuvi.http.fluent.Http;
import timber.log.Timber;
public class CustomApiResult {
private Node doc;
private XPath evaluator;
CustomApiResult(Node doc) {
this.doc = doc;
this.evaluator = XPathFactory.newInstance().newXPath();
}
static CustomApiResult fromRequestBuilder(String requestIdentifier, Http.HttpRequestBuilder builder, HttpClient client) throws IOException {
try {
DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = docBuilder.parse(builder.use(client).charset("utf-8").data("format", "xml").asResponse().getEntity().getContent());
printStringFromDocument(requestIdentifier, doc);
return new CustomApiResult(doc);
} catch (ParserConfigurationException e) {
// I don't know wtf I can do about this on...
Timber.e(e, "Error occurred while parsing the response for method %s", requestIdentifier);
throw new RuntimeException(e);
} catch (IllegalStateException e) {
// So, this should never actually happen - since we assume MediaWiki always generates valid json
// So the only thing causing this would be a network truncation
// Sooo... I can throw IOError
// Thanks Java, for making me spend significant time on shit that happens once in a bluemoon
// I surely am writing Nuclear Submarine controller code
Timber.e(e, "Error occurred while parsing the response for method %s", requestIdentifier);
throw new IOError(e);
} catch (SAXException e) {
// See Rant above
Timber.e(e, "Error occurred while parsing the response for method %s", requestIdentifier);
throw new IOError(e);
}
}
public static void printStringFromDocument(String requestIdentifier, Document doc)
{
try
{
DOMSource domSource = new DOMSource(doc);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(domSource, result);
Timber.d("API response for method %s is\n %s", requestIdentifier, writer.toString());
}
catch(TransformerException ex)
{
Timber.e(ex, "Error occurred in transforming response for method %s", requestIdentifier);
}
}
public Node getDocument() {
return doc;
}
public ArrayList<CustomApiResult> getNodes(String xpath) {
try {
ArrayList<CustomApiResult> results = new ArrayList<>();
NodeList nodes = (NodeList) evaluator.evaluate(xpath, doc, XPathConstants.NODESET);
for(int i = 0; i < nodes.getLength(); i++) {
results.add(new CustomApiResult(nodes.item(i)));
}
return results;
} catch (XPathExpressionException e) {
return null;
}
}
public CustomApiResult getNode(String xpath) {
try {
return new CustomApiResult((Node) evaluator.evaluate(xpath, doc, XPathConstants.NODE));
} catch (XPathExpressionException e) {
return null;
}
}
public Double getNumber(String xpath) {
try {
return (Double) evaluator.evaluate(xpath, doc, XPathConstants.NUMBER);
} catch (XPathExpressionException e) {
return null;
}
}
public String getString(String xpath) {
try {
return (String) evaluator.evaluate(xpath, doc, XPathConstants.STRING);
} catch (XPathExpressionException e) {
return null;
}
}
}

View file

@ -1,188 +0,0 @@
package fr.free.nrw.commons.mwapi;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.AbstractHttpClient;
import org.apache.http.impl.cookie.BasicClientCookie;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import in.yuvi.http.fluent.Http;
import in.yuvi.http.fluent.ProgressListener;
import timber.log.Timber;
public class CustomMwApi {
public class RequestBuilder {
private HashMap<String, Object> params;
private CustomMwApi api;
RequestBuilder(CustomMwApi api) {
params = new HashMap<>();
this.api = api;
}
public RequestBuilder param(String key, Object value) {
params.put(key, value);
return this;
}
public CustomApiResult get() throws IOException {
return api.makeRequest("GET", params);
}
public CustomApiResult post() throws IOException {
return api.makeRequest("POST", params);
}
}
private AbstractHttpClient client;
private String apiURL;
public boolean isLoggedIn;
private String authCookie = null;
private String userName = null;
private String userID = null;
public CustomMwApi(String apiURL, AbstractHttpClient client) {
this.apiURL = apiURL;
this.client = client;
}
public RequestBuilder action(String action) {
RequestBuilder builder = new RequestBuilder(this);
builder.param("action", action);
return builder;
}
public String getAuthCookie() {
if (authCookie == null){
authCookie = "";
List<Cookie> cookies = client.getCookieStore().getCookies();
for(Cookie cookie: cookies) {
authCookie += cookie.getName() + "=" + cookie.getValue() + ";";
}
}
return authCookie;
}
public void setAuthCookie(String authCookie) {
if (authCookie == null) {//If the authCookie is null, no need to proceed
return;
}
this.authCookie = authCookie;
this.isLoggedIn = true;
String[] cookies = authCookie.split(";");
String domain;
try {
domain = new URL(apiURL).getHost();
} catch (MalformedURLException e) {
// Mighty well better not happen!
e.printStackTrace();
throw new RuntimeException(e);
}
// This works because I know which cookies are going to be set by MediaWiki, and they don't contain a = or ; in them :D
for(String cookie: cookies) {
String[] parts = cookie.split("=");
BasicClientCookie c = new BasicClientCookie(parts[0], parts[1]);
c.setDomain(domain);
client.getCookieStore().addCookie(c);
}
}
public void removeAllCookies() {
client.getCookieStore().clear();
}
public boolean validateLogin() throws IOException {
CustomApiResult userMeta = this.action("query").param("meta", "userinfo").get();
this.userID = userMeta.getString("/api/query/userinfo/@id");
this.userName = userMeta.getString("/api/query/userinfo/@name");
Timber.d("User id is %s and user name is %s", userID, userName);
return !userID.equals("0");
}
public String getUserID() throws IOException {
if (this.userID == null || this.userID.equals("0")) {
this.validateLogin();
}
return userID;
}
public String getUserName() throws IOException {
if (this.userID == null || this.userID.equals("0")) {
this.validateLogin();
}
return userName;
}
public String login(String username, String password) throws IOException {
CustomApiResult tokenData = this.action("login").param("lgname", username).param("lgpassword", password).post();
String result = tokenData.getString("/api/login/@result");
if (result.equals("NeedToken")) {
String token = tokenData.getString("/api/login/@token");
CustomApiResult confirmData = this.action("login").param("lgname", username).param("lgpassword", password).param("lgtoken", token).post();
String finalResult = confirmData.getString("/api/login/@result");
if (finalResult.equals("Success")) {
isLoggedIn = true;
}
return finalResult;
} else {
return result;
}
}
public CustomApiResult uploadToStash(String filename, InputStream file, long length, String token, ProgressListener uploadProgressListener) throws IOException {
Timber.d("Initiating upload for file %s", filename);
Http.HttpRequestBuilder builder = Http.multipart(apiURL)
.data("action", "upload")
.data("stash", "1")
.data("token", token)
.data("ignorewarnings", "1")
.data("filename", filename)
.sendProgressListener(uploadProgressListener);
if (length != -1) {
builder.file("file", filename, file, length);
} else {
builder.file("file", filename, file);
}
return CustomApiResult.fromRequestBuilder("uploadToStash", builder, client);
}
public CustomApiResult uploadFromStash(String filename, String filekey, String text, String comment, String token) throws IOException {
Http.HttpRequestBuilder builder = Http.multipart(apiURL)
.data("action", "upload")
.data("token", token)
.data("ignorewarnings", "1")
.data("text", text)
.data("comment", comment)
.data("filename", filename)
.data("filekey", filekey);
return CustomApiResult.fromRequestBuilder("uploadFromStash", builder, client);
}
public void logout() throws IOException {
// I should be doing more validation here, but meh
isLoggedIn = false;
this.action("logout").post();
removeAllCookies();
authCookie = null;
}
private CustomApiResult makeRequest(String method, HashMap<String, Object> params) throws IOException {
Http.HttpRequestBuilder builder;
if (method.equals("POST")) {
builder = Http.post(apiURL);
} else {
builder = Http.get(apiURL);
}
builder.data(params);
return CustomApiResult.fromRequestBuilder(apiURL, builder, client);
}
}
;

View file

@ -1,51 +0,0 @@
package fr.free.nrw.commons.mwapi;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.util.Date;
import java.util.List;
public class LogEventResult {
private final List<LogEvent> logEvents;
private final String queryContinue;
LogEventResult(@NonNull List<LogEvent> logEvents, String queryContinue) {
this.logEvents = logEvents;
this.queryContinue = queryContinue;
}
@NonNull
public List<LogEvent> getLogEvents() {
return logEvents;
}
@Nullable
public String getQueryContinue() {
return queryContinue;
}
public static class LogEvent {
private final String pageId;
private final String filename;
private final Date dateUpdated;
LogEvent(String pageId, String filename, Date dateUpdated) {
this.pageId = pageId;
this.filename = filename;
this.dateUpdated = dateUpdated;
}
public boolean isDeleted() {
return pageId.equals("0");
}
public String getFilename() {
return filename;
}
public Date getDateUpdated() {
return dateUpdated;
}
}
}

View file

@ -1,19 +0,0 @@
package fr.free.nrw.commons.mwapi;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.io.IOException;
import io.reactivex.Single;
public interface MediaWikiApi {
void logout();
// Single<CampaignResponseDTO> getCampaigns();
interface ProgressListener {
void onProgress(long transferred, long total);
}
}

View file

@ -1,85 +0,0 @@
package fr.free.nrw.commons.mwapi;
import androidx.annotation.NonNull;
import org.apache.http.Header;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.impl.client.ClientParamsStack;
import org.apache.http.params.HttpParamsNames;
import org.apache.http.protocol.HttpContext;
import java.util.HashSet;
import java.util.Set;
import timber.log.Timber;
public class NetworkInterceptors {
/**
* Interceptor to log the HTTP request
*/
@NonNull
public static HttpRequestInterceptor getHttpRequestInterceptor() {
return (HttpRequest request, HttpContext httpContext) -> {
Timber.v("<<<<<<<<<<<<<< START OF REQUEST LOGGING [%s] >>>>>>>>>>>>", request.getRequestLine().getUri());
Timber.v("Request line:\n %s", request.getRequestLine().toString());
logRequestParams(request);
logRequestHeaders(request);
Timber.v("Protocol version:\n %s", request.getProtocolVersion());
Timber.v("<<<<<<<<<<<<<< END OF REQUEST LOGGING [%s] >>>>>>>>>>>>", request.getRequestLine().getUri());
};
}
/**
* Log all request params from a HTTPRequest
* @param request
*/
private static void logRequestParams(HttpRequest request) {
Set<String> names = new HashSet<>();
if (request.getParams() instanceof ClientParamsStack) {
ClientParamsStack cps = (ClientParamsStack) request.getParams();
if (cps.getApplicationParams() != null
&& cps.getRequestParams() instanceof HttpParamsNames) {
names.addAll(((HttpParamsNames) cps.getApplicationParams()).getNames());
}
if (cps.getClientParams() != null
&& cps.getClientParams() instanceof HttpParamsNames) {
names.addAll(((HttpParamsNames) cps.getClientParams()).getNames());
}
if (cps.getRequestParams() != null
&& cps.getRequestParams() instanceof HttpParamsNames) {
names.addAll(((HttpParamsNames) cps.getRequestParams()).getNames());
}
if (cps.getOverrideParams() != null
&& cps.getRequestParams() instanceof HttpParamsNames) {
names.addAll(((HttpParamsNames) cps.getOverrideParams()).getNames());
}
} else {
HttpParamsNames params = (HttpParamsNames) request.getParams();
names = params.getNames();
}
Timber.v("<<<<<<<<<<<<<< REQUEST PARAMS >>>>>>>>>>>>");
for (String name : names) {
Timber.v("Param >> %s: %s", name, request.getParams().getParameter(name));
}
Timber.v("<<<<<<<<<<<<<< REQUEST PARAMS >>>>>>>>>>>>");
}
/**
* Log all headers from a HTTPRequest
* @param request
*/
private static void logRequestHeaders(HttpRequest request) {
Header[] headerFields = request.getAllHeaders();
Timber.v("<<<<<<<<<<<<<< HEADERS >>>>>>>>>>>>");
for (int e = 0; e < request.getAllHeaders().length; e++) {
Timber.v("Header >> %s: %s", headerFields[e].getName(), headerFields[e].getValue());
}
Timber.v("<<<<<<<<<<<<<< HEADERS >>>>>>>>>>>>");
}
}

View file

@ -47,7 +47,7 @@ public class QuizChecker {
/** /**
* constructor to set the parameters for quiz * constructor to set the parameters for quiz
* @param sessionManager * @param sessionManager
* @param okHttpJsonApiClient instance of MediaWikiApi * @param okHttpJsonApiClient
*/ */
@Inject @Inject
public QuizChecker(SessionManager sessionManager, public QuizChecker(SessionManager sessionManager,

View file

@ -27,7 +27,6 @@ import butterknife.ButterKnife;
import fr.free.nrw.commons.Media; import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.delete.DeleteHelper; import fr.free.nrw.commons.delete.DeleteHelper;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.theme.NavigationBaseActivity; import fr.free.nrw.commons.theme.NavigationBaseActivity;
import fr.free.nrw.commons.utils.DialogUtil; import fr.free.nrw.commons.utils.DialogUtil;
import fr.free.nrw.commons.utils.ViewUtil; import fr.free.nrw.commons.utils.ViewUtil;
@ -58,8 +57,6 @@ public class ReviewActivity extends NavigationBaseActivity {
public ReviewPagerAdapter reviewPagerAdapter; public ReviewPagerAdapter reviewPagerAdapter;
public ReviewController reviewController; public ReviewController reviewController;
@Inject @Inject
MediaWikiApi mwApi;
@Inject
ReviewHelper reviewHelper; ReviewHelper reviewHelper;
@Inject @Inject
DeleteHelper deleteHelper; DeleteHelper deleteHelper;

View file

@ -15,8 +15,6 @@ import javax.inject.Singleton;
import fr.free.nrw.commons.Media; import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.media.MediaClient; import fr.free.nrw.commons.media.MediaClient;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient;
import io.reactivex.Observable; import io.reactivex.Observable;
import io.reactivex.Single; import io.reactivex.Single;

View file

@ -11,7 +11,6 @@ import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import fr.free.nrw.commons.media.MediaClient; import fr.free.nrw.commons.media.MediaClient;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.nearby.Place; import fr.free.nrw.commons.nearby.Place;
import fr.free.nrw.commons.utils.ImageUtils; import fr.free.nrw.commons.utils.ImageUtils;
import fr.free.nrw.commons.utils.ImageUtilsWrapper; import fr.free.nrw.commons.utils.ImageUtilsWrapper;
@ -32,7 +31,6 @@ import static fr.free.nrw.commons.utils.ImageUtils.IMAGE_OK;
public class ImageProcessingService { public class ImageProcessingService {
private final FileUtilsWrapper fileUtilsWrapper; private final FileUtilsWrapper fileUtilsWrapper;
private final ImageUtilsWrapper imageUtilsWrapper; private final ImageUtilsWrapper imageUtilsWrapper;
private final MediaWikiApi mwApi;
private final ReadFBMD readFBMD; private final ReadFBMD readFBMD;
private final EXIFReader EXIFReader; private final EXIFReader EXIFReader;
private final MediaClient mediaClient; private final MediaClient mediaClient;
@ -41,11 +39,10 @@ public class ImageProcessingService {
@Inject @Inject
public ImageProcessingService(FileUtilsWrapper fileUtilsWrapper, public ImageProcessingService(FileUtilsWrapper fileUtilsWrapper,
ImageUtilsWrapper imageUtilsWrapper, ImageUtilsWrapper imageUtilsWrapper,
MediaWikiApi mwApi, ReadFBMD readFBMD, EXIFReader EXIFReader, ReadFBMD readFBMD, EXIFReader EXIFReader,
MediaClient mediaClient, Context context) { MediaClient mediaClient, Context context) {
this.fileUtilsWrapper = fileUtilsWrapper; this.fileUtilsWrapper = fileUtilsWrapper;
this.imageUtilsWrapper = imageUtilsWrapper; this.imageUtilsWrapper = imageUtilsWrapper;
this.mwApi = mwApi;
this.readFBMD = readFBMD; this.readFBMD = readFBMD;
this.EXIFReader = EXIFReader; this.EXIFReader = EXIFReader;
this.mediaClient = mediaClient; this.mediaClient = mediaClient;

View file

@ -20,7 +20,6 @@ import fr.free.nrw.commons.contributions.ContributionDao;
import fr.free.nrw.commons.contributions.ContributionsContentProvider; import fr.free.nrw.commons.contributions.ContributionsContentProvider;
import fr.free.nrw.commons.contributions.MainActivity; import fr.free.nrw.commons.contributions.MainActivity;
import fr.free.nrw.commons.media.MediaClient; import fr.free.nrw.commons.media.MediaClient;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.utils.CommonsDateUtil; import fr.free.nrw.commons.utils.CommonsDateUtil;
import fr.free.nrw.commons.wikidata.WikidataEditService; import fr.free.nrw.commons.wikidata.WikidataEditService;
import io.reactivex.Observable; import io.reactivex.Observable;
@ -45,7 +44,6 @@ public class UploadService extends HandlerService<Contribution> {
public static final String EXTRA_FILES = EXTRA_PREFIX + ".files"; public static final String EXTRA_FILES = EXTRA_PREFIX + ".files";
public static final String EXTRA_CAMPAIGN = EXTRA_PREFIX + ".campaign"; public static final String EXTRA_CAMPAIGN = EXTRA_PREFIX + ".campaign";
@Inject MediaWikiApi mwApi;
@Inject WikidataEditService wikidataEditService; @Inject WikidataEditService wikidataEditService;
@Inject SessionManager sessionManager; @Inject SessionManager sessionManager;
@Inject ContributionDao contributionDao; @Inject ContributionDao contributionDao;
@ -88,7 +86,6 @@ public class UploadService extends HandlerService<Contribution> {
this.contribution = contribution; this.contribution = contribution;
} }
@Override
public void onProgress(long transferred, long total) { public void onProgress(long transferred, long total) {
Timber.d("Uploaded %d of %d", transferred, total); Timber.d("Uploaded %d of %d", transferred, total);
if (!notificationTitleChanged) { if (!notificationTitleChanged) {

View file

@ -12,7 +12,6 @@ import javax.inject.Singleton;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.actions.PageEditClient; import fr.free.nrw.commons.actions.PageEditClient;
import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.utils.ViewUtil; import fr.free.nrw.commons.utils.ViewUtil;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
@ -20,7 +19,7 @@ import timber.log.Timber;
/** /**
* This class is meant to handle the Wikidata edits made through the app * This class is meant to handle the Wikidata edits made through the app
* It will talk with MediaWikiApi to make necessary API calls, log the edits and fire listeners * It will talk with MediaWiki Apis to make the necessary calls, log the edits and fire listeners
* on successful edits * on successful edits
*/ */
@Singleton @Singleton

View file

@ -1,7 +1,6 @@
package fr.free.nrw.commons package fr.free.nrw.commons
import fr.free.nrw.commons.media.MediaClient import fr.free.nrw.commons.media.MediaClient
import fr.free.nrw.commons.mwapi.MediaWikiApi
import io.reactivex.Single import io.reactivex.Single
import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue
import org.junit.Before import org.junit.Before
@ -18,12 +17,8 @@ import org.mockito.MockitoAnnotations
*/ */
class MediaDataExtractorTest { class MediaDataExtractorTest {
@Mock
internal var mwApi: MediaWikiApi? = null
@Mock @Mock
internal var mediaClient: MediaClient? = null internal var mediaClient: MediaClient? = null
@InjectMocks @InjectMocks
var mediaDataExtractor: MediaDataExtractor? = null var mediaDataExtractor: MediaDataExtractor? = null

View file

@ -2,8 +2,6 @@ package fr.free.nrw.commons.review
import fr.free.nrw.commons.Media import fr.free.nrw.commons.Media
import fr.free.nrw.commons.media.MediaClient import fr.free.nrw.commons.media.MediaClient
import fr.free.nrw.commons.mwapi.MediaWikiApi
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.Single import io.reactivex.Single
import junit.framework.Assert.assertNotNull import junit.framework.Assert.assertNotNull

View file

@ -3,7 +3,6 @@ package fr.free.nrw.commons.upload
import android.net.Uri import android.net.Uri
import fr.free.nrw.commons.location.LatLng import fr.free.nrw.commons.location.LatLng
import fr.free.nrw.commons.media.MediaClient import fr.free.nrw.commons.media.MediaClient
import fr.free.nrw.commons.mwapi.MediaWikiApi
import fr.free.nrw.commons.nearby.Place import fr.free.nrw.commons.nearby.Place
import fr.free.nrw.commons.utils.ImageUtils import fr.free.nrw.commons.utils.ImageUtils
import fr.free.nrw.commons.utils.ImageUtilsWrapper import fr.free.nrw.commons.utils.ImageUtilsWrapper
@ -24,8 +23,6 @@ class u {
@Mock @Mock
internal var imageUtilsWrapper: ImageUtilsWrapper? = null internal var imageUtilsWrapper: ImageUtilsWrapper? = null
@Mock @Mock
internal var mwApi: MediaWikiApi? = null
@Mock
internal var readFBMD: ReadFBMD?=null internal var readFBMD: ReadFBMD?=null
@Mock @Mock
internal var readEXIF: EXIFReader?=null internal var readEXIF: EXIFReader?=null

View file

@ -5,12 +5,10 @@ import android.content.Context
import fr.free.nrw.commons.auth.SessionManager import fr.free.nrw.commons.auth.SessionManager
import fr.free.nrw.commons.filepicker.UploadableFile import fr.free.nrw.commons.filepicker.UploadableFile
import fr.free.nrw.commons.kvstore.JsonKvStore import fr.free.nrw.commons.kvstore.JsonKvStore
import fr.free.nrw.commons.mwapi.MediaWikiApi
import fr.free.nrw.commons.nearby.Place import fr.free.nrw.commons.nearby.Place
import fr.free.nrw.commons.utils.ImageUtils.IMAGE_OK import fr.free.nrw.commons.utils.ImageUtils.IMAGE_OK
import io.reactivex.Single import io.reactivex.Single
import org.junit.After import org.junit.After
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
@ -41,8 +39,6 @@ class UploadModelTest {
@Mock @Mock
internal var context: Context? = null internal var context: Context? = null
@Mock @Mock
internal var mwApi: MediaWikiApi? = null
@Mock
internal var sessionManage: SessionManager? = null internal var sessionManage: SessionManager? = null
@Mock @Mock
internal var fileUtilsWrapper: FileUtilsWrapper? = null internal var fileUtilsWrapper: FileUtilsWrapper? = null