Show download/parse/failure status in the feeds list
This commit is contained in:
parent
6c63b23491
commit
203058bd58
2
TODO.txt
2
TODO.txt
|
@ -1,5 +1,5 @@
|
||||||
Important Features:
|
Important Features:
|
||||||
* Show download progress/failures in FeedView's feedlist
|
* Show progress in FeedView's feedlist as icons
|
||||||
* Show in desktray
|
* Show in desktray
|
||||||
* Make archivable
|
* Make archivable
|
||||||
* Get menu working
|
* Get menu working
|
||||||
|
|
|
@ -60,8 +60,9 @@ App::MessageReceived(BMessage* msg)
|
||||||
fFeedController->MessageReceived(msg);
|
fFeedController->MessageReceived(msg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case kEnqueueFeed:
|
|
||||||
case kDownloadComplete:
|
case kDownloadComplete:
|
||||||
|
fMainWindow->PostMessage(msg);
|
||||||
|
case kEnqueueFeed:
|
||||||
{
|
{
|
||||||
fNotifier->MessageReceived(msg);
|
fNotifier->MessageReceived(msg);
|
||||||
fFeedController->MessageReceived(msg);
|
fFeedController->MessageReceived(msg);
|
||||||
|
@ -83,6 +84,7 @@ App::MessageReceived(BMessage* msg)
|
||||||
case kDownloadFail:
|
case kDownloadFail:
|
||||||
{
|
{
|
||||||
fNotifier->MessageReceived(msg);
|
fNotifier->MessageReceived(msg);
|
||||||
|
fMainWindow->PostMessage(msg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -116,7 +116,8 @@ FeedController::_ProcessQueueItem()
|
||||||
send_data(fDownloadThread, 0, (void*)buffer, sizeof(Feed));
|
send_data(fDownloadThread, 0, (void*)buffer, sizeof(Feed));
|
||||||
|
|
||||||
BMessage downloadInit = BMessage(kDownloadStart);
|
BMessage downloadInit = BMessage(kDownloadStart);
|
||||||
downloadInit.AddString("feed", buffer->GetTitle());
|
downloadInit.AddString("feed_url", buffer->GetXmlUrl().UrlString());
|
||||||
|
downloadInit.AddString("feed_name", buffer->GetTitle());
|
||||||
((App*)be_app)->MessageReceived(&downloadInit);
|
((App*)be_app)->MessageReceived(&downloadInit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -154,7 +155,7 @@ FeedController::_CheckStatus()
|
||||||
case kParseComplete:
|
case kParseComplete:
|
||||||
{
|
{
|
||||||
BMessage complete = BMessage(kParseComplete);
|
BMessage complete = BMessage(kParseComplete);
|
||||||
complete.AddString("feed_name", feedBuffer->GetTitle());
|
complete.AddString("feed_url", feedBuffer->GetXmlUrl().UrlString());
|
||||||
complete.AddInt32("entry_count", feedBuffer->GetNewEntries().CountItems());
|
complete.AddInt32("entry_count", feedBuffer->GetNewEntries().CountItems());
|
||||||
((App*)be_app)->MessageReceived(&complete);
|
((App*)be_app)->MessageReceived(&complete);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -5,18 +5,48 @@
|
||||||
|
|
||||||
#include "FeedListItem.h"
|
#include "FeedListItem.h"
|
||||||
|
|
||||||
|
#include <View.h>
|
||||||
|
|
||||||
#include "Feed.h"
|
#include "Feed.h"
|
||||||
|
|
||||||
|
|
||||||
FeedListItem::FeedListItem(Feed* feed)
|
FeedListItem::FeedListItem(Feed* feed)
|
||||||
:
|
:
|
||||||
BStringItem(feed->GetTitle().String(), 0, false),
|
BStringItem(feed->GetTitle().String(), 0, false),
|
||||||
|
fStatus(kClearStatus),
|
||||||
fFeedUrl(feed->GetXmlUrl()),
|
fFeedUrl(feed->GetXmlUrl()),
|
||||||
fFeedPath(feed->GetCachePath())
|
fFeedPath(feed->GetCachePath())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
FeedListItem::DrawItem(BView* owner, BRect frame, bool complete)
|
||||||
|
{
|
||||||
|
BStringItem::DrawItem(owner, frame, complete);
|
||||||
|
|
||||||
|
owner->MovePenTo(frame.right - 20, frame.top + BaselineOffset());
|
||||||
|
|
||||||
|
switch (fStatus) {
|
||||||
|
case kDownloadingStatus:
|
||||||
|
{
|
||||||
|
owner->DrawString("…");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case kParsingStatus:
|
||||||
|
{
|
||||||
|
owner->DrawString("―");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case kErrorStatus:
|
||||||
|
{
|
||||||
|
owner->DrawString("X");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
BString
|
BString
|
||||||
FeedListItem::GetFeedPath()
|
FeedListItem::GetFeedPath()
|
||||||
{
|
{
|
||||||
|
@ -29,3 +59,12 @@ FeedListItem::GetFeedUrl()
|
||||||
{
|
{
|
||||||
return fFeedUrl;
|
return fFeedUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
FeedListItem::SetStatus(int8 status)
|
||||||
|
{
|
||||||
|
fStatus = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -9,20 +9,32 @@
|
||||||
#include <StringItem.h>
|
#include <StringItem.h>
|
||||||
#include <Url.h>
|
#include <Url.h>
|
||||||
|
|
||||||
//class BString;
|
|
||||||
//class BUrl;
|
|
||||||
class Feed;
|
class Feed;
|
||||||
|
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
kClearStatus = 0,
|
||||||
|
kDownloadingStatus = 1,
|
||||||
|
kParsingStatus = 2,
|
||||||
|
kErrorStatus = 3
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class FeedListItem : public BStringItem
|
class FeedListItem : public BStringItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FeedListItem(Feed* feed);
|
FeedListItem(Feed* feed);
|
||||||
|
|
||||||
|
void DrawItem(BView* owner, BRect frame, bool complete);
|
||||||
|
|
||||||
BUrl GetFeedUrl();
|
BUrl GetFeedUrl();
|
||||||
BString GetFeedPath();
|
BString GetFeedPath();
|
||||||
|
|
||||||
|
void SetStatus(int8 status);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
int8 fStatus;
|
||||||
BUrl fFeedUrl;
|
BUrl fFeedUrl;
|
||||||
BString fFeedPath;
|
BString fFeedPath;
|
||||||
};
|
};
|
||||||
|
|
|
@ -65,15 +65,24 @@ FeedsView::MessageReceived(BMessage* msg)
|
||||||
}
|
}
|
||||||
case kDownloadStart:
|
case kDownloadStart:
|
||||||
{
|
{
|
||||||
BString feedName;
|
_UpdateProgress(msg, kDownloadingStatus);
|
||||||
if (msg->FindString("feed", &feedName) == B_OK)
|
|
||||||
_UpdateProgress(feedName);
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
// BWindow::MessageReceived(msg);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case kDownloadComplete:
|
||||||
|
{
|
||||||
|
_UpdateProgress(msg, kParsingStatus);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case kDownloadFail:
|
||||||
|
case kParseFail:
|
||||||
|
{
|
||||||
|
_UpdateProgress(msg, kErrorStatus);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case kParseComplete:
|
||||||
|
{
|
||||||
|
_UpdateProgress(msg, kClearStatus);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -195,11 +204,27 @@ FeedsView::_PopulateFeedList()
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FeedsView::_UpdateProgress(BString feedName)
|
FeedsView::_UpdateProgress(BMessage* msg, int8 status)
|
||||||
{
|
{
|
||||||
|
BString feedName, feedUrl;
|
||||||
|
if (msg->FindString("feed_url", &feedUrl) != B_OK)
|
||||||
|
return;
|
||||||
|
if (msg->FindString("feed_name", &feedName) != B_OK)
|
||||||
|
feedName = feedUrl;
|
||||||
|
|
||||||
|
if (status == kDownloadingStatus) {
|
||||||
BString label("Fetching ");
|
BString label("Fetching ");
|
||||||
label << feedName << "…";
|
label << feedName << "…";
|
||||||
fProgressLabel->SetText(label);
|
fProgressLabel->SetText(label);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < fFeedsListView->CountItems(); i++) {
|
||||||
|
FeedListItem* item = (FeedListItem*)fFeedsListView->ItemAt(i);
|
||||||
|
if (item->GetFeedUrl().UrlString() == feedUrl) {
|
||||||
|
item->SetStatus(status);
|
||||||
|
fFeedsListView->InvalidateItem(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ private:
|
||||||
|
|
||||||
void _PopulateFeedList();
|
void _PopulateFeedList();
|
||||||
|
|
||||||
void _UpdateProgress(BString feedName);
|
void _UpdateProgress(BMessage* msg, int8 status);
|
||||||
|
|
||||||
BButton* fAddButton;
|
BButton* fAddButton;
|
||||||
BButton* fRemoveButton;
|
BButton* fRemoveButton;
|
||||||
|
|
Ŝarĝante…
Reference in New Issue