From c5e25dc62ebfab6a03fb0c0415b1bd2ca22344bd Mon Sep 17 00:00:00 2001 From: Adamantcheese Date: Wed, 28 Aug 2019 00:33:26 -0700 Subject: [PATCH] Update exported settings version and upgrade code for removal of 55chan and 8chan --- .../chan/core/database/DatabaseHelper.java | 2 +- .../model/export/ExportedAppSettings.java | 2 + .../repository/ImportExportRepository.java | 84 ++++++++++++++++++- 3 files changed, 86 insertions(+), 2 deletions(-) diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseHelper.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseHelper.java index 0072cb81f5..ae2d559be0 100644 --- a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseHelper.java +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseHelper.java @@ -340,7 +340,7 @@ public void deleteSiteByRegistryID(int id) throws SQLException { boardDelete.where().eq("site", toDelete.id); boardDelete.delete(); - //loadables (pins, history, loadbles) + //loadables (saved threads, pins, history, loadables) List siteLoadables = loadableDao.queryForEq("site", toDelete.id); if (!siteLoadables.isEmpty()) { Set loadableIdSet = new HashSet<>(); diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedAppSettings.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedAppSettings.java index bfb2f15cfa..9e155efed1 100644 --- a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedAppSettings.java +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedAppSettings.java @@ -30,6 +30,8 @@ public class ExportedAppSettings { @SerializedName("exported_sites") private List exportedSites; + //there aren't any exported pins here because the pins are stored inside each exported site + //there also aren't any exported loadables because they are inside the exported pins @SerializedName("exported_boards") private List exportedBoards; @SerializedName("exported_filters") diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/ImportExportRepository.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/ImportExportRepository.java index e73fc1d2d8..dc67fdba5e 100644 --- a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/ImportExportRepository.java +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/ImportExportRepository.java @@ -17,6 +17,7 @@ package com.github.adamantcheese.chan.core.repository; import android.annotation.SuppressLint; +import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -31,6 +32,7 @@ import com.github.adamantcheese.chan.core.model.export.ExportedPostHide; import com.github.adamantcheese.chan.core.model.export.ExportedSavedThread; import com.github.adamantcheese.chan.core.model.export.ExportedSite; +import com.github.adamantcheese.chan.core.model.json.site.SiteConfig; import com.github.adamantcheese.chan.core.model.orm.Board; import com.github.adamantcheese.chan.core.model.orm.Filter; import com.github.adamantcheese.chan.core.model.orm.Loadable; @@ -62,7 +64,7 @@ public class ImportExportRepository { // Don't forget to change this when changing any of the Export models. // Also, don't forget to handle the change in the onUpgrade or onDowngrade methods - public static final int CURRENT_EXPORT_SETTINGS_VERSION = 3; + public static final int CURRENT_EXPORT_SETTINGS_VERSION = 4; private DatabaseManager databaseManager; private DatabaseHelper databaseHelper; @@ -350,6 +352,25 @@ private ExportedAppSettings onUpgrade(int version, ExportedAppSettings appSettin site.setUserSettings("{}"); } } + + if (version < 4) { + //55chan and 8chan were removed for this version + ExportedSite chan8 = null; + ExportedSite chan55 = null; + for (ExportedSite site : appSettings.getExportedSites()) { + SiteConfig config = gson.fromJson(site.getConfiguration(), SiteConfig.class); + if (config.classId == 1 && chan8 == null) chan8 = site; + if (config.classId == 7 && chan55 == null) chan55 = site; + } + + if (chan55 != null) { + deleteExportedSite(chan55, appSettings); + } + + if (chan8 != null) { + deleteExportedSite(chan8, appSettings); + } + } return appSettings; } @@ -544,4 +565,65 @@ public DowngradeNotSupportedException(String message) { super(message); } } + + private void deleteExportedSite(ExportedSite site, ExportedAppSettings appSettings) { + //filters + List filtersToDelete = new ArrayList<>(); + for (ExportedFilter filter : appSettings.getExportedFilters()) { + if (filter.isAllBoards() || TextUtils.isEmpty(filter.getBoards())) { + continue; + } + + for (String uniqueId : filter.getBoards().split(",")) { + String[] split = uniqueId.split(":"); + if (split.length == 2 && Integer.parseInt(split[0]) == site.getSiteId()) { + filtersToDelete.add(filter); + break; + } + } + } + appSettings.getExportedFilters().removeAll(filtersToDelete); + + //boards + List boardsToDelete = new ArrayList<>(); + for (ExportedBoard board : appSettings.getExportedBoards()) { + if (board.getSiteId() == site.getSiteId()) { + boardsToDelete.add(board); + } + } + appSettings.getExportedBoards().removeAll(boardsToDelete); + + //loadables for saved threads + List loadables = new ArrayList<>(); + for (ExportedPin pin : site.getExportedPins()) { + if (pin.getExportedLoadable().getSiteId() == site.getSiteId()) { + loadables.add(pin.getExportedLoadable()); + } + } + + if (!loadables.isEmpty()) { + List savedThreadToDelete = new ArrayList<>(); + for (ExportedLoadable loadable : loadables) { + //saved threads + for (ExportedSavedThread savedThread : appSettings.getExportedSavedThreads()) { + if (loadable.getLoadableId() == savedThread.getLoadableId()) { + savedThreadToDelete.add(savedThread); + } + } + } + appSettings.getExportedSavedThreads().removeAll(savedThreadToDelete); + } + + //post hides + List hidesToDelete = new ArrayList<>(); + for (ExportedPostHide hide : appSettings.getExportedPostHides()) { + if (hide.getSite() == site.getSiteId()) { + hidesToDelete.add(hide); + } + } + appSettings.getExportedPostHides().removeAll(hidesToDelete); + + //site (also removes pins and loadables) + appSettings.getExportedSites().remove(site); + } }