* An unfinished download is no longer considered finished, just because it isn't
currently in progress anymore. * Added feature to remove "missing" downloads, i.e. those for which no corresponding file exists. git-svn-id: http://svn.haiku-os.org/webpositive/webkit/trunk@346 94f232f2-1747-11df-bad5-a5bfde151594
This commit is contained in:
parent
b65e0ec04e
commit
f28abe9d24
@ -58,6 +58,7 @@ enum {
|
||||
INIT = 'init',
|
||||
OPEN_DOWNLOADS_FOLDER = 'odnf',
|
||||
REMOVE_FINISHED_DOWNLOADS = 'rmfd',
|
||||
REMOVE_MISSING_DOWNLOADS = 'rmmd',
|
||||
OPEN_DOWNLOAD = 'opdn',
|
||||
RESTART_DOWNLOAD = 'rsdn',
|
||||
CANCEL_DOWNLOAD = 'cndn',
|
||||
@ -112,6 +113,11 @@ public:
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
bool IsIconDimmed() const
|
||||
{
|
||||
return fDimmedIcon;
|
||||
}
|
||||
|
||||
status_t SaveSettings(BMessage* archive)
|
||||
{
|
||||
@ -408,6 +414,16 @@ public:
|
||||
return fURL;
|
||||
}
|
||||
|
||||
bool IsMissing() const
|
||||
{
|
||||
return fIconView->IsIconDimmed();
|
||||
}
|
||||
|
||||
bool IsFinished() const
|
||||
{
|
||||
return !fDownload && fStatusBar->CurrentValue() == 100;
|
||||
}
|
||||
|
||||
void DownloadFinished()
|
||||
{
|
||||
fDownload = NULL;
|
||||
@ -549,12 +565,17 @@ DownloadWindow::DownloadWindow(BRect frame, bool visible,
|
||||
new BMessage(REMOVE_FINISHED_DOWNLOADS));
|
||||
fRemoveFinishedButton->SetEnabled(false);
|
||||
|
||||
fRemoveMissingButton = new BButton("Remove missing",
|
||||
new BMessage(REMOVE_MISSING_DOWNLOADS));
|
||||
fRemoveMissingButton->SetEnabled(false);
|
||||
|
||||
AddChild(BGroupLayoutBuilder(B_VERTICAL)
|
||||
.Add(menuBar)
|
||||
.Add(scrollView)
|
||||
.Add(new BSeparatorView(B_HORIZONTAL, B_PLAIN_BORDER))
|
||||
.Add(BGroupLayoutBuilder(B_HORIZONTAL)
|
||||
.AddGlue()
|
||||
.Add(fRemoveMissingButton)
|
||||
.Add(fRemoveFinishedButton)
|
||||
.SetInsets(5, 5, 5, 5)
|
||||
)
|
||||
@ -624,6 +645,9 @@ DownloadWindow::MessageReceived(BMessage* message)
|
||||
case REMOVE_FINISHED_DOWNLOADS:
|
||||
_RemoveFinishedDownloads();
|
||||
break;
|
||||
case REMOVE_MISSING_DOWNLOADS:
|
||||
_RemoveMissingDownloads();
|
||||
break;
|
||||
case SAVE_SETTINGS:
|
||||
_SaveSettings();
|
||||
break;
|
||||
@ -660,6 +684,7 @@ DownloadWindow::_DownloadStarted(BWebDownload* download)
|
||||
download->Start(BPath(fDownloadPath.String()));
|
||||
|
||||
int32 finishedCount = 0;
|
||||
int32 missingCount = 0;
|
||||
int32 index = 0;
|
||||
for (int32 i = fDownloadViewsLayout->CountItems() - 1;
|
||||
BLayoutItem* item = fDownloadViewsLayout->ItemAt(i); i--) {
|
||||
@ -671,10 +696,15 @@ DownloadWindow::_DownloadStarted(BWebDownload* download)
|
||||
index = i;
|
||||
view->RemoveSelf();
|
||||
delete view;
|
||||
} else if (!view->Download())
|
||||
continue;
|
||||
}
|
||||
if (view->IsFinished())
|
||||
finishedCount++;
|
||||
if (view->IsMissing())
|
||||
missingCount++;
|
||||
}
|
||||
fRemoveFinishedButton->SetEnabled(finishedCount > 0);
|
||||
fRemoveMissingButton->SetEnabled(missingCount > 0);
|
||||
DownloadProgressView* view = new DownloadProgressView(download);
|
||||
if (!view->Init())
|
||||
return;
|
||||
@ -691,19 +721,25 @@ void
|
||||
DownloadWindow::_DownloadFinished(BWebDownload* download)
|
||||
{
|
||||
int32 finishedCount = 0;
|
||||
int32 missingCount = 0;
|
||||
for (int32 i = 0;
|
||||
BLayoutItem* item = fDownloadViewsLayout->ItemAt(i); i++) {
|
||||
DownloadProgressView* view = dynamic_cast<DownloadProgressView*>(
|
||||
item->View());
|
||||
if (!view)
|
||||
continue;
|
||||
if (view->Download() == download) {
|
||||
if (download && view->Download() == download) {
|
||||
view->DownloadFinished();
|
||||
finishedCount++;
|
||||
} else if (!view->Download())
|
||||
continue;
|
||||
}
|
||||
if (view->IsFinished())
|
||||
finishedCount++;
|
||||
if (view->IsMissing())
|
||||
missingCount++;
|
||||
}
|
||||
fRemoveFinishedButton->SetEnabled(finishedCount > 0);
|
||||
fRemoveMissingButton->SetEnabled(missingCount > 0);
|
||||
if (download)
|
||||
_SaveSettings();
|
||||
}
|
||||
@ -718,7 +754,7 @@ DownloadWindow::_RemoveFinishedDownloads()
|
||||
item->View());
|
||||
if (!view)
|
||||
continue;
|
||||
if (!view->Download()) {
|
||||
if (view->IsFinished()) {
|
||||
view->RemoveSelf();
|
||||
delete view;
|
||||
}
|
||||
@ -728,6 +764,25 @@ DownloadWindow::_RemoveFinishedDownloads()
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DownloadWindow::_RemoveMissingDownloads()
|
||||
{
|
||||
for (int32 i = fDownloadViewsLayout->CountItems() - 1;
|
||||
BLayoutItem* item = fDownloadViewsLayout->ItemAt(i); i--) {
|
||||
DownloadProgressView* view = dynamic_cast<DownloadProgressView*>(
|
||||
item->View());
|
||||
if (!view)
|
||||
continue;
|
||||
if (view->IsMissing()) {
|
||||
view->RemoveSelf();
|
||||
delete view;
|
||||
}
|
||||
}
|
||||
fRemoveMissingButton->SetEnabled(false);
|
||||
_SaveSettings();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DownloadWindow::_SaveSettings()
|
||||
{
|
||||
|
@ -51,6 +51,7 @@ private:
|
||||
void _DownloadStarted(BWebDownload* download);
|
||||
void _DownloadFinished(BWebDownload* download);
|
||||
void _RemoveFinishedDownloads();
|
||||
void _RemoveMissingDownloads();
|
||||
void _SaveSettings();
|
||||
void _LoadSettings();
|
||||
bool _OpenSettingsFile(BFile& file, uint32 mode);
|
||||
@ -58,6 +59,7 @@ private:
|
||||
private:
|
||||
BGroupLayout* fDownloadViewsLayout;
|
||||
BButton* fRemoveFinishedButton;
|
||||
BButton* fRemoveMissingButton;
|
||||
BString fDownloadPath;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user