diff --git a/app/src/main/java/com/readrops/app/database/dao/FeedDao.java b/app/src/main/java/com/readrops/app/database/dao/FeedDao.java index 39e6f387..fdb26afd 100644 --- a/app/src/main/java/com/readrops/app/database/dao/FeedDao.java +++ b/app/src/main/java/com/readrops/app/database/dao/FeedDao.java @@ -29,8 +29,8 @@ public interface FeedDao { @Query("Select case When :feedUrl In (Select url from Feed) Then 'true' else 'false' end") String feedExists(String feedUrl); - @Query("Select case When :remoteId In (Select remoteId from Feed) Then 1 else 0 end") - boolean remoteFeedExists(int remoteId); + @Query("Select case When remoteId = :remoteId And account_id = :accountId Then 1 else 0 end From Feed") + boolean remoteFeedExists(int remoteId, int accountId); @Query("Select count(*) from Feed") int getFeedCount(); @@ -38,8 +38,8 @@ public interface FeedDao { @Query("Select * from Feed Where url = :feedUrl") Feed getFeedByUrl(String feedUrl); - @Query("Select * from Feed Where remoteId = :remoteId") - Feed getFeedByRemoteId(int remoteId); + @Query("Select * from Feed Where remoteId = :remoteId And account_id = :accountId") + Feed getFeedByRemoteId(int remoteId, int accountId); @Query("Select * from Feed Where folder_id = :folderId") List getFeedsByFolder(int folderId); diff --git a/app/src/main/java/com/readrops/app/database/dao/FolderDao.java b/app/src/main/java/com/readrops/app/database/dao/FolderDao.java index 8a1f9a0c..b565edb9 100644 --- a/app/src/main/java/com/readrops/app/database/dao/FolderDao.java +++ b/app/src/main/java/com/readrops/app/database/dao/FolderDao.java @@ -28,9 +28,9 @@ public interface FolderDao { @Delete void delete(Folder folder); - @Query("Select id From Folder Where remoteId = :remoteId") - int getRemoteFolderLocalId(int remoteId); + @Query("Select id From Folder Where remoteId = :remoteId And account_id = :accountId") + int getRemoteFolderLocalId(int remoteId, int accountId); - @Query("Select case When :remoteId In (Select remoteId from Folder) Then 1 else 0 end") - boolean remoteFolderExists(int remoteId); + @Query("Select case When remoteId = :remoteId And account_id = :accountId Then 1 else 0 end From Folder") + boolean remoteFolderExists(int remoteId, int accountId); } diff --git a/app/src/main/java/com/readrops/app/repositories/NextNewsRepository.java b/app/src/main/java/com/readrops/app/repositories/NextNewsRepository.java index 0e230534..15726052 100644 --- a/app/src/main/java/com/readrops/app/repositories/NextNewsRepository.java +++ b/app/src/main/java/com/readrops/app/repositories/NextNewsRepository.java @@ -95,7 +95,7 @@ public class NextNewsRepository extends ARepository { insertFeeds(syncResult.getFeeds(), account); timings.addSplit("insert feeds"); - insertItems(syncResult.getItems(), syncType == NextNewsAPI.SyncType.INITIAL_SYNC); + insertItems(syncResult.getItems(), account); timings.addSplit("insert items"); timings.dumpToLog(); @@ -139,13 +139,13 @@ public class NextNewsRepository extends ARepository { for (NextNewsFeed nextNewsFeed : feeds) { - if (!database.feedDao().remoteFeedExists(nextNewsFeed.getId())) { + if (!database.feedDao().remoteFeedExists(nextNewsFeed.getId(), account.getId())) { Feed feed = FeedMatcher.nextNewsFeedToFeed(nextNewsFeed, account); // if the Nextcloud feed has a folder, it is already inserted, so we have to get its local id if (nextNewsFeed.getFolderId() != 0) { - int folderId = database.folderDao().getRemoteFolderLocalId(nextNewsFeed.getFolderId()); + int folderId = database.folderDao().getRemoteFolderLocalId(nextNewsFeed.getFolderId(), account.getId()); if (folderId != 0) feed.setFolderId(folderId); @@ -175,7 +175,7 @@ public class NextNewsRepository extends ARepository { for (NextNewsFolder nextNewsFolder : folders) { - if (!database.folderDao().remoteFolderExists(nextNewsFolder.getId())) { + if (!database.folderDao().remoteFolderExists(nextNewsFolder.getId(), account.getId())) { Folder folder = new Folder(nextNewsFolder.getName()); folder.setRemoteId(nextNewsFolder.getId()); folder.setAccountId(account.getId()); @@ -187,26 +187,17 @@ public class NextNewsRepository extends ARepository { database.folderDao().insert(newFolders); } - private void insertItems(List items, boolean initialSync) { + private void insertItems(List items, Account account) { List newItems = new ArrayList<>(); for (NextNewsItem nextNewsItem : items) { + Feed feed = database.feedDao().getFeedByRemoteId(nextNewsItem.getFeedId(), account.getId()); + Item item = ItemMatcher.nextNewsItemToItem(nextNewsItem, feed); - if (!initialSync) { - if (database.itemDao().remoteItemExists(nextNewsItem.getId())) - continue; // skip the current item if it exists in the db - } + item.setReadTime(Utils.readTimeFromString(item.getContent())); - try { - Feed feed = database.feedDao().getFeedByRemoteId(nextNewsItem.getFeedId()); - Item item = ItemMatcher.nextNewsItemToItem(nextNewsItem, feed); + newItems.add(item); - item.setReadTime(Utils.readTimeFromString(item.getContent())); - - newItems.add(item); - } catch (Exception e) { - e.printStackTrace(); - } } Collections.sort(newItems, Item::compareTo);