From d45864888a6ffa5ed8883ebeb15bdc0a7c564a3d Mon Sep 17 00:00:00 2001 From: Laurent Cozic Date: Tue, 7 Jan 2025 23:18:54 +0000 Subject: [PATCH 01/30] Desktop release v3.2.8 --- packages/app-desktop/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app-desktop/package.json b/packages/app-desktop/package.json index 1b74568ddff..36ef2cccdcb 100644 --- a/packages/app-desktop/package.json +++ b/packages/app-desktop/package.json @@ -1,6 +1,6 @@ { "name": "@joplin/app-desktop", - "version": "3.2.7", + "version": "3.2.8", "description": "Joplin for Desktop", "main": "main.js", "private": true, From d3ea6fbe1de636a85fabfcba0609f9d28f6af254 Mon Sep 17 00:00:00 2001 From: Laurent Cozic Date: Tue, 7 Jan 2025 23:41:48 +0000 Subject: [PATCH 02/30] Android 3.2.5 --- packages/app-mobile/android/app/build.gradle | 4 ++-- readme/about/changelog/android.md | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/app-mobile/android/app/build.gradle b/packages/app-mobile/android/app/build.gradle index 85944326ed6..360d8b599f5 100644 --- a/packages/app-mobile/android/app/build.gradle +++ b/packages/app-mobile/android/app/build.gradle @@ -79,8 +79,8 @@ android { applicationId "net.cozic.joplin" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 2097760 - versionName "3.2.4" + versionCode 2097761 + versionName "3.2.5" ndk { abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64" } diff --git a/readme/about/changelog/android.md b/readme/about/changelog/android.md index 1d4c9eac613..54ce3390b08 100644 --- a/readme/about/changelog/android.md +++ b/readme/about/changelog/android.md @@ -1,5 +1,10 @@ # Joplin Android Changelog +## [android-v3.2.5](https://github.com/laurent22/joplin/releases/tag/android-v3.2.5) (Pre-release) - 2025-01-07T23:35:43Z + +- Improved: Allow re-downloading voice typing models on URL change and error (#11557 by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) +- Improved: Upgrade js-draw to 1.26.0 (#11589 by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) + ## [android-v3.2.4](https://github.com/laurent22/joplin/releases/tag/android-v3.2.4) (Pre-release) - 2025-01-06T12:50:23Z - New: Plugin API: Add support for the renderMarkup command (#11494 by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) From 2f71c40ceb38e0d1854135d43be53af1ec67c5ec Mon Sep 17 00:00:00 2001 From: Laurent Cozic Date: Tue, 7 Jan 2025 23:51:44 +0000 Subject: [PATCH 03/30] lock file --- packages/app-mobile/ios/Podfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/app-mobile/ios/Podfile.lock b/packages/app-mobile/ios/Podfile.lock index f4ef39d9211..235701c7b8f 100644 --- a/packages/app-mobile/ios/Podfile.lock +++ b/packages/app-mobile/ios/Podfile.lock @@ -1337,7 +1337,7 @@ PODS: - React-utils (= 0.74.1) - rn-fetch-blob (0.12.0): - React-Core - - RNCClipboard (1.14.1): + - RNCClipboard (1.14.2): - React-Core - RNCPushNotificationIOS (1.11.0): - React-Core @@ -1758,7 +1758,7 @@ SPEC CHECKSUMS: React-utils: 3285151c9d1e3a28a9586571fc81d521678c196d ReactCommon: f42444e384d82ab89184aed5d6f3142748b54768 rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba - RNCClipboard: 0a720adef5ec193aa0e3de24c3977222c7e52a37 + RNCClipboard: 5e503962f0719ace8f7fdfe9c60282b526305c85 RNCPushNotificationIOS: 64218f3c776c03d7408284a819b2abfda1834bc8 RNDateTimePicker: 40ffda97d071a98a10fdca4fa97e3977102ccd14 RNDeviceInfo: 59344c19152c4b2b32283005f9737c5c64b42fba From 4d216ef907550a88be7ce3506f10643b684a7652 Mon Sep 17 00:00:00 2001 From: Laurent Cozic Date: Tue, 7 Jan 2025 23:52:48 +0000 Subject: [PATCH 04/30] iOS 13.2.3 --- .../ios/Joplin.xcodeproj/project.pbxproj | 16 ++++++++-------- readme/about/changelog/ios.md | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/packages/app-mobile/ios/Joplin.xcodeproj/project.pbxproj b/packages/app-mobile/ios/Joplin.xcodeproj/project.pbxproj index b4302026c23..7033bbfb3a2 100644 --- a/packages/app-mobile/ios/Joplin.xcodeproj/project.pbxproj +++ b/packages/app-mobile/ios/Joplin.xcodeproj/project.pbxproj @@ -535,13 +535,13 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Joplin/Joplin.entitlements; - CURRENT_PROJECT_VERSION = 130; + CURRENT_PROJECT_VERSION = 131; DEVELOPMENT_TEAM = A9BXAFS6CT; ENABLE_BITCODE = NO; INFOPLIST_FILE = Joplin/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 13.2.2; + MARKETING_VERSION = 13.2.3; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -567,12 +567,12 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Joplin/Joplin.entitlements; - CURRENT_PROJECT_VERSION = 130; + CURRENT_PROJECT_VERSION = 131; DEVELOPMENT_TEAM = A9BXAFS6CT; INFOPLIST_FILE = Joplin/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 13.2.2; + MARKETING_VERSION = 13.2.3; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -758,14 +758,14 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 130; + CURRENT_PROJECT_VERSION = 131; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = A9BXAFS6CT; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = ShareExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 13.2.2; + MARKETING_VERSION = 13.2.3; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; OTHER_LDFLAGS = ( @@ -797,14 +797,14 @@ CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 130; + CURRENT_PROJECT_VERSION = 131; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = A9BXAFS6CT; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = ShareExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 13.2.2; + MARKETING_VERSION = 13.2.3; MTL_FAST_MATH = YES; OTHER_LDFLAGS = ( "$(inherited)", diff --git a/readme/about/changelog/ios.md b/readme/about/changelog/ios.md index 1864e190b21..4714724c494 100644 --- a/readme/about/changelog/ios.md +++ b/readme/about/changelog/ios.md @@ -1,5 +1,24 @@ # Joplin iOS Changelog +## [ios-v13.2.3](https://github.com/laurent22/joplin/releases/tag/ios-v13.2.3) - 2025-01-07T23:52:31Z + +- New: Plugin API: Add support for the renderMarkup command (#11494 by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) +- Improved: Accessibility: Improve sidemenu notebook list accessibility (#11556 by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) +- Improved: Add an accordion for disabled master keys on encryption screen (#11529) (#11486 by [@pedr](https://github.com/pedr)) +- Improved: Add iOS Dark Icon (#11460) (#11119 by [@itzTheMeow](https://github.com/itzTheMeow)) +- Improved: Add more options when long pressing the icon on mobile (#11517) (#10374) +- Improved: Display html notes using white theme (#11510) (#10609) +- Improved: Mark biometric lock feature as stable (955d39b) +- Improved: Plugin API: Implement the `toggleVisiblePanes` command (#11496 by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) +- Improved: Removed old hack that was making the note body move up and down (#11511) +- Improved: Updated packages @react-native-clipboard/clipboard (v1.14.2), @rollup/plugin-node-resolve (v15.2.4), adm-zip (v0.5.16) +- Improved: Upgrade js-draw to 1.26.0 (#11589 by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) +- Improved: Use real timers for sync operations (#11081) +- Fixed: Fix blank screen on bringing app from background (#11555) (#11544 by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) +- Fixed: Fix editor shows nothing when there are no selected note IDs (#11514) (#11264 by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) +- Fixed: Fix missing "Insert Time" button (#11542) (#11539 by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) +- Fixed: Locked out of mobile app due to broken fingerprint scanner (#10926) + ## [ios-v13.2.2](https://github.com/laurent22/joplin/releases/tag/ios-v13.2.2) - 2024-12-12T16:39:28Z - New: Accessibility: Add checked/unchecked accessibility information to the "sort notes by" dialog (#11411 by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) From edbb6137ea4d67e17d41be9ec77704b9f80cf444 Mon Sep 17 00:00:00 2001 From: Laurent Cozic Date: Wed, 8 Jan 2025 00:11:06 +0000 Subject: [PATCH 05/30] Revert "iOS: Resolves #11119: Add iOS Dark Icon (#11460)" This reverts commit dc445579da887d7a2761df3c418105f62bf6cf8d. Reason: Trying to fix error "Asset validation failed" --- Assets/JoplinLetterBlue.svg | 77 ---------- .../AppIcon.appiconset/Contents.json | 145 ++++++++++++++---- .../ios_marketing1024x1024.png | Bin .../ios_marketing_dark1024x1024.png | Bin 23443 -> 0 bytes .../AppIcon.appiconset/ipad_app76x76.png | Bin 0 -> 3682 bytes .../AppIcon.appiconset/ipad_app76x76@2x.png | Bin 0 -> 6661 bytes .../ipad_notification20x20.png | Bin 0 -> 973 bytes .../ipad_notification20x20@2x.png | Bin 0 -> 2174 bytes .../ipad_pro_app83.5x83.5@2x.png | Bin 0 -> 7192 bytes .../AppIcon.appiconset/ipad_settings29x29.png | Bin 0 -> 1483 bytes .../ipad_settings29x29@2x.png | Bin 0 -> 3120 bytes .../ipad_spotlight40x40.png | Bin 0 -> 2174 bytes .../ipad_spotlight40x40@2x.png | Bin 0 -> 3866 bytes .../AppIcon.appiconset/iphone_app60x60@2x.png | Bin 0 -> 5173 bytes .../AppIcon.appiconset/iphone_app60x60@3x.png | Bin 0 -> 8016 bytes .../iphone_notification20x20@2x.png | Bin 0 -> 2174 bytes .../iphone_notification20x20@3x.png | Bin 0 -> 3087 bytes .../iphone_settings29x29@2x.png | Bin 0 -> 3120 bytes .../iphone_settings29x29@3x.png | Bin 0 -> 4539 bytes .../iphone_spotlight40x40@2x.png | Bin 0 -> 3866 bytes .../iphone_spotlight40x40@3x.png | Bin 0 -> 5173 bytes packages/tools/generate-images.json | 5 +- packages/tools/generate-images.ts | 108 ++++++++++++- 23 files changed, 214 insertions(+), 121 deletions(-) delete mode 100644 Assets/JoplinLetterBlue.svg mode change 100644 => 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ios_marketing1024x1024.png delete mode 100644 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ios_marketing_dark1024x1024.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_app76x76.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_app76x76@2x.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_notification20x20.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_notification20x20@2x.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_pro_app83.5x83.5@2x.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_settings29x29.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_settings29x29@2x.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40@2x.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_app60x60@2x.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_app60x60@3x.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_notification20x20@2x.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_notification20x20@3x.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_settings29x29@2x.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_settings29x29@3x.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@2x.png create mode 100755 packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@3x.png diff --git a/Assets/JoplinLetterBlue.svg b/Assets/JoplinLetterBlue.svg deleted file mode 100644 index 02a9369957c..00000000000 --- a/Assets/JoplinLetterBlue.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/Contents.json b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/Contents.json index b4aeea0a7b5..523aa8211b7 100755 --- a/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,37 +1,116 @@ { - "images" : [ - { - "filename" : "ios_marketing1024x1024.png", - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "ios_marketing_dark1024x1024.png", - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" + "images": [ + { + "filename": "ios_marketing1024x1024.png", + "idiom": "ios-marketing", + "size": "1024x1024", + "scale": "1x" + }, + { + "filename": "iphone_notification20x20@2x.png", + "idiom": "iphone", + "size": "20x20", + "scale": "2x" + }, + { + "filename": "iphone_notification20x20@3x.png", + "idiom": "iphone", + "size": "20x20", + "scale": "3x" + }, + { + "filename": "iphone_settings29x29@2x.png", + "idiom": "iphone", + "size": "29x29", + "scale": "2x" + }, + { + "filename": "iphone_settings29x29@3x.png", + "idiom": "iphone", + "size": "29x29", + "scale": "3x" + }, + { + "filename": "iphone_spotlight40x40@2x.png", + "idiom": "iphone", + "size": "40x40", + "scale": "2x" + }, + { + "filename": "iphone_spotlight40x40@3x.png", + "idiom": "iphone", + "size": "40x40", + "scale": "3x" + }, + { + "filename": "iphone_app60x60@2x.png", + "idiom": "iphone", + "size": "60x60", + "scale": "2x" + }, + { + "filename": "iphone_app60x60@3x.png", + "idiom": "iphone", + "size": "60x60", + "scale": "3x" + }, + { + "filename": "ipad_notification20x20.png", + "idiom": "ipad", + "size": "20x20", + "scale": "1x" + }, + { + "filename": "ipad_notification20x20@2x.png", + "idiom": "ipad", + "size": "20x20", + "scale": "2x" + }, + { + "filename": "ipad_settings29x29.png", + "idiom": "ipad", + "size": "29x29", + "scale": "1x" + }, + { + "filename": "ipad_settings29x29@2x.png", + "idiom": "ipad", + "size": "29x29", + "scale": "2x" + }, + { + "filename": "ipad_spotlight40x40.png", + "idiom": "ipad", + "size": "40x40", + "scale": "1x" + }, + { + "filename": "ipad_spotlight40x40@2x.png", + "idiom": "ipad", + "size": "40x40", + "scale": "2x" + }, + { + "filename": "ipad_app76x76.png", + "idiom": "ipad", + "size": "76x76", + "scale": "1x" + }, + { + "filename": "ipad_app76x76@2x.png", + "idiom": "ipad", + "size": "76x76", + "scale": "2x" + }, + { + "filename": "ipad_pro_app83.5x83.5@2x.png", + "idiom": "ipad", + "size": "83.5x83.5", + "scale": "2x" } ], - "info" : { - "author" : "xcode", - "version" : 1 + "info": { + "version": 1, + "author": "xcode" } -} +} \ No newline at end of file diff --git a/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ios_marketing1024x1024.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ios_marketing1024x1024.png old mode 100644 new mode 100755 diff --git a/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ios_marketing_dark1024x1024.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ios_marketing_dark1024x1024.png deleted file mode 100644 index 543f02ed5a49565001422b987467c2e26395d5a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23443 zcmeIac{r8p`#AacBZmO$oQ^yDJ5y7603HDMv~0K zlCcshg-pv3GA@f^VOh_)pZB%w&-s17=Q`i(T<4#2uHU|{uFdYI?>S~~Uu=43%h5U4 zJs&RKwOwiQ&#n>aohSbMaX(Dnsw}pk1So;9idlz z$#Z%xg;VcZ)hg^Ih)t(^-bSa_eth1MI`6J&VQR~BS8by+9vl5iru$aM>Q;Am7}l-c zQ)t{^AKY~;{6g>8oeryxo2?!!7DS{!E!)=I*&KeU_t@=#-d~qAy5DScSrNQid@{H& z{$y}^=8o#~?O& z5vPjM9cd~snuYrC%;b#1&@Kv%OaGJKn7^CVm*c%NB_}e?=o3$mB=DuU!szAVaqz|` zO$iFR+Vlfr_<=t4;7XU22~DsE0i+CUd3cIY#3T&M z%cM(k6Kyq`x_bvc4?mhj^Q?53XSo#HTb4+8mPzyMp&Z+T=kjt$%4k6EzDRaqro9vX z_rIASx`br^&}i(JoEp5CW?Zi1keQch-XE8M zP#FR-O!db@Ach&Yga&a=0>Xv{@zq-bLY4;cd%6UR`!t9&2?%oVamvgqfx^GdFchSf!LhTc1^uQ_s?;E|Um|h6@eixCBJr5Qt(4 zh$TZHmP$Ze8UitFz+7pxswE(_X%J7EBp^o7AX=77K>SUE@RESwIMY}(OVxb1{lD0& z(URN#KT=)FYEV(gfVs%9G#zG`! zU$M&j=Fpldsy*2j-l@HqAZFPWl=v2nQ$nwX)~299+d#%?DdOIhUlxR3*pTf_5^AJB zrCd}$xTyP!_|l06J~K0_hFk#824%_JF+7L-D9`eB1i@alUvKY0we-m~Tiaz~!!nDi zZ6Z!57X4acK9KP%rD8ybuh8`1_~1<>zl1Sa+^+;yxLX-DuqGRtI@vW(@7rsjvB3Q% z&$4Yn@8gz}V|61s6G^kY>hAr?riB9Sg#@uZHr9}D^x$~wS4T6M;xjWcSfkdxT?1fZ z0nB&BKJsAOw0$Yhynk-d*8roGR###eVbu~n_N=yS$0YEnSL+#~b11#DJ9__$Akl&Q zi#@JYfCuQ@S<-H_@Djn7cQFPRORmcyo8DE;5R)EmrKeH?ft0Uyo+%A4uhvhC`l>&; z5Dv6ZL*WfFwXxkA%(O!%f&#|?at~sYBa0UNHn*AyFs8v#x#SDa;!g9Vr@*_bw+!d` zEU0-MpWb{PJcW4?OKfWFzPtC+{9cHZH4nEBUXLE7gwz0b>oin*6)h%CCSHY&E|&@4 zo62XkrFy{cGC4d^sK&ACWnHRHT43HM%*?o1T%`NkoHrZJ%oHHI7{?%0ah^)y4Gw{___Gg%QHN0#Sgrd6k zjD`!h#N&lx>puHO;-@q4(naL`NBG2|6Q2Rj4(o!9Z1Xq2%~xZZ-4Jk{SLN?XJOnHL zJAEhBumF6pf!Jfp$fj-XDex4ciC>pi>&f=}f&iILK(%k&FQ>jOkOr53e+Tae=K_Qk z8$`OI9xkxOas*sqZ9Clj&F^jM;A_c!0&Zso`kavTC%~Fl0(Y1V7==zmwLZOf-+rI$ z1Y|V1=>H^rJ9y>4vPoeJ_bS8fIz}`qDfYlt7&IU_usa^o+ zFBCA_7BHOMo5F1qH{dI56s}-DRe*n; zpKhE=#BUKj0cF~iheY3Z8uP}%rR)^DnYB}@Wt<^$K+ozJcXu@X)S=#AJ2Oqrx~mna zuxBC~!y`WJ^NXl}sA9X_LzeWdavX0h7m#+u+@#fj$y60=YZ=w^#vb%|hF|+sL)k3t z=|o9kcwG;?vaAyuEp!cgVq%&Hw%$}waz#Kn4IHqTM<*IyqF8crkWejD?MiTF^Eq9$rIcat(m@LMg zp@n+9pggnyff*xoXaSpUSJj~fFtLo%p@l5Gpg}LZpaMS}P!LOvv0cXDpd|RfzD%>8 zq78)*9VPz1_HwIChR_crjv^stnBYAP?eS7MCl_6ME)Q((+jFvw(T4-W6$|PPLD)OaJqjLk@Az(p(7AY8tfQV%+ z#HZD-aV~ZgTRLo(0#P1U*7>I#wRb$eGjHh5N8sQ-I)XOA3%X)up46)fOxi2osGa_? zhwP%7FIM#?uY`wFslc2;r>5*nRP?1mXF%++)Nc$r#wVuIH+&{!PAATFxM1=v1(uQm z^2N}l@!56g)X=3dk8{uk`qD!--RuI*KN-r-=`I&5k7SQq$Me9zrfqSV_dhdkD26F5 zT&*t$=5WmaaK|;KbmD*$-g1x5x+J=p{New?A4JrVg4yg8Zfhgp2CjlUS5K+=e{~RW zhuLlHz07zT1t9k=gd6=k6-v1ia1kUxF$3cz~5s{oR8PoYhHC3X(ML$vya7p4s@ zV1rO3V36tU_~;`zq4Nx;>DCAm{C~15|6zpC&se|Sgi0)$FDTLczxNDzt5edO@gd9l zF|%kj_%9wtSFmgC*+XQ8Tg1l_d$GJRc_f=dzk;jtimhuU`6s@qR>BlEga3#t}Dm?+H$bE zT>pDTxnW=Wmyip+MVyj_*U8=GOZz@&X^UEe{W<8=FP?WBFHBf-A4T*QqM}ix?*_-B z?BpFq!t(eC0dwK;2!n)|wr!CYeJ2*p>lv5O&!w_g^njLB?Jt%47R5Q;_Hud3>QXlI zEp7_+iX2()rHz)YA8g8GvK(8(7M$lW$Gk<`EqPxLNa|k(Z>KU;{QUGqcgL@L`|{9S z;abNcA z5j}nlS#Y?_yqcl$+iZ371=M1GDzm2b(Dbr{Ew_a`?Yo6?@ZCXRFDl4zp z64AlA(S}8eb|spO-5x;+3BB7=lhasURskXf|L#YMeFM)%iC*NQ`fWwR>qU(*GLIr+ zZif`qGsl`M9jN-E=hr7P9lzf@pV7v7k&E%`pzt#p3FX7e>OG!o9MMRkKgsVUlbRkI8_Lu+S_2#xEx%$=VqcmJnG_Ajgip;(?9LDW8d zYGfvtRx<|U73(y{H|2J&9MpgiyJ&Ss0NPuJ5^cMM#|$_MSs5u=MWy<`gW~%lq`^X1Fx9`o90{e+Xj zsmZULn(W2*w>g0pCDC?qp0adI9NB+!#_NQ0HRy!U6OB5<6h$r*bGm$@yo5GT=myF#aT5m}{VhLggihFlW7D2XEhu+zLH|mKiiHhO;E+UO6V>G6z z%gQ4OZ0lG3BO`4s*KUa(cW5x7wyD%%yq|z~ML-^r{i&XoP^Q$glE?_m?g9OjeyxAkk5FvR&GVmYiBw(H{Swys7q`foMxM zx>~&4>uSYo5oP4HITgJrfJ646F#HgLmd#*6+0T) zI!!mufBDQ08-HveO^h;G_GXqkP3Pp%N%_I^oJnE`3rfAbK&<}WrB8W`x=^B8ybH`R zd+j$?CqMeYWNDITu@M&-N3z!s8@ctiuS9Qp#LWpeM?Owa)9Moz&=YqqPb8OVE8+^WF*aN$Fn~{ZfKV*uVcA9wty3NM`^4~m^+wFc zmGEdskgyg#2t!`vp~{wg7Ox4kmZEzY3GH4QjMx6vf9YYaYG4>AG$c|DXd#gOdzsWMeccb0BhY{$6MZ7N0%V zAeP&8O|cv8+Dg5JtHarb@YVsU)}|?Q(RW~fmaQn-i63pG1$fK>;EI?cbTY(VYeN=t zmo0WZDF2JKOO?6|E+`BBO_A)jw-4$?+pFH18bu?DmGU15tH}<^C2zM&%^R#p*lj$m z5SL2yAjx9eQ8EOABfpKsRceSc^Mz|D-sGnLLSb+W%u=zEMh^jd)UeGaSG_w zU3eCY;K~3rMaET(`Gn|02 zZ<-6(=hIPDj~QW$iS+fB;ZtAhqgKKKglhv$xGbMPoPIv!-S!=bn3#!lg2&))gsTc% zVA`+}G$(XgqSGI6Y>kC?>o8g;9ot_{%3=*N`Y6d~npLUkMgiT8@}d`g!fXx#DW?fck@ zkw=}pK46JvLa`u9Nya1%JMJVP1eDvJq>+uwXJm30K?osa_+f#@arKs5RA)x8I5^Ti zyxe2Qz)d~1+HP?$kWg1_4*I}eg(WtYme_3ZJJMAik;X@{9O;TVP`qca!XB*{0w_lU z2W&31u+`{M*tUQqZ9fm@&em8Qwy44$UI@~h{;Iti{xMN z^RO%^Ry7S~S&F^aJ<$MKfoXz>j4g}r6DDLH$50AaLWyzhLsFE8RR`{L2m^vD_>gKS zUj330UNkyb#D}6AP=o>e9EAnegStzAN$X7u-SIA5bBu+?R@i))!lIr$L?pJwZ^l?` zJU$r9(9jz6rtb0+YXwz1ph^VnzxL{F_jC;4;~JJS`V6|H`5126ME6>jJ8(}tu0PA_ zrx;R-DW!swfB}jhlN|c)a6gKi0*)rC<-Jt@!lVfP1``1`c#3&Ib&a z0=e*{U%6&NoN93OZC5cEj*S%dBw(*aH2^TLcQ(D~h>jk8T8wK`Ipk8j9Y@5J#n>KR zQvFAauVceeYViat?rj`C_?%GV$uSCHZLFbxQ8}VU?`*bV9?qwzE!aqH$7G;l(R(3z zVq14gTw0;l!k#wlh`!AmUl@P(6?ZGeW?awNN%i5dK0Ybb8_D1QJ>KnT7?7@xn+|9^ zIgD}SCQDg=gbS)HU@Sb_8%I&6ACf=o3o;q!R!j1Loi^>2^N!2talj9NWt~YCfY>kr z02pE+G*!K8xbo~EgTkvANAF@?nKH|CH|5-`;MiBL||VjGD35)13g&%tcAx0EZuDmZ+`h zeDr`f6a&E`;fC5yu+5N+Wx6&W2cxCQEIF{UyM9Ioe=>Cq+~@m7r3JdP@ik1+>qzIG z<{2HmU=DS~#gOu`AN@yGX2w#56p#JU(AL>~gYY9-NKxw-P)qYP7Q{sqkZm8szZx&@ z9!1^K26B7NM!ZP1vrHD96>3oWp}!4l02S|22K>iko_@Rkfvq)Y%r3;p|&jep`i1 zgV4&|U@+KQ9Qe;uHD$%U6b*v#D_F!S7MRS4Wr=j7#|Mi;=~Ya>015p}W@PCOI##Ue zwx_Yex|4}%kDc_Dzksu=sk`KY*EU%%v8I~&f5_bAjK50v47e^>Y2IQ%L>3B!HwdWa zMC{2b;&&gV&%^}#3+xwF@nEmbW%Ozs9(1K4L$;Q&bQs%`IOfXY86eWaBHSx-pnXGa zl3N+b;xr?%Epu9RKe~s7m7$7-^$?{{6M;!3t65n;nrmO8EDCTNQ25>l>MrIW1)hor z`+ITOI){wMijyNzoOfq>#2+uE9<&%sJGZKX39>VInRfGV zz#w)>5Ez2WY0d_6P_IK^R&U&omQcV~)N>Q8W-E8u}UgK8Z7#eZB6p5D%#Z5)Ymgm7= z-dj`M&*;9Bx4NIQzC}kcaGXQ7<)PUL&?sW(cBYQI9(n$h24zodDfNnwL zIc3)AH2urVWs3)U?({NI!q&~=@l&whzHZH-wt%$>U`htCn+~95050=zmnGR?L$SyQi*g-iKU!yd z6AB8O!g{LThsO7s(~hi356)GhWKx4lb*_Any2m{cPC?~js8mZH%2?Qx+s8g;wfv?5 zW3~R90<4{jGQYc|Kv?`RyK-}FEJ~nERQJE)&iIR>mWje9YT}6#22)8%L?9*+taHl1g;L z!TO{YQ3V4m46X7^I#8pGC&lgoY0ky9s9Cd8ig{e&n&`!(?ThQ{A!N|=p^Sj@3 zxY?|zG;UY)f4(uCQhn7H56st<*F}buLSu6$95#1qoNCXO#}JY@TTD?xh3jN+=(bGOxWht zQRP4^NKY029*7-2A72Z=f#9yS;MrLQ^wVAppD;)?iDoQ`xRQ)`YH<0De zRo*7_=8Q$vBC<+3t4OVuzx5o4Hy-uZz5tQ7o=V9kxY~Q$6N<#SI7^Q(E6M(jDSiF|}B zC;1tFvIDtzLe0FO?4~K0O5F`4X9D+)c1*1{iauW4^(#|TP8#e{+hQ{ z&HJEAE}N4rL;^#t8KPE5;x;8r)aN;v@sS2RyDZ2 zwDKmO{K>bq&pP6&B2^f!F(R|baqT-^c*t;2#r+Bb6NYW$<509UTpQd?Rvu~FXCnM4 z-jm7nxRIQ%`=QN$ocZVlK9{VEs~6UaYy&#wTCmTaPkF)BV5=Uk0XxP3*03stx;*uR zWu;c-ubbM8s(G=7EaL~B^_{JmrX!6%RW3QO4aW~=(Ej74V|~G{&aJfEa^5+q8tm;< z7l^q^eif+t@#Prh1`+JWcXe+tD zo?Eust6emPUs)1x=8cWec5Ny-%Sg?ce*&L1r0eDVk9$F*I2VNqoNfgH`TI_O{`0DWey+h{ zqsg7(&ToJ74F44AjwL`y-jNQJFVqJx1fiAi*rPEIM9F-e=sZstY6c?itYgt*yI#d+ z|B8-gyXwVn_iykRIpA$i1+R+PuzPE(lnk>!*f|` z4c}ul6!(&@&WneVUBR9b|IYzFIXCjj4UlR!}x{PY{~V#=d7LBz+@b7<`|8c<>O2QL7Tl>9`t3 zwfiSh6JhvbhfAQ&`2aZX=GBHCsQ2YjHmj#zflxlqeG6V2j{}i5=ZNTh-k^rO zOh%uR1|{YRI5PSH^-&M-Zk)X$k6@pdWvhFxJE{N2@-l_$eWP7`u@gU1NB$~&9C5WN z#gi%q@X~)t)zn$WLrjqI`leST57$eU1`h^Te@^w}yH>3lOK1;Q4P4|;Q`fK|Yni3* zw%F%K#8w#?P$4T9)NO8dPak?}2^(??ANyCPbQkJ@1ZZIUlAAEd zYxO5zou&PBx@>1iD`>p+zWv@h(bNk(5u-fS^OthfvY|t?;j)STS12Tn1PqjmVw@7j zZlf#?_LrKY9;G)I0VOodMZuy6s{e7ee|EZ*wHHoquI7=Y@2YLbb{uFv_tu3X6IQz& zg)I@r7C@pW^$ed5^fsh0jnRQ$VCQ?_${pFvK^zStp3DJ`IFyv@|MmioJ_thorpUW; z(G#3P!pICZ&ac{vkoj+rat(WtN05`w*uwBO_ch^g6sLfSgZvvvF~SuE)5&O|)dPi_ zt9ryw!badxLlOtB1hHVxQ_|}Xz-ANlgmOqOe>c6qo!Xx-xb!w<_c=uzY?I3bjAZ_c zj{Ccurcg@yJs3F`CjM+}#i~80UB*IpB2fFHki#gjn#pb6y#`M~LGxUJDP;#Ijm{T} z$c6;4lEGTytOv+DRj5EkzLiwpbZ<5Bi7{vlR}ED~-H~ywKgKytnuTjE2XfGTsTwXm zC0EM2g$WRtP9o(LQ>PPQnzdK~7KyPHUSKBQg@bw+D+y!{?(w@`Av+2OszV`;du?}l ztqy_HHqukTSk)YhuGC#6hU!!#Tse+qVG_&B<@4+#{iNrp{iW;j+wIgN(NRmE*7c=yVmf2 zD?rjQ81?0${OA+cskD+x;9ebgRQ=Q()Q{;XN;ny`W%6iO?WE0A>4Y-%5aJ3if?zGr zMF(PHMaBv8IPs(dg3sfK>lVQ1(g{F3YH(=-6^rMfB~0m4`N$27(zJup25uYx5C;=B z?Z`?UoyVyuop;{2cqVos4PcCn$(}ylDy@G5_4O~^^1lXx!bQ&(D{}}H-#|-QB|4*S zRwEL8zGLI@ZMB%;f@3HEZ?>nerX@BQewc%uw!% zouG?DYxsVMWym-IzZ*eK$NBqlN!7yt6hnG3PR3vnMr%$*s>;H30oOgfO6)LHj1S*s zEae;rXMcmj9I?1-hrawjF{=teIBaRFy7iAV3l6T6lnYtS(>;GsQ%8yq@#y7kst69H znZqGaD?ZA{ah%*Bn znqN zH6cZ|Sux`#;`788CL8-8$DjDZMxO5p%67k*)iwgFcoojf&=V6W8 zbR&LCIzFJh9(}SP!p;p;&IuT~6* zQw7{pD?0i{B#iop`dEX}NOTseA{=Fnjw2^#2ywxc*)d8(M);yaHlNDc8I4Ib8v(!V z0Zn1pHbgg`Z1a8iHECd<)1l9Sv=m%K1-l@4k+lM^$00`(P+^LZ%4!o*%5tYCSN2FEzV@Ye2YS zI&1A+KD^Di7VDC@WA8w-Mdf^hm|bynj6+G1Qks0{OngMA5hA-j=q{MXWh0D-y#6boSBh(KOt$~ ztB=@hQz9J)(;{5#>vux;Ys(av-!5qXn{Ennj0m4x;7ACAI2nwtVNAfGe>X@igg2;I z1xI?>kKP=5z0yZD;{m?w6g0-RNPoY#$CRqYbTfpa)(mm9OeM~XPYOt(6_KUkoC3{| zA+goG-%I#lsh(R;3Ty~(b%*lA);=c{BWPkB$txXl18#qo8}(qPG&2b08IN`jQXLtb zaH8rZ59{%VZhPQrK=!kaX1%ODVmziP9yfj*l*Mw+uX!R>b4`s0=>=A@uUqpQ1-SP1 z;4<>}kUH6xWP|7Kou*Frl&&#^OJK9pKaN;!Lt>1-!f3=8DaMbGx3yB%c^*J(93{9} zv`l4Ui+8E%bEA$sdJ{IXTPCB24}JzSzeS%ocI(*q7^=!2b2rF4(}Gx+ zcnshGE~Rpxbr-5K8oFSree_!r*H2xtQ7xpQYxIMR9Q{fQaQ6%6DWgZSV{mz`{vv|0 zx}up|ReMr1kI&4L$>_$KAg=5*cTyk}pYG`W5eN^07m9=L-fxbNh?%2**=SY$wFB`J1P|T@j0Cwz zltT1;T<+H9d0o}CV z3*kPaDCR=tf%}v5a9+hI6q3he%VHnkuOjq=Q}=obE*D`BxC@wOp1hhcnGw-TT=HE5 z=Oosnck-_e{WPyyHM-AJ+IkZ_n@{=8?3KhNCU(pd1gLDPS6G;7PeJ$_hpHYNtkT~) znfMe|8u;vn8FW*4W=Uyx2%0;eqo~Bz<1y{davvq-q zob@7&-+!_{v_yrsJ8AfTG!~PsN%WggPS+P*P?d$5mpI2?TELa-7tu`HtO(WANmte$ zWfF;lxbd?`4b{FdK>h0a@7FQ))vGXc3yb7l!5Wpyxw= zfw!Z|eD9sg>4}>1-PF(`&R^u6M(Z9a*@r< zjCBRA9%+SJXN}2Zp#dyRvjP58}BXfnUj{S}^na#A7`Q+D*0MdNTQSjcFp+|^b#IMZq7IGt?EQ&Kew7{0NX zb<1#2be!jQfncwvjM$7^+&$!O0~6F1vDeeHui0r)T`+vnE&={CIC+lSh5^^%(_-s$jZgbzP|A@4YS;Qe+j4r z<#X%7=l*oR4oFYd4|c-mRfF6m$h1{|hf%(y+siUa(Qz#Bjeth*ar%N_jfG|#Q~^8H=40>lEn#T!(J zYR{}ZtGUEIr`@bu2a3y=_g?{e+GFJyj5?pG=o}ID$NebIAg`KA+QHcC5D95{L2$gEhszBQ%LCeeQ6`Cc@MJ5Q_30lT?gJi&i5F+A1u55`L0$cam+5|suQ@Xrj$n-l!jIPYIH5*Ky$dA~0&SB~Wh4s@v?XwR{ zOYuC`VfPaW5d$vF7qgD|2#L7hVE7Ye{Vv1iD2@#5w>RRU=)%}R5 z3r9LybqX|OrfPG<)t6BQ(BDp%cXmzzETD3o7j(b5O6^Pvvu-r&ThZXwgCMf#a5k!x z&bag1dmQmerH~x_=vs7&Li@K0Lg$Ir^WXS`X;|OT?#%T_jr+uoZW)v^!KObh3D}>7ln*?C~(c#qeXmr6>*|K zIilLL{Vk5iSr>qp`Wc^v0u93z+bRkzn_kN#7%eYO=&rY&i07q>^5^b6*mO~rn6^K4 zWG4FWXIg_Lt)>IxY8UK{-?MvNwwUHI;*^(hkM4XQJzX4k|l zdDVJVD9CLy`Q7AD8ZeN(_8jVQ)ysKbEllNci%juI9fLR1VlMZSKkN>=Sz34iEGbO3 z2?Erlm={Kz=51z`d&Z>X7+o}f)^O2+8}fazr*nEH&hY!x1$|t@1=7;Q=I*r7&NVi0 z!9b)v{k+YL8ok@69rzy(#}!-6Tv`88d^`R9a@Shs-Mct!I9QL$2GC6YiOOmiYDsdRl&%HgLJrG zzl|Yg6(o(ZZVac6F18x`#4jaYMUgq7>`Jx4;8>4qKN5QfVpSjS{_CP4=}#a4t%bDL(t4At4`!x$k%$8u)znlj(UJeHu56cY5v!WV#9tdQimY!9Bh+L zgsw3RZMh4`f0PVm)B`jaoOX_vce|`;XH5U#<}*(1=B!&@n~$|~7sdDRrpxuO7M}f# z)50_02DkU=laLhcZ#2m$e5r>O2_y@MyQ)93x|OK)HwxBztrL@mPFsw|*|h2svCW&_8@vvd3}KSL*R$Xw3lti@A2JYg zP93T#EL*buLe6Og+dvD}1&skc)yD^Kw}<&0bgv1CEQ!c0s`!Uj^YcSFSHGAc$ZxLu zVIn(FQTJ4wrzNyaZ|Y3fn+inN-!9Uq5Hr0_bD=-<^1)s!rD*BtkZ&#5#rL8i=!sz-tgSehfE$NEGmWyo$(DC=3ZAKMjPPh2+y73gwN7_BBQwd|j*XGCONm?9PRojX7G z&wrtRu4m+)o^^Y5UfX!WxoeM9wd7pj*(p&`eD95tJKv;;h>YTcTz%CPB7N4shdYTv z`J27W=EbfeGOoX4eMev92eSUX(t{inlZ8I8mf{hYNYVU^3JKbv5SP&TE`K%UTkoZa zZQq>jJ=Y6w{Y%Tm0`gdD=`6tLP9g6Nzb-(4pr$ZHD^)G=n1-3h9X}K;IU_^dJuO;3 zz;vsOl=>HVzfTv_P{h|Ls3Zv6`!@Mv#=pB;SBfoGH#}%w-Vk~#PKvk|Yp9?(MQY=J zY`%m}^)sJ{&WuteG;c?C6D#sOae01-PvJRado#M&@tL#OQik|=T@>OQ-B$UUkH3+o z-(oTZjNV`9!BKmHeMG8I=3g;roh5eEM$vmM#4dWv2$Q9#NoxJAU`lzZ^Uc(et2xRi z9Z!rT_G;d~e>?E7b_PkAO?rJQS~5Q2rTW01dU`~LbW7?{-lG`#P8`$IM|0N;@WrDG z-VsEgCfAe1Db>)@ECKV0QDwEISIBo2!usmTW7TNk^S!0P;?-nI?l=!sC-Wrs=dkmShe@{;WHV*=7@Lr?-9h4b;>L? zbB|-?`a>gJ0D|KtQl8KJBRRMD=pOjv4mWv1|1qod`DxUwJf#ARZf(@?pgnD7^y23L zKdD>4J;i`)&&N)lmIXBR*Z}9a&JBj$iV^Tl{PzNH-S@0=4~ew^y+QMqqa-Bt(=q-{yR^E;M0}U9*y(uCG*O`RL zL|y6i);LkaW;2Hj%p>oMj9s+|li1dBKd0$qPvJ2N3e%7vq^oW9=KGg%m zw&&$!BzVtVm+w8FVXp<)%+As~u2hYi02G0FOJRHfnQ`r(H(-dNUYk>a-JH@Gm!bm6sjV}`6{8lQ)m zH32zNmOf`Q9b!L%&*$$e8uR7MX`!t zr{=42MtwY9=_}D2lyjHh{X_w2Q z41HRlz#{mH^5PL=Ni6g;62L(-^!1kw;%YDTg6;1g$TzNP*U`yPN-iJK>QvCAzl|sH zg=j1m$7(E&-(?B*!~2CJ$_#vW4)F=iV-4_*ieVyUMnhC}_np1+iPYyI02*C)8X&Ll zlYz17kZE_lj%N2tydavGLpIwT8{j#_!^V|kLqqaf36^nlq%@5%cSAilE#+j~W@&=` z_`2F1zYVg;Nxc;+^*Zo3d z?Xzge1i@S&$g8168tPi=aRR2Jx3#*S&M6xwagF+$M8QXP?}_NZrF&b=Qtm*KQhf@o z*xW(|(Lnu=t}iD%j)SJCLc-bTE;Du;8uFc``$UYyf3|yutHPgL`}kl>O#d(WUqkv! zT4j?S&4E}E5)A<{>Gujd$=Qedar+u*!aZp&HsfsZGHXhjiC0sstM(e}C$?HCb>L(b zE=GO^!4Yk;^sskqzqi8!Ou*jtKpEvDa?h_1!RQ1Sa(gCy&^_4%e}?GM7f8eR%9c&2 zm!d_JgM_*oLE4CaaUq(ge*o^@Qhz0*ttLw0ZkMAJ4Fk;*@JcL_QeJKs|K$OH_wPxb zKRf7~navFAAtP0Eq5^5-a4ZpAok@7U!Zz+I!|iF*H#U$}=s>`AzTE4BW#tC=LrPbV zshQ`MN>|@dEBlRWMQ{dVpC~T`kxu+5qlyCP#a$a|tZ|P~D5p~926b9&thoB({NA|U zkU(QT2-a3DtGhlf?$!=NDuSSoa)rx%|57dKliCExkG8uzJM5D6q`WaNS)jr1M zJnttM4R@p8ypR{F`6)@zVADRiMs{5kS*mJ-J80lj-e4X~6tlLxd}>r&1?FYbHaAm~ z$K)P!*yIE- zc8a(Zdm|69z1Dvo8JNRSe(Sq#fvgYoh(IV`;jujaw%$v}CWB4NxVDlkF1)rZN5Nl*AQ>_t0vOiUZJEPo_63>8CRTtXRxRe!DC3TX^pr+q>vE$3^4)7Kx-OYFG&3d<{uh0^6 zUaQVg0K>*}00HUcO|C^DICjwo({^w6$rl<7^oFT~dwNRs-0j8_7#*9GKUm=!**67{ zf)^)Ux^kcp;jNWHwL13Iaoz8b-uFdv?P-r}lRm(O)T12-l9KAO|BBJ8sZwgevzHR<<6#*`G9gPe{q;eiG6xU!7i^O`i081X&i zvTu6j*DVcC+Ewh^|PljXkB+O)S2e zujdI*`=mfj`OVw~S8#QpZS35QsjT1;r&$5$@nw{yG$?10b`$zdTpf?Un&&NotFuFv zd2c(uMzc!aSTRtFoXY4Zc)>B4C01P_R>-mKpL1Ar$dc8tYqN`KB%>Z$ptH0McfRT= zH@OrPquIGT@%YUJYQiOeb7fh&BXE45Y33!J6)&qAwS1mD~@D??mdPZ(Iy0u}4r4R&d z)1Btxvrm^>6m5B_LGE)O6z)T)U%bXnW#a_h!H-IV+5_HcT<|~Ra6CJj6~rVTt*9$SQ@Q+fm0pffwW)@0TW_{X zns(aJHXT=+_A=#q&aRm)c@~bjPM4WH6|NskBu?1)gF7Sk=nGwOf?rzv25!%<^t6<& zwsJBSVV2!9o-$>(yc_)VzyJH+6!`BcU}uEJjCmy9FSvTEIvG3B+b+^GrJJWTu&R(k9a{Nz+NE z(`F`V;@F8zY`_>Wi;%>Q!NyA#$8qc=4sqJ1cG79TBcj-nJKy8F@Aw_0x5tr=-QI-jty`OpjzMjNdh;gI8>1WF7)f}2B;mDTLPv(; z4-X<88i0yB*pF1v2Nipu7iqr(DyG~XQ)WZjXN8iNTI3~Wq+(MvRFM&>&=6J7gOuM5 zCClrQ<>>*A_YetQ074wkm+(GzgrkVi4H*v!kFX<@vmunJ-H@0KXBpUV@&Q`Hx5rlr zF-SVXAx4BaBsC!p=}Rb6bpq~QdSd+u4|@?FTxUWlgd`(;kcM!=Cl1|^%n1`#2?rSw zmf7eDF-Si`sZs}4@lLUg!#k|w(7n>I@KPpmNNz(&=nF~irT71+?IakZ*`TFFHa7CXPT?B%wIJ_&8^CWYxat1?h1T2dTWM|VdkoF=80pra8rP)jR_@=uixVUAv2;7zCxK&T)Hy&%`OF7?ib?u8UCGZAHdzdb#| z*^(~IlFwE;1Oy~i9C`>NvRVOYT^iU+z2k6 zTc$qIOns@FnO<<>BxHo}HM{6Mr<*)eKmKXMolhF>JbKs|o}-hg8QBmLB1o2X=~$3; zX>^$*yvVkp&>CK3<*ChE&I~PMYo^N;m=L}a&-8=6I=G@jFNHRgr(b!8klfRT^hIFj#Q4SHesHr$uSQ}R@Ou(enB@lFH&~Fln7Uv=sZ1?jIo#Egkl7_ zPIW0sf7nmaAHt$EEZhU3@P)P&XWS@o0DTg=|rxS!C1W8tx zk`V?Mhu%|+*bpFuVoQByZ81d#*yGbcT4%)B?VN203ByzB z0K05KM;Lzq&D!K;Hc2t6W`ucWq1q%=8IhER@H~U8aCO!eQ`iIB-&)HI4P+M6d>D|> z4Y?k17+(QxXb&&63iGYdOMi2+f7{vNoX>BTo*OGYKbHH&=qqOjpFHVEC^g9nh-o5% z%y1iv#AU(uUT(F=PES*h*0kB84TO`6A+=9dB&+?TqiBl3Hq zv4LVtVK*N_nyDb`A!H^FNuLh`5^g|{M}zWGh!^lZ@{dhaN%bWp(wAn@H4eRWujd#w}k6+MF^^Y&Xi>A?eyg7u5Qg(!-wbDSECc{!2 zCD=+MqRWSVUW$}h6`EKDSoMbq2ke48%kio^6lTOPf7UwjtD_dUkcQ{#Hz+zIl%1Q3 zyLO)GJ$89irqo3$P=6Su)Q0R~0@)y8Zo@T%1Y|q|FGVW1L&-|4*Da*J>cob`mDk64 zS$eUmE4rXNIv?f3D77AXsUTAunyK}4z)`snvZcl}MFY9JL7c`YANqP}6#=>9DqwzM z2ogq>S~nlEk4&xvoO$E-X&qaX7xqM`yVmZmMX7W$rF+(fAlpG|Gc{x_f~*&_k3$b3 z2FZ9%6I*VJEVlgor~@y)*FxgA^|v}`#!gs#)9xS26m9g7#>vo>dND>A9ykuKlXxk@ z3*CMN3eXXH54>%XBFhu+^e(MXK^{0i$|u`D^qoY>a@xRdO^uNbGWmv>Iv;x5&>e>! zLJX4eoF=x+Dk(HScFchn0A!GFT)GJ|JDBVrBFL1c8sj7dWQ}10LW)u;;;@>;O9?{Z zE8hXS6GN-BHux?rGXLbTb#mTG0eP-tl63#jcZwm)Zl#AbLdZH1bsYMcamT8oLP7-T zy_UxLuBAQ$#ZpU5sX4mXoUqT_GqT`WNY`$6-2xV%TK(8*LZdr#8r7LeRXYe``e zgrp$6MolPu`9FZwG%>c+6sj`(TRVx>E*j#2Lt>d&$rzUNxUvfVU!O85(>6m1_84L`RPkEEDg==hE*F?WrtmN++KX< z9TP}x5ofhUDcYkHZPM)4$gCD9SyoF_b~D&<W`FHNrg_!S1GzT@B#X z`qVSl#bwfi5%@2a{E-1dic?7IQgRy-go3S?K)`H4eS#LBm;OuhJ%urGXU13H(aEL1 zR^NQ7()`##{m)7|ez9M-<&^R3wsF+QxTwx0%`B`utZw2ZR);5%)}`M0(9cV8LIRTQ zNp@IviV zRXScq`v+BHggx)B!wdg6Bi}D>&TRy1-4xkBf{$72{A~nPn3B2L#aY5S88F>f3!k>rF#<3duUUHnFHgaJ)(XX zn}7O9JJ@VX(z5I0YeVrFHz1+6mxcyoLyXW3$?1ubwUxINKPH^iD9+Gqtu%erIzBPCOm)%| z`{4HU(wXYv$IDw`5DIr(3ty)=YAi3RvdN(0zY2VSn>?W_}})=SeHqB9y~Y4xxP<|SSSTdJV-_=(lx z<_nJ z;qIj#ycf>ngl@?HotKjCTX3#Rscne#{5kOdABW#k6NccBboo$wZ{o1}p2nev5J3iI z!yic;QWD~jobzE5>o_FMhga4m9|j~0dG71~0;DQqA#u6-=l}o!07*qoM6N<$g7o9( Ar~m)} literal 0 HcmV?d00001 diff --git a/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_app76x76@2x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_app76x76@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..bae6a354aeee23f4f4c7a89dc543e2a18f820e3e GIT binary patch literal 6661 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 P00000NkvXXu0mjf7}DC5 literal 0 HcmV?d00001 diff --git a/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_notification20x20.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_notification20x20.png new file mode 100755 index 0000000000000000000000000000000000000000..5c818e8470ef658cf9d3ef513e64e7fc17d1f363 GIT binary patch literal 973 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 AYybcN literal 0 HcmV?d00001 diff --git a/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_pro_app83.5x83.5@2x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_pro_app83.5x83.5@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..9ea41ab0a1788302336fea1feea91b9c9878c84c GIT binary patch literal 7192 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 literal 0 HcmV?d00001 diff --git a/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_settings29x29@2x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_settings29x29@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..bed468976e4f83ff1f08aa407f02487b440261f9 GIT binary patch literal 3120 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 KMNUMnLSTaOQ~D7A literal 0 HcmV?d00001 diff --git a/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40.png new file mode 100755 index 0000000000000000000000000000000000000000..c4b9e4c9e18e9539313eed04a71458a4d9314364 GIT binary patch literal 2174 zcmV-^2!Z#BP)(;sy6czEq~)u zUWDttKfOZh%a^jN^Rh4IWS`F-xH5B~aysDhRKTT4X~l%Jd|Z0b?0>=JUuN_xHTae2 zB}HSBLalGXsBgZ;Cr|B@s}koZ#n~gkrPi!L6_M4eP<4@5y|#eK_b};F5gC9Wy=M|!J!(f-X7PLE7x(XLng|X6A7^|K!R-YU~6`dUd@2tK=878Z;$|>39 zNm<3jfr{}1<>r8krhp4ZX_-M8Z)8oUei+&mpOcZ`#xy`M-HzqD_NDsvr8{klA5`l2=as&M3X@Ez!i)hx zRlj0VuTnECDx3KA&6&5Gww;|F8+svq;dkKcCpAW|Oogv&YYA15-Vgq-SaIdReHE9Q ze_1{C>dm%g+qS-G+p_N1mkqD=O)Gr!jm7rcD!o_6ux~bTpoCd+VJ1=qX?=jG9J?BL zeR0n-Tse(Yd*#5RBrG-ms%C1I| z!cjSX7fivI&EbEYJ@NHSgK7;k&e!K-YoFDdPt==&3YGkxi;4Jugoi zc5jl%umg_!dYqj;M&hovPtSg*(GC$Q>-V;`DXDRSR) zWHq&ypVGs(tGqLvVE@V?)CvYwQmm5}YrW2^kKP@p!VgTW4ZX zBYNj(gt;33LJd1h8G45bN8dBJCH9G7$>M!=ZmmP*#K-xGgtq!%f>(6 zoy`2lT;9Lt(!QDbO_foSuV!Z|LT?)>a8$h>obDB8^rKiEr^%tVLzNr%959_>k_x;3 zp{wTFw&khit=&ggH*X0p(YU7#Gs6izqO?6#&Z$3&%NF`9*oukP zzq7OLfP;%wZYhJIx2SMr-57}L5~lQ!RTwUza$=eRW90;tn|(@+Kfhu!Eo|-}iPD4} zsV-8wCCfu=^;Gzd7M$u7CU=w7HclL&dPO$@#>$bEo7lPf%BKtVSV@<_(%WtI%mz$@ zdBGA=qy$L=M{0ExIO6swi0u$2b&*vVZVM+Csdkvwo1_;^eq~1gQbVtK1ILFy6n5VZed}|a$w+j+G$!aT(6)tvEBcRQQutgX}h5AFE zn^rf7TMuvQcSEZnby#>_0k1jO{XJ6TqAa<4V&CB!Dtxk51EQYu6FZR_=h|1N%8vLE z!qgcN#wy4k`}mp(drr9Q(JV+A^2<@+xk-$coOP!6aP=q^zNtp=X}a3Tj(i4H1k)x{ zgMW!$kgt9JiecR`+2C!iYkdWh2mP{Lw>s=itc0G!)fx&MenSl+TKNfWv{(t%^W+bJ z-u>Yq?o*(Zm1s4y7JRqk<2AXo8B{RBO^4Ucpupb!Md^L4gzi67shwxu0jt2tW*#ga zT86Re8U7T|?;JRVON&N5vQ!Vd7M-UWXZzcMB~ID^I~nz1aYmmcqYp%NB;40I{{X{B zu8$x%j&z!ElCkP};t8Oua0>S;(0H9yesaTTbuf zaQuz)@Z-2YEb0XjP2Q(k_EJ3%OjF_P52tWRp2{<0_;1~dyGt2|wYFhx7+$*GFnzCO zZhFb$Y%KVcU{>=}-HMp99%4Ulw)E9}2u|7SWlH+dxYhZGDoD3+afqH}O3mLmsG z1{XvLt?m(x5T?e8GkhGy3RU-Gj{!|3J=4K@6=w}_Q~S8dz47<;a`PHxe8)e|tyoIF z(ZfFM5!uL%vB%1^uTB-gG?nyBho?1RdY>Tm1-x+J{rbBvM#}za`g_;>)8WO(@`c+! zOvT(%$x=H&*fVx?lSBP+f0cFgKY*r^p6PZ^rlQmyL2?%>wjD&b!Hx(bTR}t%IN1ck z8$F|&d8e8=d!J#7ieQ>LOr8CmlPMY}I)#ay@Y)faX&0PshfR?m-^!0`;l?z1{iGUZ zSC1i;75W{ZsibE*<{5F1n~q#LPbsI#u0Dn&UO-G$2PrCVA2qgxS#`wfzK7~|kw;K<`}E)c1F3mg1*_<7H2?qr07*qoM6N<$g2re% AYybcN literal 0 HcmV?d00001 diff --git a/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40@2x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/ipad_spotlight40x40@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..2650ef5a5e394202a1d013ce15ce278d986424c8 GIT binary patch literal 3866 zcmV+#59RQQP)kO1Mn4Tb;-NoWXJnqEnBwz;%vtGaC3nxqXh;l44a&FKr9n?T3~BwX45 zeb07`vHg7?24ek%+Ty7G<^R6--v9re(WcL*ah#kY@gl^DNqv0w$QTqzgxSCxjra1BbXB zf}bkqr^?VGszt4lYSa?yV(o@!+PhY@1xvLkDC7t2WhQ>RyHSUJF`*iI#8B z@>2|82HFRfwI4Cpj#|_DGu2YLC15jcCL=9BxeeKsTVs0HPHUE11sTlNw1UN2F95U9 ze)52YmVj3yx7jKS+6+coucTJQSbKjX3+<|ntCPOxBd`>Zv8#+zH{8*5xf>r!@i7uRtrd-hy^h{=l1Gj{F|ti(wq+hu=Iu^yWD# z&JIGnadzO1GZ6i6oW`;Bbl=uf5W20O>$ZHZ-Eva9^&?Jh7lN4J%L7wiIu zUhZ>@lZnzhm}@=b8qo@@Ky23AfJ1$rIl3+9hV2K305}%FEVL%z<*&EwRv-X#v$ZP& zzNB-EZSziRXRh^(l_JJkOBEl>-35gIL7gXn&kn5!*dYeMa^_mkm(X z!83CUv-3FSnaSa8MdrV1uCWG>cMMR@%bOnaxr+&EW@M)HylE7Z3DE-0i2J4OST#R|lYt~1kmL{y^<&%5Uc z)jW#tD4@-76@Z(CWTLV>lBHHhvO(*P!OyLqtnW+t?gemrLE#;Ga1?-9X=}~2?%`Ev zO|_PKj=p=lQ5+NSm}69vFu9fOEM=-SfY+*@Or_Vn!|Iy}V0pn!8t{e6F~`UzK{6|C zjhU7LuW8TGLO?F z*;#>4Mkgb1`5lJ{sUXop#b<2=GS}{|fIurdOZo2C1muEN)OH-^9_qe9^cx5Ue zx5CUGcX5|oqbl`OgLb;Ece=X2Dw50$x(>6gRb9NcEF_(mSB& zqX(CbqVRftd?S-cd}Cc6uRw!%z{!S<{`>kssDGgYsj=+U}7j z)MsMaQZ@m%38>zMcPfAz>A@uaAJ8Q7r3;N{go!Yp;QdfJ#V8&tF3lff_5PI@E&822u`Q(93Nd$7&jg+W_t zrZs@sXkjqBOO$^&H$Zz_Kz<98nS5Znxa(oL;*sjklUeH1xAskWB((6U-USBlZlDF9 zEgnWYt9Vf?RvVK z(f;eBJtvAsuQpC_6Iw{`LYUlw!Pf^FfGY`@c6VXWmY8YR>A{S(K8A`vEq{oXj&tE)>g2_gs+D#z|;(j%gO9w(*nnof-_@RnGuCgmzT&B5RgbeAHlGGE0%% z8o`uy-TSu?t6QA_=4B{sWH%>2qf%M}m~p4ZH%H~3u6X@3oi(jKy>kn%-pokersSdX?G7l4#@1}rNCZ_{$xZz zz}Fan-!CU%#@gGii?s$Y<1Uh#G{c%*gz{HPixVQUwyi21EkYG-m3M0e^Xh?ipUH+10d2hsL2Za9k- zXsMP0v$@qN%Ix7wx;O4qC`O-HTb9V@`&v2yU{Put?HL~i@2JkF1E0d+QX|;*?!ubZ zC9n`NJmWLmVeR(G>|U4Ld0l3;Y#X@X8m6C>rvH^LL^6({AzHt=9D$2LHHi?&xJ{as_D(j@g zJ4={9w??f2%;W<*yx6J|=VZ0!_Jpe`+r8+Q24Bi(_~l+Fk1uUgr`~ z=NwjxLaQBjS4Uq`&Ct#H4xm)3dPcZm6^7liRPwkW;BIZk%IVx08u zY+n;3?BV+}mnuiYE~qvi?fB&(*>8@>BQL6oWD{nW&Mc<4y63*rj#3W$IoV9B2Q$+y z`WA&St(}`Jdnvm^J@$mQ??J8%nx=hvX5QEagMYO#M#vvbzM??eZhPSLvdnE@p{dsS z-ER?#Z&47i;WoB+n%p(6_3cw?(w(L4S;7Pi+m*+&^W@EQ)RjqChZb!9O~FeuIvo&G z<-DVWW2NF_m|M_NU^~9YhZ~Mj&FNPMNGg_nJJ$BC+1M|;(7U%hLQC1MKufhwdhl|; z$4Ba0hp46k(quI}t}F5)n~h4mee7r*eU2XZ+979a@npxgt}B~pgKbQ`5LlUYyDOyXx$@g9YU&5aOJwN>KBt6 zHs`kmpX!Ras7Sh^jJ>D`KGnJTaLb1HYS=cyM#^z}32YuYA&;MLLA z*m=gcN?HoMO1ZV~jE_~t$6RXwue`R}&NIH%$Ssby{)gDCKz7~gWOc^3oH_ZO>lSAz zBNf5{!1k@T^(&*bui~?|0xi{2V0%Y0(_5Xa&iGhrZ!pvnu-(rsi#s)}R-nR_dTxzc chd=%I|EqOwBsF`Z`v3p{07*qoM6N<$g1oV-@&Et; literal 0 HcmV?d00001 diff --git a/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_app60x60@2x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_app60x60@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..2241e825657c1ff9de6c0500d9cccf2b47a9e210 GIT binary patch literal 5173 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

+}n7ho-llcqB zvzo(7@JsOG{BCn!)5|w}Dz*Pn)@&eTdFInAP9`r396-!?g>Ty7DnIEePrl*hh2%XZ z3@ISUZ~wYBN=6Yjbc`I@WWg#&PG!&bqtaJC@kdW5xlTLgwh3av3wDzS))@mZz8?6~D@NS;9 z|6KjTyv5)8Q`b%hW`N=!C~r(lTrcIFp0r8Sfa_*$Px@&RCq94V-d?WdhgXW3-%|7<}Rm6 z|9!|2N!#jYvRQZjX}Ng*oL=dp*?ekiH3j?gDUWEAQDfGuOzISSo^TUhQRZC_4%3?iltT`FYE z7XLkzQZ&~{ePxfV^dH4t2s%V%I#Gx@#2imujabFH?!ScON*BPHgb{z#nL~8l#5J@k RN&kQV107@SO5pQ1{{y{fGd}RWw#@T0-nrYt-JWN^PRH+JqVj ziq>xJ`Hj!-_s5&}k6h1lJ?DPUx$krCCrVdGlb-fEEg2aZ{R6FgPf71Dmk%{L>9?vJ ziy*ydkXoiM$;jxKFP|$TvjL}MWIW^#?x`C1OmECmd0LFWCnFTktrc*%Q$JE`pK@ic zN>fY|^OXr=!B^WdJRoDA;WKS|1dTyg(gQ|gw5cUJDaAWDa3d`2rpYC9x!`f9qU2lb zdyY6Ug&yd(c<0lEH)Xi(4004^C04cji)MBe&vFoc_ z2WQ+M5&86sHNrQW)xR%!TaCvW3#{%ih+A<_zDs!l?tCXJJGvOgiAJr;MK^T&1U$Zz z-k{N$7h=4(Fr_Dw{*4^^F`5F3t_)0#6z4bzFA(C&(R|)R#`^ut;F_>)D5G9M=4Tb1 z&^M8OVAj`9VZkp?3c7#is*O=VBO}*eh*Z^gQ(yCnzjDaGXh;c@`KPXd7l8qMZbQZO z$u}z`Z~*Y6Za2qQOO5V7u*cOE_cb!H!0VuD*fKs|0&!s98L;M%h>rkrf$qUJ9g#9% z>-*tX=$d<}YxFdfd|^n)vIC?^9}%6Ep*;c3&RBtwOLo}Az#ONNcVG#y^lDyvPfJ)h zK3Vlykb%aVE1(Iihw-hru2@P#Bz@wJjg*eiyV z*U&tJk&noe-Em==D}Po2#km5eyMlp0sx6qVW3kZ^SjgV6cuFFKAIyi5uaWuo;+31n zxRS$Cm7sbA4jZK80(UjB;?iu%HtODQj&cHn6QkdJ@gl@k8i7|`Si+6FLMD_PRlv)r z?J}9l*l|>v_t;P@IA|@&7CPJk$$3TPa6oO6VoM&; zRQ3#Sl;(M44TxKcl&r$@M_=T-+B+5r4);VdMv~0#k7WK0bx5AW<7$4KM>^`$a1rYd0jsMaJI`K}m6Q}n ziz*yxW}n!7ZI)d6Fu@v+D+0DGv9%_Q2F%Rqg}e?oKDTLqZ@w*GnPa9`_#PA^U0E_A zRw&N(a}MmKJ>C^mA|nBX=7xpaL$}gYAXMQJkPJJx!71lmB;?bLyCprX;q+V>dVgOg zQBzwta#Y7Z_O3XWw;-y~>L?um23MJ0$y02mSn2djpd1xx5;v^Y+ls{ZxWYPDA5L0Q zg)9C8EF57%c7Ta&0|5^PTDd1AJ5!Z5yeH3ZG%so;Gr~=q}2msalU{@`wj6w5bJiVaF*tf%mi8kyTVhLjNWck{k`7x zlj0gkKvK6Js1Ju1XqQ!+r=`M2bHDG!aVK8_^2oVALiKqnJ4GN}$k{i9^jEs) zV9(()o|BsEkJ&qzyr)OHuUs$}znAzt^89f+OQr_Kp5k_t97M=#tOT2dtIQeNkz3(eOYJEhhU-#qy#KeOGqF z(%+A2vmCG<9OgxZg!WI6*aHcf>El>bzW^RCwvy*YXc5zjcY6#EmxLN$5fh*c!UhUn z>krqqZ<_HqpT4wA9#GuI#nl57Z{uW}ugv_G#ZCZ)dbS|7gJbPn*K=nI&a}^)f<uZ6?AKb$L;th7$OdJ;SjFh zrFGeCR(#$+R(=2dr97IoR0jDS3LpRdp#K?8xnSe1IdC1UgxYJp+*IC~F+v}`#hJ8N zfLuD8HzY%eS7kdElNeodQgf}IFOlFJ~$}?355G@cDy*juOPVGi21y7h%m(TlR}~@?sDCI&Esuy zVKiiC;~J>xWu~3RfwoxB(0_kfYNB`HO4-B;4Gob?`M^wf{NZlrz!*d>vY{as#-;TI zPz1*U(le)aCZBGBtZ;S}Ma}P5puH;QXXnyn?;Mm3ZQA4djr)5tv>55a5(hV#a;Z_% z;7U{_UM|XmDxx77R#`}-Wg18K(0?0M)$)Wxb5BrtNEgUa&LZr;STA;z7}0Q3>0v$AsiuEatM_2oS>TW`pPEOxJ| zc(OQsS_2Cpe6~sf7|ia3cMe0}Mi3m6iMyeoNdDQJ8e-91P|b^zx&-{Ce;2q_0{A)Y z1}N|!9A9X*=RklribF^XjYtdmk%`d0yP-Vx@L&mu+kf(8`(`oEf4v5l6jXLDA{Y+U z3ue^JW7CuuEMClWFi0R3s?`huR)YS1Qz`-s`Mu!+mP{Rx^n?{Pel8-b<@)_vFU{nv z`N4A?S!am4je7zcDNN=mtR6k$ISPr#1~k>s$ZoYSLL)f%G5T_l_00lPC`FeokM|g0 zXk1_|kcEcxF0<|e3H;}a4zFh5B* z;`Tt2uVc?l*wb!1{mKQZL6N|nUINq|q!{43)Z?v@uAuZcqE?gJ*JU*e8o~g1I;SrZ z0&5IaEOVOO{5{*;&b=-y{jMD0q=|Va8@H%(Hw~ZsEDq)guUpe<*-X0T4A7BFo2FGf-0QJ- zrM>E3@bkr~hXeU;Opyl@KMSlTI5I4$5 z6;Ts)6(R*rdq^<&j2uX&Vi(DPOQ4Hh9WR%>Jp{0Tl6NM{$DE5l6cgxAD>7Q@qAQQT zxb-qdoTq8snELb_mE$i(eUnoN^6`>=6`&$PP3r|=DZ99tc748x2O59huPqG!bO?k< z&*co~1q2-W{B>GOG~Zi?G1-o978@BWsVAEZ!7l ziE(L0cCWjb!ZBVNNPLytk7yE8rO(`hNjrw7>_=SNYjEtjSX=Ezd{<~w%N@qU4N8J> z{Vt~XFU(zJm_)YDf6=RdYI<8y+a{gM{uJUnp}$x9ezDw}wLJk=$zfcpFCn?nB|&!c zkMRFTa9}|8LVm;?FFR#0y(Rqgbm@EB^vI>W2R;y~FmAWfvsZK1J zWs+L?)UP~>M>NKYzN83$0AaK0qwR@*gEtC=Kc#{63@G%dXcGxZ(IWv2*qawF8`XcW z8*$eS5mP<2v6N|B8-k2)hZphs>{<&psQHfQXxgU$Ovn@Ou}t8B>-|mRRA6dQ(G>bP zv=x>2s#n@ntQ+=oPmlMWqQ}Se{7W(%GPS8ZVJ4_v0G%ap>U>Y&{+|XU)EPAU_`+}o zRI)%#;6sQoA82j~oC9Q_rJA&4CZrP6@_p9vtL?Dh9}6->@%f(&X-0NtLyKC@3t2#B zs;*ClHg3$inT=Znn~MQ{fjKGD#ctcLYuUUk(in#0woNnIhym|0#@-pEvtjq zo7LsXKE?%IJ2*3^Td}tD&<}x7AT5>gnWRjT&}`L`yMcCDMHL=FkFojJbVdn&Oena4 zEP2_l@`+T>U*L6r2y9j*yMy|tf48?!wVk!*G$N9tP+q% zhTF&KIa+mKwIXZc6Bi$axovec?(t+7A=;~=mWCd5>izg8l20l%nF(h#UeraNk`)^= zi`gamd_`@a!dZS511?5uPfepJ@;ls1BcP+Mn#Tms4mk6Cb!f=1=?(?ZZMl&MHetT( zNNZ>Q=Fz3si=qjAznZFf#$sCnb~+!el<^3+psE5+pKh%aN`EeSv!6>XyxDo5Op_A& zl>j6K32x0IlP?yAKuRwMp0e+4Xm@3JzR$a**mEb!jZn2_Atj}JIX%hqlUl&$txfuC zUa#}??i``>-crE$y;oi-o)$H3{~LbW{637Iey3O|cTs%2jULBz6=h*hMy32W+LHYN z7!JB!uhcI0U0cXE7t;3gnkTr!FywM5D9>TwQ=?^WiT;sUa$8l#>sKhX-K&{9mh0&= zR~DviUjH3^hGq!xb#qpIRfL+k+boUub8jK+$}o<1lVQ+0MqM$TKt=GTd@q@xf0sHP z>y_7k!`rSJ&`|B%eet8{D}>|?Fwgh@(AASg8Q^DnJ`o;AsR+^ZUh`GsuPi-a^E}sg zs&#kvwW*&fi*0i%K%HLgVzM4=OSN?t$?D4_+URRw+m)Z34@LkS*~YbGY^3GD7dut$ zcTJg-N4Z?jAq6|lG+u87_19CTHxuk00HPMfA3{7Tvfp;JiGtB^lQk_KtDNorWVhGe z2J-ABnQc2Am8$uCkHg!va}2G1Sv=B212r8MiT}Ehd_zd2Ra#wIXWI+SW9{#>laHN# z*UDn~ARQ&UUVHG5+G_V*5-U56#ezr7R2?W-;3PHO?TY?{$RUZw8rN@PH}OVd^Q1V! zw_Pl*2}OU@c`XEEuO;hRFtgnF$6SCTWx~$+WmLCUFQ8W0#=;d|^IG51yK&*K7oqgNXG~e@D39))UhGNX-|phbtFW zc*-B_>WCn~%~b9wLg7BTq~5I+RY9un99`}>(FX4pyRqd_#g0shH6o8PbWdjs*lTAL zZtd|>m)02~h=f$uhfM;0-B=>x2MX7f=Z2cJjK_V;&U=6*oqE7y2P*CO)cXpXi?-{d+oS zfI_mVSJR9uK!tL_>t*%;s-GtU#UwJcsfGF@xhDj^u1vfAWO@1-|9WANB6%x~7k$rtmpjHDFlo2XFKjP?q_ zAYHjO=3zWhAx~ia1e-djze&)TbkoZCJ8EtMU-1;r#@3z=D;46QYqyH=){W>`NDVcr zV+55dZ1KKGyMIt%8t(fsDlFC~N8r zrB_x5llp><|Ga}Csp8qJ{*DJ8g|EWT*Cwe}15ex(mZ4ncz`o8O-d8{OtI*5WT@{cB zf!2RusEG;!`a?>(sef#+EbU*7M7NmV<++|y>=S2S-A*~JwyMHHPK8GGz*3AcAjgTP$CrgN@1 zJhj&(q+G>II;g#^IeKH|Rv+>wn$2ViJLl^5v@SixPu;_}NwOjEs4D(2@8;bA9gBhv ztBBYaG(GDk8%saXR?Rz4o+B|uC+1z0MK=|WO?dDCltE>Sd(~UuEf8kThiz&1n6_c< zq!Kgke2pC;T`xU)%UxK-^&M|DZvS#fz0=$#U#2AV4MhM1CkQ!1x+b8Oj1gONB1&VV zj?6+B^4Kv`U|x@|Zv*vkQ|!4)&cODVPvMtdE*)kJcFMvz`*|(EYFZ+Yv(1uItz!3& zpUvYM&3n1*Yx2$$-K|LEVQ00<*hc!qQ8zX~VEQ)WJxp@U5r3^*m(RDXB@_iAh(-uyDdtW;`pP2$&W_}KOTv4H?QT9zX-8XvP3dr`#H{UyX zufHVoMTd%~$s6V8*Hcdh)fH`?gqXXs$b3)rU!1z9iRSU^-+o(2C0~R|=efUkpV=DU zHb~W$>|rej+AK0MhJqcD;<{<6zU9)CAa3FK`R3skHQz`EH+jH98tU_(&a*IP#wh~x z>}qTVV9(l3hDOUZ6xN!4y*#y^B}s_onVs3|b$$uF*`_^+DnZ`4n9zz?Me7}hUVfHAfT-2V2W{7`_=aO?Uk;nUD+M(9Qjpgq<=>R3?9 zr*k4C(hQ!Y@Yl|GtyOF!p7un+Snx%Jph3fC(e_)5zzd+jU*KgQnKa$e?pw-8_0jbF z?CR8vo76#(_HkWPiQ7VT&d6Brv$sl|=i^zM+tEgosep=n(7jbV?_0ow)nnf(Gp{pK zw2p%6m*8)uBbi+NI+HO$ZoibUGwTJVa*iBCf*N4Y%0;cKdj6)lc5Pf(+#!KMqtiXb z`^j1EpW`fd4cZ^THlOn~ro(c>k>62wS&v4CFwZ)k{q)LVacznm5Qc1|rS_`~5Nw)d zBm|+lcrf2OuzMZ&3-ZseJIA3{M_G?`Tv%Vg7&8 zW0IEY*OSs1#n=6Zl4j$ixw*bw&)2W>7IVaPb^~R`3Hgn>C9bye=?;}}HYy&6R_bD#5_0lj#%LhjC?DV1f`5fo^3j@GQZtrFCg=m zm~m+*%p(1iZCe{~v>v1H_jBLA7qKDw>$-1-E?detL-N-*ZtOKvfTE^}jTLabD$aHk zbKMTSo8q1s%b%o?ZCW``4Cz+CFNh%Yz~&1cDyf9vJ9q@MJ%Tlvd;QJ)(r%v`%=;E{k zJ;~iFSx>{`vFQQDyh1hOx4!m>Hb3x0Klk%`f0))Ap%$L{n=N?^yw%q_@h-hVv=J)e zR+nwm831qwXmU3gu6=0WTb&i5)_Sq8?F_)~Dfe%|O<$@v=yq~39bRSBw@9!%o~KP~ zWns6mT|lU7qBkA<)O*EaLK>!XW{+>voIe=2;dD!BC+5d6Jwp@z%zK9t`-ZWr39qVl z(Il{9@I60CiHY^LeDB$T)z|VpU;@dy)ayH>rH8b|4s2`y~bA zxl+gRRP7_p$ZWI0+3)tGt=!3=TL|PA@fx{+sGp+&F1?bwsBP77H%n$-ri%`Nl>&5r zL4DvY))p@>Pr~xejpvnUlxa-t=~scYMg{ z#5k`fKbQqvQTC&sK(R#8fs4J3Xx=JW zJ^pxGAh21(xUhZZ=1IZ0s#&|H7q0I@RwqW|?-au^2grTS7 z_E}M7QM2$7zCGr5?zf-e{Gh}ueR_u(*X-#Gn-aDRtp<*?c2@s!r6stu?LQ(!!74UB zccnkv(3akmE6yx6i$U1H>tj43+*eWk*94}&A~AluL9|T%yh7Gr~y_XQ62BpulB&!%ePpaOWFC@2ViOyGPSUO-> zx>-Uxz{KF>zCH0>L~Iy$yT#rhzPE^E?I`tWIXnaeTJ@_s(caCmCBrUKL0vbE~Hh!7|+z8jq=_S#Zu#bV7U2Ud-Y0rpg zuvf~nR36fm%XN@^ky&ZKTTd_fNuMe~*J_U`C<}Y}Wk(;sy6czEq~)u zUWDttKfOZh%a^jN^Rh4IWS`F-xH5B~aysDhRKTT4X~l%Jd|Z0b?0>=JUuN_xHTae2 zB}HSBLalGXsBgZ;Cr|B@s}koZ#n~gkrPi!L6_M4eP<4@5y|#eK_b};F5gC9Wy=M|!J!(f-X7PLE7x(XLng|X6A7^|K!R-YU~6`dUd@2tK=878Z;$|>39 zNm<3jfr{}1<>r8krhp4ZX_-M8Z)8oUei+&mpOcZ`#xy`M-HzqD_NDsvr8{klA5`l2=as&M3X@Ez!i)hx zRlj0VuTnECDx3KA&6&5Gww;|F8+svq;dkKcCpAW|Oogv&YYA15-Vgq-SaIdReHE9Q ze_1{C>dm%g+qS-G+p_N1mkqD=O)Gr!jm7rcD!o_6ux~bTpoCd+VJ1=qX?=jG9J?BL zeR0n-Tse(Yd*#5RBrG-ms%C1I| z!cjSX7fivI&EbEYJ@NHSgK7;k&e!K-YoFDdPt==&3YGkxi;4Jugoi zc5jl%umg_!dYqj;M&hovPtSg*(GC$Q>-V;`DXDRSR) zWHq&ypVGs(tGqLvVE@V?)CvYwQmm5}YrW2^kKP@p!VgTW4ZX zBYNj(gt;33LJd1h8G45bN8dBJCH9G7$>M!=ZmmP*#K-xGgtq!%f>(6 zoy`2lT;9Lt(!QDbO_foSuV!Z|LT?)>a8$h>obDB8^rKiEr^%tVLzNr%959_>k_x;3 zp{wTFw&khit=&ggH*X0p(YU7#Gs6izqO?6#&Z$3&%NF`9*oukP zzq7OLfP;%wZYhJIx2SMr-57}L5~lQ!RTwUza$=eRW90;tn|(@+Kfhu!Eo|-}iPD4} zsV-8wCCfu=^;Gzd7M$u7CU=w7HclL&dPO$@#>$bEo7lPf%BKtVSV@<_(%WtI%mz$@ zdBGA=qy$L=M{0ExIO6swi0u$2b&*vVZVM+Csdkvwo1_;^eq~1gQbVtK1ILFy6n5VZed}|a$w+j+G$!aT(6)tvEBcRQQutgX}h5AFE zn^rf7TMuvQcSEZnby#>_0k1jO{XJ6TqAa<4V&CB!Dtxk51EQYu6FZR_=h|1N%8vLE z!qgcN#wy4k`}mp(drr9Q(JV+A^2<@+xk-$coOP!6aP=q^zNtp=X}a3Tj(i4H1k)x{ zgMW!$kgt9JiecR`+2C!iYkdWh2mP{Lw>s=itc0G!)fx&MenSl+TKNfWv{(t%^W+bJ z-u>Yq?o*(Zm1s4y7JRqk<2AXo8B{RBO^4Ucpupb!Md^L4gzi67shwxu0jt2tW*#ga zT86Re8U7T|?;JRVON&N5vQ!Vd7M-UWXZzcMB~ID^I~nz1aYmmcqYp%NB;40I{{X{B zu8$x%j&z!ElCkP};t8Oua0>S;(0H9yesaTTbuf zaQuz)@Z-2YEb0XjP2Q(k_EJ3%OjF_P52tWRp2{<0_;1~dyGt2|wYFhx7+$*GFnzCO zZhFb$Y%KVcU{>=}-HMp99%4Ulw)E9}2u|7SWlH+dxYhZGDoD3+afqH}O3mLmsG z1{XvLt?m(x5T?e8GkhGy3RU-Gj{!|3J=4K@6=w}_Q~S8dz47<;a`PHxe8)e|tyoIF z(ZfFM5!uL%vB%1^uTB-gG?nyBho?1RdY>Tm1-x+J{rbBvM#}za`g_;>)8WO(@`c+! zOvT(%$x=H&*fVx?lSBP+f0cFgKY*r^p6PZ^rlQmyL2?%>wjD&b!Hx(bTR}t%IN1ck z8$F|&d8e8=d!J#7ieQ>LOr8CmlPMY}I)#ay@Y)faX&0PshfR?m-^!0`;l?z1{iGUZ zSC1i;75W{ZsibE*<{5F1n~q#LPbsI#u0Dn&UO-G$2PrCVA2qgxS#`wfzK7~|kw;K<`}E)c1F3mg1*_<7H2?qr07*qoM6N<$g2re% AYybcN literal 0 HcmV?d00001 diff --git a/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_notification20x20@3x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_notification20x20@3x.png new file mode 100755 index 0000000000000000000000000000000000000000..6d053189d7298633b09c85a4d2c81a42be29ff34 GIT binary patch literal 3087 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 KMNUMnLSTaOQ~D7A literal 0 HcmV?d00001 diff --git a/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_settings29x29@3x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_settings29x29@3x.png new file mode 100755 index 0000000000000000000000000000000000000000..ae72ab5e076bc008de4b0f4bf4e98ef92541133d GIT binary patch literal 4539 zcmV;s5k&5ZP)`pS7OtSwn$*;|1i+AJL zjva?8mPJt{#ZCgOU>7CXj=hfLII$$#aoK3Sn{kaL*^y*P>=mp43rG+ENf4}}8b!&Z zNJ9IadoRF?c5yBMI+Iz=I~&YM<8Y>Y$3SAV>{%|2*gH6JTkN6s0EaGWE!i^ zjCFV_p%yfmPy?C(#aElKs*G5bhB#2gI99nn7Ni=BVWL1sU<4L|ynYb+>ly*R%4?^i ztIVP*b9CiYbOojI$>{P4p$cRYmVu1IQlp^MASj_!JRVi7k186&DjWqxDn}y}I$@!X zuMx!g{mvA&t3dW_1o#?r*z&{I=brtq#i!l_EnvMn4|?*QxujEbui1YdYfheaJ{gpBT-V1jgwFoPwJ{$Cx!lo5}?V7kJ zEy5un_ilu(C;$YQ!nS6F9b8G#vh&EapknG%ZGb6wHi9z(F@=CdA+QCq*V2fp3w8j7 z^2txND*>W#S6XOWzZWBHMS&>02ZXl42&8qvjyiK-DM%;^GGZf$a(ZkOyv_@_3uL#Q zA~P@WGBUvwQ~{&V3A>{bM}dq_6o8_$y3sad1kz4%$Kk0c)x>8k3RWw#B*Mj8tq%Kw zL`g>hIf8CL5S^(;f!hw}`4-4PA+pT$VgDVcSRmnGwIQ&7w$-pAD$oJ~sb?eDw?lgr z00N4Fr%us_?eGPTPI20`Q-n@QUN!OkSIm!{p81!PGe13P`T1Kj=LT2kMRG;~{_E!P zm8VZn{L^vcPmUY^`GnyIM@KOQR;MUouiq&OvbyaEqBFYC!#>Oo-A|3?d>EO;S5L?) zOwnaVkf_WMSv($HI^HqywLQ)~?E;3ywS=;fpe(H*e=ssn8iVj-Vym2AvzNy5Mm0v zG6I(oW(keJF*1Q>F-$pj>>?M14T{41?Kgt5G%>|Pt|Jq2BVYuFIzhvqRfyQhbFzv|#k;g=^j^v|UFT1M)(5Q9x`2;h_#dz);wx0@;VzAy5b@&=FJU z#}u5SppU=^TTuWKq_v}mTz16m&IlZ{!?<#NNdCytzbq0_IMgp!YF$SrrBG73v5y-%*txQ_E06vfdg zD_6Md6p4)>NNclEAkGLo0-X_Dhv=9>E)j)yTCSnAUYUZuBRVw8Bu1bS2oAQQ0MrGZ zo-g2kniN;23(g%n`sD%{g&tXfyC@(wf*`du>L3K1Q#fK1YZx z1qy>aDCGBh*$W)&0_XJ~Yyku|3hws;pECkOA)(qNuQWoN7^2ii6zK)UdP$i+mWqPt z;;~4jE;N56D0f&=ymgusTQU-yttF*!uv?bb=Q=VWFhX0DEefy>G$a0Jik`MZ20=p2 zL}KlPNM#HwGVH7|{rhQ4`MGOnx^Fid?hVha>KE3=7S=SD)ytzRZ@1pa|7h-!>M=>t zh`eNkqA(nktv&L^JQ)SGltsY@BhUzJ6nG!5dnk~r@%qK(rifz0k55d$-gMKjbf05h zLa!&~j0Ic(Q6MWCjwv37PLYJd+f9ooMJ>(kq-A_prD0VkQNSM3Yh~$6dD)N z0ifVIGU+5YLgaxah5{=J7RWlqX(uD#@nNM&T48#p<2F4Jga2o%mE?SprZ63pr3EiY z3kRW74$2rfa(>SKx1K)r7N*cC$?4&f5uA;HwZ9RB9HU^)2P4E+Pk_!+Q`5C|>*gl; zDJx!28m7QZjbaK1p;IKH(6E4#J0;oOE=K4eH$r4`qay`hM<$RF#46LDdhs-UeS_~= zGezMHMWF~&fKHi^!kd^vhn)hijNlXq5zjXu$BZybZUj0bM3fjS&M(nhp!I=o6wE=k zsS&1dsE>@oJlfwO$x^!*q20AWb`u5r=_qIb1Ple=3S@`^k;?R=6VofJo9r_ZUnpb@ zfEO?Yr3U)tBj;v`Vqt$fP;e6k-i@#o1z7v)kFt2zl#$9B_IzpGwAv{A z(M(N^1|Oi3p0bb}D^jPAZvNf< z4g80xK;cjyo*Ly3$Q1+7FV~&*PT@3A*w-e`?BeJYJsZIRLBw-c5wQ^*dW6IpQ&{o% zyHsji=OnRdLomO*enofZPu({^?73Axc4zJu^SMK3%;16;C7v3|FohnHSU7!k4()3d zXSzl~E4dM91QZ32PoH{hlj5tOO)@=HYnr@%pW`Uae%v^F`+nYsGmlj2!t)>zYEZ^N zWUl66)$lJ)nJx`4?|FM7=uod*p%DXxf__Zl>&I52 z@`tGEnCMv}SzaFx3VWMH>FsW#Aksr!U`G(nLJ+>^GIERpGsy%wp~@Ihr2nA%HpkDp zPVN6MU0i@bh^2Z2_fMHH6qq5p6ey&0kx`gMdl(8)-U?)nC;$X33VddV@s)@dbhyOfHL}7Q6D6Ng7Q*h z)qCF;&S`E#Qj`~Roh*x32WryX9_SQ_D10@8b~i?+`DKK#Jzp^t$WN2(L-d4-@sI+Y z;*)u=IpXHsjc-@$ASp_fTt=`TrATvtLI+taP!v*IU5r4EfC+@KU6&9mBTRAKP-ERw zj4RhiD0GjXGIQ4p^p9Kh`7ACC3$<<^!*&{?L#GU#A_;{zAQpBtM5p>?1R8;j!d4Uz zohHSo#v~=9kJjktZm)Atp#S{F%EtHWMg+M7xH`;pZv^`g9aBhdf8nf!l)}Ll7b7(A ziUJ!2pH7ov%SOWsMn3N2N|yHWv1R-YxImE8Z$D78ohh;=$P@)>wi-Ic_gfadQh4ox z1trx31&&V9ULbQL2ur$%9M2R@gqQT<%0@%;hW5QbZC@()5aH~=Em(heX0N=!<7tv8 zvrCZPDa%nC7Py}DqrYL<{~CdUFs0eW2=(Mf2-|frGzkm&d{0qYtV>ksM(0<#8!CGT z-J-wqoytL!+$G5Bk>&Nua(g8?J>u+cQC7D&TP@4(mSm~Xu9nJ=r|>uQ{2gfu&zu-S zyBsL^V1%$FHU*z2$oJAJSoPYFBu=T9Ba@W~jr{ zI)jqi!3zZ+n7AJTwxyo+e^7P?Ki42Q;Fl3-1fjpWfPB8EC@&t77UI*SKJz{9|2;bh z+B;KAYsW9m{m1dq@2Cb63wjd@dcIxO_ss7`zZ|&1JmBn&X5+}spywK*ctnAd5iT+7 zPr3jIY!rOGup3)49Fnbh{P!k$cknuPvN~=ecUCvd*H=hvu z2>uv>MiBb!Uy!GV?g%gJ#uN`hjr{6YizL2a4B25GL66Mt ze^fQ7vE1|X`VU8HxVN_Xqsnfy>uOYTBfBmLC$0;ej6frxDER#f2f9;?Q4EA-_9Yf- z>M3iity|Xv6cqFk27uV}+adJJ%R=zNzQ7oPMqs1h-zyyKZIU#H6VX&a*83mXN$U*X{PF>Gm0PgI5)?eF;elD@h> zPmj%gZFSu6*ImTUvTGaGOPcGCy)=N5u7>Wdk77r`K7TWUQy?%DSW%!O-wwI%BT(}K zXp^Mb-I3{C==pX@R@W0JbZ=aq?Vnt^eb3`_4!7>EcNvyn{Cx6<)x9Bm>VtM&g}o40 zNBev-LXsCFfP$Ys4?^U1f%n;=yGJj@SzYoRwJ4)2IJph&ZxyC@d{5Q;vsZ^Q-W{*` zc;e-A=2y;}Yd@LDdQbnem$lz5R)_Czf|faCZ-XeM8C<}>F1W}i3eK}A@X81t?<4eh zx}ioNu8T839Z_lR!TVd$-e$C?3GHsg+SP!SR1XT;+W?)iFr_IfIRKraS0m5}C<>$* z!Q*yFeldqWS&mL?6Q{R}(%P_6TSaNDqSO|U@L)6Ul#_j&9r|DdM!z_Ryp%>HH`hHq zfa~U=JFkyeH2OUGnJ@?%{2!Tc)CD1qMz9MJX9SP0a3H^!!_x@$+ZY8b1i??8MSQkHg1bp%_YvG3 zr8IIMu9J^UNVY>Zf*_iLl)V=yc)!Ad{9;aEjX+)?+v@_i2y7JG?ga(JH`jg12prEE zeRD?GqQEl3pv3+A3;IZnknXb)>bIj)^lAh~PkxRZqd>#AK<0c5yH()#QzqML1R4S8 Z{{T$-0IK1;zJLG#002ovPDHLkV1ljFK8XMT literal 0 HcmV?d00001 diff --git a/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@2x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..2650ef5a5e394202a1d013ce15ce278d986424c8 GIT binary patch literal 3866 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 literal 0 HcmV?d00001 diff --git a/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@3x.png b/packages/app-mobile/ios/Joplin/Images.xcassets/AppIcon.appiconset/iphone_spotlight40x40@3x.png new file mode 100755 index 0000000000000000000000000000000000000000..2241e825657c1ff9de6c0500d9cccf2b47a9e210 GIT binary patch literal 5173 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

+}n7ho-llcqB zvzo(7@JsOG{BCn!)5|w}Dz*Pn)@&eTdFInAP9`r396-!?g>Ty7DnIEePrl*hh2%XZ z3@ISUZ~wYBN=6Yjbc`I@WWg#&PG!&bqtaJC@kdW5xlTLgwh3av3wDzS))@mZz8?6~D@NS;9 z|6KjTyv5)8Q`b%hW`N=!C~r(lTrcIFp0r8Sfa_*$Px@&RCq94V-d?WdhgXW3-%|7<}Rm6 z|9!|2N!#jYvRQZjX}Ng*oL=dp*?ekiH3j?gDUWEAQDfGuOzISSo^TUhQRZC_4%3?iltT`FYE z7XLkzQZ&~{ePxfV^dH4t2s%V%I#Gx@#2imujabFH?!ScON*BPHgb{z#nL~8l#5J@k RN&kQV107@SO5pQ1{{y{fGd} Date: Wed, 8 Jan 2025 00:12:25 +0000 Subject: [PATCH 06/30] iOS 13.2.4 --- .../ios/Joplin.xcodeproj/project.pbxproj | 16 ++++++++-------- readme/about/changelog/ios.md | 3 +-- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/app-mobile/ios/Joplin.xcodeproj/project.pbxproj b/packages/app-mobile/ios/Joplin.xcodeproj/project.pbxproj index 7033bbfb3a2..01bd11c5c27 100644 --- a/packages/app-mobile/ios/Joplin.xcodeproj/project.pbxproj +++ b/packages/app-mobile/ios/Joplin.xcodeproj/project.pbxproj @@ -535,13 +535,13 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Joplin/Joplin.entitlements; - CURRENT_PROJECT_VERSION = 131; + CURRENT_PROJECT_VERSION = 132; DEVELOPMENT_TEAM = A9BXAFS6CT; ENABLE_BITCODE = NO; INFOPLIST_FILE = Joplin/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 13.2.3; + MARKETING_VERSION = 13.2.4; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -567,12 +567,12 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Joplin/Joplin.entitlements; - CURRENT_PROJECT_VERSION = 131; + CURRENT_PROJECT_VERSION = 132; DEVELOPMENT_TEAM = A9BXAFS6CT; INFOPLIST_FILE = Joplin/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 13.2.3; + MARKETING_VERSION = 13.2.4; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -758,14 +758,14 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 131; + CURRENT_PROJECT_VERSION = 132; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = A9BXAFS6CT; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = ShareExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 13.2.3; + MARKETING_VERSION = 13.2.4; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; OTHER_LDFLAGS = ( @@ -797,14 +797,14 @@ CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 131; + CURRENT_PROJECT_VERSION = 132; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = A9BXAFS6CT; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = ShareExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 13.2.3; + MARKETING_VERSION = 13.2.4; MTL_FAST_MATH = YES; OTHER_LDFLAGS = ( "$(inherited)", diff --git a/readme/about/changelog/ios.md b/readme/about/changelog/ios.md index 4714724c494..0e4011f728a 100644 --- a/readme/about/changelog/ios.md +++ b/readme/about/changelog/ios.md @@ -1,11 +1,10 @@ # Joplin iOS Changelog -## [ios-v13.2.3](https://github.com/laurent22/joplin/releases/tag/ios-v13.2.3) - 2025-01-07T23:52:31Z +## [ios-v13.2.4](https://github.com/laurent22/joplin/releases/tag/ios-v13.2.4) - 2025-01-08T00:11:58Z - New: Plugin API: Add support for the renderMarkup command (#11494 by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) - Improved: Accessibility: Improve sidemenu notebook list accessibility (#11556 by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) - Improved: Add an accordion for disabled master keys on encryption screen (#11529) (#11486 by [@pedr](https://github.com/pedr)) -- Improved: Add iOS Dark Icon (#11460) (#11119 by [@itzTheMeow](https://github.com/itzTheMeow)) - Improved: Add more options when long pressing the icon on mobile (#11517) (#10374) - Improved: Display html notes using white theme (#11510) (#10609) - Improved: Mark biometric lock feature as stable (955d39b) From 6048f9613c8b906a9073de77a70555f05d04fc49 Mon Sep 17 00:00:00 2001 From: Joplin Bot Date: Wed, 8 Jan 2025 00:53:08 +0000 Subject: [PATCH 07/30] Doc: Auto-update documentation Auto-updated using release-website.sh --- packages/tools/postPreReleasesToForum.json | 5 ++++- readme/about/changelog/desktop.md | 6 ++++++ readme/download.md | 2 +- readme/install.md | 10 +++++----- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/packages/tools/postPreReleasesToForum.json b/packages/tools/postPreReleasesToForum.json index a3bace0579d..e4f47e2a919 100644 --- a/packages/tools/postPreReleasesToForum.json +++ b/packages/tools/postPreReleasesToForum.json @@ -119,6 +119,9 @@ "v3.2.5": true, "v3.2.6": true, "v3.2.7": true, - "android-v3.2.4": true + "android-v3.2.4": true, + "v3.2.8": true, + "android-v3.2.5": true, + "ios-v13.2.4": true } } \ No newline at end of file diff --git a/readme/about/changelog/desktop.md b/readme/about/changelog/desktop.md index 58628050bc8..01744694d0b 100644 --- a/readme/about/changelog/desktop.md +++ b/readme/about/changelog/desktop.md @@ -1,5 +1,11 @@ # Joplin Desktop Changelog +## [v3.2.8](https://github.com/laurent22/joplin/releases/tag/v3.2.8) - 2025-01-08T00:02:40Z + +- Fixed: Fix reordering notes in custom sort order when some notes are deleted ([#11592](https://github.com/laurent22/joplin/issues/11592)) ([#11226](https://github.com/laurent22/joplin/issues/11226) by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) +- Fixed: Link watched files to the current window ([#11590](https://github.com/laurent22/joplin/issues/11590)) ([#11445](https://github.com/laurent22/joplin/issues/11445) by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) +- Security: Remove the `name` attribute when rendering to HTML ([#11591](https://github.com/laurent22/joplin/issues/11591) by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) + ## [v3.2.7](https://github.com/laurent22/joplin/releases/tag/v3.2.7) (Pre-release) - 2025-01-06T16:35:41Z - Improved: Plugins: Add Toast plugin API ([#11583](https://github.com/laurent22/joplin/issues/11583)) ([#11579](https://github.com/laurent22/joplin/issues/11579)) diff --git a/readme/download.md b/readme/download.md index 44759e6ff18..0a5705727a8 100644 --- a/readme/download.md +++ b/readme/download.md @@ -10,7 +10,7 @@ Your download of Joplin is in progress. Access your notes on Windows, macOS or Linux. -Get it on Windows Get it on macOS Get it on macOS M1 (Silicon) Get it on Linux +Get it on Windows Get it on macOS Get it on macOS M1 (Silicon) Get it on Linux diff --git a/readme/install.md b/readme/install.md index 064343a782c..a5797f29674 100644 --- a/readme/install.md +++ b/readme/install.md @@ -10,12 +10,12 @@ Three types of applications are available: for **desktop** (Windows, macOS and L Operating System | Download ---|--- -Windows (32 and 64-bit) | Get it on Windows -macOS | Get it on macOS -macOS M1 (Apple Silicon) | Get it on macOS M1 (Silicon) -Linux | Get it on Linux +Windows (32 and 64-bit) | Get it on Windows +macOS | Get it on macOS +macOS M1 (Apple Silicon) | Get it on macOS M1 (Silicon) +Linux | Get it on Linux -**On Windows**, you may also use the Portable version. The [portable application](https://en.wikipedia.org/wiki/Portable_application) allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file. +**On Windows**, you may also use the Portable version. The [portable application](https://en.wikipedia.org/wiki/Portable_application) allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file. **On Linux**, the recommended way is to use the following installation script as it will handle the desktop icon too: From a9e1be944f527e3c6d977ad7d1ddbef08748cefc Mon Sep 17 00:00:00 2001 From: Joplin Bot Date: Wed, 8 Jan 2025 12:27:30 +0000 Subject: [PATCH 08/30] Doc: Auto-update documentation Auto-updated using release-website.sh --- readme/about/changelog/desktop.md | 6 ------ readme/download.md | 2 +- readme/install.md | 10 +++++----- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/readme/about/changelog/desktop.md b/readme/about/changelog/desktop.md index 01744694d0b..58628050bc8 100644 --- a/readme/about/changelog/desktop.md +++ b/readme/about/changelog/desktop.md @@ -1,11 +1,5 @@ # Joplin Desktop Changelog -## [v3.2.8](https://github.com/laurent22/joplin/releases/tag/v3.2.8) - 2025-01-08T00:02:40Z - -- Fixed: Fix reordering notes in custom sort order when some notes are deleted ([#11592](https://github.com/laurent22/joplin/issues/11592)) ([#11226](https://github.com/laurent22/joplin/issues/11226) by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) -- Fixed: Link watched files to the current window ([#11590](https://github.com/laurent22/joplin/issues/11590)) ([#11445](https://github.com/laurent22/joplin/issues/11445) by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) -- Security: Remove the `name` attribute when rendering to HTML ([#11591](https://github.com/laurent22/joplin/issues/11591) by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) - ## [v3.2.7](https://github.com/laurent22/joplin/releases/tag/v3.2.7) (Pre-release) - 2025-01-06T16:35:41Z - Improved: Plugins: Add Toast plugin API ([#11583](https://github.com/laurent22/joplin/issues/11583)) ([#11579](https://github.com/laurent22/joplin/issues/11579)) diff --git a/readme/download.md b/readme/download.md index 0a5705727a8..44759e6ff18 100644 --- a/readme/download.md +++ b/readme/download.md @@ -10,7 +10,7 @@ Your download of Joplin is in progress. Access your notes on Windows, macOS or Linux. -Get it on Windows Get it on macOS Get it on macOS M1 (Silicon) Get it on Linux +Get it on Windows Get it on macOS Get it on macOS M1 (Silicon) Get it on Linux diff --git a/readme/install.md b/readme/install.md index a5797f29674..064343a782c 100644 --- a/readme/install.md +++ b/readme/install.md @@ -10,12 +10,12 @@ Three types of applications are available: for **desktop** (Windows, macOS and L Operating System | Download ---|--- -Windows (32 and 64-bit) | Get it on Windows -macOS | Get it on macOS -macOS M1 (Apple Silicon) | Get it on macOS M1 (Silicon) -Linux | Get it on Linux +Windows (32 and 64-bit) | Get it on Windows +macOS | Get it on macOS +macOS M1 (Apple Silicon) | Get it on macOS M1 (Silicon) +Linux | Get it on Linux -**On Windows**, you may also use the Portable version. The [portable application](https://en.wikipedia.org/wiki/Portable_application) allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file. +**On Windows**, you may also use the Portable version. The [portable application](https://en.wikipedia.org/wiki/Portable_application) allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file. **On Linux**, the recommended way is to use the following installation script as it will handle the desktop icon too: From 633d87ebfea52b3924d7b2fb4e0193c8763cf961 Mon Sep 17 00:00:00 2001 From: Henry Heino <46334387+personalizedrefrigerator@users.noreply.github.com> Date: Wed, 8 Jan 2025 04:29:47 -0800 Subject: [PATCH 09/30] Android: Fix clicking "Draw picture" results in blank screen with very old WebView versions (#11604) --- .eslintignore | 1 + .gitignore | 1 + .../ImageEditor/js-draw/createJsDrawEditor.ts | 2 ++ .../NoteEditor/ImageEditor/js-draw/polyfills.ts | 11 +++++++++++ .../app-mobile/tools/buildInjectedJs/BundledFile.ts | 12 ++++++------ 5 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/polyfills.ts diff --git a/.eslintignore b/.eslintignore index 0cbe191010d..4aeb55e8370 100644 --- a/.eslintignore +++ b/.eslintignore @@ -641,6 +641,7 @@ packages/app-mobile/components/NoteEditor/ImageEditor/isEditableResource.js packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/applyTemplateToEditor.js packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/createJsDrawEditor.test.js packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/createJsDrawEditor.js +packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/polyfills.js packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/startAutosaveLoop.js packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/types.js packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/watchEditorForTemplateChanges.js diff --git a/.gitignore b/.gitignore index 83f939737d4..71ed97babfd 100644 --- a/.gitignore +++ b/.gitignore @@ -616,6 +616,7 @@ packages/app-mobile/components/NoteEditor/ImageEditor/isEditableResource.js packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/applyTemplateToEditor.js packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/createJsDrawEditor.test.js packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/createJsDrawEditor.js +packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/polyfills.js packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/startAutosaveLoop.js packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/types.js packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/watchEditorForTemplateChanges.js diff --git a/packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/createJsDrawEditor.ts b/packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/createJsDrawEditor.ts index 29d89a1b6dd..a5acab20a91 100644 --- a/packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/createJsDrawEditor.ts +++ b/packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/createJsDrawEditor.ts @@ -7,6 +7,8 @@ import watchEditorForTemplateChanges from './watchEditorForTemplateChanges'; import { ImageEditorCallbacks, ImageEditorControl, LocalizedStrings } from './types'; import startAutosaveLoop from './startAutosaveLoop'; import WebViewToRNMessenger from '../../../../utils/ipc/WebViewToRNMessenger'; +import './polyfills'; + const restoreToolbarState = (toolbar: AbstractToolbar, state: string) => { if (state) { diff --git a/packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/polyfills.ts b/packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/polyfills.ts new file mode 100644 index 00000000000..ee4d188bcd0 --- /dev/null +++ b/packages/app-mobile/components/NoteEditor/ImageEditor/js-draw/polyfills.ts @@ -0,0 +1,11 @@ +// .replaceChildren is not supported in Chromium 83, which is the default for Android 11 +// (unless auto-updated from the Google Play store). +HTMLElement.prototype.replaceChildren ??= function(this: HTMLElement, ...nodes: Node[]) { + while (this.children.length) { + this.children[0].remove(); + } + + for (const node of nodes) { + this.appendChild(node); + } +}; diff --git a/packages/app-mobile/tools/buildInjectedJs/BundledFile.ts b/packages/app-mobile/tools/buildInjectedJs/BundledFile.ts index 690744668a8..b99e38ac4d6 100644 --- a/packages/app-mobile/tools/buildInjectedJs/BundledFile.ts +++ b/packages/app-mobile/tools/buildInjectedJs/BundledFile.ts @@ -58,18 +58,18 @@ export default class BundledFile { // Some libraries don't work with older browsers/WebViews. // Because Babel transpilation can be slow, we only transpile // these libraries. - // For now, it's just Replit's CodeMirror-vim library. This library - // uses `a?.b` syntax, which seems to be unsupported in iOS 12 Safari. - const moduleNeedsTranspilation = !!(/.*node_modules.*replit.*\.[mc]?js$/.exec(value)); + const moduleNeedsTranspilation = !!( + // Replit's CodeMirror-vim library uses a?.b syntax which seems to be unsupported in iOS 12 Safari. + /.*node_modules.*replit.*\.[mc]?js$/.exec(value) || + // js-draw uses a ??= b syntax, which is unsupported in old Android WebView versions + /.*node_modules.*js-draw.*\.[mc]?js$/.exec(value) + ); if (isModuleFile && !moduleNeedsTranspilation) { return false; } const isJsFile = !!(/\.[cm]?js$/.exec(value)); - if (isJsFile) { - console.log('Compiling with Babel:', value); - } return isJsFile; }, use: { From e1e2ba8888ea290a76cdb573f50b9f7a0f25da58 Mon Sep 17 00:00:00 2001 From: Henry Heino <46334387+personalizedrefrigerator@users.noreply.github.com> Date: Wed, 8 Jan 2025 04:30:16 -0800 Subject: [PATCH 10/30] Desktop: Fix keyboard can't add text after certain error/info dialogs are shown (#11603) --- packages/app-desktop/bridge.ts | 9 +++++++-- packages/app-desktop/commands/copyDevCommand.ts | 3 ++- packages/app-desktop/commands/restoreNoteRevision.ts | 5 +++-- packages/app-desktop/gui/ClipperConfigScreen.tsx | 3 ++- .../app-desktop/gui/ConfigScreen/ConfigScreen.tsx | 3 ++- .../EncryptionConfigScreen/EncryptionConfigScreen.tsx | 4 ++-- .../app-desktop/gui/MasterPasswordDialog/Dialog.tsx | 3 ++- packages/app-desktop/gui/NoteRevisionViewer.tsx | 3 ++- .../gui/ShareFolderDialog/ShareFolderDialog.tsx | 11 +++++++---- packages/app-desktop/gui/ShareNoteDialog.tsx | 3 ++- .../app-desktop/gui/Sidebar/hooks/useOnRenderItem.tsx | 3 ++- .../commands/leaveSharedFolder.ts | 5 +++-- 12 files changed, 36 insertions(+), 19 deletions(-) diff --git a/packages/app-desktop/bridge.ts b/packages/app-desktop/bridge.ts index f6f31e0361a..12941a4071b 100644 --- a/packages/app-desktop/bridge.ts +++ b/packages/app-desktop/bridge.ts @@ -1,5 +1,5 @@ import ElectronAppWrapper from './ElectronAppWrapper'; -import shim from '@joplin/lib/shim'; +import shim, { MessageBoxType } from '@joplin/lib/shim'; import { _, setLocale } from '@joplin/lib/locale'; import { BrowserWindow, nativeTheme, nativeImage, shell, dialog, MessageBoxSyncOptions, safeStorage } from 'electron'; import { dirname, toSystemSlashes } from '@joplin/lib/path-utils'; @@ -384,9 +384,14 @@ export class Bridge { /* returns the index of the clicked button */ public showMessageBox(message: string, options: MessageDialogOptions = {}) { + const defaultButtons = [_('OK')]; + if (options.type !== MessageBoxType.Error && options.type !== MessageBoxType.Info) { + defaultButtons.push(_('Cancel')); + } + const result = this.showMessageBox_(this.activeWindow(), { type: 'question', message: message, - buttons: [_('OK'), _('Cancel')], ...options }); + buttons: defaultButtons, ...options }); return result; } diff --git a/packages/app-desktop/commands/copyDevCommand.ts b/packages/app-desktop/commands/copyDevCommand.ts index e103ed61f26..d7bcb998b8f 100644 --- a/packages/app-desktop/commands/copyDevCommand.ts +++ b/packages/app-desktop/commands/copyDevCommand.ts @@ -1,5 +1,6 @@ import { CommandRuntime, CommandDeclaration } from '@joplin/lib/services/CommandService'; import { _ } from '@joplin/lib/locale'; +import shim, { MessageBoxType } from '@joplin/lib/shim'; const app = require('@electron/remote').app; const { clipboard } = require('electron'); @@ -14,7 +15,7 @@ export const runtime = (): CommandRuntime => { const appPath = app.getPath('exe'); const cmd = `${appPath} --env dev`; clipboard.writeText(cmd); - alert(`The dev mode command has been copied to clipboard:\n\n${cmd}`); + await shim.showMessageBox(`The dev mode command has been copied to clipboard:\n\n${cmd}`, { type: MessageBoxType.Info }); }, }; }; diff --git a/packages/app-desktop/commands/restoreNoteRevision.ts b/packages/app-desktop/commands/restoreNoteRevision.ts index ea7cc86d7c0..c80870643a1 100644 --- a/packages/app-desktop/commands/restoreNoteRevision.ts +++ b/packages/app-desktop/commands/restoreNoteRevision.ts @@ -1,5 +1,6 @@ import { CommandRuntime, CommandDeclaration, CommandContext } from '@joplin/lib/services/CommandService'; import RevisionService from '@joplin/lib/services/RevisionService'; +import shim, { MessageBoxType } from '@joplin/lib/shim'; export const declaration: CommandDeclaration = { name: 'restoreNoteRevision', @@ -11,9 +12,9 @@ export const runtime = (): CommandRuntime => { execute: async (_context: CommandContext, noteId: string, reverseRevIndex = 0) => { try { const note = await RevisionService.instance().restoreNoteById(noteId, reverseRevIndex); - alert(RevisionService.instance().restoreSuccessMessage(note)); + await shim.showMessageBox(RevisionService.instance().restoreSuccessMessage(note), { type: MessageBoxType.Info }); } catch (error) { - alert(error.message); + await shim.showErrorDialog(error.message); } }, }; diff --git a/packages/app-desktop/gui/ClipperConfigScreen.tsx b/packages/app-desktop/gui/ClipperConfigScreen.tsx index 6fd1dfa36dd..a6d0c6c4e5b 100644 --- a/packages/app-desktop/gui/ClipperConfigScreen.tsx +++ b/packages/app-desktop/gui/ClipperConfigScreen.tsx @@ -9,6 +9,7 @@ import ClipperServer from '@joplin/lib/ClipperServer'; import Setting from '@joplin/lib/models/Setting'; import EncryptionService from '@joplin/lib/services/e2ee/EncryptionService'; import { AppState } from '../app.reducer'; +import shim, { MessageBoxType } from '@joplin/lib/shim'; class ClipperConfigScreenComponent extends React.Component { public constructor() { @@ -30,7 +31,7 @@ class ClipperConfigScreenComponent extends React.Component { private copyToken_click() { clipboard.writeText(this.props.apiToken); - alert(_('Token has been copied to the clipboard!')); + void shim.showMessageBox(_('Token has been copied to the clipboard!'), { type: MessageBoxType.Info }); } private renewToken_click() { diff --git a/packages/app-desktop/gui/ConfigScreen/ConfigScreen.tsx b/packages/app-desktop/gui/ConfigScreen/ConfigScreen.tsx index 25b00bc4b80..3a5f9783b4d 100644 --- a/packages/app-desktop/gui/ConfigScreen/ConfigScreen.tsx +++ b/packages/app-desktop/gui/ConfigScreen/ConfigScreen.tsx @@ -19,6 +19,7 @@ import shouldShowMissingPasswordWarning from '@joplin/lib/components/shared/conf import MacOSMissingPasswordHelpLink from './controls/MissingPasswordHelpLink'; const { KeymapConfigScreen } = require('../KeymapConfig/KeymapConfigScreen'); import SettingComponent, { UpdateSettingValueEvent } from './controls/SettingComponent'; +import shim from '@joplin/lib/shim'; interface Font { @@ -144,7 +145,7 @@ class ConfigScreenComponent extends React.Component { screenName = section.name; if (this.hasChanges()) { - const ok = confirm(_('This will open a new screen. Save your current changes?')); + const ok = await shim.showConfirmationDialog(_('This will open a new screen. Save your current changes?')); if (ok) { await shared.saveSettings(this); } diff --git a/packages/app-desktop/gui/EncryptionConfigScreen/EncryptionConfigScreen.tsx b/packages/app-desktop/gui/EncryptionConfigScreen/EncryptionConfigScreen.tsx index f045c7e1549..03b2c729ee5 100644 --- a/packages/app-desktop/gui/EncryptionConfigScreen/EncryptionConfigScreen.tsx +++ b/packages/app-desktop/gui/EncryptionConfigScreen/EncryptionConfigScreen.tsx @@ -3,7 +3,7 @@ import EncryptionService from '@joplin/lib/services/e2ee/EncryptionService'; import { themeStyle } from '@joplin/lib/theme'; import { _ } from '@joplin/lib/locale'; import time from '@joplin/lib/time'; -import shim from '@joplin/lib/shim'; +import shim, { MessageBoxType } from '@joplin/lib/shim'; import dialogs from '../dialogs'; import { decryptedStatText, determineKeyPassword, dontReencryptData, enableEncryptionConfirmationMessages, onSavePasswordClick, onToggleEnabledClick, reencryptData, upgradeMasterKey, useInputPasswords, useNeedMasterPassword, usePasswordChecker, useStats, useToggleShowDisabledMasterKeys } from '@joplin/lib/components/EncryptionConfigScreen/utils'; import { MasterKeyEntity } from '@joplin/lib/services/e2ee/types'; @@ -47,7 +47,7 @@ const EncryptionConfigScreen = (props: Props) => { const onUpgradeMasterKey = useCallback(async (mk: MasterKeyEntity) => { const password = determineKeyPassword(mk.id, masterPasswordKeys, props.masterPassword, props.passwords); const result = await upgradeMasterKey(mk, password); - alert(result); + await shim.showMessageBox(result, { type: MessageBoxType.Info }); }, [props.passwords, masterPasswordKeys, props.masterPassword]); const renderNeedUpgradeSection = () => { diff --git a/packages/app-desktop/gui/MasterPasswordDialog/Dialog.tsx b/packages/app-desktop/gui/MasterPasswordDialog/Dialog.tsx index 95ac261840b..1573bbc2460 100644 --- a/packages/app-desktop/gui/MasterPasswordDialog/Dialog.tsx +++ b/packages/app-desktop/gui/MasterPasswordDialog/Dialog.tsx @@ -11,6 +11,7 @@ import EncryptionService from '@joplin/lib/services/e2ee/EncryptionService'; import KvStore from '@joplin/lib/services/KvStore'; import ShareService from '@joplin/lib/services/share/ShareService'; import LabelledPasswordInput from '../PasswordInput/LabelledPasswordInput'; +import shim from '@joplin/lib/shim'; interface Props { themeId: number; @@ -80,7 +81,7 @@ export default function(props: Props) { void reg.waitForSyncFinishedThenSync(); onClose(); } catch (error) { - alert(error.message); + void shim.showErrorDialog(error.message); } finally { setUpdatingPassword(false); } diff --git a/packages/app-desktop/gui/NoteRevisionViewer.tsx b/packages/app-desktop/gui/NoteRevisionViewer.tsx index a58f8963bff..dbdde2c305e 100644 --- a/packages/app-desktop/gui/NoteRevisionViewer.tsx +++ b/packages/app-desktop/gui/NoteRevisionViewer.tsx @@ -17,6 +17,7 @@ const urlUtils = require('@joplin/lib/urlUtils'); const ReactTooltip = require('react-tooltip'); const { connect } = require('react-redux'); import shared from '@joplin/lib/components/shared/note-screen-shared'; +import shim, { MessageBoxType } from '@joplin/lib/shim'; interface Props { themeId: number; @@ -97,7 +98,7 @@ class NoteRevisionViewerComponent extends React.PureComponent { this.setState({ restoring: true }); await RevisionService.instance().importRevisionNote(this.state.note); this.setState({ restoring: false }); - alert(RevisionService.instance().restoreSuccessMessage(this.state.note)); + await shim.showMessageBox(RevisionService.instance().restoreSuccessMessage(this.state.note), { type: MessageBoxType.Info }); } private backButton_click() { diff --git a/packages/app-desktop/gui/ShareFolderDialog/ShareFolderDialog.tsx b/packages/app-desktop/gui/ShareFolderDialog/ShareFolderDialog.tsx index e3eb8b159d4..df76c33edce 100644 --- a/packages/app-desktop/gui/ShareFolderDialog/ShareFolderDialog.tsx +++ b/packages/app-desktop/gui/ShareFolderDialog/ShareFolderDialog.tsx @@ -18,6 +18,7 @@ import { connect } from 'react-redux'; import { reg } from '@joplin/lib/registry'; import useAsyncEffect, { AsyncEffectEvent } from '@joplin/lib/hooks/useAsyncEffect'; import { ChangeEvent, Dropdown, DropdownOptions, DropdownVariant } from '../Dropdown/Dropdown'; +import shim from '@joplin/lib/shim'; const logger = Logger.create('ShareFolderDialog'); @@ -242,13 +243,13 @@ function ShareFolderDialog(props: Props) { } async function recipient_delete(event: RecipientDeleteEvent) { - if (!confirm(_('Delete this invitation? The recipient will no longer have access to this shared notebook.'))) return; + if (!await shim.showConfirmationDialog(_('Delete this invitation? The recipient will no longer have access to this shared notebook.'))) return; try { await ShareService.instance().deleteShareRecipient(event.shareUserId); } catch (error) { logger.error(error); - alert(_('The recipient could not be removed from the list. Please try again.\n\nThe error was: "%s"', error.message)); + await shim.showErrorDialog(_('The recipient could not be removed from the list. Please try again.\n\nThe error was: "%s"', error.message)); } await ShareService.instance().refreshShareUsers(share.id); @@ -290,7 +291,7 @@ function ShareFolderDialog(props: Props) { }); await ShareService.instance().setPermissions(share.id, shareUserId, permissionsFromString(value)); } catch (error) { - alert(`Could not set permissions: ${error.message}`); + void shim.showErrorDialog(`Could not set permissions: ${error.message}`); logger.error(error); } finally { setRecipientsBeingUpdated(prev => { @@ -383,7 +384,9 @@ function ShareFolderDialog(props: Props) { async function buttonRow_click(event: ClickEvent) { if (event.buttonName === 'unshare') { - if (!confirm(_('Unshare this notebook? The recipients will no longer have access to its content.'))) return; + if (!await shim.showConfirmationDialog(_('Unshare this notebook? The recipients will no longer have access to its content.'))) { + return; + } await ShareService.instance().unshareFolder(props.folderId); void synchronize(); } diff --git a/packages/app-desktop/gui/ShareNoteDialog.tsx b/packages/app-desktop/gui/ShareNoteDialog.tsx index e09427c5a19..7f9e4c7232e 100644 --- a/packages/app-desktop/gui/ShareNoteDialog.tsx +++ b/packages/app-desktop/gui/ShareNoteDialog.tsx @@ -16,6 +16,7 @@ import { connect } from 'react-redux'; import { AppState } from '../app.reducer'; import { getEncryptionEnabled } from '@joplin/lib/services/synchronizer/syncInfoUtils'; import SyncTargetRegistry from '@joplin/lib/SyncTargetRegistry'; +import shim from '@joplin/lib/shim'; const { clipboard } = require('electron'); interface Props { @@ -146,7 +147,7 @@ export function ShareNoteDialog(props: Props) { reg.logger().error('ShareNoteDialog: Cannot publish note:', error); setSharesState('idle'); - alert(JoplinServerApi.connectionErrorMessage(error)); + void shim.showErrorDialog(JoplinServerApi.connectionErrorMessage(error)); } break; diff --git a/packages/app-desktop/gui/Sidebar/hooks/useOnRenderItem.tsx b/packages/app-desktop/gui/Sidebar/hooks/useOnRenderItem.tsx index f9fac470e21..bbdb3b37650 100644 --- a/packages/app-desktop/gui/Sidebar/hooks/useOnRenderItem.tsx +++ b/packages/app-desktop/gui/Sidebar/hooks/useOnRenderItem.tsx @@ -31,6 +31,7 @@ import HeaderItem from '../listItemComponents/HeaderItem'; import AllNotesItem from '../listItemComponents/AllNotesItem'; import ListItemWrapper from '../listItemComponents/ListItemWrapper'; import { focus } from '@joplin/lib/utils/focusHandler'; +import shim from '@joplin/lib/shim'; const Menu = bridge().Menu; const MenuItem = bridge().MenuItem; @@ -309,7 +310,7 @@ const useOnRenderItem = (props: Props) => { } } catch (error) { logger.error(error); - alert(error.message); + await shim.showErrorDialog(error.message); } }, []); diff --git a/packages/app-desktop/gui/WindowCommandsAndDialogs/commands/leaveSharedFolder.ts b/packages/app-desktop/gui/WindowCommandsAndDialogs/commands/leaveSharedFolder.ts index 7b8ac1e2b5b..6d964b296cb 100644 --- a/packages/app-desktop/gui/WindowCommandsAndDialogs/commands/leaveSharedFolder.ts +++ b/packages/app-desktop/gui/WindowCommandsAndDialogs/commands/leaveSharedFolder.ts @@ -2,6 +2,7 @@ import { CommandRuntime, CommandDeclaration, CommandContext } from '@joplin/lib/ import { _ } from '@joplin/lib/locale'; import ShareService from '@joplin/lib/services/share/ShareService'; import Logger from '@joplin/utils/Logger'; +import shim from '@joplin/lib/shim'; const logger = Logger.create('leaveSharedFolder'); @@ -13,7 +14,7 @@ export const declaration: CommandDeclaration = { export const runtime = (): CommandRuntime => { return { execute: async (_context: CommandContext, folderId: string = null) => { - const answer = confirm(_('This will remove the notebook from your collection and you will no longer have access to its content. Do you wish to continue?')); + const answer = await shim.showConfirmationDialog(_('This will remove the notebook from your collection and you will no longer have access to its content. Do you wish to continue?')); if (!answer) return; try { @@ -28,7 +29,7 @@ export const runtime = (): CommandRuntime => { await ShareService.instance().leaveSharedFolder(folderId, share.user.id); } catch (error) { logger.error(error); - alert(_('Error: %s', error.message)); + await shim.showErrorDialog(_('Error: %s', error.message)); } }, enabledCondition: 'joplinServerConnected && folderIsShareRootAndNotOwnedByUser', From e8f305dea59cef2baca878071ee3bb3eaa2b8ce2 Mon Sep 17 00:00:00 2001 From: pedr Date: Thu, 9 Jan 2025 12:20:43 -0300 Subject: [PATCH 11/30] CLI: Fixes #11577: Revert deprecation warning suppression (#11620) --- packages/app-cli/app/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app-cli/app/main.js b/packages/app-cli/app/main.js index 2b4f38d6f30..ab3e31c8e6c 100644 --- a/packages/app-cli/app/main.js +++ b/packages/app-cli/app/main.js @@ -1,4 +1,4 @@ -#!/usr/bin/env -S NODE_OPTIONS=--no-deprecation node +#!/usr/bin/env node // Use njstrace to find out what Node.js might be spending time on // var njstrace = require('njstrace').inject(); From 72575e3c6ff9d197431b72083cddcf3a2d853e2c Mon Sep 17 00:00:00 2001 From: Henry Heino <46334387+personalizedrefrigerator@users.noreply.github.com> Date: Thu, 9 Jan 2025 07:21:06 -0800 Subject: [PATCH 12/30] Mobile: Fixes #11455: Clicking on an external note link from within a note logs an error (#11619) --- packages/app-mobile/commands/openItem.ts | 49 ++++++++++++++++-------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/packages/app-mobile/commands/openItem.ts b/packages/app-mobile/commands/openItem.ts index 65e4812b48d..33b55aa501c 100644 --- a/packages/app-mobile/commands/openItem.ts +++ b/packages/app-mobile/commands/openItem.ts @@ -8,6 +8,7 @@ import BaseItem from '@joplin/lib/models/BaseItem'; import { BaseItemEntity } from '@joplin/lib/services/database/types'; import { ModelType } from '@joplin/lib/BaseModel'; import showResource from './util/showResource'; +import { isCallbackUrl, parseCallbackUrl } from '@joplin/lib/callbackUrlUtils'; const logger = Logger.create('openItemCommand'); @@ -15,32 +16,48 @@ export const declaration: CommandDeclaration = { name: 'openItem', }; +const openItemById = async (itemId: string, hash?: string) => { + logger.info(`Navigating to item ${itemId}`); + const item: BaseItemEntity = await BaseItem.loadItemById(itemId); + + if (item.type_ === ModelType.Note) { + await goToNote(itemId, hash); + } else if (item.type_ === ModelType.Resource) { + await showResource(item); + } else { + throw new Error(`Unsupported item type for links: ${item.type_}`); + } +}; + export const runtime = (): CommandRuntime => { return { execute: async (_context: CommandContext, link: string) => { if (!link) throw new Error('Link cannot be empty'); - if (link.startsWith('joplin://') || link.startsWith(':/')) { - const parsedUrl = parseResourceUrl(link); - if (parsedUrl) { - const { itemId, hash } = parsedUrl; + try { + if (link.startsWith('joplin://') || link.startsWith(':/')) { + const parsedResourceUrl = parseResourceUrl(link); + const parsedCallbackUrl = isCallbackUrl(link) ? parseCallbackUrl(link) : null; - logger.info(`Navigating to item ${itemId}`); - const item: BaseItemEntity = await BaseItem.loadItemById(itemId); - if (item.type_ === ModelType.Note) { - await goToNote(itemId, hash); - } else if (item.type_ === ModelType.Resource) { - await showResource(item); + if (parsedResourceUrl) { + const { itemId, hash } = parsedResourceUrl; + await openItemById(itemId, hash); + } else if (parsedCallbackUrl) { + const id = parsedCallbackUrl.params.id; + if (!id) { + throw new Error('Missing item ID'); + } + await openItemById(id); } else { - logger.error('Unsupported item type for links:', item.type_); + throw new Error('Unsupported link format.'); } + } else if (urlProtocol(link)) { + shim.openUrl(link); } else { - logger.error(`Invalid Joplin link: ${link}`); + throw new Error('Unsupported protocol'); } - } else if (urlProtocol(link)) { - shim.openUrl(link); - } else { - const errorMessage = _('Unsupported link or message: %s', link); + } catch (error) { + const errorMessage = _('Unsupported link or message: %s.\nError: %s', link, error); logger.error(errorMessage); await shim.showErrorDialog(errorMessage); } From a81af0711c3f8af8472c1ce816260a393acf8d68 Mon Sep 17 00:00:00 2001 From: pedr Date: Thu, 9 Jan 2025 12:22:12 -0300 Subject: [PATCH 13/30] Desktop: Fixes #11597: OneNote Importer should only use text on fallback title (#11598) --- .../onenote/remove_hyperlink_on_title.zip | Bin 0 -> 79577 bytes .../InteropService_Importer_OneNote.test.ts | 11 ++ ...teropService_Importer_OneNote.test.js.snap | 119 ++++++++++++++++++ packages/onenote-converter/src/notebook.rs | 2 +- packages/onenote-converter/src/page/mod.rs | 4 +- .../onenote-converter/src/page/rich_text.rs | 2 +- .../parser/one/property_set/page_metadata.rs | 11 +- .../src/parser/onenote/page.rs | 38 +++++- packages/onenote-converter/src/section.rs | 3 +- packages/onenote-converter/src/utils.rs | 2 +- 10 files changed, 179 insertions(+), 13 deletions(-) create mode 100644 packages/app-cli/tests/support/onenote/remove_hyperlink_on_title.zip diff --git a/packages/app-cli/tests/support/onenote/remove_hyperlink_on_title.zip b/packages/app-cli/tests/support/onenote/remove_hyperlink_on_title.zip new file mode 100644 index 0000000000000000000000000000000000000000..ce992dfd735a0215f939d1fd6d69c90e2e92a35c GIT binary patch literal 79577 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 { BaseModel.setIdGenerator(originalIdGenerator); }); + + skipIfNotCI('should remove hyperlink from title', async () => { + let idx = 0; + const originalIdGenerator = BaseModel.setIdGenerator(() => String(idx++)); + const notes = await importNote(`${supportDir}/onenote/remove_hyperlink_on_title.zip`); + + for (const note of notes) { + expect(note.body).toMatchSnapshot(note.title); + } + BaseModel.setIdGenerator(originalIdGenerator); + }); }); diff --git a/packages/lib/services/interop/__snapshots__/InteropService_Importer_OneNote.test.js.snap b/packages/lib/services/interop/__snapshots__/InteropService_Importer_OneNote.test.js.snap index a70037a0b3e..46a176baacc 100644 --- a/packages/lib/services/interop/__snapshots__/InteropService_Importer_OneNote.test.js.snap +++ b/packages/lib/services/interop/__snapshots__/InteropService_Importer_OneNote.test.js.snap @@ -766,3 +766,122 @@ exports[`InteropService_Importer_OneNote should import a simple OneNote notebook " `; + +exports[`InteropService_Importer_OneNote should remove hyperlink from title: wikipedia link 1`] = ` +" + + + + wikipedia link + + + + +

+ + + +" +`; + +exports[`InteropService_Importer_OneNote should remove hyperlink from title: 风景 (Web view) 1`] = ` +" + + + + 风景 (Web view) + + + + +
 
+
Sunday, January 5, 2025
+
10:13 PM
+
+ + + +" +`; + +exports[`InteropService_Importer_OneNote should remove hyperlink from title: 风景 1`] = ` +" + + + + 风景 + + + + +
风景
+
Sunday, January 05, 2025
+
10:14 PM
+
+ + + +" +`; diff --git a/packages/onenote-converter/src/notebook.rs b/packages/onenote-converter/src/notebook.rs index 82ab8cf252b..460d690460b 100644 --- a/packages/onenote-converter/src/notebook.rs +++ b/packages/onenote-converter/src/notebook.rs @@ -84,7 +84,7 @@ impl Renderer { let section_path = renderer.render(section, notebook_dir)?; log!("section_path: {:?}", section_path); - let path_from_base_dir = unsafe { remove_prefix(section_path.as_str(), base_dir.as_str()) } + let path_from_base_dir = unsafe { remove_prefix(section_path, base_dir.as_str()) } .unwrap() .as_string() .unwrap(); diff --git a/packages/onenote-converter/src/page/mod.rs b/packages/onenote-converter/src/page/mod.rs index e66571e9107..10ead671d0b 100644 --- a/packages/onenote-converter/src/page/mod.rs +++ b/packages/onenote-converter/src/page/mod.rs @@ -35,7 +35,7 @@ impl<'a> Renderer<'a> { } pub(crate) fn render_page(&mut self, page: &Page) -> Result { - let title_text = page.title_text().unwrap_or("Untitled Page"); + let title_text = page.title_text().unwrap_or("Untitled Page".to_string()); let mut content = String::new(); @@ -70,7 +70,7 @@ impl<'a> Renderer<'a> { content.push_str(&page_content); - crate::templates::page::render(title_text, &content, &self.global_styles) + crate::templates::page::render(&title_text, &content, &self.global_styles) } pub(crate) fn gen_class(&mut self, prefix: &str) -> String { diff --git a/packages/onenote-converter/src/page/rich_text.rs b/packages/onenote-converter/src/page/rich_text.rs index c095b0f2552..b7b8a8fd2b4 100644 --- a/packages/onenote-converter/src/page/rich_text.rs +++ b/packages/onenote-converter/src/page/rich_text.rs @@ -74,7 +74,7 @@ impl<'a> Renderer<'a> { // all the styles to be shifted by minus one. // A better solution would be to look if there isn't anything wrong with the parser, // but I haven't found what could be causing this yet. - if text.starts_with("\u{000B}") && !indices.is_empty(){ + if text.starts_with("\u{000B}") && !indices.is_empty() { indices.remove(0); styles.pop(); } diff --git a/packages/onenote-converter/src/parser/one/property_set/page_metadata.rs b/packages/onenote-converter/src/parser/one/property_set/page_metadata.rs index 2523f7fd140..786bbb99722 100644 --- a/packages/onenote-converter/src/parser/one/property_set/page_metadata.rs +++ b/packages/onenote-converter/src/parser/one/property_set/page_metadata.rs @@ -32,10 +32,13 @@ pub(crate) fn parse(object: &Object) -> Result { let entity_guid = simple::parse_guid(PropertyType::NotebookManagementEntityGuid, object)? .ok_or_else(|| ErrorKind::MalformedOneNoteFileData("page metadata has no guid".into()))?; - let cached_title = - simple::parse_string(PropertyType::CachedTitleString, object)?.ok_or_else(|| { - ErrorKind::MalformedOneNoteFileData("page metadata has no cached title".into()) - })?; + // The page might not have a title but we can use the first Section outline from the body as the fallback later + let cached_title = simple::parse_string(PropertyType::CachedTitleString, object)? + .ok_or_else(|| { + let guid = simple::parse_guid(PropertyType::NotebookManagementEntityGuid, object); + return guid.map(|g| g.unwrap().to_string()); + }) + .unwrap_or("Untitled Page".to_string()); let schema_revision_in_order_to_read = simple::parse_u32(PropertyType::SchemaRevisionInOrderToRead, object)?; let schema_revision_in_order_to_write = diff --git a/packages/onenote-converter/src/parser/onenote/page.rs b/packages/onenote-converter/src/parser/onenote/page.rs index 1a6ae603224..485a2370a9e 100644 --- a/packages/onenote-converter/src/parser/onenote/page.rs +++ b/packages/onenote-converter/src/parser/onenote/page.rs @@ -62,16 +62,23 @@ impl Page { /// The page's title text. /// /// This is calculated using a heuristic similar to the one OneNote uses. - pub fn title_text(&self) -> Option<&str> { + pub fn title_text(&self) -> Option { self.title .as_ref() .and_then(|title| title.contents.first()) .and_then(Self::outline_text) + .and_then(|t| Some(Self::remove_hyperlink(t.to_owned()))) .or_else(|| { self.contents .iter() .filter_map(|page_content| page_content.outline()) - .filter_map(Self::outline_text) + .filter_map(|t| { + let v = Self::outline_text(t); + if v.is_none() { + return None; + } + return Some(Self::remove_hyperlink(v.unwrap().to_owned())); + }) .next() }) } @@ -85,6 +92,33 @@ impl Page { .and_then(|content| content.rich_text()) .and_then(|text| Some(&*text.text).filter(|s| !s.is_empty())) } + + fn remove_hyperlink(title: String) -> String { + const HYPERLINK_MARKER: &str = "\u{fddf}HYPERLINK \""; + + let mut title_copy = title.clone(); + + loop { + // Find the first hyperlink mark + if let Some(marker_start) = title_copy.find(HYPERLINK_MARKER) { + let hyperlink_part = &title_copy[marker_start + HYPERLINK_MARKER.len()..]; + + // Find the closing double quote of the hyperlink + if let Some(quote_end) = hyperlink_part.find('"') { + let before_hyperlink = &title_copy[..marker_start]; + let after_hyperlink = &hyperlink_part[quote_end + 1..]; + title_copy = format!("{}{}", before_hyperlink, after_hyperlink); + } else { + // Sometimes links are broken, in these cases we only consider what is before the mark + title_copy = title[..marker_start].to_string(); + } + } else { + break; + } + } + + title_copy + } } /// A page title. diff --git a/packages/onenote-converter/src/section.rs b/packages/onenote-converter/src/section.rs index 2edc29cf4a6..8c3dc22fc5a 100644 --- a/packages/onenote-converter/src/section.rs +++ b/packages/onenote-converter/src/section.rs @@ -64,7 +64,7 @@ impl Renderer { let _ = unsafe { write_file(&page_path, page_html.as_bytes()) }; let page_path_without_basedir = - unsafe { remove_prefix(page_path.as_str(), output_dir.as_str()) } + unsafe { remove_prefix(page_path, output_dir.as_str()) } .unwrap() .as_string() .unwrap(); @@ -72,7 +72,6 @@ impl Renderer { } } - log!("Section finished rendering: {:?}", section.display_name()); let toc_html = templates::section::render(section.display_name(), toc)?; let toc_file = unsafe { join_path( diff --git a/packages/onenote-converter/src/utils.rs b/packages/onenote-converter/src/utils.rs index 1f8f6553caa..5371e9f1ea7 100644 --- a/packages/onenote-converter/src/utils.rs +++ b/packages/onenote-converter/src/utils.rs @@ -82,7 +82,7 @@ extern "C" { #[wasm_bindgen(js_name = removePrefix, catch)] pub unsafe fn remove_prefix( - base_path: &str, + base_path: String, prefix: &str, ) -> std::result::Result; From 98fce34fe91d6bf09890250105562b8727cf0c7f Mon Sep 17 00:00:00 2001 From: Henry Heino <46334387+personalizedrefrigerator@users.noreply.github.com> Date: Thu, 9 Jan 2025 07:25:06 -0800 Subject: [PATCH 14/30] Web: Add support for auto-reloading dev plugins on change (#11545) --- .eslintignore | 1 + .gitignore | 1 + .../plugins/PluginRunnerWebView.tsx | 20 +++- .../plugins/utils/useOnDevPluginsUpdated.ts | 60 ++++++++++++ .../screens/ConfigScreen/ConfigScreen.tsx | 31 +++---- .../ConfigScreen/FileSystemPathSelector.tsx | 91 ++++++++++++++----- .../screens/ConfigScreen/SettingComponent.tsx | 12 ++- .../screens/ConfigScreen/SettingsToggle.tsx | 6 +- .../ConfigScreen/configScreenStyles.ts | 22 ++++- .../plugins/PluginBox/PluginChips.tsx | 8 ++ .../ConfigScreen/plugins/PluginInfoModal.tsx | 2 +- .../plugins/PluginUploadButton.tsx | 2 +- .../components/screens/ConfigScreen/types.ts | 2 +- .../lib/models/settings/builtInMetadata.ts | 18 +++- packages/lib/services/CommandService.ts | 4 + .../services/commands/ToolbarButtonUtils.ts | 12 ++- .../services/plugins/api/JoplinCommands.ts | 1 + packages/lib/services/plugins/loadPlugins.ts | 5 +- packages/lib/services/plugins/reducer.ts | 1 + .../api/references/mobile_plugin_debugging.md | 14 +++ 20 files changed, 249 insertions(+), 64 deletions(-) create mode 100644 packages/app-mobile/components/plugins/utils/useOnDevPluginsUpdated.ts diff --git a/.eslintignore b/.eslintignore index 4aeb55e8370..79764cf70da 100644 --- a/.eslintignore +++ b/.eslintignore @@ -704,6 +704,7 @@ packages/app-mobile/components/plugins/dialogs/hooks/useViewInfos.js packages/app-mobile/components/plugins/dialogs/hooks/useWebViewSetup.js packages/app-mobile/components/plugins/types.js packages/app-mobile/components/plugins/utils/createOnLogHandler.js +packages/app-mobile/components/plugins/utils/useOnDevPluginsUpdated.js packages/app-mobile/components/screens/ConfigScreen/ConfigScreen.js packages/app-mobile/components/screens/ConfigScreen/FileSystemPathSelector.js packages/app-mobile/components/screens/ConfigScreen/JoplinCloudConfig.js diff --git a/.gitignore b/.gitignore index 71ed97babfd..18586771d0d 100644 --- a/.gitignore +++ b/.gitignore @@ -679,6 +679,7 @@ packages/app-mobile/components/plugins/dialogs/hooks/useViewInfos.js packages/app-mobile/components/plugins/dialogs/hooks/useWebViewSetup.js packages/app-mobile/components/plugins/types.js packages/app-mobile/components/plugins/utils/createOnLogHandler.js +packages/app-mobile/components/plugins/utils/useOnDevPluginsUpdated.js packages/app-mobile/components/screens/ConfigScreen/ConfigScreen.js packages/app-mobile/components/screens/ConfigScreen/FileSystemPathSelector.js packages/app-mobile/components/screens/ConfigScreen/JoplinCloudConfig.js diff --git a/packages/app-mobile/components/plugins/PluginRunnerWebView.tsx b/packages/app-mobile/components/plugins/PluginRunnerWebView.tsx index 14a72c5deb3..c8edf4343fe 100644 --- a/packages/app-mobile/components/plugins/PluginRunnerWebView.tsx +++ b/packages/app-mobile/components/plugins/PluginRunnerWebView.tsx @@ -15,6 +15,7 @@ import { AppState } from '../../utils/types'; import usePrevious from '@joplin/lib/hooks/usePrevious'; import PlatformImplementation from '../../services/plugins/PlatformImplementation'; import AccessibleView from '../accessibility/AccessibleView'; +import useOnDevPluginsUpdated from './utils/useOnDevPluginsUpdated'; const logger = Logger.create('PluginRunnerWebView'); @@ -29,20 +30,33 @@ const usePlugins = ( pluginRunner: PluginRunner, webviewLoaded: boolean, pluginSettings: PluginSettings, + pluginSupportEnabled: boolean, + devPluginPath: string, ) => { const store = useStore(); const lastPluginRunner = usePrevious(pluginRunner); + const [reloadCounter, setReloadCounter] = useState(0); // Only set reloadAll to true here -- this ensures that all plugins are reloaded, // even if loadPlugins is cancelled and re-run. const reloadAllRef = useRef(false); reloadAllRef.current ||= pluginRunner !== lastPluginRunner; + useOnDevPluginsUpdated(async (pluginId: string) => { + logger.info(`Dev plugin ${pluginId} updated. Reloading...`); + await PluginService.instance().unloadPlugin(pluginId); + setReloadCounter(counter => counter + 1); + }, devPluginPath, pluginSupportEnabled); + useAsyncEffect(async (event) => { if (!webviewLoaded) { return; } + if (reloadCounter > 0) { + logger.debug('Reloading with counter set to', reloadCounter); + } + await loadPlugins({ pluginRunner, pluginSettings, @@ -56,7 +70,7 @@ const usePlugins = ( if (!event.cancelled) { reloadAllRef.current = false; } - }, [pluginRunner, store, webviewLoaded, pluginSettings]); + }, [pluginRunner, store, webviewLoaded, pluginSettings, reloadCounter]); }; const useUnloadPluginsOnGlobalDisable = ( @@ -79,6 +93,7 @@ interface Props { serializedPluginSettings: SerializedPluginSettings; pluginSupportEnabled: boolean; pluginStates: PluginStates; + devPluginPath: string; pluginHtmlContents: PluginHtmlContents; themeId: number; } @@ -98,7 +113,7 @@ const PluginRunnerWebViewComponent: React.FC = props => { }, [webviewReloadCounter]); const pluginSettings = usePluginSettings(props.serializedPluginSettings); - usePlugins(pluginRunner, webviewLoaded, pluginSettings); + usePlugins(pluginRunner, webviewLoaded, pluginSettings, props.pluginSupportEnabled, props.devPluginPath); useUnloadPluginsOnGlobalDisable(props.pluginStates, props.pluginSupportEnabled); const onLoadStart = useCallback(() => { @@ -183,6 +198,7 @@ export default connect((state: AppState) => { const result: Props = { serializedPluginSettings: state.settings['plugins.states'], pluginSupportEnabled: state.settings['plugins.pluginSupportEnabled'], + devPluginPath: state.settings['plugins.devPluginPaths'], pluginStates: state.pluginService.plugins, pluginHtmlContents: state.pluginService.pluginHtmlContents, themeId: state.settings.theme, diff --git a/packages/app-mobile/components/plugins/utils/useOnDevPluginsUpdated.ts b/packages/app-mobile/components/plugins/utils/useOnDevPluginsUpdated.ts new file mode 100644 index 00000000000..f1ad164bdd0 --- /dev/null +++ b/packages/app-mobile/components/plugins/utils/useOnDevPluginsUpdated.ts @@ -0,0 +1,60 @@ +import useAsyncEffect from '@joplin/lib/hooks/useAsyncEffect'; +import shim from '@joplin/lib/shim'; +import time from '@joplin/lib/time'; +import { basename, join } from 'path'; +import { useRef } from 'react'; + +type OnDevPluginChange = (id: string)=> void; + +const useOnDevPluginsUpdated = (onDevPluginChange: OnDevPluginChange, devPluginPath: string, pluginSupportEnabled: boolean) => { + const onDevPluginChangeRef = useRef(onDevPluginChange); + onDevPluginChangeRef.current = onDevPluginChange; + const isFirstUpdateRef = useRef(true); + + useAsyncEffect(async (event) => { + if (!devPluginPath || !pluginSupportEnabled) return; + + const itemToLastModTime = new Map(); + + // publishPath should point to the publish/ subfolder of a plugin's development + // directory. + const checkPluginChange = async (pluginPublishPath: string) => { + const dirStats = await shim.fsDriver().readDirStats(pluginPublishPath); + let hasChange = false; + let changedPluginId = ''; + for (const item of dirStats) { + if (item.path.endsWith('.jpl')) { + const lastModTime = itemToLastModTime.get(item.path); + const modTime = item.mtime.getTime(); + if (lastModTime === undefined || lastModTime < modTime) { + itemToLastModTime.set(item.path, modTime); + hasChange = true; + changedPluginId = basename(item.path, '.jpl'); + break; + } + } + } + + if (hasChange) { + if (isFirstUpdateRef.current) { + // Avoid sending an event the first time the hook is called. The first iteration + // collects initial timestamp information. In that case, hasChange + // will always be true, even with no plugin reload. + isFirstUpdateRef.current = false; + } else { + onDevPluginChangeRef.current(changedPluginId); + } + } + }; + + while (!event.cancelled) { + const publishFolder = join(devPluginPath, 'publish'); + await checkPluginChange(publishFolder); + + const pollingIntervalSeconds = 5; + await time.sleep(pollingIntervalSeconds); + } + }, [devPluginPath, pluginSupportEnabled]); +}; + +export default useOnDevPluginsUpdated; diff --git a/packages/app-mobile/components/screens/ConfigScreen/ConfigScreen.tsx b/packages/app-mobile/components/screens/ConfigScreen/ConfigScreen.tsx index 4539d43cca3..1c849479033 100644 --- a/packages/app-mobile/components/screens/ConfigScreen/ConfigScreen.tsx +++ b/packages/app-mobile/components/screens/ConfigScreen/ConfigScreen.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { Platform, Linking, View, Switch, ScrollView, Text, TouchableOpacity, Alert, PermissionsAndroid, Dimensions, AccessibilityInfo } from 'react-native'; +import { Platform, Linking, View, ScrollView, Text, TouchableOpacity, Alert, PermissionsAndroid, Dimensions, AccessibilityInfo } from 'react-native'; import Setting, { AppType, SettingMetadataSection } from '@joplin/lib/models/Setting'; import NavService from '@joplin/lib/services/NavService'; import SearchEngine from '@joplin/lib/services/search/SearchEngine'; @@ -12,7 +12,6 @@ import { connect } from 'react-redux'; import ScreenHeader from '../../ScreenHeader'; import { _ } from '@joplin/lib/locale'; import BaseScreenComponent from '../../base-screen'; -import { themeStyle } from '../../global-style'; import * as shared from '@joplin/lib/components/shared/config/config-shared'; import SyncTargetRegistry from '@joplin/lib/SyncTargetRegistry'; import biometricAuthenticate from '../../biometrics/biometricAuthenticate'; @@ -36,6 +35,8 @@ import EnablePluginSupportPage from './plugins/EnablePluginSupportPage'; import getVersionInfoText from '../../../utils/getVersionInfoText'; import JoplinCloudConfig, { emailToNoteDescription, emailToNoteLabel } from './JoplinCloudConfig'; import shim from '@joplin/lib/shim'; +import SettingsToggle from './SettingsToggle'; +import { UpdateSettingValueCallback } from './types'; interface ConfigScreenState { // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied @@ -673,22 +674,16 @@ class ConfigScreenComponent extends BaseScreenComponent - - - {label} - - {/* eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied */} - void updateSettingValue(key, value)} /> - - {descriptionComp} - - ); + private renderToggle(key: string, label: string, value: unknown, updateSettingValue: UpdateSettingValueCallback) { + return ; } // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied diff --git a/packages/app-mobile/components/screens/ConfigScreen/FileSystemPathSelector.tsx b/packages/app-mobile/components/screens/ConfigScreen/FileSystemPathSelector.tsx index 675216b09ab..1bd64af243a 100644 --- a/packages/app-mobile/components/screens/ConfigScreen/FileSystemPathSelector.tsx +++ b/packages/app-mobile/components/screens/ConfigScreen/FileSystemPathSelector.tsx @@ -3,18 +3,23 @@ import * as React from 'react'; import shim from '@joplin/lib/shim'; import { FunctionComponent, useCallback, useEffect, useState } from 'react'; import { ConfigScreenStyles } from './configScreenStyles'; -import { View, Text } from 'react-native'; +import { View, Text, StyleSheet } from 'react-native'; import Setting, { SettingItem } from '@joplin/lib/models/Setting'; import { openDocumentTree } from '@joplin/react-native-saf-x'; import { UpdateSettingValueCallback } from './types'; import { reg } from '@joplin/lib/registry'; import type FsDriverWeb from '../../../utils/fs-driver/fs-driver-rn.web'; -import { TouchableRipple } from 'react-native-paper'; +import { IconButton, TouchableRipple } from 'react-native-paper'; +import { _ } from '@joplin/lib/locale'; + +type Mode = 'read'|'readwrite'; interface Props { + themeId: number; styles: ConfigScreenStyles; settingMetadata: SettingItem; - mode: 'read'|'readwrite'; + mode: Mode; + description: React.ReactNode|null; updateSettingValue: UpdateSettingValueCallback; } @@ -23,30 +28,28 @@ type ExtendedSelf = (typeof window.self) & { }; declare const self: ExtendedSelf; -const FileSystemPathSelector: FunctionComponent = props => { +const useFileSystemPath = (settingId: string, updateSettingValue: UpdateSettingValueCallback, accessMode: Mode) => { const [fileSystemPath, setFileSystemPath] = useState(''); - const settingId = props.settingMetadata.key; - useEffect(() => { setFileSystemPath(Setting.value(settingId)); }, [settingId]); - const selectDirectoryButtonPress = useCallback(async () => { + const showDirectoryPicker = useCallback(async () => { if (shim.mobilePlatform() === 'web') { // Directory picker IDs can't include certain characters. const pickerId = `setting-${settingId}`.replace(/[^a-zA-Z]/g, '_'); - const handle = await self.showDirectoryPicker({ id: pickerId, mode: props.mode }); + const handle = await self.showDirectoryPicker({ id: pickerId, mode: accessMode }); const fsDriver = shim.fsDriver() as FsDriverWeb; - const uri = await fsDriver.mountExternalDirectory(handle, pickerId, props.mode); - await props.updateSettingValue(settingId, uri); + const uri = await fsDriver.mountExternalDirectory(handle, pickerId, accessMode); + await updateSettingValue(settingId, uri); setFileSystemPath(uri); } else { try { const doc = await openDocumentTree(true); if (doc?.uri) { setFileSystemPath(doc.uri); - await props.updateSettingValue(settingId, doc.uri); + await updateSettingValue(settingId, doc.uri); } else { throw new Error('User cancelled operation'); } @@ -54,32 +57,78 @@ const FileSystemPathSelector: FunctionComponent = props => { reg.logger().info('Didn\'t pick sync dir: ', e); } } - }, [props.updateSettingValue, settingId, props.mode]); + }, [updateSettingValue, settingId, accessMode]); + + const clearPath = useCallback(() => { + setFileSystemPath(''); + void updateSettingValue(settingId, ''); + }, [updateSettingValue, settingId]); // Supported on Android and some versions of Chrome const supported = shim.fsDriver().isUsingAndroidSAF() || (shim.mobilePlatform() === 'web' && 'showDirectoryPicker' in self); - if (!supported) { - return null; - } + + return { clearPath, showDirectoryPicker, fileSystemPath, supported }; +}; + +const pathSelectorStyles = StyleSheet.create({ + innerContainer: { + paddingTop: 0, + paddingBottom: 0, + paddingLeft: 0, + paddingRight: 0, + }, + mainButton: { + flexGrow: 1, + flexShrink: 1, + paddingHorizontal: 16, + paddingVertical: 22, + margin: 0, + }, + buttonContent: { + flexDirection: 'row', + }, +}); + +const FileSystemPathSelector: FunctionComponent = props => { + const settingId = props.settingMetadata.key; + const { clearPath, showDirectoryPicker, fileSystemPath, supported } = useFileSystemPath(settingId, props.updateSettingValue, props.mode); const styleSheet = props.styles.styleSheet; - return ( + const clearButton = ( + + ); + + const containerStyles = props.styles.getContainerStyle(!!props.description); + + const control = - + {props.settingMetadata.label()} - + {fileSystemPath} - ); + {fileSystemPath ? clearButton : null} + ; + + if (!supported) return null; + + return + {control} + {props.description} + ; }; export default FileSystemPathSelector; diff --git a/packages/app-mobile/components/screens/ConfigScreen/SettingComponent.tsx b/packages/app-mobile/components/screens/ConfigScreen/SettingComponent.tsx index 74cd66e2b06..748ffdaace1 100644 --- a/packages/app-mobile/components/screens/ConfigScreen/SettingComponent.tsx +++ b/packages/app-mobile/components/screens/ConfigScreen/SettingComponent.tsx @@ -38,7 +38,7 @@ const SettingComponent: React.FunctionComponent = props => { const styleSheet = props.styles.styleSheet; const descriptionComp = !settingDescription ? null : {settingDescription}; - const containerStyle = props.styles.getContainerStyle(!!settingDescription); + const containerStyles = props.styles.getContainerStyle(!!settingDescription); const labelId = useId(); @@ -49,8 +49,8 @@ const SettingComponent: React.FunctionComponent = props => { const label = md.label(); return ( - - + + {label} @@ -125,17 +125,19 @@ const SettingComponent: React.FunctionComponent = props => { if (['sync.2.path', 'plugins.devPluginPaths'].includes(md.key) && (shim.fsDriver().isUsingAndroidSAF() || shim.mobilePlatform() === 'web')) { return ( ); } return ( - - + + {md.label()} diff --git a/packages/app-mobile/components/screens/ConfigScreen/SettingsToggle.tsx b/packages/app-mobile/components/screens/ConfigScreen/SettingsToggle.tsx index a9c4f38cf2b..ebace0634b5 100644 --- a/packages/app-mobile/components/screens/ConfigScreen/SettingsToggle.tsx +++ b/packages/app-mobile/components/screens/ConfigScreen/SettingsToggle.tsx @@ -24,9 +24,11 @@ const SettingsToggle: FunctionComponent = props => { const theme = themeStyle(props.themeId); const styleSheet = props.styles.styleSheet; + const containerStyles = props.styles.getContainerStyle(!!props.description); + return ( - - + + {props.label} diff --git a/packages/app-mobile/components/screens/ConfigScreen/configScreenStyles.ts b/packages/app-mobile/components/screens/ConfigScreen/configScreenStyles.ts index 2ddff9b9b9f..b243c7c091d 100644 --- a/packages/app-mobile/components/screens/ConfigScreen/configScreenStyles.ts +++ b/packages/app-mobile/components/screens/ConfigScreen/configScreenStyles.ts @@ -6,8 +6,11 @@ type SidebarButtonStyle = ViewStyle & { height: number }; export interface ConfigScreenStyleSheet { body: ViewStyle; + settingOuterContainer: ViewStyle; + settingOuterContainerNoBorder: ViewStyle; settingContainer: ViewStyle; settingContainerNoBottomBorder: ViewStyle; + headerWrapperStyle: ViewStyle; headerTextStyle: TextStyle; @@ -39,12 +42,17 @@ export interface ConfigScreenStyleSheet { settingControl: TextStyle; } +interface ContainerStyles { + outerContainer: ViewStyle; + innerContainer: ViewStyle; +} + export interface ConfigScreenStyles { styleSheet: ConfigScreenStyleSheet; selectedSectionButtonColor: string; keyboardAppearance: 'default'|'light'|'dark'; - getContainerStyle(hasDescription: boolean): ViewStyle; + getContainerStyle(hasDescription: boolean): ContainerStyles; } const configScreenStyles = (themeId: number): ConfigScreenStyles => { @@ -107,6 +115,14 @@ const configScreenStyles = (themeId: number): ConfigScreenStyles => { justifyContent: 'flex-start', flexDirection: 'column', }, + settingOuterContainer: { + flexDirection: 'column', + borderBottomWidth: 1, + borderBottomColor: theme.dividerColor, + }, + settingOuterContainerNoBorder: { + flexDirection: 'column', + }, settingContainer: settingContainerStyle, settingContainerNoBottomBorder: { ...settingContainerStyle, @@ -229,7 +245,9 @@ const configScreenStyles = (themeId: number): ConfigScreenStyles => { selectedSectionButtonColor: theme.selectedColor, keyboardAppearance: theme.keyboardAppearance, getContainerStyle: (hasDescription) => { - return !hasDescription ? styleSheet.settingContainer : styleSheet.settingContainerNoBottomBorder; + const outerContainer = hasDescription ? styleSheet.settingOuterContainer : styleSheet.settingOuterContainerNoBorder; + const innerContainer = hasDescription ? styleSheet.settingContainerNoBottomBorder : styleSheet.settingContainer; + return { outerContainer, innerContainer }; }, }; }; diff --git a/packages/app-mobile/components/screens/ConfigScreen/plugins/PluginBox/PluginChips.tsx b/packages/app-mobile/components/screens/ConfigScreen/plugins/PluginBox/PluginChips.tsx index 9002609d350..cd4628030ca 100644 --- a/packages/app-mobile/components/screens/ConfigScreen/plugins/PluginBox/PluginChips.tsx +++ b/packages/app-mobile/components/screens/ConfigScreen/plugins/PluginBox/PluginChips.tsx @@ -92,12 +92,20 @@ const PluginChips: React.FC = props => { return {_('Installed')}; }; + const renderDevChip = () => { + if (!item.devMode) { + return null; + } + return {_('Dev')}; + }; + return {renderIncompatibleChip()} {renderInstalledChip()} {renderErrorsChip()} {renderBuiltInChip()} {renderUpdatableChip()} + {renderDevChip()} {renderDisabledChip()} ; }; diff --git a/packages/app-mobile/components/screens/ConfigScreen/plugins/PluginInfoModal.tsx b/packages/app-mobile/components/screens/ConfigScreen/plugins/PluginInfoModal.tsx index ae6869e7353..dce8550d201 100644 --- a/packages/app-mobile/components/screens/ConfigScreen/plugins/PluginInfoModal.tsx +++ b/packages/app-mobile/components/screens/ConfigScreen/plugins/PluginInfoModal.tsx @@ -203,7 +203,7 @@ const PluginInfoModalContent: React.FC = props => { item={item} type={ButtonType.Delete} onPress={props.pluginCallbacks.onDelete} - disabled={item.builtIn || (item?.deleted ?? true)} + disabled={item.builtIn || item.devMode || (item?.deleted ?? true)} title={item?.deleted ? _('Deleted') : _('Delete')} /> ); diff --git a/packages/app-mobile/components/screens/ConfigScreen/plugins/PluginUploadButton.tsx b/packages/app-mobile/components/screens/ConfigScreen/plugins/PluginUploadButton.tsx index 1b46bf0fec7..0d59ac68b99 100644 --- a/packages/app-mobile/components/screens/ConfigScreen/plugins/PluginUploadButton.tsx +++ b/packages/app-mobile/components/screens/ConfigScreen/plugins/PluginUploadButton.tsx @@ -91,7 +91,7 @@ const PluginUploadButton: React.FC = props => { }, [props.pluginSettings, props.updatePluginStates]); return ( - + Promise; +export type UpdateSettingValueCallback = (key: string, value: any)=> void|Promise; export interface PluginStatusRecord { [pluginId: string]: boolean; diff --git a/packages/lib/models/settings/builtInMetadata.ts b/packages/lib/models/settings/builtInMetadata.ts index 8e5d8e05f73..e046547cda7 100644 --- a/packages/lib/models/settings/builtInMetadata.ts +++ b/packages/lib/models/settings/builtInMetadata.ts @@ -929,9 +929,23 @@ const builtInMetadata = (Setting: typeof SettingType) => { section: 'plugins', public: true, advanced: true, - appTypes: [AppType.Desktop], + appTypes: [AppType.Desktop, AppType.Mobile], + // For now, development plugins are only enabled on desktop & web. + show: (settings) => { + if (shim.isElectron()) return true; + if (shim.mobilePlatform() !== 'web') return false; + + const pluginSupportEnabled = settings['plugins.pluginSupportEnabled']; + return !!pluginSupportEnabled; + }, label: () => 'Development plugins', - description: () => 'You may add multiple plugin paths, each separated by a comma. You will need to restart the application for the changes to take effect.', + description: () => { + if (shim.mobilePlatform()) { + return 'The path to a plugin\'s development directory. When the plugin is rebuilt, Joplin reloads the plugin automatically.'; + } else { + return 'You may add multiple plugin paths, each separated by a comma. You will need to restart the application for the changes to take effect.'; + } + }, storage: SettingStorage.File, }, diff --git a/packages/lib/services/CommandService.ts b/packages/lib/services/CommandService.ts index 5a1fba54e27..7fa9b026b74 100644 --- a/packages/lib/services/CommandService.ts +++ b/packages/lib/services/CommandService.ts @@ -209,6 +209,10 @@ export default class CommandService extends BaseService { }; } + public unregisterDeclaration(name: string) { + delete this.commands_[name]; + } + public registerRuntime(commandName: string, runtime: CommandRuntime, allowMultiple = false): RegisteredRuntime { if (typeof commandName !== 'string') throw new Error(`Command name must be a string. Got: ${JSON.stringify(commandName)}`); diff --git a/packages/lib/services/commands/ToolbarButtonUtils.ts b/packages/lib/services/commands/ToolbarButtonUtils.ts index 554bb8b8832..a86a5766c84 100644 --- a/packages/lib/services/commands/ToolbarButtonUtils.ts +++ b/packages/lib/services/commands/ToolbarButtonUtils.ts @@ -48,22 +48,24 @@ export default class ToolbarButtonUtils { private commandToToolbarButton(commandName: string, whenClauseContext: WhenClauseContext): ToolbarButtonInfo { const newEnabled = this.service.isEnabled(commandName, whenClauseContext); const newTitle = this.service.title(commandName); + const newIcon = this.service.iconName(commandName); + const newLabel = this.service.label(commandName); if ( this.toolbarButtonCache_[commandName] && this.toolbarButtonCache_[commandName].info.enabled === newEnabled && - this.toolbarButtonCache_[commandName].info.title === newTitle + this.toolbarButtonCache_[commandName].info.title === newTitle && + this.toolbarButtonCache_[commandName].info.iconName === newIcon && + this.toolbarButtonCache_[commandName].info.tooltip === newLabel ) { return this.toolbarButtonCache_[commandName].info; } - const command = this.service.commandByName(commandName, { runtimeMustBeRegistered: true }); - const output: ToolbarButtonInfo = { type: 'button', name: commandName, - tooltip: this.service.label(commandName), - iconName: command.declaration.iconName, + tooltip: newLabel, + iconName: newIcon, enabled: newEnabled, onClick: async () => { await this.service.execute(commandName); diff --git a/packages/lib/services/plugins/api/JoplinCommands.ts b/packages/lib/services/plugins/api/JoplinCommands.ts index 1df70fe1352..7f4d31624e9 100644 --- a/packages/lib/services/plugins/api/JoplinCommands.ts +++ b/packages/lib/services/plugins/api/JoplinCommands.ts @@ -122,6 +122,7 @@ export default class JoplinCommands { CommandService.instance().registerRuntime(declaration.name, runtime); this.plugin_.addOnUnloadListener(() => { CommandService.instance().unregisterRuntime(declaration.name); + CommandService.instance().unregisterDeclaration(declaration.name); }); } diff --git a/packages/lib/services/plugins/loadPlugins.ts b/packages/lib/services/plugins/loadPlugins.ts index ac83b7cf001..f09cd84f8bf 100644 --- a/packages/lib/services/plugins/loadPlugins.ts +++ b/packages/lib/services/plugins/loadPlugins.ts @@ -51,10 +51,7 @@ const loadPlugins = async ({ } } - if (Setting.value('env') === 'dev') { - logger.info('Running dev plugins (if any)...'); - await pluginService.loadAndRunDevPlugins(pluginSettings); - } + await pluginService.loadAndRunDevPlugins(pluginSettings); if (cancelEvent.cancelled) { logger.info('Cancelled.'); diff --git a/packages/lib/services/plugins/reducer.ts b/packages/lib/services/plugins/reducer.ts index de9a3be7366..926e3fc0c58 100644 --- a/packages/lib/services/plugins/reducer.ts +++ b/packages/lib/services/plugins/reducer.ts @@ -202,6 +202,7 @@ const reducer = (draftRoot: Draft, action: any) => { case 'PLUGIN_UNLOAD': delete draft.plugins[action.pluginId]; + delete draft.pluginHtmlContents[action.pluginId]; break; } diff --git a/readme/api/references/mobile_plugin_debugging.md b/readme/api/references/mobile_plugin_debugging.md index 64ec33c5d32..de65f773aad 100644 --- a/readme/api/references/mobile_plugin_debugging.md +++ b/readme/api/references/mobile_plugin_debugging.md @@ -32,6 +32,20 @@ After loading, plugins are run in an ` + + + + + +" +`; + +exports[`InteropService_Importer_OneNote should remove hyperlink from title: Tips from a Pro Using Trees for Dramatic Landscape Photography 1`] = ` +" + + + + Tips from a Pro: Using Trees for Dramatic Landscape Photography + + + + +
 
+
Saturday, February 11, 2023
+
12:56 AM
+
+ + + +" +`; + exports[`InteropService_Importer_OneNote should remove hyperlink from title: wikipedia link 1`] = ` " diff --git a/packages/onenote-converter/src/page/rich_text.rs b/packages/onenote-converter/src/page/rich_text.rs index b7b8a8fd2b4..8c5ccf6ae0b 100644 --- a/packages/onenote-converter/src/page/rich_text.rs +++ b/packages/onenote-converter/src/page/rich_text.rs @@ -100,6 +100,7 @@ impl<'a> Renderer<'a> { } let mut in_hyperlink = false; + let mut is_href_finished = true; let content = parts .into_iter() @@ -107,12 +108,17 @@ impl<'a> Renderer<'a> { .zip(styles.iter()) .map(|(text, style)| { if style.hyperlink() { - let text = self.render_hyperlink(text, style, in_hyperlink); - in_hyperlink = true; - - text + let result = self.render_hyperlink(text.clone(), style, in_hyperlink, is_href_finished); + if result.is_ok() { + in_hyperlink = true; + is_href_finished = result.as_ref().unwrap().1; + Ok(result.unwrap().0) + } else { + Ok(text) + } } else { in_hyperlink = false; + is_href_finished = true; let style = self.parse_style(style); @@ -128,12 +134,17 @@ impl<'a> Renderer<'a> { Ok(fix_newlines(&content)) } + /// The hyperlink is delimited by the HYPERLINK_MARKER until the closing double quote + /// In some cases the hyperlink is broken in more than one style (e.g.: when there are + /// chinese characters on the url path), so we must keep track of the href status + /// https://github.com/laurent22/joplin/issues/11600 fn render_hyperlink( &self, text: String, style: &ParagraphStyling, in_hyperlink: bool, - ) -> Result { + is_href_finished: bool, + ) -> Result<(String, bool)> { const HYPERLINK_MARKER: &str = "\u{fddf}HYPERLINK \""; let style = self.parse_style(style); @@ -141,18 +152,30 @@ impl<'a> Renderer<'a> { if text.starts_with(HYPERLINK_MARKER) { let url = text .strip_prefix(HYPERLINK_MARKER) - .wrap_err("Hyperlink has no start marker")? - .strip_suffix('"') - .wrap_err("Hyperlink has no end marker")?; + .wrap_err("Hyperlink has no start marker")?; - Ok(format!("", url, style)) - } else if in_hyperlink { - Ok(text + "") + let url_2 = url.strip_suffix('"'); + + if url_2.is_some() { + return Ok((format!("", url_2.unwrap(), style), true)); + } else { + // If we didn't find the double quotes means that href still has content in following styles + Ok((format!("", true)) + } else if in_hyperlink && !is_href_finished { + let url = text.strip_suffix('"'); + if url.is_some() { + return Ok((format!("{}\" style=\"{}\">", url.unwrap(), style), true)); + } else { + Ok((text, false)) + } } else { - Ok(format!( + Ok((format!( "{}", text, style, text - )) + ), true)) } } From 86e6445526f9b61ac141dba82011f795476ca812 Mon Sep 17 00:00:00 2001 From: pedr Date: Thu, 9 Jan 2025 17:57:23 -0300 Subject: [PATCH 24/30] Desktop: Fixes #11617: Links from imported notes from OneNote were being wrongly rendered (#11618) --- .../hyperlink_marker_as_first_character.zip | Bin 0 -> 187908 bytes .../InteropService_Importer_OneNote.test.ts | 11 ++ ...teropService_Importer_OneNote.test.js.snap | 139 ++++++++++++++++++ .../onenote-converter/src/page/rich_text.rs | 32 +++- 4 files changed, 175 insertions(+), 7 deletions(-) create mode 100644 packages/app-cli/tests/support/onenote/hyperlink_marker_as_first_character.zip diff --git a/packages/app-cli/tests/support/onenote/hyperlink_marker_as_first_character.zip b/packages/app-cli/tests/support/onenote/hyperlink_marker_as_first_character.zip new file mode 100644 index 0000000000000000000000000000000000000000..7352fd91d107c753454138f4bb89530412a3ef95 GIT binary patch literal 187908 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 z zYhu=tg>oL(c%VR97PzvQTUn|mv4JD_N*0=iI-_eP=)ce}g>jRYs-kG-f|_w4GblWG zKBHD^!cC~Fy>|Qh_Ws5&=*OuCo~No_miHZ(2|}q>J9+A4x7W29+=O|)7e+LfxvUvc zngan%)6`TM6xV=o=d(e(b9iMHTI15?OJmnLe)^=Y>j!OWtb>VlJH0`Fc;eKVufOok zILTC9_ksW_hLQqcMeHF8%Q^PQw)-sf)D&Px7;#v&PMGBjbBon1(-O8cH@kgsaCbbo z?M?=Q7^_-{xWZ*~&HAT)`s3%0AD*vQ!TP@O!nfK`Z6eKlhae!!D%6Kz7$|eZJyq4> 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 GME?U$Ar6ZG literal 0 HcmV?d00001 diff --git a/packages/lib/services/interop/InteropService_Importer_OneNote.test.ts b/packages/lib/services/interop/InteropService_Importer_OneNote.test.ts index 87ce59925b0..b63a8faa278 100644 --- a/packages/lib/services/interop/InteropService_Importer_OneNote.test.ts +++ b/packages/lib/services/interop/InteropService_Importer_OneNote.test.ts @@ -196,4 +196,15 @@ describe('InteropService_Importer_OneNote', () => { expect(noteToTest).toBeTruthy(); expect(noteToTest.body.includes('Tips from a Pro: Using Trees for Dramatic Landscape Photography')).toBe(true); }); + + skipIfNotCI('should render links properly by ignoring wrongly set indices when the first character is a hyperlink marker', async () => { + let idx = 0; + const originalIdGenerator = BaseModel.setIdGenerator(() => String(idx++)); + const notes = await importNote(`${supportDir}/onenote/hyperlink_marker_as_first_character.zip`); + + for (const note of notes) { + expect(note.body).toMatchSnapshot(note.title); + } + BaseModel.setIdGenerator(originalIdGenerator); + }); }); diff --git a/packages/lib/services/interop/__snapshots__/InteropService_Importer_OneNote.test.js.snap b/packages/lib/services/interop/__snapshots__/InteropService_Importer_OneNote.test.js.snap index bc56c8c3a5e..c0fe8f27389 100644 --- a/packages/lib/services/interop/__snapshots__/InteropService_Importer_OneNote.test.js.snap +++ b/packages/lib/services/interop/__snapshots__/InteropService_Importer_OneNote.test.js.snap @@ -1028,3 +1028,142 @@ exports[`InteropService_Importer_OneNote should remove hyperlink from title: 风 " `; + +exports[`InteropService_Importer_OneNote should render links properly by ignoring wrongly set indices when the first character is a hyperlink marker: Is Mexico safe for shooting Street Photography 1`] = ` +" + + + + Is Mexico safe for shooting Street Photography? + + + + +
 
+
Monday, August 28, 2023
+
10:52 AM
+
+ + + +" +`; + +exports[`InteropService_Importer_OneNote should render links properly by ignoring wrongly set indices when the first character is a hyperlink marker: Quick Notes 1`] = ` +" + + + + Quick Notes + + + + + + + + + + + +" +`; diff --git a/packages/onenote-converter/src/page/rich_text.rs b/packages/onenote-converter/src/page/rich_text.rs index 8c5ccf6ae0b..ccb5c9dbc79 100644 --- a/packages/onenote-converter/src/page/rich_text.rs +++ b/packages/onenote-converter/src/page/rich_text.rs @@ -79,6 +79,20 @@ impl<'a> Renderer<'a> { styles.pop(); } + // Probably the best solution here would be to rewrite the render_hyperlink to take this + // case in account, backtracking if necessary, but this will do for now + // https://github.com/laurent22/joplin/issues/11617 + if text.starts_with("\u{fddf}") { + let first_indice = match indices.get(0) { + Some(i) => *i, + None => 0, + }; + if first_indice == 1 { + indices.remove(0); + styles.pop(); + } + } + if indices.is_empty() { return Ok(fix_newlines(&text)); } @@ -108,11 +122,12 @@ impl<'a> Renderer<'a> { .zip(styles.iter()) .map(|(text, style)| { if style.hyperlink() { - let result = self.render_hyperlink(text.clone(), style, in_hyperlink, is_href_finished); + let result = + self.render_hyperlink(text.clone(), style, in_hyperlink, is_href_finished); if result.is_ok() { in_hyperlink = true; is_href_finished = result.as_ref().unwrap().1; - Ok(result.unwrap().0) + Ok(result.unwrap().0) } else { Ok(text) } @@ -157,7 +172,10 @@ impl<'a> Renderer<'a> { let url_2 = url.strip_suffix('"'); if url_2.is_some() { - return Ok((format!("", url_2.unwrap(), style), true)); + return Ok(( + format!("", url_2.unwrap(), style), + true, + )); } else { // If we didn't find the double quotes means that href still has content in following styles Ok((format!(" Renderer<'a> { Ok((text, false)) } } else { - Ok((format!( - "{}", - text, style, text - ), true)) + Ok(( + format!("{}", text, style, text), + true, + )) } } From 950ffef84d11d37944f67d7be001c68dd38760e1 Mon Sep 17 00:00:00 2001 From: Henry Heino <46334387+personalizedrefrigerator@users.noreply.github.com> Date: Thu, 9 Jan 2025 12:57:47 -0800 Subject: [PATCH 25/30] Windows: Resolves #11508: Allow installer to skip uninstallation step after repeated failures (#11612) --- ...p-builder-lib-npm-24.13.3-86a66c0bf3.patch | 81 ++++++++++++++++++- yarn.lock | 4 +- 2 files changed, 80 insertions(+), 5 deletions(-) diff --git a/.yarn/patches/app-builder-lib-npm-24.13.3-86a66c0bf3.patch b/.yarn/patches/app-builder-lib-npm-24.13.3-86a66c0bf3.patch index 310ffc5f6b0..eaf90825797 100644 --- a/.yarn/patches/app-builder-lib-npm-24.13.3-86a66c0bf3.patch +++ b/.yarn/patches/app-builder-lib-npm-24.13.3-86a66c0bf3.patch @@ -1,7 +1,15 @@ -# This patch prevents the installer from considering itself as a running instance of Joplin. +# This patch's goal is to work around an issue in the NSIS uninstaller on Windows: +# - For future uninstallers, this patch backports an upstream commit that changes how +# running copies of the app are found. +# - See https://github.com/electron-userland/electron-builder/pull/8133 +# - If an existing uninstaller fails, gives an option to continue with the installation +# despite the failure. +# - Updates "uninstall failed" error messages to state that uninstallation failed (rather +# than incorrectly stating that the issue was with closing the app). +# # See https://github.com/laurent22/joplin/pull/11541 diff --git a/templates/nsis/include/allowOnlyOneInstallerInstance.nsh b/templates/nsis/include/allowOnlyOneInstallerInstance.nsh -index fe5d45c730f36c9fe8d8cfea12e242e501b67139..af2ce5c90ac910b079e24992519bffe33d57668a 100644 +index fe5d45c730f36c9fe8d8cfea12e242e501b67139..97b27fce6798e30e3e631221435f09b3579e77c3 100644 --- a/templates/nsis/include/allowOnlyOneInstallerInstance.nsh +++ b/templates/nsis/include/allowOnlyOneInstallerInstance.nsh @@ -42,7 +42,7 @@ @@ -9,7 +17,74 @@ index fe5d45c730f36c9fe8d8cfea12e242e501b67139..af2ce5c90ac910b079e24992519bffe3 !else # find process owned by current user - nsExec::Exec `%SYSTEMROOT%\System32\cmd.exe /c tasklist /FI "USERNAME eq %USERNAME%" /FI "IMAGENAME eq ${_FILE}" /FO csv | %SYSTEMROOT%\System32\find.exe "${_FILE}"` -+ nsExec::Exec `%SYSTEMROOT%\System32\cmd.exe /c tasklist /FI "USERNAME eq %USERNAME%" /FI "PID ne $pid" /FI "IMAGENAME eq ${_FILE}" /FO csv | %SYSTEMROOT%\System32\find.exe "${_FILE}"` ++ nsExec::Exec `"$SYSDIR\cmd.exe" /c tasklist /FI "USERNAME eq %USERNAME%" /FI "IMAGENAME eq ${_FILE}" /FO csv | "$SYSDIR\find.exe" "${_FILE}"` Pop ${_ERR} !endif !macroend +@@ -73,7 +73,7 @@ + !ifdef INSTALL_MODE_PER_ALL_USERS + nsExec::Exec `taskkill /im "${APP_EXECUTABLE_FILENAME}" /fi "PID ne $pid"` + !else +- nsExec::Exec `%SYSTEMROOT%\System32\cmd.exe /c taskkill /im "${APP_EXECUTABLE_FILENAME}" /fi "PID ne $pid" /fi "USERNAME eq %USERNAME%"` ++ nsExec::Exec `"$SYSDIR\cmd.exe" /c taskkill /im "${APP_EXECUTABLE_FILENAME}" /fi "PID ne $pid" /fi "USERNAME eq %USERNAME%"` + !endif + # to ensure that files are not "in-use" + Sleep 300 +@@ -91,7 +91,7 @@ + !ifdef INSTALL_MODE_PER_ALL_USERS + nsExec::Exec `taskkill /f /im "${APP_EXECUTABLE_FILENAME}" /fi "PID ne $pid"` + !else +- nsExec::Exec `%SYSTEMROOT%\System32\cmd.exe /c taskkill /f /im "${APP_EXECUTABLE_FILENAME}" /fi "PID ne $pid" /fi "USERNAME eq %USERNAME%"` ++ nsExec::Exec `"$SYSDIR\cmd.exe" /c taskkill /f /im "${APP_EXECUTABLE_FILENAME}" /fi "PID ne $pid" /fi "USERNAME eq %USERNAME%"` + !endif + !insertmacro FIND_PROCESS "${APP_EXECUTABLE_FILENAME}" $R0 + ${If} $R0 == 0 +diff --git a/templates/nsis/include/installUtil.nsh b/templates/nsis/include/installUtil.nsh +index 47367741632726ba0886ac516461dbe98b7aea58..675965762375925a505ca6d8bbb67507ef696c2e 100644 +--- a/templates/nsis/include/installUtil.nsh ++++ b/templates/nsis/include/installUtil.nsh +@@ -126,10 +126,11 @@ Function handleUninstallResult + Return + + ${if} $R0 != 0 +- MessageBox MB_OK|MB_ICONEXCLAMATION "$(uninstallFailed): $R0" ++ # MessageBox MB_OK|MB_ICONEXCLAMATION "$(uninstallFailed): $R0" + DetailPrint `Uninstall was not successful. Uninstaller error code: $R0.` +- SetErrorLevel 2 +- Quit ++ DetailPrint `Continuing anyway. See https://github.com/laurent22/joplin/pull/11612.` ++ # SetErrorLevel 2 ++ # Quit + ${endif} + FunctionEnd + +@@ -216,11 +217,13 @@ Function uninstallOldVersion + IntOp $R5 $R5 + 1 + + ${if} $R5 > 5 +- MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "$(appCannotBeClosed)" /SD IDCANCEL IDRETRY OneMoreAttempt +- Return ++ MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "$(appCannotBeUninstalled)" /SD IDCANCEL IDRETRY ContinueWithoutUninstall ++ Abort ; Exit early ++ ContinueWithoutUninstall: ++ Return + ${endIf} + +- OneMoreAttempt: ++# OneMoreAttempt: ; Commented out because unused + ExecWait '"$uninstallerFileNameTemp" /S /KEEP_APP_DATA $0 _?=$installationDir' $R0 + ifErrors TryInPlace CheckResult + +diff --git a/templates/nsis/messages.yml b/templates/nsis/messages.yml +index a1c2847fa48d79f835b30b48e999ccaf3c818657..6884c18d1e77dbd6be114401d23cf5caf3e0dd94 100644 +--- a/templates/nsis/messages.yml ++++ b/templates/nsis/messages.yml +@@ -235,3 +235,8 @@ uninstallFailed: + sv: Det gick inte att avinstallera gamla programfiler. Försök att köra installationsprogrammet igen. + uk: Не вдалось видалити старі файли застосунку. Будь ласка, спробуйте запустити встановлювач знов. + zh_TW: 無法俺安裝舊的應用程式檔案。 請嘗試再次執行安裝程式。 ++ ++ ++appCannotBeUninstalled: ++ en: "The old version of ${PRODUCT_NAME} could not be removed. \nClick Retry to skip this step." ++ diff --git a/yarn.lock b/yarn.lock index f114860e16d..8c8d1dca702 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15614,7 +15614,7 @@ __metadata: "app-builder-lib@patch:app-builder-lib@npm%3A24.13.3#./.yarn/patches/app-builder-lib-npm-24.13.3-86a66c0bf3.patch::locator=root%40workspace%3A.": version: 24.13.3 - resolution: "app-builder-lib@patch:app-builder-lib@npm%3A24.13.3#./.yarn/patches/app-builder-lib-npm-24.13.3-86a66c0bf3.patch::version=24.13.3&hash=e2b05a&locator=root%40workspace%3A." + resolution: "app-builder-lib@patch:app-builder-lib@npm%3A24.13.3#./.yarn/patches/app-builder-lib-npm-24.13.3-86a66c0bf3.patch::version=24.13.3&hash=f44207&locator=root%40workspace%3A." dependencies: "@develar/schema-utils": ~2.6.5 "@electron/notarize": 2.2.1 @@ -15646,7 +15646,7 @@ __metadata: peerDependencies: dmg-builder: 24.13.3 electron-builder-squirrel-windows: 24.13.3 - checksum: e023282fbf7381b0b504ae0835dabb26ad0092c32fad89116aa259f790bba912805338bc895ed205b70a193e39559b3939e816c0afeacaca49f3b55c3446a807 + checksum: 6901faad49f5e705906fb1cdeb0d9324400b9eb168a37a1be76641e494630cfbf03184314b4f585cedfc0741f6a97b92c41aa97bd8c0b07076978a8aaa28c0b7 languageName: node linkType: hard From 11216902d0bbd3419cd42429e2d25bad0d66304f Mon Sep 17 00:00:00 2001 From: Laurent Cozic Date: Thu, 9 Jan 2025 20:58:24 +0000 Subject: [PATCH 26/30] Desktop release v3.2.9 --- packages/app-desktop/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app-desktop/package.json b/packages/app-desktop/package.json index 36ef2cccdcb..072dfc8033b 100644 --- a/packages/app-desktop/package.json +++ b/packages/app-desktop/package.json @@ -1,6 +1,6 @@ { "name": "@joplin/app-desktop", - "version": "3.2.8", + "version": "3.2.9", "description": "Joplin for Desktop", "main": "main.js", "private": true, From c18ab5a7fb0e1dc7157291b9dae6a21b0ab134f6 Mon Sep 17 00:00:00 2001 From: Joplin Bot Date: Fri, 10 Jan 2025 00:52:39 +0000 Subject: [PATCH 27/30] Doc: Auto-update documentation Auto-updated using release-website.sh --- packages/tools/postPreReleasesToForum.json | 3 ++- readme/about/changelog/desktop.md | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/tools/postPreReleasesToForum.json b/packages/tools/postPreReleasesToForum.json index e4f47e2a919..8f9c5e9fdf9 100644 --- a/packages/tools/postPreReleasesToForum.json +++ b/packages/tools/postPreReleasesToForum.json @@ -122,6 +122,7 @@ "android-v3.2.4": true, "v3.2.8": true, "android-v3.2.5": true, - "ios-v13.2.4": true + "ios-v13.2.4": true, + "v3.2.9": true } } \ No newline at end of file diff --git a/readme/about/changelog/desktop.md b/readme/about/changelog/desktop.md index 58628050bc8..08a97ffddef 100644 --- a/readme/about/changelog/desktop.md +++ b/readme/about/changelog/desktop.md @@ -1,5 +1,13 @@ # Joplin Desktop Changelog +## [v3.2.9](https://github.com/laurent22/joplin/releases/tag/v3.2.9) (Pre-release) - 2025-01-09T22:58:42Z + +- Improved: Remove "URI malformed" alert ([#11576](https://github.com/laurent22/joplin/issues/11576)) ([#11575](https://github.com/laurent22/joplin/issues/11575) by Self Not Found) +- Fixed: Fix keyboard can't add text after certain error/info dialogs are shown ([#11603](https://github.com/laurent22/joplin/issues/11603) by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) +- Fixed: Links from imported notes from OneNote were being wrongly rendered ([#11618](https://github.com/laurent22/joplin/issues/11618)) ([#11617](https://github.com/laurent22/joplin/issues/11617) by [@pedr](https://github.com/pedr)) +- Fixed: OneNote Importer should only use text on fallback title ([#11598](https://github.com/laurent22/joplin/issues/11598)) ([#11597](https://github.com/laurent22/joplin/issues/11597) by [@pedr](https://github.com/pedr)) +- Fixed: OneNote imported notes have broken links when there are chineses characters on link ([#11602](https://github.com/laurent22/joplin/issues/11602)) ([#11600](https://github.com/laurent22/joplin/issues/11600) by [@pedr](https://github.com/pedr)) + ## [v3.2.7](https://github.com/laurent22/joplin/releases/tag/v3.2.7) (Pre-release) - 2025-01-06T16:35:41Z - Improved: Plugins: Add Toast plugin API ([#11583](https://github.com/laurent22/joplin/issues/11583)) ([#11579](https://github.com/laurent22/joplin/issues/11579)) From 50d58433446733b30b9adb1c7dbdffb453e4abba Mon Sep 17 00:00:00 2001 From: Laurent Cozic Date: Fri, 10 Jan 2025 00:54:33 +0000 Subject: [PATCH 28/30] Desktop release v3.2.10 --- packages/app-desktop/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app-desktop/package.json b/packages/app-desktop/package.json index 072dfc8033b..cfc6bf514a7 100644 --- a/packages/app-desktop/package.json +++ b/packages/app-desktop/package.json @@ -1,6 +1,6 @@ { "name": "@joplin/app-desktop", - "version": "3.2.9", + "version": "3.2.10", "description": "Joplin for Desktop", "main": "main.js", "private": true, From 8d2ae7e20e9de89b9f8d44dd1218139a3aaa0869 Mon Sep 17 00:00:00 2001 From: Laurent Cozic Date: Fri, 10 Jan 2025 10:25:11 +0000 Subject: [PATCH 29/30] Tools: Better handling of different platforms in git-changelog --- packages/tools/git-changelog.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/tools/git-changelog.ts b/packages/tools/git-changelog.ts index 9a83c6e0503..d50f62e88ad 100644 --- a/packages/tools/git-changelog.ts +++ b/packages/tools/git-changelog.ts @@ -15,6 +15,9 @@ interface LogEntry { enum Platform { Unknown = 'unknown', Android = 'android', + Windows = 'windows', + MacOs = 'macos', + Linux = 'linux', Ios = 'ios', Desktop = 'desktop', Clipper = 'clipper', @@ -94,6 +97,9 @@ async function gitTags() { function platformFromTag(tagName: string): Platform { if (tagName.indexOf('v') === 0) return Platform.Desktop; if (tagName.indexOf('android') >= 0) return Platform.Android; + if (tagName.indexOf('windows') >= 0) return Platform.Windows; + if (tagName.indexOf('linux') >= 0) return Platform.Linux; + if (tagName.indexOf('macos') >= 0) return Platform.MacOs; if (tagName.indexOf('ios') >= 0) return Platform.Ios; if (tagName.indexOf('clipper') === 0) return Platform.Clipper; if (tagName.indexOf('cli') === 0) return Platform.Cli; @@ -106,7 +112,7 @@ function platformFromTag(tagName: string): Platform { } export const filesApplyToPlatform = (files: string[], platform: string): boolean => { - const isMainApp = ['android', 'ios', 'desktop', 'cli', 'server'].includes(platform); + const isMainApp = ['android', 'ios', 'windows', 'linux', 'macos', 'desktop', 'cli', 'server'].includes(platform); const isMobile = ['android', 'ios'].includes(platform); for (const file of files) { @@ -254,7 +260,7 @@ function filterLogs(logs: LogEntry[], platform: Platform) { if (platform === 'android' && prefix.indexOf('android') >= 0) addIt = true; if (platform === 'ios' && prefix.indexOf('ios') >= 0) addIt = true; if (platform === 'desktop' && prefix.indexOf('desktop') >= 0) addIt = true; - if (platform === 'desktop' && (prefix.indexOf('desktop') >= 0 || prefix.indexOf('api') >= 0 || prefix.indexOf('plugins') >= 0 || prefix.indexOf('macos') >= 0)) addIt = true; + if (platform === 'desktop' && (prefix.indexOf('desktop') >= 0 || prefix.indexOf('api') >= 0 || prefix.indexOf('plugins') >= 0 || prefix.indexOf('macos') >= 0 || prefix.indexOf('windows') >= 0 || prefix.indexOf('linux') >= 0)) addIt = true; if (platform === 'cli' && prefix.indexOf('cli') >= 0) addIt = true; if (platform === 'clipper' && prefix.indexOf('clipper') >= 0) addIt = true; if (platform === 'server' && prefix.indexOf('server') >= 0) addIt = true; @@ -312,7 +318,7 @@ function formatCommitMessage(commit: string, msg: string, author: Author, option const isPlatformPrefix = (prefixString: string) => { const prefix = prefixString.split(',').map(p => p.trim().toLowerCase()); for (const p of prefix) { - if (['android', 'mobile', 'ios', 'desktop', 'cli', 'clipper', 'all', 'api', 'plugins', 'server', 'cloud'].indexOf(p) >= 0) return true; + if (['android', 'mobile', 'ios', 'desktop', 'windows', 'linux', 'macos', 'cli', 'clipper', 'all', 'api', 'plugins', 'server', 'cloud'].indexOf(p) >= 0) return true; } return false; }; From e9ee8c8419a5f131e1d3dac2ae64c801df0c89ae Mon Sep 17 00:00:00 2001 From: Joplin Bot Date: Fri, 10 Jan 2025 12:27:02 +0000 Subject: [PATCH 30/30] Doc: Auto-update documentation Auto-updated using release-website.sh --- packages/tools/postPreReleasesToForum.json | 3 ++- readme/about/changelog/desktop.md | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/tools/postPreReleasesToForum.json b/packages/tools/postPreReleasesToForum.json index 8f9c5e9fdf9..4a0b98b4e80 100644 --- a/packages/tools/postPreReleasesToForum.json +++ b/packages/tools/postPreReleasesToForum.json @@ -123,6 +123,7 @@ "v3.2.8": true, "android-v3.2.5": true, "ios-v13.2.4": true, - "v3.2.9": true + "v3.2.9": true, + "v3.2.10": true } } \ No newline at end of file diff --git a/readme/about/changelog/desktop.md b/readme/about/changelog/desktop.md index 08a97ffddef..2e996167530 100644 --- a/readme/about/changelog/desktop.md +++ b/readme/about/changelog/desktop.md @@ -1,5 +1,11 @@ # Joplin Desktop Changelog +## [v3.2.10](https://github.com/laurent22/joplin/releases/tag/v3.2.10) (Pre-release) - 2025-01-10T10:17:28Z + +- Improved: Allow installer to skip uninstallation step after repeated failures ([#11612](https://github.com/laurent22/joplin/issues/11612)) ([#11508](https://github.com/laurent22/joplin/issues/11508) by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) +- Fixed: Drawing: Fix "insert drawing" button is not disabled in read-only notes (Upgrade Freehand Drawing to v2.14.0) ([#11613](https://github.com/laurent22/joplin/issues/11613) by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) +- Fixed: Fix syncLockGoneError on sync with certain share configs ([#11611](https://github.com/laurent22/joplin/issues/11611)) ([#11594](https://github.com/laurent22/joplin/issues/11594) by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator)) + ## [v3.2.9](https://github.com/laurent22/joplin/releases/tag/v3.2.9) (Pre-release) - 2025-01-09T22:58:42Z - Improved: Remove "URI malformed" alert ([#11576](https://github.com/laurent22/joplin/issues/11576)) ([#11575](https://github.com/laurent22/joplin/issues/11575) by Self Not Found)