From 1d6255350c189dd37183a8ef5ca2ee244905ac61 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Sun, 19 May 2024 21:21:38 +0200 Subject: [PATCH 1/7] fix(WebDAV): Improve locking logic Signed-off-by: Marcel Klehr --- src/lib/adapters/WebDav.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/lib/adapters/WebDav.ts b/src/lib/adapters/WebDav.ts index 7c891fdff3..bc270e7951 100644 --- a/src/lib/adapters/WebDav.ts +++ b/src/lib/adapters/WebDav.ts @@ -22,12 +22,14 @@ export default class WebDavAdapter extends CachingAdapter { private lockingInterval: any private lockingPromise: Promise private locked: boolean + private ended: boolean private cancelCallback: () => void private initialTreeHash: string constructor(server) { super(server) this.server = server this.locked = false + this.ended = true this.lockingInterval = null } @@ -124,7 +126,7 @@ export default class WebDavAdapter extends CachingAdapter { try { await this.lockingPromise } catch (e) { - if (e instanceof HttpError && e.status === 423) { + if (e instanceof HttpError && (e.status === 423 || e.status === 409)) { this.locked = false throw new ResourceLockedError() } @@ -135,7 +137,11 @@ export default class WebDavAdapter extends CachingAdapter { async freeLock() { if (this.lockingPromise) { - await this.lockingPromise + try { + await this.lockingPromise + } catch (e) { + console.warn(e) + } } if (!this.locked) { return @@ -244,6 +250,7 @@ export default class WebDavAdapter extends CachingAdapter { async onSyncStart(needLock = true) { Logger.log('onSyncStart: begin') + this.ended = false if (Capacitor.getPlatform() === 'web') { const browser = (await import('../browser-api')).default @@ -267,7 +274,7 @@ export default class WebDavAdapter extends CachingAdapter { } if (needLock) { await this.obtainLock() - this.lockingInterval = setInterval(() => this.setLock(), LOCK_INTERVAL) // Set lock every minute + this.lockingInterval = setInterval(() => !this.ended && this.setLock(), LOCK_INTERVAL) // Set lock every minute } const resp = await this.pullFromServer() @@ -290,12 +297,14 @@ export default class WebDavAdapter extends CachingAdapter { async onSyncFail() { Logger.log('onSyncFail') + this.ended = true clearInterval(this.lockingInterval) await this.freeLock() } async onSyncComplete() { Logger.log('onSyncComplete') + this.ended = true clearInterval(this.lockingInterval) this.bookmarksCache = this.bookmarksCache.clone() From 6e42b0d47e4a6cffc6a3b23b362563f3bd2e6a73 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Sun, 19 May 2024 21:22:06 +0200 Subject: [PATCH 2/7] fix(Account): call onSyncFail if onSyncStart fails Signed-off-by: Marcel Klehr --- src/lib/Account.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/lib/Account.ts b/src/lib/Account.ts index dbaddd67d0..3fc0bdd6f8 100644 --- a/src/lib/Account.ts +++ b/src/lib/Account.ts @@ -165,8 +165,15 @@ export default class Account { try { status = await this.server.onSyncStart(needLock) } catch (e) { + await this.server.onSyncFail() // Resource locked if (e.code === 37) { + Sentry.setContext('accountData', { + ...this.getData(), + username: 'SENSITIVEVALUEHIDDEN', + password: 'SENSITIVEVALUVALUEHIDDEN', + passphrase: 'SENSITIVEVALUVALUEHIDDEN' + }) Sentry.captureException(e) // We got a resource locked error if (this.getData().lastSync < Date.now() - LOCK_TIMEOUT) { From 22d3787d39b4418fc51cd00977a61a1df44deb55 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Sun, 19 May 2024 21:22:31 +0200 Subject: [PATCH 3/7] fix(BrowserController): Don't spam setIcon warnings Signed-off-by: Marcel Klehr --- src/lib/browser/BrowserController.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/lib/browser/BrowserController.js b/src/lib/browser/BrowserController.js index a134e515d4..c80814b873 100644 --- a/src/lib/browser/BrowserController.js +++ b/src/lib/browser/BrowserController.js @@ -363,15 +363,10 @@ export default class BrowserController { } if (icon[status]) { - try { + if (browser.browserAction) { await browser.browserAction.setIcon(icon[status]) - } catch (e) { - console.warn(e) - } - try { + } else if (browser.action) { await browser.action.setIcon(icon[status]) - } catch (e) { - console.warn(e) } } } From 47ccd3e6868d69ab06b43ba35e9bcb9d8f73cf51 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Mon, 20 May 2024 08:11:33 +0200 Subject: [PATCH 4/7] fix: Improve locking logic Signed-off-by: Marcel Klehr --- src/lib/Account.ts | 2 +- src/lib/adapters/Git.ts | 8 ++++++-- src/lib/adapters/GoogleDrive.ts | 14 +++++--------- src/lib/adapters/NextcloudBookmarks.ts | 5 +++-- src/lib/adapters/WebDav.ts | 17 +++++++++++------ src/lib/interfaces/Adapter.ts | 2 +- 6 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/lib/Account.ts b/src/lib/Account.ts index 3fc0bdd6f8..f2bb1f2587 100644 --- a/src/lib/Account.ts +++ b/src/lib/Account.ts @@ -179,7 +179,7 @@ export default class Account { if (this.getData().lastSync < Date.now() - LOCK_TIMEOUT) { // but if we've been waiting for the lock for more than 2h // start again without locking the resource - status = await this.server.onSyncStart(false) + status = await this.server.onSyncStart(false, true) } else { await this.setData({ ...this.getData(), diff --git a/src/lib/adapters/Git.ts b/src/lib/adapters/Git.ts index 40bbfc4252..f50335f043 100644 --- a/src/lib/adapters/Git.ts +++ b/src/lib/adapters/Git.ts @@ -64,7 +64,7 @@ export default class GitAdapter extends CachingAdapter { this.cancelCallback && this.cancelCallback() } - async onSyncStart(needLock = true) { + async onSyncStart(needLock = true, forceLock = false) { Logger.log('onSyncStart: begin') const hash = await Crypto.sha256(JSON.stringify(this.server)) + Date.now() @@ -152,8 +152,12 @@ export default class GitAdapter extends CachingAdapter { if (this.lockingInterval) { clearInterval(this.lockingInterval) } - if (needLock) { + if (forceLock) { + await this.setLock() + } else if (needLock) { await this.obtainLock() + } + if (needLock || forceLock) { this.lockingInterval = setInterval(() => this.setLock(), LOCK_INTERVAL) // Set lock every minute } diff --git a/src/lib/adapters/GoogleDrive.ts b/src/lib/adapters/GoogleDrive.ts index 2aa4fee5a1..ce742226c4 100644 --- a/src/lib/adapters/GoogleDrive.ts +++ b/src/lib/adapters/GoogleDrive.ts @@ -191,7 +191,7 @@ export default class GoogleDriveAdapter extends CachingAdapter { }) } - async onSyncStart(needLock = true) { + async onSyncStart(needLock = true, forceLock = false) { Logger.log('onSyncStart: begin') if (Capacitor.getPlatform() === 'web') { @@ -214,7 +214,9 @@ export default class GoogleDriveAdapter extends CachingAdapter { const file = fileList.files.filter(file => !file.trashed)[0] if (file) { this.fileId = file.id - if (needLock) { + if (forceLock) { + await this.setLock(this.fileId) + } else if (needLock) { const data = await this.getFileMetadata(file.id, 'appProperties') if (data.appProperties && data.appProperties.locked && (data.appProperties.locked === true || JSON.parse(data.appProperties.locked))) { const lockedDate = JSON.parse(data.appProperties.locked) @@ -225,12 +227,6 @@ export default class GoogleDriveAdapter extends CachingAdapter { throw new ResourceLockedError() } } - } - } - - if (file) { - this.fileId = file.id - if (needLock) { await this.setLock(this.fileId) } @@ -266,7 +262,7 @@ export default class GoogleDriveAdapter extends CachingAdapter { if (this.lockingInterval) { clearInterval(this.lockingInterval) } - if (needLock) { + if (needLock || forceLock) { this.lockingInterval = setInterval(() => this.setLock(this.fileId), LOCK_INTERVAL) // Set lock every minute } } else { diff --git a/src/lib/adapters/NextcloudBookmarks.ts b/src/lib/adapters/NextcloudBookmarks.ts index 092a6c0394..3bb8d366f0 100644 --- a/src/lib/adapters/NextcloudBookmarks.ts +++ b/src/lib/adapters/NextcloudBookmarks.ts @@ -124,7 +124,7 @@ export default class NextcloudBookmarksAdapter implements Adapter, BulkImportRes return output + (output[output.length - 1] !== '/' ? '/' : '') } - async onSyncStart(needLock = true): Promise { + async onSyncStart(needLock = true, forceLock = false): Promise { if (Capacitor.getPlatform() === 'web') { const browser = (await import('../browser-api')).default let hasPermissions @@ -143,7 +143,8 @@ export default class NextcloudBookmarksAdapter implements Adapter, BulkImportRes } // if needLock -- we always need it - if (!(await this.acquireLock())) { + const couldAcquireLock = await this.acquireLock() + if (!forceLock && !couldAcquireLock) { throw new ResourceLockedError() } this.lockingInterval = setInterval(() => !this.ended && this.acquireLock(), LOCK_INTERVAL) diff --git a/src/lib/adapters/WebDav.ts b/src/lib/adapters/WebDav.ts index bc270e7951..e50c197417 100644 --- a/src/lib/adapters/WebDav.ts +++ b/src/lib/adapters/WebDav.ts @@ -248,7 +248,7 @@ export default class WebDavAdapter extends CachingAdapter { return response } - async onSyncStart(needLock = true) { + async onSyncStart(needLock = true, forceLock = false) { Logger.log('onSyncStart: begin') this.ended = false @@ -269,12 +269,10 @@ export default class WebDavAdapter extends CachingAdapter { throw new SlashError() } - if (this.lockingInterval) { - clearInterval(this.lockingInterval) - } - if (needLock) { + if (forceLock) { + await this.setLock() + } else if (needLock) { await this.obtainLock() - this.lockingInterval = setInterval(() => !this.ended && this.setLock(), LOCK_INTERVAL) // Set lock every minute } const resp = await this.pullFromServer() @@ -289,6 +287,13 @@ export default class WebDavAdapter extends CachingAdapter { Logger.log('onSyncStart: completed') + if (this.lockingInterval) { + clearInterval(this.lockingInterval) + } + if (needLock || forceLock) { + this.lockingInterval = setInterval(() => !this.ended && this.setLock(), LOCK_INTERVAL) // Set lock every minute + } + if (resp.status === 404) { // Notify sync process that we need to reset cache return false diff --git a/src/lib/interfaces/Adapter.ts b/src/lib/interfaces/Adapter.ts index 9a60ebbbab..470c95d3aa 100644 --- a/src/lib/interfaces/Adapter.ts +++ b/src/lib/interfaces/Adapter.ts @@ -7,7 +7,7 @@ export default interface IAdapter { getData() :IAccountData getLabel(): string acceptsBookmark(bookmark:Bookmark): boolean - onSyncStart(lock?:boolean):Promise + onSyncStart(needLock?:boolean, forceLock?: boolean):Promise onSyncComplete():Promise onSyncFail():Promise cancel():void From dbaf0f5692f4f0f277b501deda1aa1172569b43b Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Mon, 20 May 2024 18:05:18 +0200 Subject: [PATCH 5/7] fix: Try to make git work on android by enabling fetch polyfill in capacitor Signed-off-by: Marcel Klehr --- .../app/src/main/assets/capacitor.config.json | 3 + capacitor.config.json | 3 + ios/App/App/capacitor.config.json | 3 + manifest.chrome.json | 2 +- manifest.firefox.json | 2 +- manifest.json | 2 +- package-lock.json | 60 +++++++++---------- package.json | 2 +- 8 files changed, 43 insertions(+), 34 deletions(-) diff --git a/android/app/src/main/assets/capacitor.config.json b/android/app/src/main/assets/capacitor.config.json index 1183dd9397..1df0b893a9 100644 --- a/android/app/src/main/assets/capacitor.config.json +++ b/android/app/src/main/assets/capacitor.config.json @@ -10,6 +10,9 @@ "launchAutoHide": false, "androidScaleType": "CENTER_INSIDE", "backgroundColor": "#ffffff" + }, + "CapacitorHttp": { + "enabled": true } }, "cordova": {} diff --git a/capacitor.config.json b/capacitor.config.json index e463945c88..fb7c372f20 100644 --- a/capacitor.config.json +++ b/capacitor.config.json @@ -10,6 +10,9 @@ "launchAutoHide": false, "androidScaleType": "CENTER_INSIDE", "backgroundColor": "#ffffff" + }, + "CapacitorHttp": { + "enabled": true } }, "cordova": {} diff --git a/ios/App/App/capacitor.config.json b/ios/App/App/capacitor.config.json index 1183dd9397..1df0b893a9 100644 --- a/ios/App/App/capacitor.config.json +++ b/ios/App/App/capacitor.config.json @@ -10,6 +10,9 @@ "launchAutoHide": false, "androidScaleType": "CENTER_INSIDE", "backgroundColor": "#ffffff" + }, + "CapacitorHttp": { + "enabled": true } }, "cordova": {} diff --git a/manifest.chrome.json b/manifest.chrome.json index 53c349f024..16ff29ae12 100644 --- a/manifest.chrome.json +++ b/manifest.chrome.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "floccus bookmarks sync", "short_name": "floccus", - "version": "5.1.3.1", + "version": "5.1.4.1", "description": "__MSG_DescriptionExtension__", "icons": { "48": "icons/logo.png", diff --git a/manifest.firefox.json b/manifest.firefox.json index 0ad1c2d95e..2707e5ac20 100644 --- a/manifest.firefox.json +++ b/manifest.firefox.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "floccus bookmarks sync", "short_name": "floccus", - "version": "5.1.3.1", + "version": "5.1.4.1", "description": "__MSG_DescriptionExtension__", "icons": { "48": "icons/logo.png", diff --git a/manifest.json b/manifest.json index 0ad1c2d95e..2707e5ac20 100644 --- a/manifest.json +++ b/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "floccus bookmarks sync", "short_name": "floccus", - "version": "5.1.3.1", + "version": "5.1.4.1", "description": "__MSG_DescriptionExtension__", "icons": { "48": "icons/logo.png", diff --git a/package-lock.json b/package-lock.json index 8d4a004095..1f0dd1742e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "floccus", - "version": "5.1.3", + "version": "5.1.4-alpha.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "floccus", - "version": "5.1.3", + "version": "5.1.4-alpha.2", "license": "MPL-2.0", "dependencies": { "@byteowls/capacitor-oauth2": "5.x", @@ -1768,25 +1768,25 @@ } }, "node_modules/@capacitor/android": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-5.5.1.tgz", - "integrity": "sha512-WTnPnpaEvTtaEtTNRbh06Y1afF7A4plY/4uajAL0WW8tdR1FxieadF357yKGiAT6CudI/B+eOu6rxn6qWuphKg==", + "version": "5.7.5", + "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-5.7.5.tgz", + "integrity": "sha512-VKb9VarGA2hJ8PuLk4EhSq4jvgM+V8JOoNw00WdD6Q4rbgDKSa7WIKTw75sFrNRGiwHSZ99FPvmisJfr1Spk+Q==", "peerDependencies": { - "@capacitor/core": "^5.5.0" + "@capacitor/core": "^5.7.0" } }, "node_modules/@capacitor/app": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@capacitor/app/-/app-5.0.6.tgz", - "integrity": "sha512-6ZXVdnNmaYILasC/RjQw+yfTmq2ZO7Q3v5lFcDVfq3PFGnybyYQh+RstBrYri+376OmXOXxBD7E6UxBhrMzXGA==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@capacitor/app/-/app-5.0.7.tgz", + "integrity": "sha512-oad0jwQu+vgQDukeS9UV56yG10dlxkAGGl26IQpZlTmg3dTI9qSJtvhmlLfkF0nEtoj5IsVQUPE+NLH1oZkgGQ==", "peerDependencies": { "@capacitor/core": "^5.0.0" } }, "node_modules/@capacitor/cli": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-5.5.1.tgz", - "integrity": "sha512-/oGd2IIc+k1H/fc7tUzP7vqMtZi0gNcJ4/4wUE2kzAnETxxxHXMM/2V62KfjCby/OOAzJbtI7n5OPlnWE9un1A==", + "version": "5.7.5", + "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-5.7.5.tgz", + "integrity": "sha512-CEgCXq3NNacS+9EptJXM+Cm915oB8eNPhiTP7ylKsQchrY0CGbeyO5y4A/oYnB/h4f+UiaX3ShlIOljx3+agqw==", "dependencies": { "@ionic/cli-framework-output": "^2.2.5", "@ionic/utils-fs": "^3.1.6", @@ -1796,7 +1796,7 @@ "debug": "^4.3.4", "env-paths": "^2.2.0", "kleur": "^4.1.4", - "native-run": "^1.7.3", + "native-run": "^2.0.0", "open": "^8.4.0", "plist": "^3.0.5", "prompts": "^2.4.2", @@ -1845,9 +1845,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@capacitor/core": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-5.5.1.tgz", - "integrity": "sha512-VG6Iv8Q7ZAbvjodxpvjcSe0jfxUwZXnvjbi93ehuJ6eYP8U926qLSXyrT/DToZq+F6v/HyGyVgn3mrE/9jW2Tg==", + "version": "5.7.5", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-5.7.5.tgz", + "integrity": "sha512-babBo26lgIyKkAOr/AbPq5wwi9I4uHDP0lBteJq7p4xZElA6tAA8mD3xRH1/4EKmZ4+acYpKmmyegX3zsVh37A==", "dependencies": { "tslib": "^2.1.0" } @@ -9348,11 +9348,11 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", - "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/inquirer": { @@ -11627,27 +11627,27 @@ } }, "node_modules/native-run": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/native-run/-/native-run-1.7.4.tgz", - "integrity": "sha512-yDEwTp66vmXpqFiSQzz4sVQgyq5U58gGRovglY4GHh12ITyWa6mh6Lbpm2gViVOVD1JYFtYnwcgr7GTFBinXNA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/native-run/-/native-run-2.0.1.tgz", + "integrity": "sha512-XfG1FBZLM50J10xH9361whJRC9SHZ0Bub4iNRhhI61C8Jv0e1ud19muex6sNKB51ibQNUJNuYn25MuYET/rE6w==", "dependencies": { - "@ionic/utils-fs": "^3.1.6", - "@ionic/utils-terminal": "^2.3.3", + "@ionic/utils-fs": "^3.1.7", + "@ionic/utils-terminal": "^2.3.4", "bplist-parser": "^0.3.2", "debug": "^4.3.4", "elementtree": "^0.1.7", - "ini": "^3.0.1", - "plist": "^3.0.6", - "split2": "^4.1.0", + "ini": "^4.1.1", + "plist": "^3.1.0", + "split2": "^4.2.0", "through2": "^4.0.2", - "tslib": "^2.4.0", + "tslib": "^2.6.2", "yauzl": "^2.10.0" }, "bin": { "native-run": "bin/native-run" }, "engines": { - "node": ">=12.13.0" + "node": ">=16.0.0" } }, "node_modules/native-run/node_modules/readable-stream": { diff --git a/package.json b/package.json index d9e8417c22..c6cdc731e9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "floccus", - "version": "5.1.3", + "version": "5.1.4-alpha.2", "description": "Sync your bookmarks privately across browsers and devices", "scripts": { "build": "gulp", From bcd5c0aa4be2f673c9e0a126fb7dcd8d4947db74 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Mon, 20 May 2024 19:22:24 +0200 Subject: [PATCH 6/7] [native] fix(Drawer): Add icon for git profiles Signed-off-by: Marcel Klehr --- src/ui/components/native/Drawer.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ui/components/native/Drawer.vue b/src/ui/components/native/Drawer.vue index c089b571c2..22488745e7 100644 --- a/src/ui/components/native/Drawer.vue +++ b/src/ui/components/native/Drawer.vue @@ -83,7 +83,8 @@ export default { const icons = { 'google-drive': 'mdi-google-drive', 'nextcloud-bookmarks': 'mdi-cloud', - 'webdav': 'mdi-folder-network' + 'webdav': 'mdi-folder-network', + 'git': 'mdi-source-repository' } return icons[type] }, From 441560f5ff404ec20b36cd899309d41ad2dd2268 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 21 May 2024 11:39:46 +0200 Subject: [PATCH 7/7] v5.1.4 Signed-off-by: Marcel Klehr --- CHANGELOG.md | 23 ++++++++++++++++------- android/app/build.gradle | 4 ++-- manifest.chrome.json | 2 +- manifest.firefox.json | 2 +- manifest.json | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 7 files changed, 24 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 38e6646094..08391dbe55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,16 +1,25 @@ # Changelog +## [5.1.4] - 2024-05-21 + +### Fixed + +* [native] fix(Drawer): Add icon for git profiles +* fix: Improve locking logic +* fix(BrowserController): Don't spam setIcon warnings +* fix(Account): call onSyncFail if onSyncStart fails + ## [5.1.3] - 2024-05-18 ### Fixed -[native] fix: set largeHeap to true on android + fix git settings -fix: Improve locking logic -fix(NextcloudBookmarks#getExistingBookmarks): Don't use search-by-url for javascript links -fix: Make Diff#inspect() output more readable -fix: Limit concurrency for reorderings -fix: Improve bulkImport performance by chunking -fix: Unhandled error "Receiving end does not exist" +* [native] fix: set largeHeap to true on android + fix git settings +* fix: Improve locking logic +* fix(NextcloudBookmarks#getExistingBookmarks): Don't use search-by-url for javascript links +* fix: Make Diff#inspect() output more readable +* fix: Limit concurrency for reorderings +* fix: Improve bulkImport performance by chunking +* fix: Unhandled error "Receiving end does not exist" ## [5.1.2] - 2024-05-14 diff --git a/android/app/build.gradle b/android/app/build.gradle index 3072f0e8f2..bcffdd588b 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "org.handmadeideas.floccus" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 5001003 - versionName "5.1.3" + versionCode 5001004 + versionName "5.1.4" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/manifest.chrome.json b/manifest.chrome.json index 16ff29ae12..af450dcec2 100644 --- a/manifest.chrome.json +++ b/manifest.chrome.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "floccus bookmarks sync", "short_name": "floccus", - "version": "5.1.4.1", + "version": "5.1.4.2", "description": "__MSG_DescriptionExtension__", "icons": { "48": "icons/logo.png", diff --git a/manifest.firefox.json b/manifest.firefox.json index 2707e5ac20..9d6e24e1b1 100644 --- a/manifest.firefox.json +++ b/manifest.firefox.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "floccus bookmarks sync", "short_name": "floccus", - "version": "5.1.4.1", + "version": "5.1.4.2", "description": "__MSG_DescriptionExtension__", "icons": { "48": "icons/logo.png", diff --git a/manifest.json b/manifest.json index 2707e5ac20..9d6e24e1b1 100644 --- a/manifest.json +++ b/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "floccus bookmarks sync", "short_name": "floccus", - "version": "5.1.4.1", + "version": "5.1.4.2", "description": "__MSG_DescriptionExtension__", "icons": { "48": "icons/logo.png", diff --git a/package-lock.json b/package-lock.json index 1f0dd1742e..ece7b2464b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "floccus", - "version": "5.1.4-alpha.2", + "version": "5.1.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "floccus", - "version": "5.1.4-alpha.2", + "version": "5.1.4", "license": "MPL-2.0", "dependencies": { "@byteowls/capacitor-oauth2": "5.x", diff --git a/package.json b/package.json index c6cdc731e9..2593ada862 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "floccus", - "version": "5.1.4-alpha.2", + "version": "5.1.4", "description": "Sync your bookmarks privately across browsers and devices", "scripts": { "build": "gulp",