@@ -338,7 +338,8 @@ public void run() {
338338 for (RssItem rssItem : list ) {
339339 daoSession .getRssItemDao ().delete (rssItem );
340340 }
341- }});
341+ }
342+ });
342343 }
343344
344345 public void renameFeedById (long feedId , String newTitle ) {
@@ -489,23 +490,6 @@ public void run() {
489490 Log .v (TAG , "Time needed for insert: " + sw .toString ());
490491 }
491492
492- public SparseArray <String > getUnreadItemCountForFolder () {
493- String buildSQL = "SELECT f." + FolderDao .Properties .Id .columnName + ", COUNT(1)" +
494- " FROM " + RssItemDao .TABLENAME + " rss " +
495- " JOIN " + FeedDao .TABLENAME + " feed ON rss." + RssItemDao .Properties .FeedId .columnName + " = feed." + FeedDao .Properties .Id .columnName +
496- " JOIN " + FolderDao .TABLENAME + " f ON feed." + FeedDao .Properties .FolderId .columnName + " = f." + FolderDao .Properties .Id .columnName +
497- " WHERE " + RssItemDao .Properties .Read_temp .columnName + " != 1 " +
498- " GROUP BY f." + FolderDao .Properties .Id .columnName ;
499-
500- SparseArray <String > values = getStringSparseArrayFromSQL (buildSQL , 0 , 1 );
501-
502- values .put (SPECIAL_FOLDERS .ALL_UNREAD_ITEMS .getValue (), getUnreadItemsCountForSpecificFolder (SPECIAL_FOLDERS .ALL_UNREAD_ITEMS ));
503- values .put (SPECIAL_FOLDERS .ALL_STARRED_ITEMS .getValue (), getUnreadItemsCountForSpecificFolder (SPECIAL_FOLDERS .ALL_STARRED_ITEMS ));
504-
505-
506- return values ;
507- }
508-
509493 public String getUnreadItemsCountForSpecificFolder (SPECIAL_FOLDERS specialFolder ) {
510494 String buildSQL = "SELECT COUNT(1)" +
511495 " FROM " + RssItemDao .TABLENAME + " rss " ;
@@ -520,16 +504,66 @@ public String getUnreadItemsCountForSpecificFolder(SPECIAL_FOLDERS specialFolder
520504 return values .valueAt (0 );
521505 }
522506
523- public SparseArray <String > getUnreadItemCountForFeed () {
524- String buildSQL = "SELECT " + RssItemDao .Properties .FeedId .columnName + ", COUNT(1)" + // rowid as _id,
525- " FROM " + RssItemDao .TABLENAME +
507+ /**
508+ *
509+ * @return [0] = unread items count for folders, [1] = unread items count for feeds
510+ */
511+ public SparseArray <String >[] getUnreadItemCountFeedFolder () {
512+ SparseArray <String >[] values = new SparseArray [2 ];
513+
514+ String buildSQL = "SELECT f." + FolderDao .Properties .Id .columnName + ", feed." + FeedDao .Properties .Id .columnName + ", COUNT(1)" +
515+ " FROM " + RssItemDao .TABLENAME + " rss " +
516+ " JOIN " + FeedDao .TABLENAME + " feed ON rss." + RssItemDao .Properties .FeedId .columnName + " = feed." + FeedDao .Properties .Id .columnName +
517+ " LEFT OUTER JOIN " + FolderDao .TABLENAME + " f ON feed." + FeedDao .Properties .FolderId .columnName + " = f." + FolderDao .Properties .Id .columnName +
526518 " WHERE " + RssItemDao .Properties .Read_temp .columnName + " != 1 " +
527- " GROUP BY " + RssItemDao .Properties .FeedId .columnName ;
519+ " GROUP BY f." + FolderDao .Properties .Id .columnName + ", feed." + FeedDao .Properties .Id .columnName ;
520+ //" GROUP BY (case when f." + FolderDao.Properties.Id.columnName + " IS NULL then feed." + FeedDao.Properties.Id.columnName + " ELSE f." + FolderDao.Properties.Id.columnName + " end)";
521+
522+ values [0 ] = new SparseArray <>();
523+ values [1 ] = new SparseArray <>();
524+
525+ int totalUnreadItemsCount = 0 ;
526+
527+ Cursor cursor = daoSession .getDatabase ().rawQuery (buildSQL , null );
528+ try
529+ {
530+ if (cursor != null )
531+ {
532+ if (cursor .getCount () > 0 )
533+ {
534+ cursor .moveToFirst ();
535+ do {
536+ int folderId = cursor .getInt (0 );
537+ int feedId = cursor .getInt (1 );
538+ int unreadCount = cursor .getInt (2 );
539+
540+ totalUnreadItemsCount += unreadCount ;
541+
542+ values [1 ].put (feedId , String .valueOf (unreadCount ));
543+ if (folderId != 0 ) {
544+ if (values [0 ].get (folderId ) != null ) {
545+ unreadCount += Integer .parseInt (values [0 ].get (folderId ));
546+ }
547+
548+ values [0 ].put (folderId , String .valueOf (unreadCount ));
549+ }
550+ } while (cursor .moveToNext ());
551+ }
552+ }
553+ } finally {
554+ cursor .close ();
555+ }
556+
557+
558+ values [0 ].put (SPECIAL_FOLDERS .ALL_UNREAD_ITEMS .getValue (), String .valueOf (totalUnreadItemsCount ));
559+ values [0 ].put (SPECIAL_FOLDERS .ALL_STARRED_ITEMS .getValue (), getUnreadItemsCountForSpecificFolder (SPECIAL_FOLDERS .ALL_STARRED_ITEMS ));
560+
561+
562+ return values ;
528563
529- return getStringSparseArrayFromSQL (buildSQL , 0 , 1 );
530564 }
531565
532- public SparseArray <String > getStarredItemCountForFeed () {
566+ public SparseArray <String > getStarredItemCount () {
533567 String buildSQL = "SELECT " + RssItemDao .Properties .FeedId .columnName + ", COUNT(1)" + // rowid as _id,
534568 " FROM " + RssItemDao .TABLENAME +
535569 " WHERE " + RssItemDao .Properties .Starred_temp .columnName + " = 1 " +
0 commit comments