Переглянути джерело

Merge pull request #2235 from nextcloud/develop

Version 4.5.4
Marino Faggiana 2 роки тому
батько
коміт
141fbcf2a2
100 змінених файлів з 1964 додано та 819 видалено
  1. 2 2
      File Provider Extension/FileProviderData.swift
  2. 1 1
      File Provider Extension/FileProviderExtension+Actions.swift
  3. 1 1
      File Provider Extension/FileProviderExtension+Thumbnail.swift
  4. 1 1
      File Provider Extension/FileProviderUtility.swift
  5. 149 117
      Nextcloud.xcodeproj/project.pbxproj
  6. 2 2
      Share/NCShareExtension+NCDelegate.swift
  7. 5 5
      Share/NCShareExtension.swift
  8. 22 11
      Widget/Dashboard/DashboardData.swift
  9. 4 4
      Widget/Dashboard/DashboardWidgetProvider.swift
  10. 90 71
      Widget/Dashboard/DashboardWidgetView.swift
  11. 0 169
      Widget/Dashboard/Intent/Base.lproj/Dashboard.intentdefinition
  12. 0 8
      Widget/Dashboard/Intent/ca.lproj/Dashboard.strings
  13. 0 8
      Widget/Dashboard/Intent/cs-CZ.lproj/Dashboard.strings
  14. 0 8
      Widget/Dashboard/Intent/da.lproj/Dashboard.strings
  15. 0 8
      Widget/Dashboard/Intent/de.lproj/Dashboard.strings
  16. 0 8
      Widget/Dashboard/Intent/en-GB.lproj/Dashboard.strings
  17. 0 8
      Widget/Dashboard/Intent/en.lproj/Dashboard.strings
  18. 0 8
      Widget/Dashboard/Intent/es-419.lproj/Dashboard.strings
  19. 0 8
      Widget/Dashboard/Intent/es-CL.lproj/Dashboard.strings
  20. 0 8
      Widget/Dashboard/Intent/es-CO.lproj/Dashboard.strings
  21. 0 8
      Widget/Dashboard/Intent/es-CR.lproj/Dashboard.strings
  22. 0 8
      Widget/Dashboard/Intent/es-DO.lproj/Dashboard.strings
  23. 0 8
      Widget/Dashboard/Intent/es-EC.lproj/Dashboard.strings
  24. 0 8
      Widget/Dashboard/Intent/es-GT.lproj/Dashboard.strings
  25. 0 8
      Widget/Dashboard/Intent/es-HN.lproj/Dashboard.strings
  26. 0 8
      Widget/Dashboard/Intent/es-MX.lproj/Dashboard.strings
  27. 0 8
      Widget/Dashboard/Intent/es-NI.lproj/Dashboard.strings
  28. 0 8
      Widget/Dashboard/Intent/es-PA.lproj/Dashboard.strings
  29. 0 8
      Widget/Dashboard/Intent/es-PE.lproj/Dashboard.strings
  30. 0 8
      Widget/Dashboard/Intent/es-PR.lproj/Dashboard.strings
  31. 0 8
      Widget/Dashboard/Intent/es-PY.lproj/Dashboard.strings
  32. 0 8
      Widget/Dashboard/Intent/es-SV.lproj/Dashboard.strings
  33. 0 8
      Widget/Dashboard/Intent/es-UY.lproj/Dashboard.strings
  34. 0 8
      Widget/Dashboard/Intent/es.lproj/Dashboard.strings
  35. 0 8
      Widget/Dashboard/Intent/eu.lproj/Dashboard.strings
  36. 0 8
      Widget/Dashboard/Intent/fr.lproj/Dashboard.strings
  37. 0 8
      Widget/Dashboard/Intent/gl.lproj/Dashboard.strings
  38. 0 8
      Widget/Dashboard/Intent/hu.lproj/Dashboard.strings
  39. 0 8
      Widget/Dashboard/Intent/is.lproj/Dashboard.strings
  40. 0 8
      Widget/Dashboard/Intent/it.lproj/Dashboard.strings
  41. 0 8
      Widget/Dashboard/Intent/ja-JP.lproj/Dashboard.strings
  42. 0 8
      Widget/Dashboard/Intent/ka-GE.lproj/Dashboard.strings
  43. 0 8
      Widget/Dashboard/Intent/ko.lproj/Dashboard.strings
  44. 0 8
      Widget/Dashboard/Intent/nb-NO.lproj/Dashboard.strings
  45. 0 8
      Widget/Dashboard/Intent/nl.lproj/Dashboard.strings
  46. 0 8
      Widget/Dashboard/Intent/pl.lproj/Dashboard.strings
  47. 0 8
      Widget/Dashboard/Intent/pt-BR.lproj/Dashboard.strings
  48. 0 8
      Widget/Dashboard/Intent/pt-PT.lproj/Dashboard.strings
  49. 0 8
      Widget/Dashboard/Intent/ru.lproj/Dashboard.strings
  50. 0 8
      Widget/Dashboard/Intent/sk-SK.lproj/Dashboard.strings
  51. 0 8
      Widget/Dashboard/Intent/sr.lproj/Dashboard.strings
  52. 0 8
      Widget/Dashboard/Intent/sv.lproj/Dashboard.strings
  53. 0 8
      Widget/Dashboard/Intent/tr.lproj/Dashboard.strings
  54. 0 8
      Widget/Dashboard/Intent/zh-Hans.lproj/Dashboard.strings
  55. 0 8
      Widget/Dashboard/Intent/zh-Hant-TW.lproj/Dashboard.strings
  56. 32 32
      Widget/Files/FilesData.swift
  57. 9 7
      Widget/Files/FilesWidgetProvider.swift
  58. 69 44
      Widget/Files/FilesWidgetView.swift
  59. 347 0
      Widget/Intent/Base.lproj/Intent.intentdefinition
  60. 30 0
      Widget/Intent/ca.lproj/Intent.strings
  61. 30 0
      Widget/Intent/cs-CZ.lproj/Intent.strings
  62. 30 0
      Widget/Intent/da.lproj/Intent.strings
  63. 30 0
      Widget/Intent/de.lproj/Intent.strings
  64. 30 0
      Widget/Intent/en-GB.lproj/Intent.strings
  65. 30 0
      Widget/Intent/en.lproj/Intent.strings
  66. 30 0
      Widget/Intent/es-419.lproj/Intent.strings
  67. 30 0
      Widget/Intent/es-CL.lproj/Intent.strings
  68. 30 0
      Widget/Intent/es-CO.lproj/Intent.strings
  69. 30 0
      Widget/Intent/es-CR.lproj/Intent.strings
  70. 30 0
      Widget/Intent/es-DO.lproj/Intent.strings
  71. 30 0
      Widget/Intent/es-EC.lproj/Intent.strings
  72. 30 0
      Widget/Intent/es-GT.lproj/Intent.strings
  73. 30 0
      Widget/Intent/es-HN.lproj/Intent.strings
  74. 30 0
      Widget/Intent/es-MX.lproj/Intent.strings
  75. 30 0
      Widget/Intent/es-NI.lproj/Intent.strings
  76. 30 0
      Widget/Intent/es-PA.lproj/Intent.strings
  77. 30 0
      Widget/Intent/es-PE.lproj/Intent.strings
  78. 30 0
      Widget/Intent/es-PR.lproj/Intent.strings
  79. 30 0
      Widget/Intent/es-PY.lproj/Intent.strings
  80. 30 0
      Widget/Intent/es-SV.lproj/Intent.strings
  81. 30 0
      Widget/Intent/es-UY.lproj/Intent.strings
  82. 30 0
      Widget/Intent/es.lproj/Intent.strings
  83. 30 0
      Widget/Intent/eu.lproj/Intent.strings
  84. 30 0
      Widget/Intent/fr.lproj/Intent.strings
  85. 30 0
      Widget/Intent/gl.lproj/Intent.strings
  86. 30 0
      Widget/Intent/hu.lproj/Intent.strings
  87. 30 0
      Widget/Intent/is.lproj/Intent.strings
  88. 30 0
      Widget/Intent/it.lproj/Intent.strings
  89. 30 0
      Widget/Intent/ja-JP.lproj/Intent.strings
  90. 30 0
      Widget/Intent/ka-GE.lproj/Intent.strings
  91. 30 0
      Widget/Intent/ko.lproj/Intent.strings
  92. 30 0
      Widget/Intent/nb-NO.lproj/Intent.strings
  93. 30 0
      Widget/Intent/nl.lproj/Intent.strings
  94. 30 0
      Widget/Intent/pl.lproj/Intent.strings
  95. 30 0
      Widget/Intent/pt-BR.lproj/Intent.strings
  96. 30 0
      Widget/Intent/pt-PT.lproj/Intent.strings
  97. 30 0
      Widget/Intent/ru.lproj/Intent.strings
  98. 30 0
      Widget/Intent/sk-SK.lproj/Intent.strings
  99. 30 0
      Widget/Intent/sr.lproj/Intent.strings
  100. 30 0
      Widget/Intent/sv.lproj/Intent.strings

+ 2 - 2
File Provider Extension/FileProviderData.swift

@@ -94,7 +94,7 @@ class fileProviderData: NSObject {
             user = activeAccount.user
             userId = activeAccount.userId
             accountUrlBase = activeAccount.urlBase
-            homeServerUrl = NCUtilityFileSystem.shared.getHomeServer(account: activeAccount.account)
+            homeServerUrl = NCUtilityFileSystem.shared.getHomeServer(urlBase: activeAccount.urlBase, userId: activeAccount.userId)
 
             NKCommon.shared.setup(account: activeAccount.account, user: activeAccount.user, userId: activeAccount.userId, password: CCUtility.getPassword(activeAccount.account), urlBase: activeAccount.urlBase, userAgent: CCUtility.getUserAgent(), nextcloudVersion: serverVersionMajor, delegate: NCNetworking.shared)
             NCNetworking.shared.delegate = providerExtension as? NCNetworkingDelegate
@@ -118,7 +118,7 @@ class fileProviderData: NSObject {
                 user = activeAccount.user
                 userId = activeAccount.userId
                 accountUrlBase = activeAccount.urlBase
-                homeServerUrl = NCUtilityFileSystem.shared.getHomeServer(account: activeAccount.account)
+                homeServerUrl = NCUtilityFileSystem.shared.getHomeServer(urlBase: activeAccount.urlBase, userId: activeAccount.userId)
 
                 NKCommon.shared.setup(account: activeAccount.account, user: activeAccount.user, userId: activeAccount.userId, password: CCUtility.getPassword(activeAccount.account), urlBase: activeAccount.urlBase, userAgent: CCUtility.getUserAgent(), nextcloudVersion: serverVersionMajor, delegate: NCNetworking.shared)
                 NCNetworking.shared.delegate = providerExtension as? NCNetworkingDelegate

+ 1 - 1
File Provider Extension/FileProviderExtension+Actions.swift

@@ -245,7 +245,7 @@ extension FileProviderExtension {
         }
 
         if (favorite == true && metadata.favorite == false) || (favorite == false && metadata.favorite == true) {
-            let fileNamePath = CCUtility.returnFileNamePath(fromFileName: metadata.fileName, serverUrl: metadata.serverUrl, urlBase: metadata.urlBase, account: metadata.account)!
+            let fileNamePath = CCUtility.returnFileNamePath(fromFileName: metadata.fileName, serverUrl: metadata.serverUrl, urlBase: metadata.urlBase, userId: metadata.userId, account: metadata.account)!
 
             NextcloudKit.shared.setFavorite(fileName: fileNamePath, favorite: favorite) { _, error in
 

+ 1 - 1
File Provider Extension/FileProviderExtension+Thumbnail.swift

@@ -42,7 +42,7 @@ extension FileProviderExtension {
 
             if metadata.hasPreview {
 
-                let fileNamePath = CCUtility.returnFileNamePath(fromFileName: metadata.fileName, serverUrl: metadata.serverUrl, urlBase: metadata.urlBase, account: metadata.account)!
+                let fileNamePath = CCUtility.returnFileNamePath(fromFileName: metadata.fileName, serverUrl: metadata.serverUrl, urlBase: metadata.urlBase, userId: metadata.userId, account: metadata.account)!
                 let fileNameIconLocalPath = CCUtility.getDirectoryProviderStorageIconOcId(metadata.ocId, etag: metadata.etag)!
 
                 if let urlBase = metadata.urlBase.urlEncoded,

+ 1 - 1
File Provider Extension/FileProviderUtility.swift

@@ -61,7 +61,7 @@ class fileProviderUtility: NSObject {
 
     func getParentItemIdentifier(metadata: tableMetadata) -> NSFileProviderItemIdentifier? {
 
-        let homeServerUrl = NCUtilityFileSystem.shared.getHomeServer(account: metadata.account)
+        let homeServerUrl = NCUtilityFileSystem.shared.getHomeServer(urlBase: metadata.urlBase, userId: metadata.userId)
         if let directory = NCManageDatabase.shared.getTableDirectory(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", metadata.account, metadata.serverUrl)) {
             if directory.serverUrl == homeServerUrl {
                 return NSFileProviderItemIdentifier(NSFileProviderItemIdentifier.rootContainer.rawValue)

+ 149 - 117
Nextcloud.xcodeproj/project.pbxproj

@@ -241,6 +241,9 @@
 		F75B0ABD244C4DBB00E58DCA /* NCFunctionCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F75B0ABC244C4DBB00E58DCA /* NCFunctionCenter.swift */; };
 		F75C0C4823D1FAE300163CC8 /* NCRichWorkspaceCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = F75C0C4723D1FAE300163CC8 /* NCRichWorkspaceCommon.swift */; };
 		F75D19E325EFE09000D74598 /* NCTrash+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F75D19E225EFE09000D74598 /* NCTrash+Menu.swift */; };
+		F75DD765290ABB25002EB562 /* Intent.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = F75DD769290ABB25002EB562 /* Intent.intentdefinition */; };
+		F75DD766290ABB25002EB562 /* Intent.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = F75DD769290ABB25002EB562 /* Intent.intentdefinition */; };
+		F75DD767290ABB25002EB562 /* Intent.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = F75DD769290ABB25002EB562 /* Intent.intentdefinition */; };
 		F75E57BD25BF0EC1002B72C2 /* SVGKit in Frameworks */ = {isa = PBXBuildFile; productRef = F75E57BC25BF0EC1002B72C2 /* SVGKit */; };
 		F75E57BF25BF0EC8002B72C2 /* SVGKit in Frameworks */ = {isa = PBXBuildFile; productRef = F75E57BE25BF0EC8002B72C2 /* SVGKit */; };
 		F75E57C125BF0ECD002B72C2 /* SVGKit in Frameworks */ = {isa = PBXBuildFile; productRef = F75E57C025BF0ECD002B72C2 /* SVGKit */; };
@@ -358,6 +361,10 @@
 		F78ACD52219046DC0088454D /* NCSectionHeaderFooter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78ACD51219046DC0088454D /* NCSectionHeaderFooter.swift */; };
 		F78ACD54219047D40088454D /* NCSectionFooter.xib in Resources */ = {isa = PBXBuildFile; fileRef = F78ACD53219047D40088454D /* NCSectionFooter.xib */; };
 		F78ACD58219048040088454D /* NCSectionHeaderMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = F78ACD57219048040088454D /* NCSectionHeaderMenu.xib */; };
+		F78D0C7F2912722100D706AB /* JGProgressHUD in Frameworks */ = {isa = PBXBuildFile; productRef = F78D0C7E2912722100D706AB /* JGProgressHUD */; };
+		F78D0C812912723900D706AB /* JGProgressHUD in Frameworks */ = {isa = PBXBuildFile; productRef = F78D0C802912723900D706AB /* JGProgressHUD */; };
+		F78D0C832912724F00D706AB /* JGProgressHUD in Frameworks */ = {isa = PBXBuildFile; productRef = F78D0C822912724F00D706AB /* JGProgressHUD */; };
+		F78D0C852912725600D706AB /* JGProgressHUD in Frameworks */ = {isa = PBXBuildFile; productRef = F78D0C842912725600D706AB /* JGProgressHUD */; };
 		F78F74342163757000C2ADAD /* NCTrash.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F78F74332163757000C2ADAD /* NCTrash.storyboard */; };
 		F78F74362163781100C2ADAD /* NCTrash.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78F74352163781100C2ADAD /* NCTrash.swift */; };
 		F790110E21415BF600D7B136 /* NCViewerRichdocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = F790110D21415BF600D7B136 /* NCViewerRichdocument.swift */; };
@@ -439,7 +446,6 @@
 		F7C9739228F17131002C43E2 /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C9739128F17131002C43E2 /* Intents.framework */; };
 		F7C9739528F17131002C43E2 /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7C9739428F17131002C43E2 /* IntentHandler.swift */; };
 		F7C9739928F17131002C43E2 /* WidgetDashboardIntentHandler.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = F7C9739028F17131002C43E2 /* WidgetDashboardIntentHandler.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
-		F7C9739D28F1733B002C43E2 /* Dashboard.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = F7FABE3928D1DAD00000A325 /* Dashboard.intentdefinition */; };
 		F7CA212D25F1333300826ABB /* NCAccountRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CA212B25F1333200826ABB /* NCAccountRequest.swift */; };
 		F7CA212E25F1333300826ABB /* NCAccountRequest.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7CA212C25F1333200826ABB /* NCAccountRequest.storyboard */; };
 		F7CB689A2541676B0050EC94 /* NCMore.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7CB68992541676B0050EC94 /* NCMore.storyboard */; };
@@ -499,8 +505,6 @@
 		F7F878AE1FB9E3B900599E4F /* NCEndToEndMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F878AD1FB9E3B900599E4F /* NCEndToEndMetadata.swift */; };
 		F7F878AF1FB9E3B900599E4F /* NCEndToEndMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F878AD1FB9E3B900599E4F /* NCEndToEndMetadata.swift */; };
 		F7F9D1BB25397CE000D9BFF5 /* NCViewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F9D1BA25397CE000D9BFF5 /* NCViewer.swift */; };
-		F7FABE3628D1DAD00000A325 /* Dashboard.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = F7FABE3928D1DAD00000A325 /* Dashboard.intentdefinition */; };
-		F7FABE3728D1DAD00000A325 /* Dashboard.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = F7FABE3928D1DAD00000A325 /* Dashboard.intentdefinition */; settings = {ATTRIBUTES = (codegen, ); }; };
 		F7FAFD3A28BFA948000777FE /* NCNotification+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7FAFD3928BFA947000777FE /* NCNotification+Menu.swift */; };
 		F7FF2CB12842159500EBB7A1 /* NCSectionHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7FF2CB02842159500EBB7A1 /* NCSectionHeader.xib */; };
 /* End PBXBuildFile section */
@@ -712,7 +716,6 @@
 		F710D1F42405770F00A6033D /* NCViewerPDF.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCViewerPDF.swift; sourceTree = "<group>"; };
 		F710D2012405826100A6033D /* NCViewer+Menu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NCViewer+Menu.swift"; sourceTree = "<group>"; };
 		F710E80F1EF95C9C00DC2427 /* ImagesIntro.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = ImagesIntro.xcassets; sourceTree = "<group>"; };
-		F711D63328F47A66003F43C8 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Dashboard.strings; sourceTree = "<group>"; };
 		F7134184259747BA00768D21 /* NCPushNotification.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NCPushNotification.h; sourceTree = "<group>"; };
 		F7134185259747BA00768D21 /* NCPushNotification.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NCPushNotification.m; sourceTree = "<group>"; };
 		F713FEFE2472764000214AF6 /* UIImage+animatedGIF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+animatedGIF.h"; sourceTree = "<group>"; };
@@ -828,6 +831,7 @@
 		F75B923D1ECAE55E00199C96 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = "<group>"; };
 		F75C0C4723D1FAE300163CC8 /* NCRichWorkspaceCommon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCRichWorkspaceCommon.swift; sourceTree = "<group>"; };
 		F75D19E225EFE09000D74598 /* NCTrash+Menu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NCTrash+Menu.swift"; sourceTree = "<group>"; };
+		F75DD768290ABB25002EB562 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; name = Base; path = Base.lproj/Intent.intentdefinition; sourceTree = "<group>"; };
 		F75EDFBC1E8C112F00E6F369 /* libsqlite3.0.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = usr/lib/libsqlite3.0.tbd; sourceTree = SDKROOT; };
 		F75EDFBE1E8C116D00E6F369 /* libstdc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libstdc++.tbd"; path = "usr/lib/libstdc++.tbd"; sourceTree = SDKROOT; };
 		F760329D252F0F8E0015A421 /* NCTransferCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NCTransferCell.swift; path = iOSClient/Transfers/NCTransferCell.swift; sourceTree = SOURCE_ROOT; };
@@ -1010,6 +1014,50 @@
 		F7BB04851FD58ACB00BBFD2A /* cs-CZ */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "cs-CZ"; path = "cs-CZ.lproj/Localizable.strings"; sourceTree = "<group>"; };
 		F7BC287D26663F6C004D46C5 /* NCViewCertificateDetails.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCViewCertificateDetails.storyboard; sourceTree = "<group>"; };
 		F7BC287F26663F85004D46C5 /* NCViewCertificateDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCViewCertificateDetails.swift; sourceTree = "<group>"; };
+		F7BE7C25290AC8C9002ABB61 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C27290ADEFD002ABB61 /* eu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = eu; path = eu.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C29290ADEFD002ABB61 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C2B290ADEFE002ABB61 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C2D290ADEFF002ABB61 /* cs-CZ */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "cs-CZ"; path = "cs-CZ.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C2F290ADF00002ABB61 /* zh-Hant-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C31290ADF00002ABB61 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C33290ADF01002ABB61 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C35290ADF03002ABB61 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C37290ADF03002ABB61 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C39290ADF04002ABB61 /* es-UY */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-UY"; path = "es-UY.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C3B290ADF04002ABB61 /* es-PR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PR"; path = "es-PR.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C3D290ADF05002ABB61 /* es-PE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PE"; path = "es-PE.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C3F290ADF06002ABB61 /* es-PY */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PY"; path = "es-PY.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C41290ADF06002ABB61 /* es-PA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PA"; path = "es-PA.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C43290ADF06002ABB61 /* es-NI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-NI"; path = "es-NI.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C45290ADF07002ABB61 /* es-MX */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-MX"; path = "es-MX.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C47290ADF07002ABB61 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C49290ADF08002ABB61 /* es-HN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-HN"; path = "es-HN.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C4B290ADF09002ABB61 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C4D290ADF0A002ABB61 /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sr; path = sr.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C4F290ADF0A002ABB61 /* sk-SK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sk-SK"; path = "sk-SK.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C51290ADF0B002ABB61 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C53290ADF0B002ABB61 /* es-CL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CL"; path = "es-CL.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C55290ADF0C002ABB61 /* es-CO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CO"; path = "es-CO.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C57290ADF0C002ABB61 /* es-CR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CR"; path = "es-CR.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C59290ADF0D002ABB61 /* es-DO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-DO"; path = "es-DO.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C5B290ADF0D002ABB61 /* es-EC */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-EC"; path = "es-EC.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C5D290ADF0E002ABB61 /* es-SV */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-SV"; path = "es-SV.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C5F290ADF0E002ABB61 /* es-GT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-GT"; path = "es-GT.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C61290ADF10002ABB61 /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C63290ADF10002ABB61 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C65290ADF10002ABB61 /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gl; path = gl.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C67290ADF11002ABB61 /* ka-GE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ka-GE"; path = "ka-GE.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C69290ADF11002ABB61 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C6B290ADF12002ABB61 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C6D290ADF12002ABB61 /* is */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = is; path = is.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C6F290ADF13002ABB61 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C71290ADF13002ABB61 /* ja-JP */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ja-JP"; path = "ja-JP.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C73290ADF14002ABB61 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C75290ADF14002ABB61 /* nb-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nb-NO"; path = "nb-NO.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C77290ADF15002ABB61 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Intent.strings; sourceTree = "<group>"; };
+		F7BE7C79290ADF16002ABB61 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Intent.strings"; sourceTree = "<group>"; };
+		F7BE7C7B290ADF16002ABB61 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Intent.strings"; sourceTree = "<group>"; };
 		F7C1EEA425053A9C00866ACC /* NCDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCDataSource.swift; sourceTree = "<group>"; };
 		F7C40BE221998C050004137E /* PDFGenerator.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PDFGenerator.framework; path = Carthage/Build/iOS/PDFGenerator.framework; sourceTree = "<group>"; };
 		F7C40BE421998D5A0004137E /* MGSwipeTableCell.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MGSwipeTableCell.framework; path = Carthage/Build/iOS/MGSwipeTableCell.framework; sourceTree = "<group>"; };
@@ -1036,49 +1084,6 @@
 		F7CB689F254169530050EC94 /* NCSettings.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCSettings.storyboard; sourceTree = "<group>"; };
 		F7CBC31B24F78E79004D3812 /* NCSortMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCSortMenu.swift; sourceTree = "<group>"; };
 		F7CC04E61F5AD50D00378CEF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = "<group>"; };
-		F7CD836428F6B4DA00E93B11 /* eu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = eu; path = eu.lproj/Dashboard.strings; sourceTree = "<group>"; };
-		F7CD836628F6B4DA00E93B11 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Dashboard.strings; sourceTree = "<group>"; };
-		F7CD836828F6B4DB00E93B11 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD836A28F6B4DC00E93B11 /* zh-Hant-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD836C28F6B4DC00E93B11 /* cs-CZ */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "cs-CZ"; path = "cs-CZ.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD836E28F6B4DD00E93B11 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Dashboard.strings; sourceTree = "<group>"; };
-		F7CD837028F6B4E100E93B11 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Dashboard.strings; sourceTree = "<group>"; };
-		F7CD837228F6B4E300E93B11 /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD837428F6B4E700E93B11 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Dashboard.strings; sourceTree = "<group>"; };
-		F7CD837628F6B4E800E93B11 /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gl; path = gl.lproj/Dashboard.strings; sourceTree = "<group>"; };
-		F7CD837828F6B4EA00E93B11 /* ka-GE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ka-GE"; path = "ka-GE.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD837A28F6B4EC00E93B11 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Dashboard.strings; sourceTree = "<group>"; };
-		F7CD837C28F6B4ED00E93B11 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Dashboard.strings; sourceTree = "<group>"; };
-		F7CD837E28F6B4EE00E93B11 /* is */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = is; path = is.lproj/Dashboard.strings; sourceTree = "<group>"; };
-		F7CD838028F6B4EF00E93B11 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Dashboard.strings; sourceTree = "<group>"; };
-		F7CD838228F6B4F000E93B11 /* ja-JP */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ja-JP"; path = "ja-JP.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD838428F6B4F200E93B11 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Dashboard.strings; sourceTree = "<group>"; };
-		F7CD838628F6B4F300E93B11 /* nb-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nb-NO"; path = "nb-NO.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD838828F6B4F400E93B11 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Dashboard.strings; sourceTree = "<group>"; };
-		F7CD838A28F6B4F800E93B11 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD838C28F6B4F900E93B11 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD838E28F6B4F900E93B11 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Dashboard.strings; sourceTree = "<group>"; };
-		F7CD839028F6B4FA00E93B11 /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sr; path = sr.lproj/Dashboard.strings; sourceTree = "<group>"; };
-		F7CD839228F6B4FB00E93B11 /* sk-SK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sk-SK"; path = "sk-SK.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD839428F6B4FC00E93B11 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Dashboard.strings; sourceTree = "<group>"; };
-		F7CD839628F6B4FC00E93B11 /* es-CL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CL"; path = "es-CL.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD839828F6B4FD00E93B11 /* es-CO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CO"; path = "es-CO.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD839A28F6B4FE00E93B11 /* es-CR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CR"; path = "es-CR.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD839C28F6B4FF00E93B11 /* es-DO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-DO"; path = "es-DO.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD839E28F6B4FF00E93B11 /* es-EC */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-EC"; path = "es-EC.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD83A028F6B50000E93B11 /* es-SV */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-SV"; path = "es-SV.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD83A228F6B50100E93B11 /* es-GT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-GT"; path = "es-GT.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD83A428F6B50100E93B11 /* es-HN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-HN"; path = "es-HN.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD83A628F6B50200E93B11 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD83A828F6B50300E93B11 /* es-MX */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-MX"; path = "es-MX.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD83AA28F6B50400E93B11 /* es-NI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-NI"; path = "es-NI.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD83AC28F6B50400E93B11 /* es-PA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PA"; path = "es-PA.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD83AE28F6B50500E93B11 /* es-PY */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PY"; path = "es-PY.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD83B028F6B50600E93B11 /* es-PE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PE"; path = "es-PE.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD83B228F6B50700E93B11 /* es-PR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PR"; path = "es-PR.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD83B428F6B50700E93B11 /* es-UY */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-UY"; path = "es-UY.lproj/Dashboard.strings"; sourceTree = "<group>"; };
-		F7CD83B628F6B50800E93B11 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Dashboard.strings; sourceTree = "<group>"; };
-		F7CD83B828F6B50800E93B11 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Dashboard.strings; sourceTree = "<group>"; };
 		F7CE8AFA1DC1F8D8009CAE48 /* Nextcloud.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Nextcloud.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		F7CE8AFB1DC1F8D8009CAE48 /* Share.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = Share.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 		F7D0F33D264144FC0097D4A3 /* Background.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Background.xcassets; sourceTree = "<group>"; };
@@ -1124,7 +1129,6 @@
 		F7F67BB81A24D27800EE80DA /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
 		F7F878AD1FB9E3B900599E4F /* NCEndToEndMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCEndToEndMetadata.swift; sourceTree = "<group>"; };
 		F7F9D1BA25397CE000D9BFF5 /* NCViewer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCViewer.swift; sourceTree = "<group>"; };
-		F7FABE3828D1DAD00000A325 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; name = Base; path = Base.lproj/Dashboard.intentdefinition; sourceTree = "<group>"; };
 		F7FAFD3928BFA947000777FE /* NCNotification+Menu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NCNotification+Menu.swift"; sourceTree = "<group>"; };
 		F7FC7D551DC1F93800BB2C6A /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
 		F7FF2CB02842159500EBB7A1 /* NCSectionHeader.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCSectionHeader.xib; sourceTree = "<group>"; };
@@ -1139,6 +1143,7 @@
 				F710FC88277B7D3F00AA9FBF /* RealmSwift in Frameworks */,
 				F710FC86277B7D3F00AA9FBF /* Realm in Frameworks */,
 				F7EBCDD3277B821700A4EF67 /* UICKeyChainStore in Frameworks */,
+				F78D0C852912725600D706AB /* JGProgressHUD in Frameworks */,
 				F75E57C325BF0ED2002B72C2 /* SVGKit in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -1177,6 +1182,7 @@
 				F7346E2728B0FFF2006CE2D2 /* Realm in Frameworks */,
 				F7346E2928B0FFF2006CE2D2 /* RealmSwift in Frameworks */,
 				F783030D28B4C59A00B84583 /* SwiftEntryKit in Frameworks */,
+				F78D0C832912724F00D706AB /* JGProgressHUD in Frameworks */,
 				F7346E1228B0EF5B006CE2D2 /* WidgetKit.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -1186,6 +1192,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				F7EBCDD1277B820D00A4EF67 /* UICKeyChainStore in Frameworks */,
+				F78D0C7F2912722100D706AB /* JGProgressHUD in Frameworks */,
 				F75E57C125BF0ECD002B72C2 /* SVGKit in Frameworks */,
 				F73ADD2426554FE20069EA0D /* SwiftEntryKit in Frameworks */,
 				F710FC82277B7D3500AA9FBF /* Realm in Frameworks */,
@@ -1232,6 +1239,7 @@
 				F7A8D72828F17728008BBE1C /* RealmSwift in Frameworks */,
 				F7A8D72E28F17764008BBE1C /* UICKeyChainStore in Frameworks */,
 				F7A8D72C28F17742008BBE1C /* SwiftEntryKit in Frameworks */,
+				F78D0C812912723900D706AB /* JGProgressHUD in Frameworks */,
 				F7A8D72628F17728008BBE1C /* Realm in Frameworks */,
 				F7A8D72428F1771B008BBE1C /* NextcloudKit in Frameworks */,
 				F7C9739228F17131002C43E2 /* Intents.framework in Frameworks */,
@@ -1358,14 +1366,6 @@
 			path = "Rename file";
 			sourceTree = "<group>";
 		};
-		F70EA92828D4B97C00920635 /* Intent */ = {
-			isa = PBXGroup;
-			children = (
-				F7FABE3928D1DAD00000A325 /* Dashboard.intentdefinition */,
-			);
-			path = Intent;
-			sourceTree = "<group>";
-		};
 		F710E80C1EF95C9C00DC2427 /* Intro */ = {
 			isa = PBXGroup;
 			children = (
@@ -1466,7 +1466,6 @@
 		F72EA95528B7BAD100C88F0C /* Dashboard */ = {
 			isa = PBXGroup;
 			children = (
-				F70EA92828D4B97C00920635 /* Intent */,
 				F7E0710028B13BB00001B882 /* DashboardData.swift */,
 				F72EA95128B7BA2A00C88F0C /* DashboardWidgetProvider.swift */,
 				F72A17D728B221E300F3F159 /* DashboardWidgetView.swift */,
@@ -1492,6 +1491,7 @@
 				F72EA95628B7BAE700C88F0C /* Files */,
 				F76DEE9A28F808BC0041B1C9 /* Lockscreen */,
 				F77ED59628C9CEEE00E24ED0 /* Toolbar */,
+				F75DD764290AB369002EB562 /* Intent */,
 				F7346E2028B0FA3A006CE2D2 /* Widget-Brinding-header.h */,
 				F7346E1528B0EF5C006CE2D2 /* Widget.swift */,
 			);
@@ -1551,6 +1551,14 @@
 			path = ScanDocument;
 			sourceTree = "<group>";
 		};
+		F75DD764290AB369002EB562 /* Intent */ = {
+			isa = PBXGroup;
+			children = (
+				F75DD769290ABB25002EB562 /* Intent.intentdefinition */,
+			);
+			path = Intent;
+			sourceTree = "<group>";
+		};
 		F7603298252F0E550015A421 /* Collection Common */ = {
 			isa = PBXGroup;
 			children = (
@@ -2245,6 +2253,7 @@
 				F710FC87277B7D3F00AA9FBF /* RealmSwift */,
 				F7EBCDD2277B821700A4EF67 /* UICKeyChainStore */,
 				F72AD71028C24BBB006CB92D /* NextcloudKit */,
+				F78D0C842912725600D706AB /* JGProgressHUD */,
 			);
 			productName = "Notification Service Extension";
 			productReference = 2C33C47F23E2C475005F963B /* Notification Service Extension.appex */;
@@ -2315,6 +2324,7 @@
 				F783030428B4C50600B84583 /* SVGKit */,
 				F783030C28B4C59A00B84583 /* SwiftEntryKit */,
 				F783034328B5142B00B84583 /* NextcloudKit */,
+				F78D0C822912724F00D706AB /* JGProgressHUD */,
 			);
 			productName = DashboardWidgetExtension;
 			productReference = F7346E1028B0EF5B006CE2D2 /* Widget.appex */;
@@ -2340,6 +2350,7 @@
 				F710FC83277B7D3500AA9FBF /* RealmSwift */,
 				F7EBCDD0277B820D00A4EF67 /* UICKeyChainStore */,
 				F72AD71228C24BCC006CB92D /* NextcloudKit */,
+				F78D0C7E2912722100D706AB /* JGProgressHUD */,
 			);
 			productName = "File Provider Extension";
 			productReference = F771E3D020E2392D00AFB62D /* File Provider Extension.appex */;
@@ -2411,6 +2422,7 @@
 				F7A8D72928F17733008BBE1C /* SVGKit */,
 				F7A8D72B28F17742008BBE1C /* SwiftEntryKit */,
 				F7A8D72D28F17764008BBE1C /* UICKeyChainStore */,
+				F78D0C802912723900D706AB /* JGProgressHUD */,
 			);
 			productName = WidgetDashboardIntentHandler;
 			productReference = F7C9739028F17131002C43E2 /* WidgetDashboardIntentHandler.appex */;
@@ -2845,7 +2857,6 @@
 				F72EA95A28B7BD0D00C88F0C /* FilesWidgetView.swift in Sources */,
 				F78302FE28B4C44700B84583 /* NCBrand.swift in Sources */,
 				F793E5A028B7651B005E4B02 /* NCViewCertificateDetails.swift in Sources */,
-				F7FABE3728D1DAD00000A325 /* Dashboard.intentdefinition in Sources */,
 				F793E59F28B764F6005E4B02 /* NCContentPresenter.swift in Sources */,
 				F76DEE9828F808AF0041B1C9 /* LockscreenWidgetProvider.swift in Sources */,
 				F78302FA28B4C3EA00B84583 /* NCManageDatabase+Metadata.swift in Sources */,
@@ -2864,6 +2875,7 @@
 				F72EA95828B7BC4F00C88F0C /* FilesData.swift in Sources */,
 				F793E59E28B763C2005E4B02 /* NCAskAuthorization.swift in Sources */,
 				F78302FF28B4C45000B84583 /* NCUtilityFileSystem.swift in Sources */,
+				F75DD766290ABB25002EB562 /* Intent.intentdefinition in Sources */,
 				F78302F628B4C3C500B84583 /* NCDatabase.swift in Sources */,
 				F7D68FCD28CB9051009139F3 /* NCManageDatabase+DashboardWidget.swift in Sources */,
 				F783030128B4C49700B84583 /* UIImage+Extensions.swift in Sources */,
@@ -2993,6 +3005,7 @@
 				F7239871253D86B600257F49 /* NCEmptyDataSet.swift in Sources */,
 				AFCE353327E4ED1900FEA6C2 /* UIToolbar+Extension.swift in Sources */,
 				8491B1CD273BBA82001C8C5B /* UIViewController+Menu.swift in Sources */,
+				F75DD765290ABB25002EB562 /* Intent.intentdefinition in Sources */,
 				F702F2F725EE5CED008F8E80 /* NCLogin.swift in Sources */,
 				F7E98C1627E0D0FC001F9F19 /* NCManageDatabase+Video.swift in Sources */,
 				F7F4F11227ECDC52008676F9 /* UIFont+Extension.swift in Sources */,
@@ -3069,7 +3082,6 @@
 				F7F4F11027ECDC4A008676F9 /* UIDevice+Extensions.swift in Sources */,
 				F77B0ED11D118A16002130FE /* Acknowledgements.m in Sources */,
 				F70D8D8124A4A9BF000A5756 /* NCNetworkingProcessUpload.swift in Sources */,
-				F7FABE3628D1DAD00000A325 /* Dashboard.intentdefinition in Sources */,
 				F7D96FCC246ED7E200536D73 /* NCNetworkingCheckRemoteUser.swift in Sources */,
 				F7E4D9C422ED929B003675FD /* NCShareCommentsCell.swift in Sources */,
 				F717402E24F699A5000C87D5 /* NCFavorite.swift in Sources */,
@@ -3090,6 +3102,7 @@
 				F7C9739528F17131002C43E2 /* IntentHandler.swift in Sources */,
 				F7A8D73D28F181D3008BBE1C /* NCUtilityFileSystem.swift in Sources */,
 				F7A8D74528F1828E008BBE1C /* CCUtility.m in Sources */,
+				F75DD767290ABB25002EB562 /* Intent.intentdefinition in Sources */,
 				F7A8D73F28F181EF008BBE1C /* NCGlobal.swift in Sources */,
 				F7A8D74328F1826F008BBE1C /* String+Extensions.swift in Sources */,
 				F7A8D73728F17E1E008BBE1C /* NCManageDatabase+Account.swift in Sources */,
@@ -3097,7 +3110,6 @@
 				F7A8D73C28F181BC008BBE1C /* NCBrand.swift in Sources */,
 				F7A8D74228F18261008BBE1C /* NCUtility.swift in Sources */,
 				F7A8D73A28F17E28008BBE1C /* NCManageDatabase+Video.swift in Sources */,
-				F7C9739D28F1733B002C43E2 /* Dashboard.intentdefinition in Sources */,
 				F7A8D73828F17E21008BBE1C /* NCManageDatabase+DashboardWidget.swift in Sources */,
 				F7A8D73928F17E25008BBE1C /* NCManageDatabase+Metadata.swift in Sources */,
 				F7A8D74128F18254008BBE1C /* UIColor+Extensions.swift in Sources */,
@@ -3196,6 +3208,58 @@
 			path = "Supporting Files";
 			sourceTree = "<group>";
 		};
+		F75DD769290ABB25002EB562 /* Intent.intentdefinition */ = {
+			isa = PBXVariantGroup;
+			children = (
+				F75DD768290ABB25002EB562 /* Base */,
+				F7BE7C25290AC8C9002ABB61 /* en */,
+				F7BE7C27290ADEFD002ABB61 /* eu */,
+				F7BE7C29290ADEFD002ABB61 /* ca */,
+				F7BE7C2B290ADEFE002ABB61 /* zh-Hans */,
+				F7BE7C2D290ADEFF002ABB61 /* cs-CZ */,
+				F7BE7C2F290ADF00002ABB61 /* zh-Hant-TW */,
+				F7BE7C31290ADF00002ABB61 /* nl */,
+				F7BE7C33290ADF01002ABB61 /* da */,
+				F7BE7C35290ADF03002ABB61 /* tr */,
+				F7BE7C37290ADF03002ABB61 /* sv */,
+				F7BE7C39290ADF04002ABB61 /* es-UY */,
+				F7BE7C3B290ADF04002ABB61 /* es-PR */,
+				F7BE7C3D290ADF05002ABB61 /* es-PE */,
+				F7BE7C3F290ADF06002ABB61 /* es-PY */,
+				F7BE7C41290ADF06002ABB61 /* es-PA */,
+				F7BE7C43290ADF06002ABB61 /* es-NI */,
+				F7BE7C45290ADF07002ABB61 /* es-MX */,
+				F7BE7C47290ADF07002ABB61 /* es-419 */,
+				F7BE7C49290ADF08002ABB61 /* es-HN */,
+				F7BE7C4B290ADF09002ABB61 /* ru */,
+				F7BE7C4D290ADF0A002ABB61 /* sr */,
+				F7BE7C4F290ADF0A002ABB61 /* sk-SK */,
+				F7BE7C51290ADF0B002ABB61 /* es */,
+				F7BE7C53290ADF0B002ABB61 /* es-CL */,
+				F7BE7C55290ADF0C002ABB61 /* es-CO */,
+				F7BE7C57290ADF0C002ABB61 /* es-CR */,
+				F7BE7C59290ADF0D002ABB61 /* es-DO */,
+				F7BE7C5B290ADF0D002ABB61 /* es-EC */,
+				F7BE7C5D290ADF0E002ABB61 /* es-SV */,
+				F7BE7C5F290ADF0E002ABB61 /* es-GT */,
+				F7BE7C61290ADF10002ABB61 /* en-GB */,
+				F7BE7C63290ADF10002ABB61 /* fr */,
+				F7BE7C65290ADF10002ABB61 /* gl */,
+				F7BE7C67290ADF11002ABB61 /* ka-GE */,
+				F7BE7C69290ADF11002ABB61 /* de */,
+				F7BE7C6B290ADF12002ABB61 /* hu */,
+				F7BE7C6D290ADF12002ABB61 /* is */,
+				F7BE7C6F290ADF13002ABB61 /* it */,
+				F7BE7C71290ADF13002ABB61 /* ja-JP */,
+				F7BE7C73290ADF14002ABB61 /* ko */,
+				F7BE7C75290ADF14002ABB61 /* nb-NO */,
+				F7BE7C77290ADF15002ABB61 /* pl */,
+				F7BE7C79290ADF16002ABB61 /* pt-BR */,
+				F7BE7C7B290ADF16002ABB61 /* pt-PT */,
+			);
+			name = Intent.intentdefinition;
+			sourceTree = "<group>";
+		};
 		F7E70DE91A24DE4100E1B66A /* Localizable.strings */ = {
 			isa = PBXVariantGroup;
 			children = (
@@ -3248,58 +3312,6 @@
 			path = "Supporting Files";
 			sourceTree = "<group>";
 		};
-		F7FABE3928D1DAD00000A325 /* Dashboard.intentdefinition */ = {
-			isa = PBXVariantGroup;
-			children = (
-				F7FABE3828D1DAD00000A325 /* Base */,
-				F711D63328F47A66003F43C8 /* en */,
-				F7CD836428F6B4DA00E93B11 /* eu */,
-				F7CD836628F6B4DA00E93B11 /* ca */,
-				F7CD836828F6B4DB00E93B11 /* zh-Hans */,
-				F7CD836A28F6B4DC00E93B11 /* zh-Hant-TW */,
-				F7CD836C28F6B4DC00E93B11 /* cs-CZ */,
-				F7CD836E28F6B4DD00E93B11 /* da */,
-				F7CD837028F6B4E100E93B11 /* nl */,
-				F7CD837228F6B4E300E93B11 /* en-GB */,
-				F7CD837428F6B4E700E93B11 /* fr */,
-				F7CD837628F6B4E800E93B11 /* gl */,
-				F7CD837828F6B4EA00E93B11 /* ka-GE */,
-				F7CD837A28F6B4EC00E93B11 /* de */,
-				F7CD837C28F6B4ED00E93B11 /* hu */,
-				F7CD837E28F6B4EE00E93B11 /* is */,
-				F7CD838028F6B4EF00E93B11 /* it */,
-				F7CD838228F6B4F000E93B11 /* ja-JP */,
-				F7CD838428F6B4F200E93B11 /* ko */,
-				F7CD838628F6B4F300E93B11 /* nb-NO */,
-				F7CD838828F6B4F400E93B11 /* pl */,
-				F7CD838A28F6B4F800E93B11 /* pt-BR */,
-				F7CD838C28F6B4F900E93B11 /* pt-PT */,
-				F7CD838E28F6B4F900E93B11 /* ru */,
-				F7CD839028F6B4FA00E93B11 /* sr */,
-				F7CD839228F6B4FB00E93B11 /* sk-SK */,
-				F7CD839428F6B4FC00E93B11 /* es */,
-				F7CD839628F6B4FC00E93B11 /* es-CL */,
-				F7CD839828F6B4FD00E93B11 /* es-CO */,
-				F7CD839A28F6B4FE00E93B11 /* es-CR */,
-				F7CD839C28F6B4FF00E93B11 /* es-DO */,
-				F7CD839E28F6B4FF00E93B11 /* es-EC */,
-				F7CD83A028F6B50000E93B11 /* es-SV */,
-				F7CD83A228F6B50100E93B11 /* es-GT */,
-				F7CD83A428F6B50100E93B11 /* es-HN */,
-				F7CD83A628F6B50200E93B11 /* es-419 */,
-				F7CD83A828F6B50300E93B11 /* es-MX */,
-				F7CD83AA28F6B50400E93B11 /* es-NI */,
-				F7CD83AC28F6B50400E93B11 /* es-PA */,
-				F7CD83AE28F6B50500E93B11 /* es-PY */,
-				F7CD83B028F6B50600E93B11 /* es-PE */,
-				F7CD83B228F6B50700E93B11 /* es-PR */,
-				F7CD83B428F6B50700E93B11 /* es-UY */,
-				F7CD83B628F6B50800E93B11 /* sv */,
-				F7CD83B828F6B50800E93B11 /* tr */,
-			);
-			name = Dashboard.intentdefinition;
-			sourceTree = "<group>";
-		};
 /* End PBXVariantGroup section */
 
 /* Begin XCBuildConfiguration section */
@@ -3607,7 +3619,7 @@
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
-				CURRENT_PROJECT_VERSION = 0;
+				CURRENT_PROJECT_VERSION = 9;
 				DEVELOPMENT_TEAM = NKUJUXUJ3B;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				ENABLE_TESTABILITY = YES;
@@ -3631,7 +3643,7 @@
 					"@executable_path/Frameworks",
 					"@executable_path/../../Frameworks",
 				);
-				MARKETING_VERSION = 4.5.3;
+				MARKETING_VERSION = 4.5.4;
 				ONLY_ACTIVE_ARCH = YES;
 				OTHER_LDFLAGS = "";
 				SDKROOT = iphoneos;
@@ -3670,7 +3682,7 @@
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
-				CURRENT_PROJECT_VERSION = 0;
+				CURRENT_PROJECT_VERSION = 9;
 				DEVELOPMENT_TEAM = NKUJUXUJ3B;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				ENABLE_TESTABILITY = YES;
@@ -3692,7 +3704,7 @@
 					"@executable_path/Frameworks",
 					"@executable_path/../../Frameworks",
 				);
-				MARKETING_VERSION = 4.5.3;
+				MARKETING_VERSION = 4.5.4;
 				ONLY_ACTIVE_ARCH = YES;
 				OTHER_LDFLAGS = "";
 				SDKROOT = iphoneos;
@@ -3900,7 +3912,7 @@
 			repositoryURL = "https://github.com/nextcloud/NextcloudKit";
 			requirement = {
 				kind = exactVersion;
-				version = 1.1.0;
+				version = 1.2.0;
 			};
 		};
 		F788ECC5263AAAF900ADC67F /* XCRemoteSwiftPackageReference "MarkdownKit" */ = {
@@ -4125,6 +4137,26 @@
 			package = F788ECC5263AAAF900ADC67F /* XCRemoteSwiftPackageReference "MarkdownKit" */;
 			productName = MarkdownKit;
 		};
+		F78D0C7E2912722100D706AB /* JGProgressHUD */ = {
+			isa = XCSwiftPackageProductDependency;
+			package = F72CD01027A7E92400E59476 /* XCRemoteSwiftPackageReference "JGProgressHUD" */;
+			productName = JGProgressHUD;
+		};
+		F78D0C802912723900D706AB /* JGProgressHUD */ = {
+			isa = XCSwiftPackageProductDependency;
+			package = F72CD01027A7E92400E59476 /* XCRemoteSwiftPackageReference "JGProgressHUD" */;
+			productName = JGProgressHUD;
+		};
+		F78D0C822912724F00D706AB /* JGProgressHUD */ = {
+			isa = XCSwiftPackageProductDependency;
+			package = F72CD01027A7E92400E59476 /* XCRemoteSwiftPackageReference "JGProgressHUD" */;
+			productName = JGProgressHUD;
+		};
+		F78D0C842912725600D706AB /* JGProgressHUD */ = {
+			isa = XCSwiftPackageProductDependency;
+			package = F72CD01027A7E92400E59476 /* XCRemoteSwiftPackageReference "JGProgressHUD" */;
+			productName = JGProgressHUD;
+		};
 		F7A8D72328F1771B008BBE1C /* NextcloudKit */ = {
 			isa = XCSwiftPackageProductDependency;
 			package = F783034028B511D200B84583 /* XCRemoteSwiftPackageReference "NextcloudKit" */;

+ 2 - 2
Share/NCShareExtension+NCDelegate.swift

@@ -93,9 +93,9 @@ extension NCShareExtension: NCEmptyDataSetDelegate, NCAccountRequestDelegate {
 
         // get auto upload folder
         autoUploadFileName = NCManageDatabase.shared.getAccountAutoUploadFileName()
-        autoUploadDirectory = NCManageDatabase.shared.getAccountAutoUploadDirectory(urlBase: activeAccount.urlBase, account: activeAccount.account)
+        autoUploadDirectory = NCManageDatabase.shared.getAccountAutoUploadDirectory(urlBase: activeAccount.urlBase, userId: activeAccount.userId, account: activeAccount.account)
 
-        serverUrl = NCUtilityFileSystem.shared.getHomeServer(account: activeAccount.account)
+        serverUrl = NCUtilityFileSystem.shared.getHomeServer(urlBase: activeAccount.urlBase, userId: activeAccount.userId)
 
         layoutForView = NCUtility.shared.getLayoutForView(key: keyLayout, serverUrl: serverUrl)
 

+ 5 - 5
Share/NCShareExtension.swift

@@ -218,7 +218,7 @@ class NCShareExtension: UIViewController {
                 self.reloadDatasource(withLoadFolder: true)
 
                 var navigationTitle = (self.serverUrl as NSString).lastPathComponent
-                if NCUtilityFileSystem.shared.getHomeServer(account: self.activeAccount.account) == self.serverUrl {
+                if NCUtilityFileSystem.shared.getHomeServer(urlBase: self.activeAccount.urlBase, userId: self.activeAccount.userId) == self.serverUrl {
                     navigationTitle = NCBrandOptions.shared.brand
                 }
                 self.setNavigationBar(navigationTitle: navigationTitle)
@@ -229,7 +229,7 @@ class NCShareExtension: UIViewController {
         let profileButton = UIButton(type: .custom)
         profileButton.setImage(image, for: .normal)
 
-        if serverUrl == NCUtilityFileSystem.shared.getHomeServer(account: activeAccount.account) {
+        if serverUrl == NCUtilityFileSystem.shared.getHomeServer(urlBase: activeAccount.urlBase, userId: activeAccount.userId) {
 
             var title = "  "
             if let userAlias = activeAccount?.alias, !userAlias.isEmpty {
@@ -250,7 +250,7 @@ class NCShareExtension: UIViewController {
             }
         }
         var navItems = [UIBarButtonItem(customView: profileButton)]
-        if serverUrl != NCUtilityFileSystem.shared.getHomeServer(account: activeAccount.account) {
+        if serverUrl != NCUtilityFileSystem.shared.getHomeServer(urlBase: activeAccount.urlBase, userId: activeAccount.userId) {
             let space = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
             space.width = 20
             navItems.append(contentsOf: [UIBarButtonItem(customView: backButton), space])
@@ -329,7 +329,7 @@ extension NCShareExtension {
             conflict.serverUrl = self.serverUrl
             conflict.metadatasUploadInConflict = conflicts
             conflict.delegate = self
-            conflict.isE2EE = CCUtility.isFolderEncrypted(self.serverUrl, e2eEncrypted: false, account: activeAccount.account, urlBase: activeAccount.urlBase)
+            conflict.isE2EE = CCUtility.isFolderEncrypted(self.serverUrl, e2eEncrypted: false, account: activeAccount.account, urlBase: activeAccount.urlBase, userId: activeAccount.userId)
             self.present(conflict, animated: true, completion: nil)
         } else {
             upload()
@@ -345,7 +345,7 @@ extension NCShareExtension {
         metadata.iconName = results.iconName
         metadata.classFile = results.classFile
         // E2EE
-        metadata.e2eEncrypted = CCUtility.isFolderEncrypted(metadata.serverUrl, e2eEncrypted: metadata.e2eEncrypted, account: metadata.account, urlBase: metadata.urlBase)
+        metadata.e2eEncrypted = CCUtility.isFolderEncrypted(metadata.serverUrl, e2eEncrypted: metadata.e2eEncrypted, account: metadata.account, urlBase: metadata.urlBase, userId: activeAccount.userId)
         // CHUNCK
         metadata.chunk = chunckSize != 0 && metadata.size > chunckSize
 

+ 22 - 11
Widget/Dashboard/DashboardData.swift

@@ -22,6 +22,7 @@
 //
 
 import WidgetKit
+import Intents
 import NextcloudKit
 import RealmSwift
 import SVGKit
@@ -32,6 +33,7 @@ struct DashboardDataEntry: TimelineEntry {
     let dashboard: tableDashboardWidget?
     let buttons: [tableDashboardWidgetButton]?
     let isPlaceholder: Bool
+    let isEmpty: Bool
     let titleImage: UIImage
     let title: String
     let footerImage: String
@@ -79,26 +81,34 @@ func getDashboardItems(displaySize: CGSize, withButton: Bool) -> Int {
     }
 }
 
-func getDashboardDataEntry(intent: Applications?, isPreview: Bool, displaySize: CGSize, completion: @escaping (_ entry: DashboardDataEntry) -> Void) {
+func getDashboardDataEntry(configuration: DashboardIntent?, isPreview: Bool, displaySize: CGSize, completion: @escaping (_ entry: DashboardDataEntry) -> Void) {
 
     let dashboardItems = getDashboardItems(displaySize: displaySize, withButton: false)
     let datasPlaceholder = Array(dashboardDatasTest[0...dashboardItems - 1])
+    var account: tableAccount?
 
     if isPreview {
-        return completion(DashboardDataEntry(date: Date(), datas: datasPlaceholder, dashboard: nil, buttons: nil, isPlaceholder: true, titleImage: UIImage(named: "widget")!, title: "Dashboard", footerImage: "checkmark.icloud", footerText: NCBrandOptions.shared.brand + " dashboard"))
+        return completion(DashboardDataEntry(date: Date(), datas: datasPlaceholder, dashboard: nil, buttons: nil, isPlaceholder: true, isEmpty: false, titleImage: UIImage(named: "widget")!, title: "Dashboard", footerImage: "checkmark.icloud", footerText: NCBrandOptions.shared.brand + " dashboard"))
     }
 
-    guard let account = NCManageDatabase.shared.getActiveAccount() else {
-        return completion(DashboardDataEntry(date: Date(), datas: datasPlaceholder, dashboard: nil, buttons: nil, isPlaceholder: true, titleImage: UIImage(named: "widget")!, title: "Dashboard", footerImage: "xmark.icloud", footerText: NSLocalizedString("_no_active_account_", comment: "")))
+    let accountIdentifier: String = configuration?.accounts?.identifier ?? "active"
+    if accountIdentifier == "active" {
+        account = NCManageDatabase.shared.getActiveAccount()
+    } else {
+        account = NCManageDatabase.shared.getAccount(predicate: NSPredicate(format: "account == %@", accountIdentifier))
+    }
+
+    guard let account = account else {
+        return completion(DashboardDataEntry(date: Date(), datas: datasPlaceholder, dashboard: nil, buttons: nil, isPlaceholder: true, isEmpty: false, titleImage: UIImage(named: "widget")!, title: "Dashboard", footerImage: "xmark.icloud", footerText: NSLocalizedString("_no_active_account_", comment: "")))
     }
 
     // Default widget
     let result = NCManageDatabase.shared.getDashboardWidgetApplications(account: account.account).first
-    let id: String = intent?.identifier ?? (result?.id ?? "recommendations")
+    let id: String = configuration?.applications?.identifier ?? (result?.id ?? "recommendations")
 
     let serverVersionMajor = NCManageDatabase.shared.getCapabilitiesServerInt(account: account.account, elements: NCElementsJSON.shared.capabilitiesVersionMajor)
     guard serverVersionMajor >= NCGlobal.shared.nextcloudVersion25 else {
-        return completion(DashboardDataEntry(date: Date(), datas: datasPlaceholder, dashboard: nil, buttons: nil, isPlaceholder: true, titleImage: UIImage(named: "widget")!, title: "Dashboard", footerImage: "xmark.icloud", footerText: NSLocalizedString("_widget_available_nc25_", comment: "")))
+        return completion(DashboardDataEntry(date: Date(), datas: datasPlaceholder, dashboard: nil, buttons: nil, isPlaceholder: true, isEmpty: false, titleImage: UIImage(named: "widget")!, title: "Dashboard", footerImage: "xmark.icloud", footerText: NSLocalizedString("_widget_available_nc25_", comment: "")))
     }
         
     // NETWORKING
@@ -142,7 +152,7 @@ func getDashboardDataEntry(intent: Applications?, isPreview: Bool, displaySize:
     }
     let titleImage = imagetmp
         
-    NextcloudKit.shared.getDashboardWidgetsApplication(id, options: options) { account, results, data, error in
+    NextcloudKit.shared.getDashboardWidgetsApplication(id, options: options) { _, results, data, error in
 
         Task {
             var datas = [DashboardData]()
@@ -222,12 +232,13 @@ func getDashboardDataEntry(intent: Applications?, isPreview: Bool, displaySize:
                 buttons = tableButton.filter(({ $0.type != "more" }))
             }
 
+            let alias = (account.alias.isEmpty) ? "" : (" (" + account.alias + ")")
+            let footerText = "Dashboard " + NSLocalizedString("_of_", comment: "") +  " " + account.displayName + alias
+
             if error != .success {
-                completion(DashboardDataEntry(date: Date(), datas: datasPlaceholder, dashboard: tableDashboard, buttons: buttons, isPlaceholder: true, titleImage: titleImage, title: title, footerImage: "xmark.icloud", footerText: error.errorDescription))
-            } else if datas.isEmpty {
-                completion(DashboardDataEntry(date: Date(), datas: datasPlaceholder, dashboard: tableDashboard, buttons: buttons, isPlaceholder: true, titleImage: titleImage, title: title, footerImage: "checkmark.icloud", footerText: NSLocalizedString("_no_data_available_", comment: "")))
+                completion(DashboardDataEntry(date: Date(), datas: datasPlaceholder, dashboard: tableDashboard, buttons: buttons, isPlaceholder: true, isEmpty: false, titleImage: titleImage, title: title, footerImage: "xmark.icloud", footerText: error.errorDescription))
             } else {
-                completion(DashboardDataEntry(date: Date(), datas: datas, dashboard: tableDashboard, buttons: buttons, isPlaceholder: false, titleImage: titleImage, title: title, footerImage: "checkmark.icloud", footerText: NCBrandOptions.shared.brand + " dashboard"))
+                completion(DashboardDataEntry(date: Date(), datas: datas, dashboard: tableDashboard, buttons: buttons, isPlaceholder: false, isEmpty: datas.isEmpty, titleImage: titleImage, title: title, footerImage: "checkmark.icloud", footerText: footerText))
             }
         }
     }

+ 4 - 4
Widget/Dashboard/DashboardWidgetProvider.swift

@@ -22,8 +22,8 @@
 //
 
 import WidgetKit
-import SwiftUI
 import Intents
+import SwiftUI
 
 struct DashboardWidgetProvider: IntentTimelineProvider {
 
@@ -35,17 +35,17 @@ struct DashboardWidgetProvider: IntentTimelineProvider {
         let datasPlaceholder = Array(dashboardDatasTest[0...dashboardItems])
         let title = "Dashboard"
         let titleImage = UIImage(named: "widget")!
-        return Entry(date: Date(), datas: datasPlaceholder, dashboard: nil, buttons: nil, isPlaceholder: true, titleImage: titleImage, title: title, footerImage: "checkmark.icloud", footerText: NCBrandOptions.shared.brand + " widget")
+        return Entry(date: Date(), datas: datasPlaceholder, dashboard: nil, buttons: nil, isPlaceholder: true, isEmpty: false, titleImage: titleImage, title: title, footerImage: "checkmark.icloud", footerText: NCBrandOptions.shared.brand + " widget")
     }
 
     func getSnapshot(for configuration: DashboardIntent, in context: Context, completion: @escaping (DashboardDataEntry) -> Void) {
-        getDashboardDataEntry(intent: configuration.Applications, isPreview: false, displaySize: context.displaySize) { entry in
+        getDashboardDataEntry(configuration: configuration, isPreview: false, displaySize: context.displaySize) { entry in
             completion(entry)
         }
     }
 
     func getTimeline(for configuration: DashboardIntent, in context: Context, completion: @escaping (Timeline<DashboardDataEntry>) -> Void) {
-        getDashboardDataEntry(intent: configuration.Applications, isPreview: context.isPreview, displaySize: context.displaySize) { entry in
+        getDashboardDataEntry(configuration: configuration, isPreview: context.isPreview, displaySize: context.displaySize) { entry in
             let timeLine = Timeline(entries: [entry], policy: .atEnd)
             completion(timeLine)
         }

+ 90 - 71
Widget/Dashboard/DashboardWidgetView.swift

@@ -32,10 +32,25 @@ struct DashboardWidgetView: View {
         
         GeometryReader { geo in
 
+            if entry.isEmpty {
+                VStack(alignment: .center) {
+                    Image(systemName: "checkmark")
+                        .resizable()
+                        .scaledToFit()
+                        .frame(width: 50, height: 50)
+                    Text(NSLocalizedString("_no_items_", comment: ""))
+                        .font(.system(size: 25))
+                        .padding()
+                    Text(NSLocalizedString("_check_back_later_", comment: ""))
+                        .font(.system(size: 15))
+                }
+                .frame(width: geo.size.width, height: geo.size.height)
+            }
+
             ZStack(alignment: .topLeading) {
 
                 HStack() {
-                    
+
                     Image(uiImage: entry.titleImage)
                         .renderingMode(.template)
                         .resizable()
@@ -51,88 +66,91 @@ struct DashboardWidgetView: View {
                 }
                 .frame(width: geo.size.width - 20)
                 .padding([.top, .leading, .trailing], 10)
-                
-                VStack(alignment: .leading) {
-                    
-                    VStack(spacing: 0) {
-                                                
-                        ForEach(entry.datas, id: \.id) { element in
-                            
-                            Link(destination: element.link) {
-                                
-                                HStack {
-                                    
-                                    let subTitleColor = Color(white: 0.5)
-
-                                    if entry.isPlaceholder {
-                                        Circle()
-                                            .fill(Color(.systemGray4))
-                                            .frame(width: 35, height: 35)
-                                    } else if let color = element.imageColor {
-                                        Image(uiImage: element.icon)
-                                            .renderingMode(.template)
-                                            .resizable()
-                                            .frame(width: 20, height: 20)
-                                            .foregroundColor(Color(color))
-                                    } else if element.template {
-                                        if entry.dashboard?.itemIconsRound ?? false {
+
+                if !entry.isEmpty {
+
+                    VStack(alignment: .leading) {
+
+                        VStack(spacing: 0) {
+
+                            ForEach(entry.datas, id: \.id) { element in
+
+                                Link(destination: element.link) {
+
+                                    HStack {
+
+                                        let subTitleColor = Color(white: 0.5)
+
+                                        if entry.isPlaceholder {
+                                            Circle()
+                                                .fill(Color(.systemGray4))
+                                                .frame(width: 35, height: 35)
+                                        } else if let color = element.imageColor {
                                             Image(uiImage: element.icon)
                                                 .renderingMode(.template)
                                                 .resizable()
-                                                .scaledToFill()
                                                 .frame(width: 20, height: 20)
-                                                .foregroundColor(.white)
-                                                .padding(8)
-                                                .background(Color(.systemGray4))
-                                                .clipShape(Circle())
+                                                .foregroundColor(Color(color))
+                                        } else if element.template {
+                                            if entry.dashboard?.itemIconsRound ?? false {
+                                                Image(uiImage: element.icon)
+                                                    .renderingMode(.template)
+                                                    .resizable()
+                                                    .scaledToFill()
+                                                    .frame(width: 20, height: 20)
+                                                    .foregroundColor(.white)
+                                                    .padding(8)
+                                                    .background(Color(.systemGray4))
+                                                    .clipShape(Circle())
+                                            } else {
+                                                Image(uiImage: element.icon)
+                                                    .renderingMode(.template)
+                                                    .resizable()
+                                                    .scaledToFill()
+                                                    .frame(width: 25, height: 25)
+                                                    .clipped()
+                                                    .cornerRadius(5)
+                                            }
                                         } else {
-                                            Image(uiImage: element.icon)
-                                                .renderingMode(.template)
-                                                .resizable()
-                                                .scaledToFill()
-                                                .frame(width: 25, height: 25)
-                                                .clipped()
-                                                .cornerRadius(5)
+                                            if entry.dashboard?.itemIconsRound ?? false || element.avatar {
+                                                Image(uiImage: element.icon)
+                                                    .resizable()
+                                                    .scaledToFill()
+                                                    .frame(width: 35, height: 35)
+                                                    .clipShape(Circle())
+                                            } else {
+                                                Image(uiImage: element.icon)
+                                                    .resizable()
+                                                    .scaledToFill()
+                                                    .frame(width: 35, height: 35)
+                                                    .clipped()
+                                                    .cornerRadius(5)
+                                            }
                                         }
-                                    } else {
-                                        if entry.dashboard?.itemIconsRound ?? false || element.avatar {
-                                            Image(uiImage: element.icon)
-                                                .resizable()
-                                                .scaledToFill()
-                                                .frame(width: 35, height: 35)
-                                                .clipShape(Circle())
-                                        } else {
-                                            Image(uiImage: element.icon)
-                                                .resizable()
-                                                .scaledToFill()
-                                                .frame(width: 35, height: 35)
-                                                .clipped()
-                                                .cornerRadius(5)
-                                        }
-                                    }
 
-                                    VStack(alignment: .leading, spacing: 2) {
+                                        VStack(alignment: .leading, spacing: 2) {
 
-                                        Text(element.title)
-                                            .font(.system(size: 12))
-                                            .fontWeight(.regular)
+                                            Text(element.title)
+                                                .font(.system(size: 12))
+                                                .fontWeight(.regular)
 
-                                        Text(element.subTitle)
-                                            .font(.system(size: CGFloat(10)))
-                                            .foregroundColor(subTitleColor)
+                                            Text(element.subTitle)
+                                                .font(.system(size: CGFloat(10)))
+                                                .foregroundColor(subTitleColor)
+                                        }
+                                        Spacer()
                                     }
-                                    Spacer()
+                                    .padding(.leading, 10)
+                                    .frame(height: 50)
                                 }
-                                .padding(.leading, 10)
-                                .frame(height: 50)
+                                Divider()
+                                    .padding(.leading, 54)
                             }
-                            Divider()
-                                .padding(.leading, 54)
                         }
                     }
+                    .padding(.top, 35)
+                    .redacted(reason: entry.isPlaceholder ? .placeholder : [])
                 }
-                .padding(.top, 35)
-                .redacted(reason: entry.isPlaceholder ? .placeholder : [])
 
                 if let buttons = entry.buttons, !buttons.isEmpty, !entry.isPlaceholder {
 
@@ -167,10 +185,11 @@ struct DashboardWidgetView: View {
 
                     Text(entry.footerText)
                         .font(.caption2)
-                        .padding(.trailing, 13.0)
+                        .lineLimit(1)
                         .foregroundColor(entry.isPlaceholder ? Color(.systemGray4) : Color(NCBrandColor.shared.brand))
                 }
-                .frame(maxWidth: geo.size.width - 5, maxHeight: geo.size.height - 2, alignment: .bottomTrailing)
+                .padding(.horizontal, 15.0)
+                .frame(maxWidth: geo.size.width, maxHeight: geo.size.height - 2, alignment: .bottomTrailing)
             }
         }
     }
@@ -181,7 +200,7 @@ struct DashboardWidget_Previews: PreviewProvider {
         let datas = Array(dashboardDatasTest[0...4])
         let title = "Dashboard"
         let titleImage = UIImage(named: "widget")!
-        let entry = DashboardDataEntry(date: Date(), datas: datas, dashboard: nil, buttons: nil, isPlaceholder: false, titleImage: titleImage, title: title, footerImage: "checkmark.icloud", footerText: "Nextcloud widget")
+        let entry = DashboardDataEntry(date: Date(), datas: datas, dashboard: nil, buttons: nil, isPlaceholder: false, isEmpty: true, titleImage: titleImage, title: title, footerImage: "checkmark.icloud", footerText: "Nextcloud widget")
         DashboardWidgetView(entry: entry).previewContext(WidgetPreviewContext(family: .systemLarge))
     }
 }

+ 0 - 169
Widget/Dashboard/Intent/Base.lproj/Dashboard.intentdefinition

@@ -1,169 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>INEnums</key>
-	<array/>
-	<key>INIntentDefinitionModelVersion</key>
-	<string>1.2</string>
-	<key>INIntentDefinitionNamespace</key>
-	<string>88xZPY</string>
-	<key>INIntentDefinitionSystemVersion</key>
-	<string>21G115</string>
-	<key>INIntentDefinitionToolsBuildVersion</key>
-	<string>14A309</string>
-	<key>INIntentDefinitionToolsVersion</key>
-	<string>14.0</string>
-	<key>INIntents</key>
-	<array>
-		<dict>
-			<key>INIntentCategory</key>
-			<string>information</string>
-			<key>INIntentDescription</key>
-			<string>Dashboard Widget</string>
-			<key>INIntentDescriptionID</key>
-			<string>tVvJ9c</string>
-			<key>INIntentEligibleForWidgets</key>
-			<true/>
-			<key>INIntentIneligibleForSuggestions</key>
-			<true/>
-			<key>INIntentLastParameterTag</key>
-			<integer>7</integer>
-			<key>INIntentName</key>
-			<string>Dashboard</string>
-			<key>INIntentParameters</key>
-			<array>
-				<dict>
-					<key>INIntentParameterConfigurable</key>
-					<true/>
-					<key>INIntentParameterDisplayName</key>
-					<string>Widget</string>
-					<key>INIntentParameterDisplayNameID</key>
-					<string>TRaTZg</string>
-					<key>INIntentParameterDisplayPriority</key>
-					<integer>1</integer>
-					<key>INIntentParameterName</key>
-					<string>Applications</string>
-					<key>INIntentParameterObjectType</key>
-					<string>Applications</string>
-					<key>INIntentParameterObjectTypeNamespace</key>
-					<string>88xZPY</string>
-					<key>INIntentParameterPromptDialogs</key>
-					<array>
-						<dict>
-							<key>INIntentParameterPromptDialogCustom</key>
-							<true/>
-							<key>INIntentParameterPromptDialogType</key>
-							<string>Configuration</string>
-						</dict>
-						<dict>
-							<key>INIntentParameterPromptDialogCustom</key>
-							<true/>
-							<key>INIntentParameterPromptDialogType</key>
-							<string>Primary</string>
-						</dict>
-					</array>
-					<key>INIntentParameterSupportsDynamicEnumeration</key>
-					<true/>
-					<key>INIntentParameterTag</key>
-					<integer>7</integer>
-					<key>INIntentParameterType</key>
-					<string>Object</string>
-				</dict>
-			</array>
-			<key>INIntentResponse</key>
-			<dict>
-				<key>INIntentResponseCodes</key>
-				<array>
-					<dict>
-						<key>INIntentResponseCodeName</key>
-						<string>success</string>
-						<key>INIntentResponseCodeSuccess</key>
-						<true/>
-					</dict>
-					<dict>
-						<key>INIntentResponseCodeName</key>
-						<string>failure</string>
-					</dict>
-				</array>
-				<key>INIntentResponseLastParameterTag</key>
-				<integer>1</integer>
-			</dict>
-			<key>INIntentTitle</key>
-			<string>Dashboard</string>
-			<key>INIntentTitleID</key>
-			<string>gpCwrM</string>
-			<key>INIntentType</key>
-			<string>Custom</string>
-			<key>INIntentVerb</key>
-			<string>View</string>
-		</dict>
-	</array>
-	<key>INTypes</key>
-	<array>
-		<dict>
-			<key>INTypeDisplayName</key>
-			<string>Applications</string>
-			<key>INTypeDisplayNameID</key>
-			<string>l090JH</string>
-			<key>INTypeLastPropertyTag</key>
-			<integer>99</integer>
-			<key>INTypeName</key>
-			<string>Applications</string>
-			<key>INTypeProperties</key>
-			<array>
-				<dict>
-					<key>INTypePropertyDefault</key>
-					<true/>
-					<key>INTypePropertyDisplayPriority</key>
-					<integer>1</integer>
-					<key>INTypePropertyName</key>
-					<string>identifier</string>
-					<key>INTypePropertyTag</key>
-					<integer>1</integer>
-					<key>INTypePropertyType</key>
-					<string>String</string>
-				</dict>
-				<dict>
-					<key>INTypePropertyDefault</key>
-					<true/>
-					<key>INTypePropertyDisplayPriority</key>
-					<integer>2</integer>
-					<key>INTypePropertyName</key>
-					<string>displayString</string>
-					<key>INTypePropertyTag</key>
-					<integer>2</integer>
-					<key>INTypePropertyType</key>
-					<string>String</string>
-				</dict>
-				<dict>
-					<key>INTypePropertyDefault</key>
-					<true/>
-					<key>INTypePropertyDisplayPriority</key>
-					<integer>3</integer>
-					<key>INTypePropertyName</key>
-					<string>pronunciationHint</string>
-					<key>INTypePropertyTag</key>
-					<integer>3</integer>
-					<key>INTypePropertyType</key>
-					<string>String</string>
-				</dict>
-				<dict>
-					<key>INTypePropertyDefault</key>
-					<true/>
-					<key>INTypePropertyDisplayPriority</key>
-					<integer>4</integer>
-					<key>INTypePropertyName</key>
-					<string>alternativeSpeakableMatches</string>
-					<key>INTypePropertySupportsMultipleValues</key>
-					<true/>
-					<key>INTypePropertyTag</key>
-					<integer>4</integer>
-					<key>INTypePropertyType</key>
-					<string>SpeakableString</string>
-				</dict>
-			</array>
-		</dict>
-	</array>
-</dict>
-</plist>

+ 0 - 8
Widget/Dashboard/Intent/ca.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/cs-CZ.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/da.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/de.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/en-GB.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/en.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es-419.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es-CL.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es-CO.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es-CR.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es-DO.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es-EC.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es-GT.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es-HN.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es-MX.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es-NI.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es-PA.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es-PE.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es-PR.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es-PY.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es-SV.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es-UY.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/es.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/eu.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/fr.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/gl.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/hu.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/is.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/it.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/ja-JP.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/ka-GE.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/ko.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/nb-NO.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/nl.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/pl.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/pt-BR.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/pt-PT.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/ru.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/sk-SK.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/sr.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/sv.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/tr.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/zh-Hans.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 0 - 8
Widget/Dashboard/Intent/zh-Hant-TW.lproj/Dashboard.strings

@@ -1,8 +0,0 @@
-"TRaTZg" = "Widget";
-
-"gpCwrM" = "Dashboard";
-
-"l090JH" = "Applications";
-
-"tVvJ9c" = "Dashboard Widget";
-

+ 32 - 32
Widget/Files/FilesData.swift

@@ -22,12 +22,16 @@
 //
 
 import WidgetKit
+import Intents
 import NextcloudKit
 
 struct FilesDataEntry: TimelineEntry {
     let date: Date
     let datas: [FilesData]
     let isPlaceholder: Bool
+    let isEmpty: Bool
+    let userId: String
+    let url: String
     let tile: String
     let footerImage: String
     let footerText: String
@@ -54,7 +58,7 @@ let filesDatasTest: [FilesData] = [
     .init(id: "9", image: UIImage(named: "widget")!, title: "title4", subTitle: "subTitle-description4", url: URL(string: "https://nextcloud.com/")!)
 ]
 
-func getTitleFilesWidget() -> String {
+func getTitleFilesWidget(account: tableAccount?) -> String {
 
     let hour = Calendar.current.component(.hour, from: Date())
     var good = ""
@@ -67,7 +71,7 @@ func getTitleFilesWidget() -> String {
     default: good = NSLocalizedString("_good_night_", value: "Good night", comment: "")
     }
 
-    if let account = NCManageDatabase.shared.getActiveAccount() {
+    if let account = account {
         return good + ", " + account.displayName
     } else {
         return good
@@ -80,19 +84,25 @@ func getFilesItems(displaySize: CGSize) -> Int {
     return height
 }
 
-func getFilesDataEntry(isPreview: Bool, displaySize: CGSize, completion: @escaping (_ entry: FilesDataEntry) -> Void) {
+func getFilesDataEntry(configuration: AccountIntent?, isPreview: Bool, displaySize: CGSize, completion: @escaping (_ entry: FilesDataEntry) -> Void) {
 
     let filesItems = getFilesItems(displaySize: displaySize)
     let datasPlaceholder = Array(filesDatasTest[0...filesItems - 1])
-    let title = getTitleFilesWidget()
-    
-    
+    var account: tableAccount?
+
     if isPreview {
-        return completion(FilesDataEntry(date: Date(), datas: datasPlaceholder, isPlaceholder: true, tile: title, footerImage: "checkmark.icloud", footerText: NCBrandOptions.shared.brand + " files"))
+        return completion(FilesDataEntry(date: Date(), datas: datasPlaceholder, isPlaceholder: true, isEmpty: false, userId: "", url: "", tile: getTitleFilesWidget(account: nil), footerImage: "checkmark.icloud", footerText: NCBrandOptions.shared.brand + " files"))
+    }
+
+    let accountIdentifier: String = configuration?.accounts?.identifier ?? "active"
+    if accountIdentifier == "active" {
+        account = NCManageDatabase.shared.getActiveAccount()
+    } else {
+        account = NCManageDatabase.shared.getAccount(predicate: NSPredicate(format: "account == %@", accountIdentifier))
     }
 
-    guard let account = NCManageDatabase.shared.getActiveAccount() else {
-        return completion(FilesDataEntry(date: Date(), datas: datasPlaceholder, isPlaceholder: true, tile: title, footerImage: "xmark.icloud", footerText: NSLocalizedString("_no_active_account_", value: "No account found", comment: "")))
+    guard let account = account else {
+        return completion(FilesDataEntry(date: Date(), datas: datasPlaceholder, isPlaceholder: true, isEmpty: false, userId: "", url: "", tile: getTitleFilesWidget(account: nil), footerImage: "xmark.icloud", footerText: NSLocalizedString("_no_active_account_", value: "No account found", comment: "")))
     }
 
     @Sendable func isLive(file: NKFile, files: [NKFile]) -> Bool {
@@ -128,25 +138,13 @@ func getFilesDataEntry(isPreview: Bool, displaySize: CGSize, completion: @escapi
                 <d:resourcetype/>
                 <d:getcontentlength/>
                 <d:getlastmodified/>
-                <d:getetag/>
-                <d:quota-used-bytes/>
-                <d:quota-available-bytes/>
-                <permissions xmlns=\"http://owncloud.org/ns\"/>
                 <id xmlns=\"http://owncloud.org/ns\"/>
                 <fileid xmlns=\"http://owncloud.org/ns\"/>
                 <size xmlns=\"http://owncloud.org/ns\"/>
-                <favorite xmlns=\"http://owncloud.org/ns\"/>
                 <creation_time xmlns=\"http://nextcloud.org/ns\"/>
                 <upload_time xmlns=\"http://nextcloud.org/ns\"/>
                 <is-encrypted xmlns=\"http://nextcloud.org/ns\"/>
-                <mount-type xmlns=\"http://nextcloud.org/ns\"/>
-                <owner-id xmlns=\"http://owncloud.org/ns\"/>
-                <owner-display-name xmlns=\"http://owncloud.org/ns\"/>
-                <comments-unread xmlns=\"http://owncloud.org/ns\"/>
                 <has-preview xmlns=\"http://nextcloud.org/ns\"/>
-                <trashbin-filename xmlns=\"http://nextcloud.org/ns\"/>
-                <trashbin-original-location xmlns=\"http://nextcloud.org/ns\"/>
-                <trashbin-deletion-time xmlns=\"http://nextcloud.org/ns\"/>
             </d:prop>
         </d:select>
     <d:from>
@@ -204,8 +202,10 @@ func getFilesDataEntry(isPreview: Bool, displaySize: CGSize, completion: @escapi
         Task {
             var datas: [FilesData] = []
             var imageRecent = UIImage(named: "file")!
+            let title = getTitleFilesWidget(account: account)
 
             for file in files {
+
                 guard !file.directory else { continue }
                 guard !isLive(file: file, files: files) else { continue }
 
@@ -227,7 +227,7 @@ func getFilesDataEntry(isPreview: Bool, displaySize: CGSize, completion: @escapi
                 if let image = NCUtility.shared.createFilePreviewImage(ocId: file.ocId, etag: file.etag, fileNameView: file.fileName, classFile: file.classFile, status: 0, createPreviewMedia: false) {
                     imageRecent = image
                 } else if file.hasPreview {
-                    let fileNamePathOrFileId = CCUtility.returnFileNamePath(fromFileName: file.fileName, serverUrl: file.serverUrl, urlBase: file.urlBase, account: account.account)!
+                    let fileNamePathOrFileId = CCUtility.returnFileNamePath(fromFileName: file.fileName, serverUrl: file.serverUrl, urlBase: file.urlBase, userId: file.userId, account: account.account)!
                     let fileNamePreviewLocalPath = CCUtility.getDirectoryProviderStoragePreviewOcId(file.ocId, etag: file.etag)!
                     let fileNameIconLocalPath = CCUtility.getDirectoryProviderStorageIconOcId(file.ocId, etag: file.etag)!
                     let (_, _, imageIcon, _, _, _) = await NextcloudKit.shared.downloadPreview(fileNamePathOrFileId: fileNamePathOrFileId, fileNamePreviewLocalPath: fileNamePreviewLocalPath, widthPreview: NCGlobal.shared.sizePreview, heightPreview: NCGlobal.shared.sizePreview, fileNameIconLocalPath: fileNameIconLocalPath, sizeIcon: NCGlobal.shared.sizeIcon)
@@ -236,23 +236,23 @@ func getFilesDataEntry(isPreview: Bool, displaySize: CGSize, completion: @escapi
                     }
                 }
 
+                //
+                let isEncrypted = CCUtility.isFolderEncrypted(file.serverUrl, e2eEncrypted: file.e2eEncrypted, account: account.account, urlBase: file.urlBase, userId: file.userId)
+                let metadata = NCManageDatabase.shared.convertNCFileToMetadata(file, isEncrypted: isEncrypted, account: account.account)
+
                 // DATA
-                let data = FilesData.init(id: file.ocId, image: imageRecent, title: file.fileName, subTitle: subTitle, url: url)
+                let data = FilesData.init(id: metadata.ocId, image: imageRecent, title: metadata.fileNameView, subTitle: subTitle, url: url)
                 datas.append(data)
                 if datas.count == filesItems { break}
             }
 
+            let alias = (account.alias.isEmpty) ? "" : (" (" + account.alias + ")")
+            let footerText = "Files " + NSLocalizedString("_of_", comment: "") +  " " + account.displayName + alias
+
             if error != .success {
-                completion(FilesDataEntry(date: Date(), datas: datasPlaceholder, isPlaceholder: true, tile: title, footerImage: "xmark.icloud", footerText: error.errorDescription))
-            } else if datas.isEmpty {
-                var footerText = NSLocalizedString("_no_data_available_", comment: "")
-                let serverVersionMajor = NCManageDatabase.shared.getCapabilitiesServerInt(account: account.account, elements: NCElementsJSON.shared.capabilitiesVersionMajor)
-                if serverVersionMajor < NCGlobal.shared.nextcloudVersion25 {
-                    footerText = NSLocalizedString("_widget_available_nc25_", comment: "")
-                }
-                completion(FilesDataEntry(date: Date(), datas: datasPlaceholder, isPlaceholder: true, tile: title, footerImage: "checkmark.icloud", footerText: footerText))
+                completion(FilesDataEntry(date: Date(), datas: datasPlaceholder, isPlaceholder: true, isEmpty: false, userId: account.userId, url: account.urlBase, tile: title, footerImage: "xmark.icloud", footerText: error.errorDescription))
             } else {
-                completion(FilesDataEntry(date: Date(), datas: datas, isPlaceholder: false, tile: title, footerImage: "checkmark.icloud", footerText: NCBrandOptions.shared.brand + " files"))
+                completion(FilesDataEntry(date: Date(), datas: datas, isPlaceholder: false, isEmpty: datas.isEmpty, userId: account.userId, url: account.urlBase, tile: title, footerImage: "checkmark.icloud", footerText: footerText))
             }
         }
     }

+ 9 - 7
Widget/Files/FilesWidgetProvider.swift

@@ -22,27 +22,29 @@
 //
 
 import WidgetKit
+import Intents
 import SwiftUI
 
-struct FilesWidgetProvider: TimelineProvider {
+struct FilesWidgetProvider: IntentTimelineProvider {
 
     typealias Entry = FilesDataEntry
+    typealias Intent = AccountIntent
 
     func placeholder(in context: Context) -> Entry {
         let filesItems = getFilesItems(displaySize: context.displaySize)
         let datasPlaceholder = Array(filesDatasTest[0...filesItems - 1])
-        let title = getTitleFilesWidget()
-        return Entry(date: Date(), datas: datasPlaceholder, isPlaceholder: true, tile: title, footerImage: "checkmark.icloud", footerText: NCBrandOptions.shared.brand + " files")
+        let title = getTitleFilesWidget(account: nil)
+        return Entry(date: Date(), datas: datasPlaceholder, isPlaceholder: true, isEmpty: false, userId: "", url: "", tile: title, footerImage: "checkmark.icloud", footerText: NCBrandOptions.shared.brand + " files")
     }
 
-    func getSnapshot(in context: Context, completion: @escaping (Entry) -> Void) {
-        getFilesDataEntry(isPreview: false, displaySize: context.displaySize) { entry in
+    func getSnapshot(for configuration: AccountIntent, in context: Context, completion: @escaping (Entry) -> Void) {
+        getFilesDataEntry(configuration: configuration, isPreview: false, displaySize: context.displaySize) { entry in
             completion(entry)
         }
     }
 
-    func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> Void) {
-        getFilesDataEntry(isPreview: context.isPreview, displaySize: context.displaySize) { entry in
+    func getTimeline(for configuration: AccountIntent, in context: Context, completion: @escaping (Timeline<Entry>) -> Void) {
+        getFilesDataEntry(configuration: configuration, isPreview: context.isPreview, displaySize: context.displaySize) { entry in
             let timeLine = Timeline(entries: [entry], policy: .atEnd)
             completion(timeLine)
         }

+ 69 - 44
Widget/Files/FilesWidgetView.swift

@@ -27,11 +27,33 @@ import WidgetKit
 struct FilesWidgetView: View {
     
     var entry: FilesDataEntry
-    
+
     var body: some View {
-        
+
+        let parameterLink = "&user=\(entry.userId)&url=\(entry.url)"
+        let linkNoAction: URL = URL(string: NCGlobal.shared.widgetActionNoAction + parameterLink) != nil ? URL(string: NCGlobal.shared.widgetActionNoAction + parameterLink)! : URL(string: NCGlobal.shared.widgetActionNoAction)!
+        let linkActionUploadAsset: URL = URL(string: NCGlobal.shared.widgetActionUploadAsset + parameterLink) != nil ? URL(string: NCGlobal.shared.widgetActionUploadAsset + parameterLink)! : URL(string: NCGlobal.shared.widgetActionUploadAsset)!
+        let linkActionScanDocument: URL = URL(string: NCGlobal.shared.widgetActionScanDocument + parameterLink) != nil ? URL(string: NCGlobal.shared.widgetActionScanDocument + parameterLink)! : URL(string: NCGlobal.shared.widgetActionScanDocument)!
+        let linkActionTextDocument: URL = URL(string: NCGlobal.shared.widgetActionTextDocument + parameterLink) != nil ? URL(string: NCGlobal.shared.widgetActionTextDocument + parameterLink)! : URL(string: NCGlobal.shared.widgetActionTextDocument)!
+        let linkActionVoiceMemo: URL = URL(string: NCGlobal.shared.widgetActionVoiceMemo + parameterLink) != nil ? URL(string: NCGlobal.shared.widgetActionVoiceMemo + parameterLink)! : URL(string: NCGlobal.shared.widgetActionVoiceMemo)!
+
         GeometryReader { geo in
-            
+
+            if entry.isEmpty {
+                VStack(alignment: .center) {
+                    Image(systemName: "checkmark")
+                        .resizable()
+                        .scaledToFit()
+                        .frame(width: 50, height: 50)
+                    Text(NSLocalizedString("_no_items_", comment: ""))
+                        .font(.system(size: 25))
+                        .padding()
+                    Text(NSLocalizedString("_check_back_later_", comment: ""))
+                        .font(.system(size: 15))
+                }
+                .frame(width: geo.size.width, height: geo.size.height)
+            }
+
             ZStack(alignment: .topLeading) {
                 
                 HStack() {
@@ -45,52 +67,54 @@ struct FilesWidgetView: View {
                 }
                 .frame(width: geo.size.width - 20)
                 .padding([.top, .leading, .trailing], 10)
-                
-                VStack(alignment: .leading) {
-                    
-                    VStack(spacing: 0) {
-                        
-                        ForEach(entry.datas, id: \.id) { element in
-                            
-                            Link(destination: element.url) {
-                                
-                                HStack {
-
-                                    Image(uiImage: element.image)
-                                        .resizable()
-                                        .scaledToFill()
-                                        .frame(width: 35, height: 35)
-                                        .clipped()
-                                        .cornerRadius(5)
-                                    
-                                    VStack(alignment: .leading, spacing: 2) {
-                                        
-                                        Text(element.title)
-                                            .font(.system(size: 12))
-                                            .fontWeight(.regular)
-                                        
-                                        Text(element.subTitle)
-                                            .font(.system(size: CGFloat(10)))
-                                            .foregroundColor(Color(.systemGray))
+
+                if !entry.isEmpty {
+                    VStack(alignment: .leading) {
+
+                        VStack(spacing: 0) {
+
+                            ForEach(entry.datas, id: \.id) { element in
+
+                                Link(destination: element.url) {
+
+                                    HStack {
+
+                                        Image(uiImage: element.image)
+                                            .resizable()
+                                            .scaledToFill()
+                                            .frame(width: 35, height: 35)
+                                            .clipped()
+                                            .cornerRadius(5)
+
+                                        VStack(alignment: .leading, spacing: 2) {
+
+                                            Text(element.title)
+                                                .font(.system(size: 12))
+                                                .fontWeight(.regular)
+
+                                            Text(element.subTitle)
+                                                .font(.system(size: CGFloat(10)))
+                                                .foregroundColor(Color(.systemGray))
+                                        }
+                                        Spacer()
                                     }
-                                    Spacer()
+                                    .padding(.leading, 10)
+                                    .frame(height: 50)
                                 }
-                                .padding(.leading, 10)
-                                .frame(height: 50)
+                                Divider()
+                                    .padding(.leading, 54)
                             }
-                            Divider()
-                                .padding(.leading, 54)
                         }
                     }
+                    .padding(.top, 30)
+                    .redacted(reason: entry.isPlaceholder ? .placeholder : [])
                 }
-                .padding(.top, 30)
-                .redacted(reason: entry.isPlaceholder ? .placeholder : [])
 
                 HStack(spacing: 0) {
 
                     let sizeButton: CGFloat = 40
 
-                    Link(destination: entry.isPlaceholder ? NCGlobal.shared.widgetActionNoAction : NCGlobal.shared.widgetActionUploadAsset, label: {
+                    Link(destination: entry.isPlaceholder ? linkNoAction : linkActionUploadAsset, label: {
                         Image("addImage")
                             .resizable()
                             .renderingMode(.template)
@@ -102,7 +126,7 @@ struct FilesWidgetView: View {
                             .frame(width: geo.size.width / 4, height: sizeButton)
                     })
 
-                    Link(destination: entry.isPlaceholder ? NCGlobal.shared.widgetActionNoAction : NCGlobal.shared.widgetActionScanDocument, label: {
+                    Link(destination: entry.isPlaceholder ? linkNoAction : linkActionScanDocument, label: {
                         Image("scan")
                             .resizable()
                             .renderingMode(.template)
@@ -114,7 +138,7 @@ struct FilesWidgetView: View {
                             .frame(width: geo.size.width / 4, height: sizeButton)
                     })
 
-                    Link(destination: entry.isPlaceholder ? NCGlobal.shared.widgetActionNoAction : NCGlobal.shared.widgetActionTextDocument, label: {
+                    Link(destination: entry.isPlaceholder ? linkNoAction : linkActionTextDocument, label: {
                         Image("note.text")
                             .resizable()
                             .renderingMode(.template)
@@ -126,7 +150,7 @@ struct FilesWidgetView: View {
                             .frame(width: geo.size.width / 4, height: sizeButton)
                     })
 
-                    Link(destination: entry.isPlaceholder ? NCGlobal.shared.widgetActionNoAction : NCGlobal.shared.widgetActionVoiceMemo, label: {
+                    Link(destination: entry.isPlaceholder ? linkNoAction : linkActionVoiceMemo, label: {
                         Image("microphone")
                             .resizable()
                             .renderingMode(.template)
@@ -151,10 +175,11 @@ struct FilesWidgetView: View {
                 
                     Text(entry.footerText)
                         .font(.caption2)
-                        .padding(.trailing, 13.0)
+                        .lineLimit(1)
                         .foregroundColor(entry.isPlaceholder ? Color(.systemGray4) : Color(NCBrandColor.shared.brand))
                 }
-                .frame(maxWidth: geo.size.width - 5, maxHeight: geo.size.height - 2, alignment: .bottomTrailing)
+                .padding(.horizontal, 15.0)
+                .frame(maxWidth: geo.size.width, maxHeight: geo.size.height - 2, alignment: .bottomTrailing)
             }
         }
     }
@@ -163,7 +188,7 @@ struct FilesWidgetView: View {
 struct FilesWidget_Previews: PreviewProvider {
     static var previews: some View {
         let datas = Array(filesDatasTest[0...4])
-        let entry = FilesDataEntry(date: Date(), datas: datas, isPlaceholder: false, tile: "Good afternoon, Marino Faggiana", footerImage: "checkmark.icloud", footerText: "Nextcloud files")
+        let entry = FilesDataEntry(date: Date(), datas: datas, isPlaceholder: false, isEmpty: true, userId: "", url: "", tile: "Good afternoon, Marino Faggiana", footerImage: "checkmark.icloud", footerText: "Nextcloud files")
         FilesWidgetView(entry: entry).previewContext(WidgetPreviewContext(family: .systemLarge))
     }
 }

+ 347 - 0
Widget/Intent/Base.lproj/Intent.intentdefinition

@@ -0,0 +1,347 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>INEnums</key>
+	<array/>
+	<key>INIntentDefinitionModelVersion</key>
+	<string>1.2</string>
+	<key>INIntentDefinitionNamespace</key>
+	<string>4HSdD3</string>
+	<key>INIntentDefinitionSystemVersion</key>
+	<string>22A380</string>
+	<key>INIntentDefinitionToolsBuildVersion</key>
+	<string>14A309</string>
+	<key>INIntentDefinitionToolsVersion</key>
+	<string>14.0</string>
+	<key>INIntents</key>
+	<array>
+		<dict>
+			<key>INIntentCategory</key>
+			<string>information</string>
+			<key>INIntentDescription</key>
+			<string>Account</string>
+			<key>INIntentDescriptionID</key>
+			<string>VfbA9C</string>
+			<key>INIntentEligibleForWidgets</key>
+			<true/>
+			<key>INIntentIneligibleForSuggestions</key>
+			<true/>
+			<key>INIntentLastParameterTag</key>
+			<integer>2</integer>
+			<key>INIntentName</key>
+			<string>Account</string>
+			<key>INIntentParameters</key>
+			<array>
+				<dict>
+					<key>INIntentParameterConfigurable</key>
+					<true/>
+					<key>INIntentParameterDisplayName</key>
+					<string>Account</string>
+					<key>INIntentParameterDisplayNameID</key>
+					<string>13zjVT</string>
+					<key>INIntentParameterDisplayPriority</key>
+					<integer>1</integer>
+					<key>INIntentParameterName</key>
+					<string>accounts</string>
+					<key>INIntentParameterObjectType</key>
+					<string>Accounts</string>
+					<key>INIntentParameterObjectTypeNamespace</key>
+					<string>4HSdD3</string>
+					<key>INIntentParameterPromptDialogs</key>
+					<array>
+						<dict>
+							<key>INIntentParameterPromptDialogCustom</key>
+							<true/>
+							<key>INIntentParameterPromptDialogType</key>
+							<string>Configuration</string>
+						</dict>
+						<dict>
+							<key>INIntentParameterPromptDialogCustom</key>
+							<true/>
+							<key>INIntentParameterPromptDialogType</key>
+							<string>Primary</string>
+						</dict>
+					</array>
+					<key>INIntentParameterSupportsDynamicEnumeration</key>
+					<true/>
+					<key>INIntentParameterTag</key>
+					<integer>2</integer>
+					<key>INIntentParameterType</key>
+					<string>Object</string>
+				</dict>
+			</array>
+			<key>INIntentResponse</key>
+			<dict>
+				<key>INIntentResponseCodes</key>
+				<array>
+					<dict>
+						<key>INIntentResponseCodeName</key>
+						<string>success</string>
+						<key>INIntentResponseCodeSuccess</key>
+						<true/>
+					</dict>
+					<dict>
+						<key>INIntentResponseCodeName</key>
+						<string>failure</string>
+					</dict>
+				</array>
+			</dict>
+			<key>INIntentTitle</key>
+			<string>Account</string>
+			<key>INIntentTitleID</key>
+			<string>V3exc2</string>
+			<key>INIntentType</key>
+			<string>Custom</string>
+			<key>INIntentVerb</key>
+			<string>View</string>
+		</dict>
+		<dict>
+			<key>INIntentCategory</key>
+			<string>information</string>
+			<key>INIntentDescription</key>
+			<string>Dashboard Widget</string>
+			<key>INIntentDescriptionID</key>
+			<string>ZgvlYN</string>
+			<key>INIntentEligibleForWidgets</key>
+			<true/>
+			<key>INIntentIneligibleForSuggestions</key>
+			<true/>
+			<key>INIntentLastParameterTag</key>
+			<integer>4</integer>
+			<key>INIntentName</key>
+			<string>Dashboard</string>
+			<key>INIntentParameters</key>
+			<array>
+				<dict>
+					<key>INIntentParameterConfigurable</key>
+					<true/>
+					<key>INIntentParameterDisplayName</key>
+					<string>Account</string>
+					<key>INIntentParameterDisplayNameID</key>
+					<string>DN8Bxl</string>
+					<key>INIntentParameterDisplayPriority</key>
+					<integer>1</integer>
+					<key>INIntentParameterName</key>
+					<string>accounts</string>
+					<key>INIntentParameterObjectType</key>
+					<string>Accounts</string>
+					<key>INIntentParameterObjectTypeNamespace</key>
+					<string>4HSdD3</string>
+					<key>INIntentParameterPromptDialogs</key>
+					<array>
+						<dict>
+							<key>INIntentParameterPromptDialogCustom</key>
+							<true/>
+							<key>INIntentParameterPromptDialogType</key>
+							<string>Configuration</string>
+						</dict>
+						<dict>
+							<key>INIntentParameterPromptDialogCustom</key>
+							<true/>
+							<key>INIntentParameterPromptDialogType</key>
+							<string>Primary</string>
+						</dict>
+					</array>
+					<key>INIntentParameterSupportsDynamicEnumeration</key>
+					<true/>
+					<key>INIntentParameterTag</key>
+					<integer>2</integer>
+					<key>INIntentParameterType</key>
+					<string>Object</string>
+				</dict>
+				<dict>
+					<key>INIntentParameterConfigurable</key>
+					<true/>
+					<key>INIntentParameterDisplayName</key>
+					<string>Widget</string>
+					<key>INIntentParameterDisplayNameID</key>
+					<string>LIw8E9</string>
+					<key>INIntentParameterDisplayPriority</key>
+					<integer>2</integer>
+					<key>INIntentParameterName</key>
+					<string>applications</string>
+					<key>INIntentParameterObjectType</key>
+					<string>Applications</string>
+					<key>INIntentParameterObjectTypeNamespace</key>
+					<string>4HSdD3</string>
+					<key>INIntentParameterPromptDialogs</key>
+					<array>
+						<dict>
+							<key>INIntentParameterPromptDialogCustom</key>
+							<true/>
+							<key>INIntentParameterPromptDialogType</key>
+							<string>Configuration</string>
+						</dict>
+						<dict>
+							<key>INIntentParameterPromptDialogCustom</key>
+							<true/>
+							<key>INIntentParameterPromptDialogType</key>
+							<string>Primary</string>
+						</dict>
+					</array>
+					<key>INIntentParameterSupportsDynamicEnumeration</key>
+					<true/>
+					<key>INIntentParameterTag</key>
+					<integer>4</integer>
+					<key>INIntentParameterType</key>
+					<string>Object</string>
+				</dict>
+			</array>
+			<key>INIntentResponse</key>
+			<dict>
+				<key>INIntentResponseCodes</key>
+				<array>
+					<dict>
+						<key>INIntentResponseCodeName</key>
+						<string>success</string>
+						<key>INIntentResponseCodeSuccess</key>
+						<true/>
+					</dict>
+					<dict>
+						<key>INIntentResponseCodeName</key>
+						<string>failure</string>
+					</dict>
+				</array>
+			</dict>
+			<key>INIntentTitle</key>
+			<string>Dashboard</string>
+			<key>INIntentTitleID</key>
+			<string>NO1rJU</string>
+			<key>INIntentType</key>
+			<string>Custom</string>
+			<key>INIntentVerb</key>
+			<string>View</string>
+		</dict>
+	</array>
+	<key>INTypes</key>
+	<array>
+		<dict>
+			<key>INTypeDisplayName</key>
+			<string>Accounts</string>
+			<key>INTypeDisplayNameID</key>
+			<string>tAlZ1R</string>
+			<key>INTypeLastPropertyTag</key>
+			<integer>99</integer>
+			<key>INTypeName</key>
+			<string>Accounts</string>
+			<key>INTypeProperties</key>
+			<array>
+				<dict>
+					<key>INTypePropertyDefault</key>
+					<true/>
+					<key>INTypePropertyDisplayPriority</key>
+					<integer>1</integer>
+					<key>INTypePropertyName</key>
+					<string>identifier</string>
+					<key>INTypePropertyTag</key>
+					<integer>1</integer>
+					<key>INTypePropertyType</key>
+					<string>String</string>
+				</dict>
+				<dict>
+					<key>INTypePropertyDefault</key>
+					<true/>
+					<key>INTypePropertyDisplayPriority</key>
+					<integer>2</integer>
+					<key>INTypePropertyName</key>
+					<string>displayString</string>
+					<key>INTypePropertyTag</key>
+					<integer>2</integer>
+					<key>INTypePropertyType</key>
+					<string>String</string>
+				</dict>
+				<dict>
+					<key>INTypePropertyDefault</key>
+					<true/>
+					<key>INTypePropertyDisplayPriority</key>
+					<integer>3</integer>
+					<key>INTypePropertyName</key>
+					<string>pronunciationHint</string>
+					<key>INTypePropertyTag</key>
+					<integer>3</integer>
+					<key>INTypePropertyType</key>
+					<string>String</string>
+				</dict>
+				<dict>
+					<key>INTypePropertyDefault</key>
+					<true/>
+					<key>INTypePropertyDisplayPriority</key>
+					<integer>4</integer>
+					<key>INTypePropertyName</key>
+					<string>alternativeSpeakableMatches</string>
+					<key>INTypePropertySupportsMultipleValues</key>
+					<true/>
+					<key>INTypePropertyTag</key>
+					<integer>4</integer>
+					<key>INTypePropertyType</key>
+					<string>SpeakableString</string>
+				</dict>
+			</array>
+		</dict>
+		<dict>
+			<key>INTypeDisplayName</key>
+			<string>Applications</string>
+			<key>INTypeDisplayNameID</key>
+			<string>CAIVXf</string>
+			<key>INTypeLastPropertyTag</key>
+			<integer>99</integer>
+			<key>INTypeName</key>
+			<string>Applications</string>
+			<key>INTypeProperties</key>
+			<array>
+				<dict>
+					<key>INTypePropertyDefault</key>
+					<true/>
+					<key>INTypePropertyDisplayPriority</key>
+					<integer>1</integer>
+					<key>INTypePropertyName</key>
+					<string>identifier</string>
+					<key>INTypePropertyTag</key>
+					<integer>1</integer>
+					<key>INTypePropertyType</key>
+					<string>String</string>
+				</dict>
+				<dict>
+					<key>INTypePropertyDefault</key>
+					<true/>
+					<key>INTypePropertyDisplayPriority</key>
+					<integer>2</integer>
+					<key>INTypePropertyName</key>
+					<string>displayString</string>
+					<key>INTypePropertyTag</key>
+					<integer>2</integer>
+					<key>INTypePropertyType</key>
+					<string>String</string>
+				</dict>
+				<dict>
+					<key>INTypePropertyDefault</key>
+					<true/>
+					<key>INTypePropertyDisplayPriority</key>
+					<integer>3</integer>
+					<key>INTypePropertyName</key>
+					<string>pronunciationHint</string>
+					<key>INTypePropertyTag</key>
+					<integer>3</integer>
+					<key>INTypePropertyType</key>
+					<string>String</string>
+				</dict>
+				<dict>
+					<key>INTypePropertyDefault</key>
+					<true/>
+					<key>INTypePropertyDisplayPriority</key>
+					<integer>4</integer>
+					<key>INTypePropertyName</key>
+					<string>alternativeSpeakableMatches</string>
+					<key>INTypePropertySupportsMultipleValues</key>
+					<true/>
+					<key>INTypePropertyTag</key>
+					<integer>4</integer>
+					<key>INTypePropertyType</key>
+					<string>SpeakableString</string>
+				</dict>
+			</array>
+		</dict>
+	</array>
+</dict>
+</plist>

+ 30 - 0
Widget/Intent/ca.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/cs-CZ.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/da.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/de.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/en-GB.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/en.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es-419.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es-CL.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es-CO.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es-CR.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es-DO.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es-EC.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es-GT.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es-HN.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es-MX.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es-NI.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es-PA.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es-PE.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es-PR.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es-PY.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es-SV.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es-UY.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/es.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/eu.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/fr.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/gl.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/hu.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/is.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/it.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/ja-JP.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/ka-GE.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/ko.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/nb-NO.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/nl.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/pl.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/pt-BR.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/pt-PT.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/ru.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/sk-SK.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/sr.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

+ 30 - 0
Widget/Intent/sv.lproj/Intent.strings

@@ -0,0 +1,30 @@
+"13zjVT" = "Account";
+
+"296XDb" = "There are ${count} options matching ‘${accounts}’.";
+
+"Am6y6p" = "Just to confirm, you wanted ‘${applications}’?";
+
+"CAIVXf" = "Applications";
+
+"DN8Bxl" = "Account";
+
+"LIw8E9" = "Widget";
+
+"NO1rJU" = "Dashboard";
+
+"ObH8NN" = "There are ${count} options matching ‘${accounts}’.";
+
+"TVGjNQ" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"V3exc2" = "Account";
+
+"VfbA9C" = "Account";
+
+"XjFf0X" = "There are ${count} options matching ‘${applications}’.";
+
+"ZgvlYN" = "Dashboard Widget";
+
+"q5lvSu" = "Just to confirm, you wanted ‘${accounts}’?";
+
+"tAlZ1R" = "Accounts";
+

Деякі файли не було показано, через те що забагато файлів було змінено