diff --git a/ElectronClient/package-lock.json b/ElectronClient/package-lock.json index f5374eef0..7a58ded2b 100644 --- a/ElectronClient/package-lock.json +++ b/ElectronClient/package-lock.json @@ -1535,7 +1535,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "optional": true, @@ -1701,7 +1701,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true, "optional": true @@ -1817,7 +1817,7 @@ }, "tar": { "version": "4.4.8", - "resolved": false, + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", "dev": true, "optional": true, @@ -6122,7 +6122,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true, "optional": true diff --git a/ReactNativeClient/android/app/build.gradle b/ReactNativeClient/android/app/build.gradle index eae1617f3..9a651f76f 100644 --- a/ReactNativeClient/android/app/build.gradle +++ b/ReactNativeClient/android/app/build.gradle @@ -125,8 +125,8 @@ android { applicationId "net.cozic.joplin" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 2097579 - versionName "1.2.2" + versionCode 2097580 + versionName "1.2.3" ndk { abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64" } diff --git a/ReactNativeClient/android/app/src/main/AndroidManifest.xml b/ReactNativeClient/android/app/src/main/AndroidManifest.xml index 88455f57b..76c654483 100644 --- a/ReactNativeClient/android/app/src/main/AndroidManifest.xml +++ b/ReactNativeClient/android/app/src/main/AndroidManifest.xml @@ -82,12 +82,18 @@ + + + + + + + android:launchMode="singleInstance"> diff --git a/ReactNativeClient/lib/joplin-database.js b/ReactNativeClient/lib/joplin-database.js index 6b861d173..fd6a81f37 100644 --- a/ReactNativeClient/lib/joplin-database.js +++ b/ReactNativeClient/lib/joplin-database.js @@ -349,6 +349,8 @@ class JoplinDatabase extends Database { + `Expected version: ${existingDatabaseVersions[existingDatabaseVersions.length - 1]}`); } + this.logger().info(`Upgrading database from version ${fromVersion}`); + if (currentVersionIndex == existingDatabaseVersions.length - 1) return fromVersion; let latestVersion = fromVersion; @@ -856,18 +858,32 @@ class JoplinDatabase extends Database { queries.push('CREATE VIRTUAL TABLE notes_spellfix USING spellfix1'); } - queries.push({ sql: 'UPDATE version SET version = ?', params: [targetVersion] }); + const updateVersionQuery = { sql: 'UPDATE version SET version = ?', params: [targetVersion] }; + + queries.push(updateVersionQuery); try { await this.transactionExecBatch(queries); } catch (error) { + // In some cases listed below, when the upgrade fail it is acceptable (a fallback will be used) + // and in those cases, even though it fails, we still want to set the version number so that the + // migration is not repeated on next upgrade. + let saveVersionAgain = false; + if (targetVersion === 15 || targetVersion === 18 || targetVersion === 33) { this.logger().warn('Could not upgrade to database v15 or v18 or v33 - FTS feature will not be used', error); + saveVersionAgain = true; } else if (targetVersion === 34) { - // this.logger().warn('Could not upgrade to database v34 - fuzzy search will not be used', error); + this.logger().warn('Could not upgrade to database v34 - fuzzy search will not be used', error); + saveVersionAgain = true; } else { throw error; } + + if (saveVersionAgain) { + this.logger().info('Migration failed with fallback and will not be repeated - saving version number'); + await this.transactionExecBatch([updateVersionQuery]); + } } latestVersion = targetVersion; @@ -933,10 +949,13 @@ class JoplinDatabase extends Database { const version = !versionRow ? 0 : versionRow.version; const tableFieldsVersion = !versionRow ? 0 : versionRow.table_fields_version; this.version_ = version; - this.logger().info('Current database version', version); + this.logger().info('Current database version', versionRow); const newVersion = await this.upgradeDatabase(version); this.version_ = newVersion; + + this.logger().info(`New version: ${newVersion}. Previously recorded version: ${tableFieldsVersion}`); + if (newVersion !== tableFieldsVersion) await this.refreshTableFields(newVersion); this.tableFields_ = {};