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")
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<Feed> getFeedsByFolder(int folderId);

View File

@ -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);
}

View File

@ -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<NextNewsItem> items, boolean initialSync) {
private void insertItems(List<NextNewsItem> items, Account account) {
List<Item> 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);