It's now possible to add the same nextcloud news account multiple times

This commit is contained in:
Shinokuni 2019-05-23 22:20:02 +02:00
parent 14596c75fd
commit 3efb023d56
3 changed files with 17 additions and 26 deletions

View File

@ -29,8 +29,8 @@ public interface FeedDao {
@Query("Select case When :feedUrl In (Select url from Feed) Then 'true' else 'false' end") @Query("Select case When :feedUrl In (Select url from Feed) Then 'true' else 'false' end")
String feedExists(String feedUrl); String feedExists(String feedUrl);
@Query("Select case When :remoteId In (Select remoteId from Feed) Then 1 else 0 end") @Query("Select case When remoteId = :remoteId And account_id = :accountId Then 1 else 0 end From Feed")
boolean remoteFeedExists(int remoteId); boolean remoteFeedExists(int remoteId, int accountId);
@Query("Select count(*) from Feed") @Query("Select count(*) from Feed")
int getFeedCount(); int getFeedCount();
@ -38,8 +38,8 @@ public interface FeedDao {
@Query("Select * from Feed Where url = :feedUrl") @Query("Select * from Feed Where url = :feedUrl")
Feed getFeedByUrl(String feedUrl); Feed getFeedByUrl(String feedUrl);
@Query("Select * from Feed Where remoteId = :remoteId") @Query("Select * from Feed Where remoteId = :remoteId And account_id = :accountId")
Feed getFeedByRemoteId(int remoteId); Feed getFeedByRemoteId(int remoteId, int accountId);
@Query("Select * from Feed Where folder_id = :folderId") @Query("Select * from Feed Where folder_id = :folderId")
List<Feed> getFeedsByFolder(int folderId); List<Feed> getFeedsByFolder(int folderId);

View File

@ -28,9 +28,9 @@ public interface FolderDao {
@Delete @Delete
void delete(Folder folder); void delete(Folder folder);
@Query("Select id From Folder Where remoteId = :remoteId") @Query("Select id From Folder Where remoteId = :remoteId And account_id = :accountId")
int getRemoteFolderLocalId(int remoteId); int getRemoteFolderLocalId(int remoteId, int accountId);
@Query("Select case When :remoteId In (Select remoteId from Folder) Then 1 else 0 end") @Query("Select case When remoteId = :remoteId And account_id = :accountId Then 1 else 0 end From Folder")
boolean remoteFolderExists(int remoteId); boolean remoteFolderExists(int remoteId, int accountId);
} }

View File

@ -95,7 +95,7 @@ public class NextNewsRepository extends ARepository {
insertFeeds(syncResult.getFeeds(), account); insertFeeds(syncResult.getFeeds(), account);
timings.addSplit("insert feeds"); timings.addSplit("insert feeds");
insertItems(syncResult.getItems(), syncType == NextNewsAPI.SyncType.INITIAL_SYNC); insertItems(syncResult.getItems(), account);
timings.addSplit("insert items"); timings.addSplit("insert items");
timings.dumpToLog(); timings.dumpToLog();
@ -139,13 +139,13 @@ public class NextNewsRepository extends ARepository {
for (NextNewsFeed nextNewsFeed : feeds) { for (NextNewsFeed nextNewsFeed : feeds) {
if (!database.feedDao().remoteFeedExists(nextNewsFeed.getId())) { if (!database.feedDao().remoteFeedExists(nextNewsFeed.getId(), account.getId())) {
Feed feed = FeedMatcher.nextNewsFeedToFeed(nextNewsFeed, account); 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 the Nextcloud feed has a folder, it is already inserted, so we have to get its local id
if (nextNewsFeed.getFolderId() != 0) { if (nextNewsFeed.getFolderId() != 0) {
int folderId = database.folderDao().getRemoteFolderLocalId(nextNewsFeed.getFolderId()); int folderId = database.folderDao().getRemoteFolderLocalId(nextNewsFeed.getFolderId(), account.getId());
if (folderId != 0) if (folderId != 0)
feed.setFolderId(folderId); feed.setFolderId(folderId);
@ -175,7 +175,7 @@ public class NextNewsRepository extends ARepository {
for (NextNewsFolder nextNewsFolder : folders) { 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 folder = new Folder(nextNewsFolder.getName());
folder.setRemoteId(nextNewsFolder.getId()); folder.setRemoteId(nextNewsFolder.getId());
folder.setAccountId(account.getId()); folder.setAccountId(account.getId());
@ -187,26 +187,17 @@ public class NextNewsRepository extends ARepository {
database.folderDao().insert(newFolders); database.folderDao().insert(newFolders);
} }
private void insertItems(List<NextNewsItem> items, boolean initialSync) { private void insertItems(List<NextNewsItem> items, Account account) {
List<Item> newItems = new ArrayList<>(); List<Item> newItems = new ArrayList<>();
for (NextNewsItem nextNewsItem : items) { for (NextNewsItem nextNewsItem : items) {
Feed feed = database.feedDao().getFeedByRemoteId(nextNewsItem.getFeedId(), account.getId());
Item item = ItemMatcher.nextNewsItemToItem(nextNewsItem, feed);
if (!initialSync) { item.setReadTime(Utils.readTimeFromString(item.getContent()));
if (database.itemDao().remoteItemExists(nextNewsItem.getId()))
continue; // skip the current item if it exists in the db
}
try { newItems.add(item);
Feed feed = database.feedDao().getFeedByRemoteId(nextNewsItem.getFeedId());
Item item = ItemMatcher.nextNewsItemToItem(nextNewsItem, feed);
item.setReadTime(Utils.readTimeFromString(item.getContent()));
newItems.add(item);
} catch (Exception e) {
e.printStackTrace();
}
} }
Collections.sort(newItems, Item::compareTo); Collections.sort(newItems, Item::compareTo);