Better reporting of update errors
This commit is contained in:
parent
951bf603fd
commit
a2de56e2a5
@ -436,8 +436,7 @@ public class FDroid extends TabActivity implements OnItemClickListener,
|
|||||||
@Override
|
@Override
|
||||||
protected void onReceiveResult(int resultCode, Bundle resultData) {
|
protected void onReceiveResult(int resultCode, Bundle resultData) {
|
||||||
if (resultCode == 1) {
|
if (resultCode == 1) {
|
||||||
Toast.makeText(FDroid.this,
|
Toast.makeText(FDroid.this, resultData.getString("errmsg"),
|
||||||
getString(R.string.connection_error_msg),
|
|
||||||
Toast.LENGTH_LONG).show();
|
Toast.LENGTH_LONG).show();
|
||||||
} else {
|
} else {
|
||||||
populateLists(true);
|
populateLists(true);
|
||||||
|
@ -38,6 +38,7 @@ import java.util.Vector;
|
|||||||
import java.util.jar.JarEntry;
|
import java.util.jar.JarEntry;
|
||||||
import java.util.jar.JarFile;
|
import java.util.jar.JarFile;
|
||||||
|
|
||||||
|
import javax.net.ssl.SSLHandshakeException;
|
||||||
import javax.xml.parsers.SAXParser;
|
import javax.xml.parsers.SAXParser;
|
||||||
import javax.xml.parsers.SAXParserFactory;
|
import javax.xml.parsers.SAXParserFactory;
|
||||||
|
|
||||||
@ -292,8 +293,10 @@ public class RepoXMLHandler extends DefaultHandler {
|
|||||||
|
|
||||||
// Do an update from the given repo. All applications found, and their
|
// Do an update from the given repo. All applications found, and their
|
||||||
// APKs, are added to 'apps'. (If 'apps' already contains an app, its
|
// APKs, are added to 'apps'. (If 'apps' already contains an app, its
|
||||||
// APKs are merged into the existing one)
|
// APKs are merged into the existing one).
|
||||||
public static boolean doUpdate(Context ctx, DB.Repo repo,
|
// Returns null if successful, otherwise an error message to be displayed
|
||||||
|
// to the user (if there is an interactive user!)
|
||||||
|
public static String doUpdate(Context ctx, DB.Repo repo,
|
||||||
Vector<DB.App> apps) {
|
Vector<DB.App> apps) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
@ -333,13 +336,13 @@ public class RepoXMLHandler extends DefaultHandler {
|
|||||||
in.close();
|
in.close();
|
||||||
} catch (SecurityException e) {
|
} catch (SecurityException e) {
|
||||||
Log.e("FDroid", "Invalid hash for index file");
|
Log.e("FDroid", "Invalid hash for index file");
|
||||||
return false;
|
return "Invalid hash for index file";
|
||||||
}
|
}
|
||||||
Certificate[] certs = je.getCertificates();
|
Certificate[] certs = je.getCertificates();
|
||||||
jar.close();
|
jar.close();
|
||||||
if (certs == null) {
|
if (certs == null) {
|
||||||
Log.d("FDroid", "No signature found in index");
|
Log.d("FDroid", "No signature found in index");
|
||||||
return false;
|
return "No signature found in index";
|
||||||
}
|
}
|
||||||
Log.d("FDroid", "Index has " + certs.length + " signature"
|
Log.d("FDroid", "Index has " + certs.length + " signature"
|
||||||
+ (certs.length > 1 ? "s." : "."));
|
+ (certs.length > 1 ? "s." : "."));
|
||||||
@ -354,7 +357,7 @@ public class RepoXMLHandler extends DefaultHandler {
|
|||||||
}
|
}
|
||||||
if (!match) {
|
if (!match) {
|
||||||
Log.d("FDroid", "Index signature mismatch");
|
Log.d("FDroid", "Index signature mismatch");
|
||||||
return false;
|
return "Index signature mismatch";
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -390,16 +393,20 @@ public class RepoXMLHandler extends DefaultHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} catch (SSLHandshakeException sslex) {
|
||||||
|
Log.e("FDroid", "SSLHandShakeException updating from " + repo.address + ":\n"
|
||||||
|
+ Log.getStackTraceString(sslex));
|
||||||
|
return "A problem occurred while establishing an SSL connection. If this problem persists, AND you have a very old device, you could try using http instead of https for the repo URL.";
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e("FDroid", "Exception updating from " + repo.address + ":\n"
|
Log.e("FDroid", "Exception updating from " + repo.address + ":\n"
|
||||||
+ Log.getStackTraceString(e));
|
+ Log.getStackTraceString(e));
|
||||||
return false;
|
return "Failed to update - " + e.getMessage();
|
||||||
} finally {
|
} finally {
|
||||||
ctx.deleteFile("tempindex.xml");
|
ctx.deleteFile("tempindex.xml");
|
||||||
ctx.deleteFile("tempindex.jar");
|
ctx.deleteFile("tempindex.jar");
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -73,6 +73,7 @@ public class UpdateService extends IntentService {
|
|||||||
ResultReceiver receiver = intent.getParcelableExtra("receiver");
|
ResultReceiver receiver = intent.getParcelableExtra("receiver");
|
||||||
|
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
|
String errmsg = "";
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
@ -120,10 +121,16 @@ public class UpdateService extends IntentService {
|
|||||||
boolean success = true;
|
boolean success = true;
|
||||||
for (DB.Repo repo : repos) {
|
for (DB.Repo repo : repos) {
|
||||||
if (repo.inuse) {
|
if (repo.inuse) {
|
||||||
if (!RepoXMLHandler.doUpdate(getBaseContext(), repo, apps)) {
|
String err = RepoXMLHandler.doUpdate(getBaseContext(),
|
||||||
Log.d("FDroid", "Update failed for repo "
|
repo, apps);
|
||||||
+ repo.address);
|
if (err != null) {
|
||||||
success = false;
|
success = false;
|
||||||
|
err = "Update failed for " + repo.address + " - " + err;
|
||||||
|
Log.d("FDroid", err);
|
||||||
|
if (errmsg.length() == 0)
|
||||||
|
errmsg = err;
|
||||||
|
else
|
||||||
|
errmsg += "\n" + err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -142,6 +149,7 @@ public class UpdateService extends IntentService {
|
|||||||
db.cancelUpdate();
|
db.cancelUpdate();
|
||||||
Log.e("FDroid", "Exception during update processing:\n"
|
Log.e("FDroid", "Exception during update processing:\n"
|
||||||
+ Log.getStackTraceString(ex));
|
+ Log.getStackTraceString(ex));
|
||||||
|
errmsg = "Exception during processing - " + ex.getMessage();
|
||||||
success = false;
|
success = false;
|
||||||
} finally {
|
} finally {
|
||||||
DB.releaseDB();
|
DB.releaseDB();
|
||||||
@ -173,7 +181,14 @@ public class UpdateService extends IntentService {
|
|||||||
|
|
||||||
if (receiver != null) {
|
if (receiver != null) {
|
||||||
Bundle resultData = new Bundle();
|
Bundle resultData = new Bundle();
|
||||||
receiver.send(0, resultData);
|
if (!success) {
|
||||||
|
if (errmsg.length() == 0)
|
||||||
|
errmsg = "Unknown error";
|
||||||
|
resultData.putString("errmsg", errmsg);
|
||||||
|
receiver.send(1, resultData);
|
||||||
|
} else {
|
||||||
|
receiver.send(0, resultData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -182,6 +197,9 @@ public class UpdateService extends IntentService {
|
|||||||
+ Log.getStackTraceString(e));
|
+ Log.getStackTraceString(e));
|
||||||
if (receiver != null) {
|
if (receiver != null) {
|
||||||
Bundle resultData = new Bundle();
|
Bundle resultData = new Bundle();
|
||||||
|
if (errmsg.length() == 0)
|
||||||
|
errmsg = "Unknown error";
|
||||||
|
resultData.putString("errmsg", errmsg);
|
||||||
receiver.send(1, resultData);
|
receiver.send(1, resultData);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user