Browse Source

added the ability to import data of v3.

oldj 4 years ago
parent
commit
2e95039872

+ 15 - 1
src/main/actions/import.ts

@@ -4,6 +4,7 @@
  * @homepage: https://oldj.net
  */
 
+import importV3Data from '@main/actions/migrate/importV3Data'
 import getI18N from '@main/core/getI18N'
 import { swhdb } from '@main/data'
 import { dialog } from 'electron'
@@ -40,18 +41,31 @@ export default async (): Promise<boolean | string> => {
     return 'parse_error'
   }
 
-  if (typeof data !== 'object' || !data.version || !Array.isArray(data.version) || !data.data) {
+  if (typeof data !== 'object' || !data.version || !Array.isArray(data.version)) {
     return 'invalid_data'
   }
 
   let { version } = data
   if (version[0] === 3) {
     // import v3 data
+    try {
+      await importV3Data(data)
+    } catch (e) {
+      console.error(e)
+      return 'invalid_v3_data'
+    }
+
+    return true
   }
+
   if (version[0] > 4) {
     return 'new_version'
   }
 
+  if (!data.data || typeof data.data !== 'object') {
+    return 'invalid_data_key'
+  }
+
   await swhdb.loadJSON(data.data)
 
   return true

+ 36 - 0
src/main/actions/migrate/importV3Data.ts

@@ -0,0 +1,36 @@
+/**
+ * importV3Data
+ * @author: oldj
+ * @homepage: https://oldj.net
+ */
+
+// import data from v3 to v4
+
+import { swhdb } from '@main/data'
+import { cleanHostsList, flatten } from '@root/common/hostsFn'
+import version from '@root/version.json'
+
+export default async (old_data: any) => {
+  old_data = cleanHostsList(old_data)
+
+  await swhdb.collection.hosts.remove()
+  await swhdb.list.tree.remove()
+
+  let { list } = old_data
+  let hosts = flatten(list)
+
+  for (let h of hosts) {
+    if (h.refresh_interval) {
+      h.refresh_interval *= 3600
+    }
+
+    h.type = h.where
+    delete h.where
+
+    await swhdb.collection.hosts.insert(h)
+    h.content = ''
+  }
+
+  await swhdb.list.tree.extend(...list)
+  await swhdb.dict.meta.set('version', version)
+}

+ 3 - 20
src/main/actions/migrate/migrateData.ts

@@ -6,10 +6,10 @@
 
 // migrate data from v3 to v4
 
-import { swhdb } from '@main/data'
+import importV3Data from '@main/actions/migrate/importV3Data'
 import getDataFolder from '@main/libs/getDataFolder'
 import { IHostsBasicData, VersionType } from '@root/common/data'
-import { cleanHostsList, flatten } from '@root/common/hostsFn'
+import { cleanHostsList } from '@root/common/hostsFn'
 import version from '@root/version.json'
 import * as fs from 'fs'
 import path from 'path'
@@ -38,22 +38,5 @@ const readOldData = async (): Promise<IHostsBasicData> => {
 
 export default async () => {
   let old_data = await readOldData()
-
-  let { list } = old_data
-  let hosts = flatten(list)
-
-  for (let h of hosts) {
-    if (h.refresh_interval) {
-      h.refresh_interval *= 3600
-    }
-
-    h.type = h.where
-    delete h.where
-
-    await swhdb.collection.hosts.insert(h)
-    h.content = ''
-  }
-
-  await swhdb.list.tree.extend(...list)
-  await swhdb.dict.meta.set('version', version)
+  await importV3Data(old_data)
 }