Statistics for Feeds with no items are now loaded correctly. fixes #283
This commit is contained in:
parent
aa3675bc83
commit
e38746f906
|
@ -89,7 +89,7 @@ public class FeedlistAdapter extends BaseAdapter {
|
||||||
if (DownloadRequester.getInstance().isDownloadingFile(feed)) {
|
if (DownloadRequester.getInstance().isDownloadingFile(feed)) {
|
||||||
holder.lastUpdate.setText(R.string.refreshing_label);
|
holder.lastUpdate.setText(R.string.refreshing_label);
|
||||||
} else {
|
} else {
|
||||||
if (feedItemStatistics.getNumberOfItems() > 0) {
|
if (feedItemStatistics.lastUpdateKnown()) {
|
||||||
holder.lastUpdate.setText(convertView.getResources().getString(
|
holder.lastUpdate.setText(convertView.getResources().getString(
|
||||||
R.string.most_recent_prefix)
|
R.string.most_recent_prefix)
|
||||||
+ DateUtils.getRelativeTimeSpanString(
|
+ DateUtils.getRelativeTimeSpanString(
|
||||||
|
|
|
@ -11,13 +11,29 @@ public class FeedItemStatistics {
|
||||||
private int numberOfNewItems;
|
private int numberOfNewItems;
|
||||||
private int numberOfInProgressItems;
|
private int numberOfInProgressItems;
|
||||||
private Date lastUpdate;
|
private Date lastUpdate;
|
||||||
|
private static final Date UNKNOWN_DATE = new Date(0);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates new FeedItemStatistics object.
|
||||||
|
*
|
||||||
|
* @param feedID ID of the feed.
|
||||||
|
* @param numberOfItems Number of items that this feed has.
|
||||||
|
* @param numberOfNewItems Number of unread items this feed has.
|
||||||
|
* @param numberOfInProgressItems Number of items that the user has started listening to.
|
||||||
|
* @param lastUpdate pubDate of the latest episode. A lastUpdate value of 0 will be interpreted as DATE_UNKOWN if
|
||||||
|
* numberOfItems is 0.
|
||||||
|
*/
|
||||||
public FeedItemStatistics(long feedID, int numberOfItems, int numberOfNewItems, int numberOfInProgressItems, Date lastUpdate) {
|
public FeedItemStatistics(long feedID, int numberOfItems, int numberOfNewItems, int numberOfInProgressItems, Date lastUpdate) {
|
||||||
this.feedID = feedID;
|
this.feedID = feedID;
|
||||||
this.numberOfItems = numberOfItems;
|
this.numberOfItems = numberOfItems;
|
||||||
this.numberOfNewItems = numberOfNewItems;
|
this.numberOfNewItems = numberOfNewItems;
|
||||||
this.numberOfInProgressItems = numberOfInProgressItems;
|
this.numberOfInProgressItems = numberOfInProgressItems;
|
||||||
this.lastUpdate = (lastUpdate != null) ? (Date) lastUpdate.clone() : null;
|
if (numberOfItems > 0) {
|
||||||
|
this.lastUpdate = (lastUpdate != null) ? (Date) lastUpdate.clone() : null;
|
||||||
|
} else {
|
||||||
|
this.lastUpdate = UNKNOWN_DATE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getFeedID() {
|
public long getFeedID() {
|
||||||
|
@ -36,7 +52,19 @@ public class FeedItemStatistics {
|
||||||
return numberOfInProgressItems;
|
return numberOfInProgressItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the pubDate of the latest item in the feed. Users of this method
|
||||||
|
* should check if this value is unkown or not by calling lastUpdateKnown() first.
|
||||||
|
*/
|
||||||
public Date getLastUpdate() {
|
public Date getLastUpdate() {
|
||||||
return (lastUpdate != null) ? (Date) lastUpdate.clone() : null;
|
return (lastUpdate != null) ? (Date) lastUpdate.clone() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if the lastUpdate value is known. The lastUpdate value is unkown if the
|
||||||
|
* feed has no items.
|
||||||
|
*/
|
||||||
|
public boolean lastUpdateKnown() {
|
||||||
|
return lastUpdate != UNKNOWN_DATE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1017,14 +1017,15 @@ public class PodDBAdapter {
|
||||||
* Select number of items, new items, the date of the latest episode and the number of episodes in progress. The result
|
* Select number of items, new items, the date of the latest episode and the number of episodes in progress. The result
|
||||||
* is sorted by the title of the feed.
|
* is sorted by the title of the feed.
|
||||||
*/
|
*/
|
||||||
private static final String FEED_STATISTICS_QUERY = "SELECT feed, num_items, new_items, latest_episode, in_progress FROM " +
|
private static final String FEED_STATISTICS_QUERY = "SELECT Feeds.id, num_items, new_items, latest_episode, in_progress FROM " +
|
||||||
|
" Feeds LEFT JOIN " +
|
||||||
"(SELECT feed,count(*) AS num_items," +
|
"(SELECT feed,count(*) AS num_items," +
|
||||||
" COUNT(CASE WHEN read=0 THEN 1 END) AS new_items," +
|
" COUNT(CASE WHEN read=0 THEN 1 END) AS new_items," +
|
||||||
" MAX(pubDate) AS latest_episode," +
|
" MAX(pubDate) AS latest_episode," +
|
||||||
" COUNT(CASE WHEN position>0 THEN 1 END) AS in_progress," +
|
" COUNT(CASE WHEN position>0 THEN 1 END) AS in_progress," +
|
||||||
" COUNT(CASE WHEN downloaded=1 THEN 1 END) AS episodes_downloaded " +
|
" COUNT(CASE WHEN downloaded=1 THEN 1 END) AS episodes_downloaded " +
|
||||||
" FROM FeedItems LEFT JOIN FeedMedia ON FeedItems.id=FeedMedia.feeditem GROUP BY FeedItems.feed)" +
|
" FROM FeedItems LEFT JOIN FeedMedia ON FeedItems.id=FeedMedia.feeditem GROUP BY FeedItems.feed)" +
|
||||||
" INNER JOIN Feeds ON Feeds.id = feed ORDER BY Feeds.title;";
|
" ON Feeds.id = feed ORDER BY Feeds.title;";
|
||||||
|
|
||||||
public Cursor getFeedStatisticsCursor() {
|
public Cursor getFeedStatisticsCursor() {
|
||||||
return db.rawQuery(FEED_STATISTICS_QUERY, null);
|
return db.rawQuery(FEED_STATISTICS_QUERY, null);
|
||||||
|
|
Loading…
Reference in New Issue