}
}
}
});
final GlobalManager gm = core.getGlobalManager();
final DownloadManagerListener dmListener = new DownloadManagerAdapter() {
public void stateChanged(DownloadManager dm, int state) {
stateChanged(dm, state, statsNoLowNoise);
stateChanged(dm, state, statsWithLowNoise);
}
public void stateChanged(DownloadManager dm, int state, stats stats) {
if (!stats.includeLowNoise
&& PlatformTorrentUtils.isAdvancedViewOnly(dm)) {
return;
}
updateDMCounts(dm);
boolean complete = dm.getAssumedComplete();
Boolean wasErrorStateB = (Boolean) dm.getUserData("wasErrorState");
boolean wasErrorState = wasErrorStateB == null ? false
: wasErrorStateB.booleanValue();
boolean isErrorState = state == DownloadManager.STATE_ERROR;
if (isErrorState != wasErrorState) {
int rel = isErrorState ? 1 : -1;
if (complete) {
stats.numErrorComplete += rel;
} else {
stats.numErrorInComplete += rel;
}
updateErrorTooltip(stats);
dm.setUserData("wasErrorState", new Boolean(isErrorState));
}
refreshAllLibraries();
}
public void completionChanged(DownloadManager dm, boolean completed) {
completionChanged(dm, completed, statsNoLowNoise);
completionChanged(dm, completed, statsWithLowNoise);
}
public void completionChanged(DownloadManager dm, boolean completed,
stats stats) {
if (!stats.includeLowNoise
&& PlatformTorrentUtils.isAdvancedViewOnly(dm)) {
return;
}
updateDMCounts(dm);
if (completed) {
stats.numComplete++;
stats.numIncomplete--;
if (dm.getState() == DownloadManager.STATE_ERROR) {
stats.numErrorComplete++;
stats.numErrorInComplete--;
}
if (dm.getState() == DownloadManager.STATE_STOPPED) {
statsNoLowNoise.numStoppedIncomplete--;
}
} else {
stats.numComplete--;
stats.numIncomplete++;
if (dm.getState() == DownloadManager.STATE_ERROR) {
stats.numErrorComplete--;
stats.numErrorInComplete++;
}
if (dm.getState() == DownloadManager.STATE_STOPPED) {
statsNoLowNoise.numStoppedIncomplete++;
}
}
recountUnopened();
updateErrorTooltip(stats);
refreshAllLibraries();
}
protected void updateErrorTooltip(stats stats) {
if (stats.numErrorComplete < 0) {
stats.numErrorComplete = 0;
}
if (stats.numErrorInComplete < 0) {
stats.numErrorInComplete = 0;
}
if (stats.numErrorComplete > 0 || stats.numErrorInComplete > 0) {
String comp_error = null;
String incomp_error = null;
List<?> downloads = gm.getDownloadManagers();
for (int i = 0; i < downloads.size(); i++) {
DownloadManager download = (DownloadManager) downloads.get(i);
if (download.getState() == DownloadManager.STATE_ERROR) {
if (download.getAssumedComplete()) {
if (comp_error == null) {
comp_error = download.getDisplayName() + ": "
+ download.getErrorDetails();
} else {
comp_error += "...";
}
} else {
if (incomp_error == null) {
incomp_error = download.getDisplayName() + ": "
+ download.getErrorDetails();
} else {
incomp_error += "...";
}
}
}
}
stats.errorCompleteTooltip = comp_error;
stats.errorInCompleteTooltip = incomp_error;
}
}
};
gm.addListener(new GlobalManagerAdapter() {
public void downloadManagerRemoved(DownloadManager dm) {
downloadManagerRemoved(dm, statsNoLowNoise);
downloadManagerRemoved(dm, statsWithLowNoise);
}
public void downloadManagerRemoved(DownloadManager dm, stats stats) {
if (!stats.includeLowNoise
&& PlatformTorrentUtils.isAdvancedViewOnly(dm)) {
return;
}
recountUnopened();
if (dm.getAssumedComplete()) {
stats.numComplete--;
Boolean wasDownloadingB = (Boolean) dm.getUserData("wasDownloading");
if (wasDownloadingB != null && wasDownloadingB.booleanValue()) {
stats.numDownloading--;
}
} else {
stats.numIncomplete--;
Boolean wasSeedingB = (Boolean) dm.getUserData("wasSeeding");
if (wasSeedingB != null && wasSeedingB.booleanValue()) {
stats.numSeeding--;
}
}
Boolean wasStoppedB = (Boolean) dm.getUserData("wasStopped");
boolean wasStopped = wasStoppedB == null ? false
: wasStoppedB.booleanValue();
if (wasStopped) {
stats.numStoppedAll--;
if (!dm.getAssumedComplete()) {
stats.numStoppedIncomplete--;
}
}
refreshAllLibraries();
dm.removeListener(dmListener);
}
public void downloadManagerAdded(DownloadManager dm) {
dm.addListener(dmListener, false);
recountUnopened();
downloadManagerAdded(dm, statsNoLowNoise);
downloadManagerAdded(dm, statsWithLowNoise);
refreshAllLibraries();
}
public void downloadManagerAdded(DownloadManager dm, stats stats) {
if (!stats.includeLowNoise
&& PlatformTorrentUtils.isAdvancedViewOnly(dm)) {
return;
}
if (dm.getAssumedComplete()) {
stats.numComplete++;
if (dm.getState() == DownloadManager.STATE_SEEDING) {
stats.numSeeding++;
}
} else {
stats.numIncomplete++;
if (dm.getState() == DownloadManager.STATE_DOWNLOADING) {
dm.setUserData("wasDownloading", Boolean.TRUE);
stats.numDownloading++;
} else {
dm.setUserData("wasDownloading", Boolean.FALSE);
}
}
}
}, false);
List<?> downloadManagers = gm.getDownloadManagers();
for (Iterator<?> iter = downloadManagers.iterator(); iter.hasNext();) {
DownloadManager dm = (DownloadManager) iter.next();
boolean lowNoise = PlatformTorrentUtils.isAdvancedViewOnly(dm);
dm.addListener(dmListener, false);
int state = dm.getState();