NativeApi.java

mail@pastecode.io avatar
unknown
java
a year ago
60 kB
2
Indexable
package com.sync.mobileapp;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.AsyncTask;
import android.preference.PreferenceManager;
import android.util.Log;
import com.sync.mobileapp.NativeApiHelper;
import com.sync.mobileapp.Singleton.CameraUploadOrganizer.CameraUploadOrganizer;
import com.sync.mobileapp.Singleton.OfflineManager.FolderOfflineManagerFactory;
import com.sync.mobileapp.interfaces.NativeCallback;
import com.sync.mobileapp.models.CachedPathItems;
import com.sync.mobileapp.models.WebPath;
import com.sync.mobileapp.utils.Thumbnail;
import com.sync.mobileapp.utils.UploadUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.concurrent.atomic.AtomicInteger;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/* loaded from: /tmp/jadx-12339765468568164262.dex */
public class NativeApi extends NativeApiHelper {
    public static final int BTYPE_LOCALONLY = 0;
    public static final int BTYPE_THUMB1 = 4;
    public static final int BTYPE_THUMB2 = 8;
    public static int GALLERY_PID = -2;
    public static int ORDER_BY_DATE = 2;
    public static int ORDER_DESCEND = 32768;
    public static String PSEUDO_VERSION = "";
    private static final String TAG = "NativeApi";
    private static int WATCH_INTERVAL_SEC = 60;
    public static final int WHERE_DEFAULT_GALLERY = 2;
    public static final int WHERE_DEFAULT_LIST = 0;
    public static final int WHERE_DIR_ONLY = 16;
    public static final int WHERE_FILE_ONLY = 32;
    public static final int WHERE_HAS_THUMB1 = 1;
    public static final int WHERE_HAS_THUMB2 = 2;
    public static final int WHERE_HAS_THUMB2_OR_IMG_EXT = 8;
    public static final int WHERE_SHOW_DELETED = 4;
    public static int ORDER_BY_NAME = 1;
    public static int ORDER_FOLDERS_FIRST = 131072;
    public static int ORDER_NOCASE = 65536;
    public static int ORDER_DEFAULT = (ORDER_BY_NAME | ORDER_FOLDERS_FIRST) | ORDER_NOCASE;

    static {
        System.loadLibrary("syncus");
    }

    public static String debugCall(JSONObject jSONObject) throws JSONException {
        return call(jSONObject, null).toString();
    }

    public static synchronized JSONObject init(Context context, InitMode initMode, String str) throws JSONException {
        synchronized (NativeApi.class) {
            if (IS_INIT) {
                return new JSONObject().put("errcode", 0);
            }
            APP_CONTEXT = context.getApplicationContext();
            FolderOfflineManagerFactory.getInstance().setAppContext(context);
            AssetManager assets = context.getResources().getAssets();
            File dir = context.getDir(str, 0);
            File file = new File(context.getExternalFilesDir(null), str);
            File file2 = new File(context.getExternalCacheDir(), str);
            File filesDir = context.getFilesDir();
            boolean z = true;
            for (File file3 : Arrays.asList(dir, file, filesDir)) {
                if (!file3.isDirectory() && !file3.mkdir()) {
                    log("mkdirs " + file3 + " failed");
                    JSONObject jSONObject = new JSONObject();
                    return jSONObject.put("errdesc", "mkdir '" + file3 + "' failed").put("errcode", 1);
                }
            }
            PSEUDO_VERSION = "3.8.13.10";
            for (String str2 : Arrays.asList("stats.db", "cfg.db", "cacert.pem", "state.db")) {
                if (!copyAssetToDir(str2, assets, dir)) {
                    log("failed to copy asset " + str2 + " to " + dir);
                    JSONObject jSONObject2 = new JSONObject();
                    return jSONObject2.put("errdesc", "failed to copy " + str2 + " to " + dir).put("errcode", 1);
                }
            }
            JSONObject call = call(new JSONObject().put("action", "init").put("overrideversion", PSEUDO_VERSION).put("homedir", dir.toString()).put("docdir", file.toString()).put("offlinecache", file2.toString()).put("cachedir", filesDir.toString()), null);
            if (call.getInt("errcode") != 0) {
                z = false;
            }
            IS_INIT = z;
            SharedPreferences defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(APP_CONTEXT);
            Boolean valueOf = Boolean.valueOf(defaultSharedPreferences.getBoolean("pref_app_organized_cameraupload", false));
            Boolean valueOf2 = Boolean.valueOf(defaultSharedPreferences.getBoolean("pref_app_cameraupload_enable", false));
            if (valueOf2.booleanValue() && valueOf.booleanValue()) {
                CameraUploadOrganizer.getInstance().organizeCameraUploadFolder();
            } else if (valueOf2.booleanValue() && !valueOf.booleanValue()) {
                CameraUploadOrganizer.getInstance().unorganizeCameraUploadFolder();
            }
            return call;
        }
    }

    public static Context getContext() {
        return APP_CONTEXT;
    }

    public static synchronized JSONObject init(Context context, InitMode initMode) throws JSONException {
        JSONObject init;
        synchronized (NativeApi.class) {
            init = init(context, initMode, "default");
        }
        return init;
    }

    public static boolean isWifi(Context context) {
        NetworkInfo activeNetworkInfo = ((ConnectivityManager) context.getSystemService("connectivity")).getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.getType() == 1;
    }

    public static JSONObject abortRefreshPaths() throws JSONException {
        return call("abortRefreshPaths", null);
    }

    public static synchronized JSONObject refreshPaths(long j, NativeCallback nativeCallback) throws JSONException {
        JSONObject spawnThread;
        synchronized (NativeApi.class) {
            spawnThread = spawnThread(NativeApiHelper.ThreadedNativeCall.REFRESH_PATHS, new JSONObject().put("action", "refreshPaths").put("pid", j).put("maxiter", 100).put("onlyifolderthan", 0), nativeCallback);
        }
        return spawnThread;
    }

    public static synchronized JSONObject clearcache(NativeCallback nativeCallback) throws JSONException {
        JSONObject spawnThread;
        synchronized (NativeApi.class) {
            spawnThread = spawnThread(NativeApiHelper.ThreadedNativeCall.REFRESH_PATHS, new JSONObject().put("action", "clearcache"), nativeCallback);
        }
        return spawnThread;
    }

    public static synchronized JSONObject clearoldcache() throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call("clearoldcache", null);
        }
        return call;
    }

    public static synchronized JSONObject clearallofflines(NativeCallback nativeCallback) throws JSONException {
        JSONObject spawnThread;
        synchronized (NativeApi.class) {
            spawnThread = spawnThread(NativeApiHelper.ThreadedNativeCall.REFRESH_PATHS, new JSONObject().put("action", "clearallofflines"), nativeCallback);
        }
        return spawnThread;
    }

    public static synchronized JSONObject getoffline(long j) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "getofflinefile").put("syncid", j), null);
        }
        return call;
    }

    public static synchronized JSONObject getofflineDir() throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "getofflineDir"), null);
        }
        return call;
    }

    public static synchronized JSONObject createOffline(long j) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "createOfflinePath").put("syncid", j), null);
        }
        return call;
    }

    public static synchronized JSONObject deleteFreeAccount(JSONObject jSONObject) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "deleteFreeAccount").put("cmdname", "acctcancel").put("cmdin", jSONObject), null);
        }
        return call;
    }

    public static synchronized JSONObject fileproviderDownloadURL(long j) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "fileproviderDownloadURL").put("syncid", j), null);
        }
        return call;
    }

    public static synchronized JSONObject canDownload(long j) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "filecandownload").put("syncid", j), null);
        }
        return call;
    }

    public static synchronized JSONObject getOfflineFilesInDir(long j) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "getAllOfflinesInDir").put("needupdate", 0).put("dirsyncid", j), null);
        }
        return call;
    }

    public static synchronized JSONObject getDirOfflinePathBySyncid(long j, long j2) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "getOfflineInDirBySyncid").put("syncid", j2).put("dirsyncid", j), null);
        }
        return call;
    }

    public static synchronized JSONObject fileproviderIsLatest(long j, String str) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "fileproviderIsLatest").put("syncid", j).put("filepath", str), null);
        }
        return call;
    }

    public static synchronized JSONObject offlineFileSetMtime(long j, String str) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "offlineFileSetMtime").put("syncid", j).put("filepath", str), null);
        }
        return call;
    }

    public static synchronized JSONObject getOfflineFiles() throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "getOfflines").put("needupdate", 0), null);
        }
        return call;
    }

    public static synchronized JSONObject getCachedPath(long j) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "getCachedPath").put("syncid", j), null);
        }
        return call;
    }

    public static synchronized JSONObject getCachePath() throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "getcachepath"), null);
        }
        return call;
    }

    public static synchronized JSONObject getDirOfflinePath(long j, boolean z) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "getOfflinePathIndir").put("syncid", j).put("create", z), null);
        }
        return call;
    }

    public static synchronized JSONObject publinkDecryptFile(String str, String str2, String str3, String str4) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "publinkdecryptfile").put("encdatakey", str).put("sharekeyb64", str4).put("cryptedpath", str2).put("outpath", str3), null);
        }
        return call;
    }

    public static synchronized JSONObject fileproviderDecryptFile(long j, String str, String str2) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "fileproviderdecryptfile").put("syncid", j).put("cryptedpath", str).put("outpath", str2), null);
        }
        return call;
    }

    public static synchronized JSONObject fileproviderDecryptFileWithCallback(long j, String str, String str2, NativeCallback nativeCallback) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "fileproviderdecryptfilewithcb").put("syncid", j).put("cryptedpath", str).put("outpath", str2), nativeCallback);
        }
        return call;
    }

    public static JSONObject multiUploadInfo(long j, String str, String str2, String str3, String str4) throws JSONException {
        JSONObject thumbParams = getThumbParams();
        return call(new JSONObject().put("action", "multichunkUploadinfo").put("pid", j).put("oripath", str).put("payloadpath", str2).put("label", str3).put("thumb1", str4).put("thumb2", Thumbnail.make(str, thumbParams.getInt("thumb2size"), thumbParams.getInt("thumb2size"), false, thumbParams.getInt("thumb2quality"))), null);
    }

    public static synchronized JSONObject isProvisionedRefresh() throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call("fileproviderisProvisioned", null);
        }
        return call;
    }

    public static synchronized JSONObject multichunkPutInfo() throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "multichunkUploadPutUrl"), null);
        }
        return call;
    }

    public static synchronized JSONObject createOfflineDir(long j) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "createOfflineDir").put("syncid", j), null);
        }
        return call;
    }

    public static synchronized JSONObject recordOfflineDigest(String str) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "recordOfflineDigest").put("offlinepath", str), null);
        }
        return call;
    }

    public static synchronized JSONObject getOutDatedOfflineFiles() throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "getOutdatedOfflineFiles"), null);
        }
        return call;
    }

    public static synchronized JSONObject getRemovedOfflineFiles() throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "getRemovedOfflineFiles"), null);
        }
        return call;
    }

    public static synchronized JSONObject rewindLastHistid(int i) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "dumpquickRewind").put("rewindvalue", i), null);
        }
        return call;
    }

    public static synchronized JSONObject getAncestorid(long j) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "getAncestorid").put("syncid", j), null);
        }
        return call;
    }

    public static synchronized JSONObject zeroIsvault() throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "zeroIsVault"), null);
        }
        return call;
    }

    public static synchronized JSONObject getNewAddedOfflineFiles(long j) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "getNewAddedOfflineFiles").put("pid", j), null);
        }
        return call;
    }

    public static synchronized JSONObject setAllOfflineInactiveByPid(long j) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "setallofflineInactiveByPid").put("pid", j), null);
        }
        return call;
    }

    public static synchronized JSONObject setAllOfflineInactive() throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "setallofflineInactive"), null);
        }
        return call;
    }

    public static synchronized JSONObject insertOfflineFile(long j) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "insertoffline").put("syncid", j), null);
        }
        return call;
    }

    public static JSONObject getCfg() throws JSONException {
        return call("getCfg", null);
    }

    public static JSONObject refreshCfgWait() throws JSONException {
        return call("refreshCfg", null);
    }

    public static JSONObject refreshCfg(NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.REFRESH_CONF, new JSONObject().put("action", "refreshCfg"), nativeCallback);
    }

    public static JSONObject getThumbParams() throws JSONException {
        return call("getThumbParams", null);
    }

    public static JSONObject watchListing(long j, long j2, long j3, long j4, long j5, long j6, NativeCallback nativeCallback) throws JSONException {
        log("watch listing callled: " + j5);
        WATCHED_PID = j;
        WATCHED_WHEREFLAGS = j2;
        WATCHED_ORDERFLAGS = j3;
        WATCHED_THUMBTYPE = j4;
        WATCHED_NUM_ABOVE = j5;
        WATCHED_NUM_BELOW = j6;
        WATCHER_CB = nativeCallback;
        return new JSONObject().put("errcode", 0);
    }

    public static void unwatchAll() {
        WATCHER_CB = null;
        WATCHED_PID = 0L;
    }

    public static synchronized void spawnBackgroundDownloadThread(NativeCallback nativeCallback) {
        synchronized (NativeApi.class) {
            if (BG_DOWNLOAD_THREAD == null) {
                BG_DOWNLOAD_THREAD = new Thread((Runnable) new 1());
                BG_DOWNLOAD_THREAD.start();
            }
            BG_DOWNLOAD_CB = nativeCallback;
        }
    }

    public static synchronized void spawnBackgroundUploadThread(NativeCallback nativeCallback) {
        synchronized (NativeApi.class) {
            if (BG_UPLOAD_THREAD == null) {
                BG_UPLOAD_THREAD = new Thread((Runnable) new 2());
                BG_UPLOAD_THREAD.start();
            }
            BG_UPLOAD_CB = nativeCallback;
        }
    }

    public static synchronized void spawnBackgroundAutoUploadThread(NativeCallback nativeCallback) {
        synchronized (NativeApi.class) {
            if (BG_AUTOUPLOAD_THREAD == null) {
                BG_AUTOUPLOAD_THREAD = new Thread((Runnable) new 3());
                BG_AUTOUPLOAD_THREAD.start();
            } else {
                SyncApplication.logwrite(TAG, "wake up camera upload");
                wakeAutoUpload();
            }
            BG_AUTOUPLOAD_CB = nativeCallback;
        }
    }

    public static synchronized void pauseBackgroundAutoUploadThread(boolean z) {
        synchronized (NativeApi.class) {
        }
    }

    public static synchronized JSONObject nudgeWatcherThread() throws JSONException {
        JSONObject put;
        synchronized (NativeApi.class) {
            wakeWatcher();
            put = new JSONObject().put("errcode", 0);
        }
        return put;
    }

    public static synchronized void spawnWatcherThread() {
        synchronized (NativeApi.class) {
            if (BG_WATCHER_THREAD == null) {
                BG_WATCHER_THREAD = new Thread((Runnable) new 4());
                BG_WATCHER_THREAD.start();
            }
        }
    }

    public static synchronized void setWatcherInterval(int i) {
        synchronized (NativeApi.class) {
            WATCH_INTERVAL_SEC = i;
            Log.d(TAG, "Changing watcherinterval to " + i + " now " + WATCH_INTERVAL_SEC);
        }
    }

    public static void clearPathCache(long j, long j2, long j3) {
        if (PATH_ITEMS_CACHE == null) {
            PATH_ITEMS_CACHE = new Hashtable(100);
        }
        String str = j + ":" + j2 + ":" + j3;
        if (PATH_ITEMS_CACHE.get(str) != null) {
            CachedPathItems cachedPathItems = (CachedPathItems) PATH_ITEMS_CACHE.get(str);
            cachedPathItems.items.clear();
            cachedPathItems.indexes.clear();
            cachedPathItems.isloaded = false;
        }
    }

    public static void clearPathCacheBySyncID(long j) {
        if (PATH_ITEMS_CACHE == null) {
            PATH_ITEMS_CACHE = new Hashtable(100);
        }
        String valueOf = String.valueOf(j);
        for (String str : PATH_ITEMS_CACHE.keySet()) {
            if (str.startsWith(valueOf)) {
                CachedPathItems cachedPathItems = (CachedPathItems) PATH_ITEMS_CACHE.get(str);
                cachedPathItems.items.clear();
                cachedPathItems.indexes.clear();
                cachedPathItems.isloaded = false;
            }
        }
    }

    public static JSONObject preloadListing(long j, long j2, long j3) throws JSONException {
        if (PATH_ITEMS_CACHE == null) {
            PATH_ITEMS_CACHE = new Hashtable(100);
        }
        String str = j + ":" + j2 + ":" + j3;
        if (PATH_ITEMS_CACHE.get(str) == null) {
            Log.d(TAG, "preloadlisting empty cache");
            PATH_ITEMS_CACHE.put(str, new CachedPathItems());
        }
        JSONObject call = call(new JSONObject().put("action", "preloadListing").put("pid", j).put("orderflags", j3).put("whereflags", j2), null);
        loadAllItemsInCache(j, j2, j3);
        return call;
    }

    public static boolean isCacheLoaded(long j, long j2, long j3) {
        if (PATH_ITEMS_CACHE == null) {
            PATH_ITEMS_CACHE = new Hashtable(100);
        }
        String str = j + ":" + j2 + ":" + j3;
        if (PATH_ITEMS_CACHE.get(str) == null) {
            PATH_ITEMS_CACHE.put(str, new CachedPathItems());
            return false;
        }
        return ((CachedPathItems) PATH_ITEMS_CACHE.get(str)).isloaded;
    }

    public static int getPathIndex(long j, long j2, long j3, long j4, boolean z) {
        String str = j + ":" + j3 + ":" + j4;
        if (PATH_ITEMS_CACHE == null || PATH_ITEMS_CACHE.get(str) == null) {
            return -1;
        }
        CachedPathItems cachedPathItems = (CachedPathItems) PATH_ITEMS_CACHE.get(str);
        if (cachedPathItems.isloaded && !cachedPathItems.isloading && cachedPathItems.indexes.containsKey(Long.valueOf(j2))) {
            return ((Integer) cachedPathItems.indexes.get(Long.valueOf(j2))).intValue();
        }
        return -1;
    }

    public static JSONObject numPathItems(long j, long j2, long j3) throws JSONException {
        return call(new JSONObject().put("action", "numPathItems").put("pid", j).put("orderflags", j3).put("whereflags", j2), null);
    }

    public static ArrayList<WebPath> getItemsInDir(long j, long j2, long j3) throws JSONException {
        JSONArray jSONArray = call(new JSONObject().put("action", "getItemsInDir").put("pid", j).put("orderflags", j3).put("whereflags", j2), null).getJSONArray("range");
        ArrayList<WebPath> arrayList = new ArrayList<>();
        for (int i = 0; i < jSONArray.length(); i++) {
            arrayList.add(new WebPath(jSONArray.getJSONObject(i)));
        }
        return arrayList;
    }

    private static void loadAllItemsInCache(long j, long j2, long j3) throws JSONException {
        String str = j + ":" + j2 + ":" + j3;
        Log.d(TAG, "calling loadallitems start loading");
        if (PATH_ITEMS_CACHE == null) {
            PATH_ITEMS_CACHE = new Hashtable(100);
        }
        if (PATH_ITEMS_CACHE.get(str) == null) {
            PATH_ITEMS_CACHE.put(str, new CachedPathItems());
        }
        CachedPathItems cachedPathItems = (CachedPathItems) PATH_ITEMS_CACHE.get(str);
        JSONObject call = call(new JSONObject().put("action", "getPathItem").put("pid", j).put("idx", cachedPathItems.curidx).put("numbefore", 200).put("numafter", 200).put("whereflags", j2).put("orderflags", j3), null);
        HashMap hashMap = new HashMap();
        HashMap hashMap2 = new HashMap();
        JSONArray jSONArray = call.getJSONArray("range");
        for (int i = 0; i < jSONArray.length(); i++) {
            JSONObject jSONObject = jSONArray.getJSONObject(i);
            jSONObject.put("errcode", 0);
            jSONObject.put("servedFromCache", true);
            int i2 = jSONObject.getInt("index");
            WebPath webPath = new WebPath(jSONObject);
            hashMap.put(Integer.valueOf(i2), webPath);
            hashMap2.put(webPath.getSyncId(), Integer.valueOf(i2));
        }
        cachedPathItems.items = hashMap;
        cachedPathItems.indexes = hashMap2;
        cachedPathItems.isloaded = true;
    }

    public static JSONObject searchKeywordInSync(String str) throws JSONException {
        return call(new JSONObject().put("action", "searchFileName").put("keyword", str), null);
    }

    public static JSONObject dumpmobile(Long l) throws JSONException {
        return call(new JSONObject().put("action", "mobiledump").put("pid", l), null);
    }

    public static JSONObject removeOfflineFile(long j) throws JSONException {
        return call(new JSONObject().put("action", "removeoffline").put("syncid", j), null);
    }

    public static WebPath getPathItem(long j, long j2, long j3, long j4) throws JSONException {
        System.nanoTime();
        if (SCROLLING_IN_PROGRESS_COUNTER == null) {
            SCROLLING_IN_PROGRESS_COUNTER = new AtomicInteger(0);
        }
        String str = j + ":" + j3 + ":" + j4;
        if (PATH_ITEMS_CACHE == null) {
            PATH_ITEMS_CACHE = new Hashtable(100);
        }
        CachedPathItems cachedPathItems = (CachedPathItems) PATH_ITEMS_CACHE.get(str);
        if (PATH_ITEMS_CACHE.get(str) == null) {
            PATH_ITEMS_CACHE.put(str, new CachedPathItems());
            cachedPathItems = (CachedPathItems) PATH_ITEMS_CACHE.get(str);
        }
        CachedPathItems cachedPathItems2 = cachedPathItems;
        int i = (int) j2;
        cachedPathItems2.curidx = i;
        WebPath webPath = (WebPath) cachedPathItems2.items.get(Integer.valueOf(i));
        if (webPath != null) {
            if (!cachedPathItems2.isloading && cachedPathItems2.items.get(Integer.valueOf(i + 100)) == null) {
                cachedPathItems2.isloading = true;
                AsyncTask.execute((Runnable) new 5(j, j2, j3, j4));
            }
            return webPath;
        }
        Log.e(TAG, "Cached item is returning null");
        cachedPathItems2.curidx = i;
        fetchPathItems(j, cachedPathItems2.curidx, j3, j4, 50, 50);
        WebPath webPath2 = (WebPath) cachedPathItems2.items.get(Integer.valueOf(i));
        System.nanoTime();
        return webPath2;
    }

    public static void fetchPathItems(long j, int i, long j2, long j3, int i2, int i3) throws JSONException {
        String str = j + ":" + j2 + ":" + j3;
        if (PATH_ITEMS_CACHE == null) {
            PATH_ITEMS_CACHE = new Hashtable(100);
        }
        CachedPathItems cachedPathItems = (CachedPathItems) PATH_ITEMS_CACHE.get(str);
        if (PATH_ITEMS_CACHE.get(str) == null) {
            PATH_ITEMS_CACHE.put(str, new CachedPathItems());
            cachedPathItems = (CachedPathItems) PATH_ITEMS_CACHE.get(str);
        }
        CachedPathItems cachedPathItems2 = cachedPathItems;
        if (i > ((int) numPathItems(j, j2, j3).getLong("count")) || i < 0) {
            cachedPathItems2.isloading = false;
            return;
        }
        JSONArray jSONArray = call(new JSONObject().put("action", "getPathItem").put("pid", j).put("idx", i).put("numbefore", i2).put("numafter", i3).put("whereflags", j2).put("orderflags", j3), null).getJSONArray("range");
        for (int i4 = 0; i4 < jSONArray.length(); i4++) {
            JSONObject jSONObject = jSONArray.getJSONObject(i4);
            jSONObject.put("errcode", 0);
            jSONObject.put("servedFromCache", true);
            int i5 = jSONObject.getInt("index");
            WebPath webPath = new WebPath(jSONObject);
            cachedPathItems2.items.put(Integer.valueOf(i5), webPath);
            cachedPathItems2.indexes.put(webPath.getSyncId(), Integer.valueOf(i5));
        }
        cachedPathItems2.isloading = false;
    }

    public static JSONObject getThumbPath(long j) throws JSONException {
        return call(new JSONObject().put("action", "getthumbpath").put("syncid", j), null);
    }

    public static JSONObject getPathIndex(long j, long j2, long j3, long j4) throws JSONException {
        return call(new JSONObject().put("action", "getPathIndex").put("pid", j).put("syncid", j2).put("whereflags", j3).put("orderflags", j4), null);
    }

    public static JSONObject fileproviderDelete(long j, long j2) throws JSONException {
        return call(new JSONObject().put("action", "newfileproviderdelete").put("pid", j).put("syncid", j2), null);
    }

    public static JSONObject fileproviderRefreshPath(long j) throws JSONException {
        return call(new JSONObject().put("action", "fileproviderRefreshPaths").put("pid", j).put("onlyifolderthan", 0).put("maxiter", 100), null);
    }

    public static JSONObject refreshpathForce(long j) throws JSONException {
        return call(new JSONObject().put("action", "refreshpathForce").put("pid", j).put("maxiter", 100), null);
    }

    public static JSONObject getThumbnailDownloadInput(JSONArray jSONArray, long j) throws JSONException {
        return call(new JSONObject().put("action", "fetchThumbGetInput").put("thumb1", j).put("listofsyncid", jSONArray), null);
    }

    public static JSONObject refreshpathHasChanges(long j) throws JSONException {
        return call(new JSONObject().put("action", "refreshpathsCheckChange").put("pid", j).put("onlyifolderthan", 0).put("maxiter", 100), null);
    }

    public static JSONObject eventCheckAvailable(long j) throws JSONException {
        return call(new JSONObject().put("action", "eventCheckAvailable").put("syncid", j), null);
    }

    public static JSONObject fileprovidergetpathinfo(long j) throws JSONException {
        return call(new JSONObject().put("action", "getPathInfo").put("syncid", j).put("provider", 1), null);
    }

    public static JSONObject eventsFetchThumbs(JSONArray jSONArray) throws JSONException {
        return call(new JSONObject().put("action", "eventGetThumb").put("listofsyncid", jSONArray).put("provider", 1), null);
    }

    public static boolean eventCheckAvailable(long j, long j2) throws JSONException {
        if (Integer.valueOf(fileproviderRefreshPath(j2).getInt("errcode")).intValue() != 0) {
            SyncApplication.logwrite(TAG, "Failed to make network call to check file exists, using db info.");
        }
        return call(new JSONObject().put("action", "eventCheckAvailable").put("syncid", j), null).getInt("available") != 0;
    }

    public static boolean offlineCheckAvailable(long j) throws JSONException {
        return call(new JSONObject().put("action", "eventCheckAvailable").put("syncid", j), null).getInt("available") != 0;
    }

    public static void dumpquickhistid() throws JSONException {
        call(new JSONObject().put("action", "printdumpquickhistid"), null);
    }

    public static JSONObject dumpquickinput() throws JSONException {
        return call(new JSONObject().put("action", "dumpquickinput"), null);
    }

    public static JSONObject dumpquickprocess(JSONObject jSONObject) throws JSONException {
        return call(new JSONObject().put("action", "dumpquickprocess").put("response", jSONObject), null);
    }

    public static boolean fileCheckAvailable(long j) throws JSONException {
        return call(new JSONObject().put("action", "eventCheckAvailable").put("syncid", j), null).getInt("available") != 0;
    }

    public static JSONObject changePassword(String str, NativeCallback nativeCallback) throws JSONException {
        return call(new JSONObject().put("action", "passwordchange").put("newpass", str).put("currentpass", "dummy"), nativeCallback);
    }

    public static JSONObject getPathInfo(long j) throws JSONException {
        return call(new JSONObject().put("action", "getPathInfo").put("syncid", j), null);
    }

    public static JSONObject concurrencyTest(long j, long j2) throws JSONException {
        return call(new JSONObject().put("action", "concurrencyTest").put("maxiter", j).put("pausemilli", j2), null);
    }

    public static JSONObject getPopularFiles() throws JSONException {
        return call(new JSONObject().put("action", "getPopularFiles"), null);
    }

    public static JSONObject setLastUsedDate(long j) throws JSONException {
        return call(new JSONObject().put("action", "setLastusedtime").put("syncid", j), null);
    }

    public static synchronized JSONObject uploadNow(String str, String str2, long j, NativeCallback nativeCallback) throws JSONException {
        JSONObject spawnThread;
        synchronized (NativeApi.class) {
            spawnThread = spawnThread(NativeApiHelper.ThreadedNativeCall.UPLOAD_NOW, new JSONObject().put("action", "uploadNow").put("pid", j).put("path", str).put("label", str2), nativeCallback);
        }
        return spawnThread;
    }

    public static JSONObject logMessage(String str) throws JSONException {
        return call(new JSONObject().put("action", "logMessage").put("message", str), null);
    }

    public static JSONObject sendLogs(NativeCallback nativeCallback) throws JSONException {
        return call("sendLogs", null);
    }

    public static JSONObject abortUploadNow() throws JSONException {
        return call("abortUploadNow", null);
    }

    public static JSONObject downloadNow(long j, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.DOWNLOAD_NOW, new JSONObject().put("action", "downloadNow").put("syncid", j).put("availbytes", availSpaceOnExtStorage()), nativeCallback);
    }

    public static JSONObject filenameExist(String str, long j) throws JSONException {
        return call(new JSONObject().put("action", "filenameexists").put("label", str).put("pid", j).put("whereflags", 0).put("orderflags", ORDER_BY_NAME), null);
    }

    public static JSONObject copywait(JSONArray jSONArray, long j) throws JSONException {
        return call(new JSONObject().put("action", "copytowait").put("infolist", jSONArray).put("pid", j), null);
    }

    public static JSONObject movewaitskipexist(JSONArray jSONArray, long j) throws JSONException {
        return call(new JSONObject().put("action", "movetoskipexistwait").put("infolist", jSONArray).put("pid", j), null);
    }

    public static JSONObject shareGetInvitePassword(long j, String str) throws JSONException {
        return call(new JSONObject().put("action", "share_get_invite_password").put("share_id", j).put("user_pubkey", str), null);
    }

    public static JSONObject rename(String str, long j, long j2, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.RENAME, new JSONObject().put("action", "rename").put("label", str).put("pid", j).put("syncid", j2), nativeCallback);
    }

    public static JSONObject copyto(JSONArray jSONArray, long j, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.COPYTO, new JSONObject().put("action", "copyto").put("infolist", jSONArray).put("pid", j), nativeCallback);
    }

    public static JSONObject downloadNow(long j, NativeCallback nativeCallback, boolean z) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.DOWNLOAD_NOW, new JSONObject().put("action", "downloadNow").put("offline", z ? 1 : 0).put("syncid", j).put("availbytes", availSpaceOnExtStorage()), nativeCallback);
    }

    public static JSONObject abortDownloadNow() throws JSONException {
        return call("abortDownloadNow", null);
    }

    public static JSONObject abortDecryptFile() throws JSONException {
        return call("abortDecryptFile", null);
    }

    public static JSONObject abortBGDownloadSyncid(long j) throws JSONException {
        return call(new JSONObject().put("action", "abortBGDownloadSyncid").put("syncid", j), null);
    }

    public static JSONObject abortCameraUpload() throws JSONException {
        return call(new JSONObject().put("action", "abortBGDownload"), null);
    }

    public static JSONObject resumeCameraUpload() throws JSONException {
        return call(new JSONObject().put("action", "resumeBGDownload"), null);
    }

    public static synchronized JSONObject downloadAddToQueue(long j, String str) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call(new JSONObject().put("action", "downloadAddToQueue").put("batchid", str).put("syncid", j).put("availbytes", availSpaceOnExtStorage()), null);
            if (BG_DOWNLOAD_THREAD != null) {
                BG_DOWNLOAD_THREAD.interrupt();
            }
        }
        return call;
    }

    public static JSONObject downloadPurgeBatch(String str) throws JSONException {
        return call(new JSONObject().put("action", "purgeIOBatch").put("type", "downqueue").put("batchid", str), null);
    }

    public static JSONObject uploadPurgeBatch(String str) throws JSONException {
        return call(new JSONObject().put("action", "purgeIOBatch").put("type", "upqueue").put("batchid", str), null);
    }

    public static JSONObject updateCamDir(NativeCallback nativeCallback) throws JSONException {
        return call(new JSONObject().put("action", "updateCamUpload"), nativeCallback);
    }

    public static JSONObject autoUploadPurgeIOBatch() throws JSONException {
        return call(new JSONObject().put("action", "purgeIOBatch").put("type", "autoupqueue").put("batchid", "main"), null);
    }

    public static JSONObject autoUploadPurgeDoneJobs() throws JSONException {
        return call(new JSONObject().put("action", "autoUploadPurgeDone").put("type", "autoupqueue").put("batchid", "main"), null);
    }

    public static JSONObject autoUploadMoveIOBatch() throws JSONException {
        return call(new JSONObject().put("action", "moveIOBatch").put("type", "autoupqueue").put("batchid", "main"), null);
    }

    public static JSONObject autoUploadPurgeAll() throws JSONException {
        return call(new JSONObject().put("action", "autoUploadStop").put("mode", 1), null);
    }

    public static JSONObject autoUploadPurgePending() throws JSONException {
        return call(new JSONObject().put("action", "autoUploadStop").put("mode", 2), null);
    }

    public static JSONObject autoUploadgetStatus() throws JSONException {
        return call(new JSONObject().put("action", "autoUploadStatus"), null);
    }

    public static Boolean organize_cameraupload() {
        SharedPreferences defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(APP_CONTEXT);
        boolean z = false;
        Boolean valueOf = Boolean.valueOf(defaultSharedPreferences.getBoolean("pref_app_organized_cameraupload", false));
        Boolean valueOf2 = Boolean.valueOf(defaultSharedPreferences.getBoolean("pref_app_cameraupload_enable", false));
        if (valueOf.booleanValue() && valueOf2.booleanValue()) {
            z = true;
        }
        return Boolean.valueOf(z);
    }

    public static Boolean get_organize_cameraupload() {
        return Boolean.valueOf(PreferenceManager.getDefaultSharedPreferences(APP_CONTEXT).getBoolean("pref_app_organized_cameraupload", true));
    }

    public static void set_organize_cameraupload(boolean z) {
        Boolean.valueOf(PreferenceManager.getDefaultSharedPreferences(APP_CONTEXT).getBoolean("pref_app_organized_cameraupload", z));
    }

    public static Boolean default_cameraupload() {
        return Boolean.valueOf(PreferenceManager.getDefaultSharedPreferences(APP_CONTEXT).getBoolean("pref_app_cameraupload_default", true));
    }

    public static Boolean revert_cameraupload() {
        SharedPreferences defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(APP_CONTEXT);
        boolean z = false;
        Boolean valueOf = Boolean.valueOf(defaultSharedPreferences.getBoolean("pref_app_organized_cameraupload", false));
        Boolean valueOf2 = Boolean.valueOf(defaultSharedPreferences.getBoolean("pref_app_cameraupload_enable", false));
        if (!valueOf.booleanValue() && valueOf2.booleanValue()) {
            z = true;
        }
        return Boolean.valueOf(z);
    }

    public static long camuploadid() {
        try {
            return call(new JSONObject().put("action", "CamUploadid"), null).getLong("camuploadid");
        } catch (JSONException unused) {
            return 0L;
        }
    }

    public static long Secondarycamuploadid() {
        try {
            return call(new JSONObject().put("action", "SecondaryCamUploadid"), null).getLong("camuploadid");
        } catch (JSONException unused) {
            return 0L;
        }
    }

    public static long setCameraUploadName(String str) {
        try {
            return call(new JSONObject().put("action", "setCameraUpload").put("label", str), null).getLong("camuploadid");
        } catch (JSONException unused) {
            return 0L;
        }
    }

    public static String getCameraUploadName() {
        try {
            return call(new JSONObject().put("action", "getCameraUpload"), null).getString("cameraupName");
        } catch (JSONException unused) {
            return "Camera Upload";
        }
    }

    public static JSONObject fileprovidermkdir(String str, long j) throws JSONException {
        return call(new JSONObject().put("action", "fileprovidermkdir").put("label", str).put("pid", j), null);
    }

    public static synchronized JSONObject autoUploadAddToQueue(String str, String str2, String str3, long j, String str4) throws JSONException {
        synchronized (NativeApi.class) {
            SharedPreferences defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(APP_CONTEXT);
            long j2 = defaultSharedPreferences.getLong("pref_app_cameraupload_starttime", 0L);
            long parseLong = Long.parseLong(str2);
            if (j2 > parseLong) {
                SyncApplication.logwrite(TAG, "start Time is greater than file mtime, skip");
                return error(1157627906);
            }
            File file = new File(str);
            String uri = Uri.fromFile(file).toString();
            SyncApplication.logwrite(TAG, "auto upload reading file from " + file.getAbsolutePath() + " path: " + str);
            if (!file.exists()) {
                SyncApplication.logwrite(TAG, "Could not auto upload " + str + " Not exist,  but still add task to todo file");
            } else if (!file.canRead()) {
                SyncApplication.logwrite(TAG, "Could not auto upload " + str + " Cannot read, but still add task to todo file");
            }
            if (UploadUtils.isAutoUploaded(APP_CONTEXT, uri)) {
                return error(1157627906);
            }
            long j3 = defaultSharedPreferences.getBoolean("pref_app_cameraupload_video", true) ? 1L : 0L;
            SyncApplication.logwrite(TAG, "start time " + j2 + " filemtime " + parseLong);
            SharedPreferences.Editor edit = defaultSharedPreferences.edit();
            edit.putLong("pref_app_cameraupload_starttime", parseLong);
            Log.d(TAG, "Timestamp is set " + parseLong + " > " + j2);
            edit.apply();
            UploadUtils.markFileAutoUploaded(APP_CONTEXT, uri);
            return call(new JSONObject().put("action", "autoUploadAddToQueue").put("fileid", str4).put("dateadded", str2).put("name", file.getName()).put("mime", str3).put("isdefault", j3).put("uploadtoid", j).put("mediaid", str4), null);
        }
    }

    public static JSONObject dirtyProcess(NativeCallback nativeCallback) throws JSONException {
        return call(new JSONObject().put("action", "dirtyProcess").put("pid", -1).put("maxiter", 20), nativeCallback);
    }

    public static JSONObject batchDeleteInfo(long j) throws JSONException {
        return call(new JSONObject().put("action", "fileproviderDeleteinfo").put("syncid", j), null);
    }

    public static JSONObject batchCopyInfo(long j, long j2) throws JSONException {
        return call(new JSONObject().put("action", "fileproviderCopyinfo").put("syncpid", j2).put("syncid", j), null);
    }

    public static JSONObject renameFolderInfo(long j, long j2, int i, String str) throws JSONException {
        return call(new JSONObject().put("action", "folderRenameInfo").put("syncpid", j2).put("syncid", j).put("newlabel", str).put("isparent", i), null);
    }

    public static JSONObject upstreamWait(String str, JSONObject jSONObject) throws JSONException {
        return call(new JSONObject().put("action", "upstreamwait").put("cmdname", str).put("cmdin", jSONObject), null);
    }

    public static JSONObject dumpdir(long j, String str) throws JSONException {
        return call(new JSONObject().put("action", "batchdumpdir").put("active_level", str).put("syncid", j), null);
    }

    public static synchronized int autoUploadAddToQueue(Cursor cursor) throws JSONException {
        String string;
        synchronized (NativeApi.class) {
            int columnIndex = cursor.getColumnIndex("_data");
            int columnIndex2 = cursor.getColumnIndex("mime_type");
            int columnIndex3 = cursor.getColumnIndex("date_modified");
            int columnIndex4 = cursor.getColumnIndex("date_added");
            int columnIndex5 = cursor.getColumnIndex("_id");
            if (columnIndex < 0) {
                SyncApplication.logwrite(TAG, "autoupload add to queue failed. cursor does not have DATA column");
                return 1;
            }
            String string2 = cursor.getString(columnIndex);
            if (columnIndex3 > 0) {
                string = cursor.getString(columnIndex3);
            } else {
                string = columnIndex4 > 0 ? cursor.getString(columnIndex4) : "";
            }
            String string3 = columnIndex2 < 0 ? "" : cursor.getString(columnIndex2);
            String string4 = cursor.getString(columnIndex5);
            SyncApplication.log(TAG, "camera upload add to queue " + string4);
            if (PreferenceManager.getDefaultSharedPreferences(APP_CONTEXT).getLong("pref_app_cameraupload_starttime", 0L) > Long.parseLong(string)) {
                SyncApplication.log(TAG, "start Time is greater than file mtime, skip");
            } else {
                long syncidtoAutoUpload = UploadUtils.syncidtoAutoUpload(string);
                try {
                    SyncApplication.logwrite(TAG, "auto upload to queue " + string4);
                    autoUploadAddToQueue(string2, string, string3, syncidtoAutoUpload, string4);
                    Thread.sleep(100L);
                    CameraUploadOrganizer.getInstance().updateCameraStatus("", "");
                } catch (InterruptedException unused) {
                    SyncApplication.log(TAG, "Autoupload add to queue sleep failed");
                } catch (JSONException unused2) {
                    SyncApplication.log(TAG, "Autoupload add to queue failed.");
                }
            }
            return 0;
        }
    }

    public static synchronized JSONObject uploadAddToQueue(String str, String str2, String str3, long j) throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            JSONObject thumbParams = getThumbParams();
            String make = Thumbnail.make(str, thumbParams.getInt("thumb1size"), thumbParams.getInt("thumb1size"), true, thumbParams.getInt("thumb1quality"));
            call = call(new JSONObject().put("action", "uploadAddToQueue").put("batchid", str3).put("pid", j).put("path", str).put("label", str2).put("thumb1", make).put("thumb2", Thumbnail.make(str, thumbParams.getInt("thumb2size"), thumbParams.getInt("thumb2size"), false, thumbParams.getInt("thumb2quality"))), null);
            if (BG_UPLOAD_CB != null) {
                BG_UPLOAD_THREAD.interrupt();
            }
        }
        return call;
    }

    public static JSONObject upstreamAPI(String str, JSONObject jSONObject, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.UPSTREAM_API, new JSONObject().put("action", "upstreamAPI").put("cmdname", str).put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject multidelete(JSONArray jSONArray) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.UPSTREAM_API, new JSONObject().put("action", "multidelete").put("infolist", jSONArray), null);
    }

    public static JSONObject createPublink(long j, boolean z, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.CREATE_PUBLINK, new JSONObject().put("action", "createPublink").put("syncid", j).put("compat", z ? 1 : 0), nativeCallback);
    }

    public static JSONObject mkdir(String str, long j, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.MKDIR, new JSONObject().put("action", "mkdir").put("pid", j).put("label", str), nativeCallback);
    }

    public static JSONObject delete(long j, long j2, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.DELETE, new JSONObject().put("action", "batchdelete").put("pid", j2).put("syncid", j), nativeCallback);
    }

    public static JSONObject getEvents(JSONObject jSONObject, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.GETEVENTS, new JSONObject().put("action", "getevents").put("cmdname", "eventslist").put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject getShareList(JSONObject jSONObject, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.SHARE, new JSONObject().put("action", "share").put("cmdname", "sharelist").put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject getShareListWait(JSONObject jSONObject) throws JSONException {
        return call(new JSONObject().put("action", "sharewait").put("cmdname", "sharelist").put("cmdin", jSONObject), null);
    }

    public static JSONObject getPasswordSalt(JSONObject jSONObject) throws JSONException {
        return call(new JSONObject().put("action", "getPasswordSalt").put("cmdname", "getloginsalt").put("cmdin", jSONObject), null);
    }

    public static JSONObject authTwoFA(JSONObject jSONObject) throws JSONException {
        return call(new JSONObject().put("action", "authtwofa").put("cmdname", "sessionnew").put("cmdin", jSONObject), null);
    }

    public static JSONObject getPasswordHash(String str, String str2) throws JSONException {
        return call(new JSONObject().put("action", "getPasswordHash").put("password", str).put("salt", str2), null);
    }

    public static JSONObject getDirInfo(JSONObject jSONObject) throws JSONException {
        return call(new JSONObject().put("action", "upstreamwait").put("cmdname", "getdirusage").put("cmdin", jSONObject), null);
    }

    public static JSONObject manualRefresh(JSONObject jSONObject) throws JSONException {
        return call(new JSONObject().put("action", "upstreamwait").put("cmdname", "refresh").put("cmdin", jSONObject), null);
    }

    public static JSONObject userinfoset(JSONObject jSONObject) throws JSONException {
        return call(new JSONObject().put("action", "upstreamwait").put("cmdname", "userinfoset").put("cmdin", jSONObject), null);
    }

    public static JSONObject leaveShareWait(JSONObject jSONObject) throws JSONException {
        return call(new JSONObject().put("action", "sharewait").put("cmdname", "sharememberleave").put("cmdin", jSONObject), null);
    }

    public static JSONObject acceptShareWait(JSONObject jSONObject) throws JSONException {
        return call(new JSONObject().put("action", "sharewait").put("cmdname", "shareaccept").put("cmdin", jSONObject), null);
    }

    public static JSONObject getShareListFilesFragment(JSONObject jSONObject, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.SHAREFILE, new JSONObject().put("action", "share").put("cmdname", "sharelist").put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject getShareInvite(JSONObject jSONObject, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.SHARE, new JSONObject().put("action", "share").put("cmdname", "shareinvite").put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject sharecheck(JSONObject jSONObject, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.SHARE, new JSONObject().put("action", "share").put("cmdname", "sharecheck").put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject shareCreate(JSONObject jSONObject, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.SHARE, new JSONObject().put("action", "sharecreate").put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject shareAccpet(JSONObject jSONObject, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.SHARE, new JSONObject().put("action", "share").put("cmdname", "shareaccept").put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject shareDisable(JSONObject jSONObject, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.SHARE, new JSONObject().put("action", "share").put("cmdname", "sharestop").put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject shareDisableWait(JSONObject jSONObject) throws JSONException {
        return call(new JSONObject().put("action", "sharewait").put("cmdname", "sharestop").put("cmdin", jSONObject), null);
    }

    public static JSONObject shareLeave(JSONObject jSONObject, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.SHARE, new JSONObject().put("action", "share").put("cmdname", "sharememberleave").put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject shareRemoveUsers(JSONObject jSONObject, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.SHARE, new JSONObject().put("action", "shareuserdel").put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject shareAddMember(JSONObject jSONObject, long j, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.SHARE, new JSONObject().put("action", "sharememberadd").put("share_id", j).put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject getShare(JSONObject jSONObject, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.SHARE, new JSONObject().put("action", "share").put("cmdname", "shareget").put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject getShareWait(JSONObject jSONObject) throws JSONException {
        return call(new JSONObject().put("action", "sharewait").put("cmdname", "shareget").put("cmdin", jSONObject), null);
    }

    public static JSONObject sharepermchange(JSONObject jSONObject, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.SHARE, new JSONObject().put("action", "share").put("cmdname", "sharememberpermission").put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject sharepermAddInvite(JSONObject jSONObject, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.SHARE, new JSONObject().put("action", "share").put("cmdname", "grantinvitepermission").put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject eventsFetchThumbs(JSONArray jSONArray, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.EVENTSTHUMBS, new JSONObject().put("action", "eventGetThumb").put("listofsyncid", jSONArray).put("provider", 1), nativeCallback);
    }

    public static JSONObject publinkget(JSONObject jSONObject, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.PUBLINK, new JSONObject().put("action", "publink").put("cmdname", "linkpathlist").put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject publinkpathdata(JSONObject jSONObject, NativeCallback nativeCallback) throws JSONException {
        return spawnThread(NativeApiHelper.ThreadedNativeCall.PUBLINK, new JSONObject().put("action", "publink").put("cmdname", "pathdata").put("cmdin", jSONObject), nativeCallback);
    }

    public static JSONObject publinkpathlist(JSONObject jSONObject, String str) throws JSONException {
        return call(new JSONObject().put("action", "getPubLinkPathList").put("response", jSONObject.toString()).put("password", str), null);
    }

    public static synchronized JSONObject signup(String str, String str2, boolean z, NativeCallback nativeCallback) throws JSONException {
        JSONObject provision;
        synchronized (NativeApi.class) {
            provision = provision(str, "", "", str2, true, z, nativeCallback);
        }
        return provision;
    }

    public static synchronized JSONObject attach(String str, String str2, String str3, NativeCallback nativeCallback) throws JSONException {
        JSONObject provision;
        synchronized (NativeApi.class) {
            provision = provision(str, "", "", str2, false, str3, nativeCallback);
        }
        return provision;
    }

    public static synchronized JSONObject unprovision() throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call("unprovision", null);
        }
        return call;
    }

    public static synchronized JSONObject isProvisioned() throws JSONException {
        JSONObject call;
        synchronized (NativeApi.class) {
            call = call("isProvisioned", null);
        }
        return call;
    }

    public static synchronized String wormhole(String str) {
        String processWormhole;
        synchronized (NativeApi.class) {
            try {
                processWormhole = processWormhole(str);
            } catch (Exception e) {
                log("wormhole exception: ", e);
                return "{\"errcode\" : 1 }";
            }
        }
        return processWormhole;
    }

    public static JSONObject previewDownloadURL(long j) throws JSONException {
        return call(new JSONObject().put("action", "previewDownloadURL").put("syncid", j), null);
    }

    public static JSONObject userVerifyPassword(JSONObject jSONObject) throws JSONException {
        return call(new JSONObject().put("action", "upstreamwait").put("cmdname", "userverifypassword").put("cmdin", jSONObject), null);
    }
}