WIP: Think I've fixed issue, just need to remove excessive debug logs now.
This commit is contained in:
parent
3ba5c17937
commit
a63a7cae01
@ -533,53 +533,76 @@ public class DB {
|
||||
return result;
|
||||
}
|
||||
|
||||
// Populate the details for the given app, if necessary.
|
||||
// If 'apkrepo' is non-zero, only apks from that repo are
|
||||
// populated (this is used during the update process)
|
||||
public void populateDetails(App app, int apkrepo) {
|
||||
if (app.detail_Populated)
|
||||
return;
|
||||
Cursor c = null;
|
||||
try {
|
||||
String[] cols = new String[] { "description", "webURL",
|
||||
private static final String[] POPULATE_APP_COLS = new String[] {"description", "webURL",
|
||||
"trackerURL", "sourceURL", "donateURL" };
|
||||
c = db.query(TABLE_APP, cols, "id = ?", new String[] { app.id },
|
||||
null, null, null, null);
|
||||
c.moveToFirst();
|
||||
app.detail_description = c.getString(0);
|
||||
app.detail_webURL = c.getString(1);
|
||||
app.detail_trackerURL = c.getString(2);
|
||||
app.detail_sourceURL = c.getString(3);
|
||||
app.detail_donateURL = c.getString(4);
|
||||
c.close();
|
||||
c = null;
|
||||
|
||||
cols = new String[] { "hash", "hashType", "size", "permissions" };
|
||||
for (Apk apk : app.apks) {
|
||||
private void populateAppDetails(App app) {
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = db.query(TABLE_APP, POPULATE_APP_COLS, "id = ?",
|
||||
new String[] { app.id }, null, null, null, null);
|
||||
cursor.moveToFirst();
|
||||
app.detail_description = cursor.getString(0);
|
||||
app.detail_webURL = cursor.getString(1);
|
||||
app.detail_trackerURL = cursor.getString(2);
|
||||
app.detail_sourceURL = cursor.getString(3);
|
||||
app.detail_donateURL = cursor.getString(4);
|
||||
app.detail_Populated = true;
|
||||
} catch (Exception e) {
|
||||
Log.d("FDroid", "Error populating app details " + app.id );
|
||||
Log.d("FDroid", e.getMessage());
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (apkrepo == 0 || apkrepo == apk.repo) {
|
||||
c = db.query(
|
||||
private static final String[] POPULATE_APK_COLS = new String[] { "hash", "hashType", "size", "permissions" };
|
||||
|
||||
private void populateApkDetails(Apk apk, int repo) {
|
||||
if (repo == 0 || repo == apk.repo) {
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = db.query(
|
||||
TABLE_APK,
|
||||
cols,
|
||||
POPULATE_APK_COLS,
|
||||
"id = ? and vercode = ?",
|
||||
new String[] { apk.id,
|
||||
Integer.toString(apk.vercode) }, null,
|
||||
null, null, null);
|
||||
c.moveToFirst();
|
||||
apk.detail_hash = c.getString(0);
|
||||
apk.detail_hashType = c.getString(1);
|
||||
apk.detail_size = c.getInt(2);
|
||||
apk.detail_permissions = CommaSeparatedList.make(c
|
||||
cursor.moveToFirst();
|
||||
apk.detail_hash = cursor.getString(0);
|
||||
apk.detail_hashType = cursor.getString(1);
|
||||
apk.detail_size = cursor.getInt(2);
|
||||
apk.detail_permissions = CommaSeparatedList.make(cursor
|
||||
.getString(3));
|
||||
c.close();
|
||||
c = null;
|
||||
}
|
||||
}
|
||||
app.detail_Populated = true;
|
||||
|
||||
} catch (Exception e) {
|
||||
Log.d("FDroid", "Error populating apk details for " + apk.id + " (version " + apk.version + ")");
|
||||
Log.d("FDroid", e.getMessage());
|
||||
} finally {
|
||||
if (c != null)
|
||||
c.close();
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Log.d("FDroid", "Not setting details for apk '" + apk.id + "' (version " + apk.version +") because it belongs to a different repo.");
|
||||
}
|
||||
}
|
||||
|
||||
// Populate the details for the given app, if necessary.
|
||||
// If 'apkrepo' is non-zero, only apks from that repo are
|
||||
// populated (this is used during the update process)
|
||||
public void populateDetails(App app, int apkRepo) {
|
||||
if (!app.detail_Populated) {
|
||||
populateAppDetails(app);
|
||||
}
|
||||
|
||||
for (Apk apk : app.apks) {
|
||||
boolean isPopulated = apk.detail_hash != null;
|
||||
if (!isPopulated) {
|
||||
populateApkDetails(apk, apkRepo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -979,6 +1002,7 @@ public class DB {
|
||||
values.put("features", CommaSeparatedList.str(upapk.features));
|
||||
values.put("compatible", upapk.compatible ? 1 : 0);
|
||||
if (oldapk != null) {
|
||||
Log.d("FDroid", "Updating apk '" + upapk.id + "' with hash '" + upapk.detail_hash + "'");
|
||||
db.update(TABLE_APK, values,
|
||||
"id = ? and vercode = " + Integer.toString(oldapk.vercode),
|
||||
new String[] { oldapk.id });
|
||||
|
@ -184,37 +184,91 @@ public class UpdateService extends IntentService implements ProgressListener {
|
||||
List<DB.App> acceptedapps = new ArrayList<DB.App>();
|
||||
List<DB.App> prevapps = ((FDroidApp) getApplication()).getApps();
|
||||
|
||||
boolean anyRepoToUpdate = false;
|
||||
for (DB.Repo repo : repos) {
|
||||
boolean keepThisRepo = false;
|
||||
for(int repoId : keeprepos) {
|
||||
if (repo.id == repoId) {
|
||||
keepThisRepo = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!keepThisRepo) {
|
||||
anyRepoToUpdate = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!anyRepoToUpdate) {
|
||||
Log.d("FDroid", "Not checking app details or compatibility, because all repos were up to date.");
|
||||
} else {
|
||||
sendStatus(STATUS_INFO, getString(R.string.status_checking_compatibility));
|
||||
List<DB.App> acceptedapps = new ArrayList<DB.App>();
|
||||
List<DB.App> prevapps = ((FDroidApp) getApplication()).getApps();
|
||||
|
||||
DB db = DB.getDB();
|
||||
try {
|
||||
|
||||
// Need to flag things we're keeping despite having received
|
||||
// no data about during the update. (i.e. stuff from a repo
|
||||
// that we know is unchanged due to the etag)
|
||||
|
||||
// keeep repos are the unchanged ones...
|
||||
Log.d("FDroid", "Checking " + keeprepos.size() + " unchanged repos.");
|
||||
for (int keep : keeprepos) {
|
||||
|
||||
// prevapps are all previous apps (and their respective apks
|
||||
// These *DON'T* yet have the details_hash set)...
|
||||
Log.d("Fdroid", "Checking '" + keep + "' repo to populate its apk details...");
|
||||
for (DB.App app : prevapps) {
|
||||
boolean keepapp = false;
|
||||
for (DB.Apk apk : app.apks) {
|
||||
|
||||
// only continue below if the apk is in the sqlite database,
|
||||
// and belongs to one of the unchanged repos...
|
||||
|
||||
if (apk.repo == keep) {
|
||||
Log.d("FDroid", "App '" + app.id + "' has apk '" + apk.id + "' which belongs to repo " + keep);
|
||||
keepapp = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (keepapp) {
|
||||
DB.App app_k = null;
|
||||
|
||||
// "apps" are the ones found in the index.xml files from
|
||||
// every index.xml file we came across during update...
|
||||
// Not that this excludes apps from up-to-date repos (due to etag)...
|
||||
|
||||
Log.d("FDroid", "Searching through apps from index.xml to figure out if they match (the unchanged) '" + app.id + "'..." );
|
||||
for (DB.App app2 : apps) {
|
||||
if (app2.id.equals(app.id)) {
|
||||
|
||||
// "app_k" is the DB.App which is in an index.xml file
|
||||
// that we downloaded, and also in the database, and in
|
||||
// a repo which was up to date... I think...
|
||||
|
||||
Log.d("FDroid", "Found matching app '" + app2.id + "' in one of the index.xml files..." );
|
||||
app_k = app2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Just assign it from the "prevapps" - those
|
||||
// which game straight from sqlite. In this case,
|
||||
// app_k will *NOT* have hash_details set...
|
||||
|
||||
if (app_k == null) {
|
||||
|
||||
Log.d("FDroid", "Could not find matching app in index.xml files (searched " + apps.size() + " apps). Wlil just assign it from the SQLite version...");
|
||||
apps.add(app);
|
||||
app_k = app;
|
||||
}
|
||||
app_k.updated = true;
|
||||
if (!app_k.detail_Populated) {
|
||||
// At this point, we set the hash_details for each
|
||||
// of app_k's apks...
|
||||
Log.d("FDroid", "Populating details for app '" + app_k.id + "' (should set the details_hash for us)...");
|
||||
db.populateDetails(app_k, keep);
|
||||
}
|
||||
for (DB.Apk apk : app.apks)
|
||||
if (apk.repo == keep)
|
||||
apk.updated = true;
|
||||
@ -248,6 +302,7 @@ public class UpdateService extends IntentService implements ProgressListener {
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (success && changes && notify) {
|
||||
Log.d("FDroid", "Updates before:" + prevUpdates + ", after: "
|
||||
|
Loading…
x
Reference in New Issue
Block a user