Merge branch 'index-downloads-from-mirrors' into 'master'
Index downloads from mirrors See merge request fdroid/fdroidclient!730
This commit is contained in:
commit
9cfe8ef091
@ -25,7 +25,7 @@ import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.widget.FrameLayout;
|
||||
import org.fdroid.fdroid.R;
|
||||
import org.fdroid.fdroid.views.fragments.PreferencesFragment;
|
||||
import org.fdroid.fdroid.views.PreferencesFragment;
|
||||
import org.fdroid.fdroid.views.updates.UpdatesViewBinder;
|
||||
|
||||
/**
|
||||
|
@ -10,7 +10,7 @@ import android.widget.Button;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.TextView;
|
||||
import org.fdroid.fdroid.R;
|
||||
import org.fdroid.fdroid.views.fragments.PreferencesFragment;
|
||||
import org.fdroid.fdroid.views.PreferencesFragment;
|
||||
import org.fdroid.fdroid.views.swap.SwapWorkflowActivity;
|
||||
import org.fdroid.fdroid.views.updates.UpdatesViewBinder;
|
||||
|
||||
|
@ -47,11 +47,19 @@ import org.fdroid.fdroid.data.Schema;
|
||||
import org.fdroid.fdroid.net.Downloader;
|
||||
import org.fdroid.fdroid.net.DownloaderFactory;
|
||||
|
||||
import javax.net.ssl.SSLHandshakeException;
|
||||
import javax.net.ssl.SSLKeyException;
|
||||
import javax.net.ssl.SSLPeerUnverifiedException;
|
||||
import javax.net.ssl.SSLProtocolException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.ConnectException;
|
||||
import java.net.HttpRetryException;
|
||||
import java.net.NoRouteToHostException;
|
||||
import java.net.ProtocolException;
|
||||
import java.net.SocketTimeoutException;
|
||||
import java.net.UnknownHostException;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
@ -94,6 +102,7 @@ public class IndexV1Updater extends RepoUpdater {
|
||||
/**
|
||||
* @return whether this successfully found an index of this version
|
||||
* @throws RepoUpdater.UpdateException
|
||||
* @see org.fdroid.fdroid.net.DownloaderService#handleIntent(android.content.Intent)
|
||||
*/
|
||||
@Override
|
||||
public boolean update() throws RepoUpdater.UpdateException {
|
||||
@ -119,7 +128,10 @@ public class IndexV1Updater extends RepoUpdater {
|
||||
}
|
||||
|
||||
processDownloadedIndex(downloader.outputFile, downloader.getCacheTag());
|
||||
} catch (ConnectException | SocketTimeoutException e) {
|
||||
} catch (ConnectException | HttpRetryException | NoRouteToHostException | SocketTimeoutException
|
||||
| SSLHandshakeException | SSLKeyException | SSLPeerUnverifiedException | SSLProtocolException
|
||||
| ProtocolException | UnknownHostException e) {
|
||||
// if the above list changes, also change below and in DownloaderService.handleIntent()
|
||||
Utils.debugLog(TAG, "Trying to download the index from a mirror");
|
||||
// Mirror logic here, so that the default download code is untouched.
|
||||
String mirrorUrl;
|
||||
@ -146,7 +158,9 @@ public class IndexV1Updater extends RepoUpdater {
|
||||
|
||||
processDownloadedIndex(downloader.outputFile, downloader.getCacheTag());
|
||||
break;
|
||||
} catch (ConnectException | SocketTimeoutException e2) {
|
||||
} catch (ConnectException | HttpRetryException | NoRouteToHostException | SocketTimeoutException
|
||||
| SSLHandshakeException | SSLKeyException | SSLPeerUnverifiedException | SSLProtocolException
|
||||
| ProtocolException | UnknownHostException e2) {
|
||||
// We'll just let this try the next mirror
|
||||
Utils.debugLog(TAG, "Trying next mirror");
|
||||
} catch (IOException e2) {
|
||||
|
@ -193,7 +193,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
|
||||
* of the Privileged Extension. The preference provides a way to disable using the
|
||||
* Privileged Extension even though its installed.
|
||||
*
|
||||
* @see org.fdroid.fdroid.views.fragments.PreferencesFragment#initPrivilegedInstallerPreference()
|
||||
* @see org.fdroid.fdroid.views.PreferencesFragment#initPrivilegedInstallerPreference()
|
||||
*/
|
||||
public boolean isPrivilegedInstallerEnabled() {
|
||||
return preferences.getBoolean(PREF_PRIVILEGED_INSTALLER, true);
|
||||
|
@ -22,7 +22,6 @@ package org.fdroid.fdroid;
|
||||
import android.os.Build;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.fdroid.fdroid.data.Apk;
|
||||
import org.fdroid.fdroid.data.App;
|
||||
import org.fdroid.fdroid.data.Repo;
|
||||
@ -129,11 +128,11 @@ public class RepoXMLHandler extends DefaultHandler {
|
||||
if (currentApkHashType == null || "md5".equals(currentApkHashType)) {
|
||||
if (curapk.hash == null) {
|
||||
curapk.hash = str;
|
||||
curapk.hashType = "SHA-256";
|
||||
curapk.hashType = "sha256";
|
||||
}
|
||||
} else if ("sha256".equals(currentApkHashType)) {
|
||||
curapk.hash = str;
|
||||
curapk.hashType = "SHA-256";
|
||||
curapk.hashType = "sha256";
|
||||
}
|
||||
break;
|
||||
case ApkTable.Cols.SIGNATURE:
|
||||
|
@ -362,7 +362,7 @@ public final class Utils {
|
||||
String ret = null;
|
||||
try {
|
||||
// keytool -list -v gives you the SHA-256 fingerprint
|
||||
MessageDigest digest = MessageDigest.getInstance("SHA-256");
|
||||
MessageDigest digest = MessageDigest.getInstance("sha256");
|
||||
digest.update(key);
|
||||
byte[] fingerprint = digest.digest();
|
||||
Formatter formatter = new Formatter(new StringBuilder());
|
||||
|
@ -280,7 +280,6 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
|
||||
@Override
|
||||
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||||
super.onDowngrade(db, oldVersion, newVersion);
|
||||
resetTransient(context);
|
||||
}
|
||||
|
||||
|
@ -240,7 +240,7 @@ public class InstallManagerService extends Service {
|
||||
* @see <a href="https://developer.android.com/google/play/expansion-files.html">APK Expansion Files</a>
|
||||
*/
|
||||
private void getObb(final String urlString, String obbUrlString,
|
||||
final File obbDestFile, final String sha256) {
|
||||
final File obbDestFile, final String hash) {
|
||||
if (obbDestFile == null || obbDestFile.exists() || TextUtils.isEmpty(obbUrlString)) {
|
||||
return;
|
||||
}
|
||||
@ -267,7 +267,7 @@ public class InstallManagerService extends Service {
|
||||
+ " to " + localApkUri);
|
||||
|
||||
try {
|
||||
if (Hasher.isFileMatchingHash(localFile, sha256, "SHA-256")) {
|
||||
if (Hasher.isFileMatchingHash(localFile, hash, "sha256")) {
|
||||
Utils.debugLog(TAG, "Installing OBB " + localFile + " to " + obbDestFile);
|
||||
FileUtils.forceMkdirParent(obbDestFile);
|
||||
FileUtils.copyFile(localFile, obbDestFile);
|
||||
@ -280,7 +280,7 @@ public class InstallManagerService extends Service {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Utils.debugLog(TAG, localFile + " deleted, did not match hash: " + sha256);
|
||||
Utils.debugLog(TAG, localFile + " deleted, did not match hash: " + hash);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
|
@ -47,6 +47,7 @@ import java.io.IOException;
|
||||
import java.net.ConnectException;
|
||||
import java.net.HttpRetryException;
|
||||
import java.net.NoRouteToHostException;
|
||||
import java.net.ProtocolException;
|
||||
import java.net.SocketTimeoutException;
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
@ -193,6 +194,7 @@ public class DownloaderService extends Service {
|
||||
*
|
||||
* @param intent The {@link Intent} passed via {@link
|
||||
* android.content.Context#startService(Intent)}.
|
||||
* @see org.fdroid.fdroid.IndexV1Updater#update()
|
||||
*/
|
||||
private void handleIntent(Intent intent) {
|
||||
final Uri uri = intent.getData();
|
||||
@ -225,7 +227,8 @@ public class DownloaderService extends Service {
|
||||
sendBroadcast(uri, Downloader.ACTION_INTERRUPTED, localFile, repoId, originalUrlString);
|
||||
} catch (ConnectException | HttpRetryException | NoRouteToHostException | SocketTimeoutException
|
||||
| SSLHandshakeException | SSLKeyException | SSLPeerUnverifiedException | SSLProtocolException
|
||||
| UnknownHostException e) {
|
||||
| ProtocolException | UnknownHostException e) {
|
||||
// if the above list of exceptions changes, also change it in IndexV1Updater.update()
|
||||
Log.e(TAG, e.getLocalizedMessage());
|
||||
sendBroadcast(uri, Downloader.ACTION_CONNECTION_FAILED, localFile, repoId, originalUrlString);
|
||||
} catch (IOException e) {
|
||||
@ -271,29 +274,31 @@ public class DownloaderService extends Service {
|
||||
|
||||
/**
|
||||
* Add a URL to the download queue.
|
||||
* <p/>
|
||||
* <p>
|
||||
* All notifications are sent as an {@link Intent} via local broadcasts to be received by
|
||||
*
|
||||
* @param context this app's {@link Context}
|
||||
* @param urlString The URL to add to the download queue
|
||||
* @param context this app's {@link Context}
|
||||
* @param mirrorUrlString The URL to add to the download queue
|
||||
* @param repoId the database ID number representing one repo
|
||||
* @param urlString the URL used as the unique ID throughout F-Droid
|
||||
* @see #cancel(Context, String)
|
||||
*/
|
||||
public static void queue(Context context, String urlString, long repoId, String originalUrlString) {
|
||||
if (TextUtils.isEmpty(urlString)) {
|
||||
public static void queue(Context context, String mirrorUrlString, long repoId, String urlString) {
|
||||
if (TextUtils.isEmpty(mirrorUrlString)) {
|
||||
return;
|
||||
}
|
||||
Utils.debugLog(TAG, "Preparing " + urlString + " to go into the download queue");
|
||||
Utils.debugLog(TAG, "Preparing " + mirrorUrlString + " to go into the download queue");
|
||||
Intent intent = new Intent(context, DownloaderService.class);
|
||||
intent.setAction(ACTION_QUEUE);
|
||||
intent.setData(Uri.parse(urlString));
|
||||
intent.setData(Uri.parse(mirrorUrlString));
|
||||
intent.putExtra(Downloader.EXTRA_REPO_ID, repoId);
|
||||
intent.putExtra(Downloader.EXTRA_CANONICAL_URL, originalUrlString);
|
||||
intent.putExtra(Downloader.EXTRA_CANONICAL_URL, urlString);
|
||||
context.startService(intent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a URL to the download queue, even if it is currently downloading.
|
||||
* <p/>
|
||||
* <p>
|
||||
* All notifications are sent as an {@link Intent} via local broadcasts to be received by
|
||||
*
|
||||
* @param context this app's {@link Context}
|
||||
|
@ -37,7 +37,6 @@ import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.ConnectException;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.SocketTimeoutException;
|
||||
@ -106,7 +105,7 @@ public class HttpDownloader extends Downloader {
|
||||
* @see <a href="http://lucb1e.com/rp/cookielesscookies">Cookieless cookies</a>
|
||||
*/
|
||||
@Override
|
||||
public void download() throws ConnectException, IOException, InterruptedException {
|
||||
public void download() throws IOException, InterruptedException {
|
||||
// get the file size from the server
|
||||
HttpURLConnection tmpConn = getConnection();
|
||||
tmpConn.setRequestMethod("HEAD");
|
||||
|
@ -23,7 +23,7 @@
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package org.fdroid.fdroid.views.fragments;
|
||||
package org.fdroid.fdroid.views;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
@ -55,7 +55,6 @@ import org.fdroid.fdroid.Utils;
|
||||
import org.fdroid.fdroid.data.RepoProvider;
|
||||
import org.fdroid.fdroid.installer.InstallHistoryService;
|
||||
import org.fdroid.fdroid.installer.PrivilegedInstaller;
|
||||
import org.fdroid.fdroid.views.LiveSeekBarPreference;
|
||||
|
||||
public class PreferencesFragment extends PreferenceFragment
|
||||
implements SharedPreferences.OnSharedPreferenceChangeListener {
|
@ -8,7 +8,7 @@ import android.support.v7.app.AppCompatActivity;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.FrameLayout;
|
||||
import org.fdroid.fdroid.R;
|
||||
import org.fdroid.fdroid.views.fragments.PreferencesFragment;
|
||||
import org.fdroid.fdroid.views.PreferencesFragment;
|
||||
|
||||
@SuppressWarnings("LineLength")
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user