فهرست منبع

Merge pull request #2193 from nextcloud/improvements

Improvements
Marino Faggiana 2 سال پیش
والد
کامیت
8f1e24ac7a
48فایلهای تغییر یافته به همراه458 افزوده شده و 9 حذف شده
  1. 88 2
      Nextcloud.xcodeproj/project.pbxproj
  2. 3 3
      Widget/Dashboard/DashboardData.swift
  3. 8 0
      Widget/Dashboard/Intent/ca.lproj/Dashboard.strings
  4. 8 0
      Widget/Dashboard/Intent/cs-CZ.lproj/Dashboard.strings
  5. 8 0
      Widget/Dashboard/Intent/da.lproj/Dashboard.strings
  6. 8 0
      Widget/Dashboard/Intent/de.lproj/Dashboard.strings
  7. 8 0
      Widget/Dashboard/Intent/en-GB.lproj/Dashboard.strings
  8. 8 0
      Widget/Dashboard/Intent/es-419.lproj/Dashboard.strings
  9. 8 0
      Widget/Dashboard/Intent/es-CL.lproj/Dashboard.strings
  10. 8 0
      Widget/Dashboard/Intent/es-CO.lproj/Dashboard.strings
  11. 8 0
      Widget/Dashboard/Intent/es-CR.lproj/Dashboard.strings
  12. 8 0
      Widget/Dashboard/Intent/es-DO.lproj/Dashboard.strings
  13. 8 0
      Widget/Dashboard/Intent/es-EC.lproj/Dashboard.strings
  14. 8 0
      Widget/Dashboard/Intent/es-GT.lproj/Dashboard.strings
  15. 8 0
      Widget/Dashboard/Intent/es-HN.lproj/Dashboard.strings
  16. 8 0
      Widget/Dashboard/Intent/es-MX.lproj/Dashboard.strings
  17. 8 0
      Widget/Dashboard/Intent/es-NI.lproj/Dashboard.strings
  18. 8 0
      Widget/Dashboard/Intent/es-PA.lproj/Dashboard.strings
  19. 8 0
      Widget/Dashboard/Intent/es-PE.lproj/Dashboard.strings
  20. 8 0
      Widget/Dashboard/Intent/es-PR.lproj/Dashboard.strings
  21. 8 0
      Widget/Dashboard/Intent/es-PY.lproj/Dashboard.strings
  22. 8 0
      Widget/Dashboard/Intent/es-SV.lproj/Dashboard.strings
  23. 8 0
      Widget/Dashboard/Intent/es-UY.lproj/Dashboard.strings
  24. 8 0
      Widget/Dashboard/Intent/es.lproj/Dashboard.strings
  25. 8 0
      Widget/Dashboard/Intent/eu.lproj/Dashboard.strings
  26. 8 0
      Widget/Dashboard/Intent/fr.lproj/Dashboard.strings
  27. 8 0
      Widget/Dashboard/Intent/gl.lproj/Dashboard.strings
  28. 8 0
      Widget/Dashboard/Intent/hu.lproj/Dashboard.strings
  29. 8 0
      Widget/Dashboard/Intent/is.lproj/Dashboard.strings
  30. 8 0
      Widget/Dashboard/Intent/it.lproj/Dashboard.strings
  31. 8 0
      Widget/Dashboard/Intent/ja-JP.lproj/Dashboard.strings
  32. 8 0
      Widget/Dashboard/Intent/ka-GE.lproj/Dashboard.strings
  33. 8 0
      Widget/Dashboard/Intent/ko.lproj/Dashboard.strings
  34. 8 0
      Widget/Dashboard/Intent/nb-NO.lproj/Dashboard.strings
  35. 8 0
      Widget/Dashboard/Intent/nl.lproj/Dashboard.strings
  36. 8 0
      Widget/Dashboard/Intent/pl.lproj/Dashboard.strings
  37. 8 0
      Widget/Dashboard/Intent/pt-BR.lproj/Dashboard.strings
  38. 8 0
      Widget/Dashboard/Intent/pt-PT.lproj/Dashboard.strings
  39. 8 0
      Widget/Dashboard/Intent/ru.lproj/Dashboard.strings
  40. 8 0
      Widget/Dashboard/Intent/sk-SK.lproj/Dashboard.strings
  41. 8 0
      Widget/Dashboard/Intent/sr.lproj/Dashboard.strings
  42. 8 0
      Widget/Dashboard/Intent/sv.lproj/Dashboard.strings
  43. 8 0
      Widget/Dashboard/Intent/tr.lproj/Dashboard.strings
  44. 8 0
      Widget/Dashboard/Intent/zh-Hans.lproj/Dashboard.strings
  45. 8 0
      Widget/Dashboard/Intent/zh-Hant-TW.lproj/Dashboard.strings
  46. 7 4
      iOSClient/Data/NCManageDatabase+DashboardWidget.swift
  47. 1 0
      iOSClient/NCGlobal.swift
  48. 15 0
      iOSClient/Viewer/NCViewer.swift

+ 88 - 2
Nextcloud.xcodeproj/project.pbxproj

@@ -1030,6 +1030,49 @@
 		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>"; };
@@ -3190,6 +3233,49 @@
 			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>";
@@ -3501,7 +3587,7 @@
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
-				CURRENT_PROJECT_VERSION = 14;
+				CURRENT_PROJECT_VERSION = 15;
 				DEVELOPMENT_TEAM = NKUJUXUJ3B;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				ENABLE_TESTABILITY = YES;
@@ -3564,7 +3650,7 @@
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
-				CURRENT_PROJECT_VERSION = 14;
+				CURRENT_PROJECT_VERSION = 15;
 				DEVELOPMENT_TEAM = NKUJUXUJ3B;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				ENABLE_TESTABILITY = YES;

+ 3 - 3
Widget/Dashboard/DashboardData.swift

@@ -29,7 +29,7 @@ struct DashboardDataEntry: TimelineEntry {
     let date: Date
     let datas: [DashboardData]
     let tableDashboard: tableDashboardWidget?
-    let tableButton: Results<tableDashboardWidgetButton>?
+    let tableButton: [tableDashboardWidgetButton]?
     let isPlaceholder: Bool
     let titleImage: UIImage
     let title: String
@@ -172,8 +172,8 @@ func getDashboardDataEntry(intent: Applications?, isPreview: Bool, displaySize:
 
                                 if let item = CCUtility.value(forKey: "fileId", fromQueryItems: queryItems) {
                                     iconFileName = item
-                                } else if pathComponents[1] == "avatar" {
-                                    iconFileName = pathComponents[2]
+                                } else if pathComponents.contains("avatar") {
+                                    iconFileName = pathComponents[pathComponents.count-2]
                                     avatar = true
                                 } else {
                                     iconFileName = ((path.lastPathComponent) as NSString).deletingPathExtension

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

+ 7 - 4
iOSClient/Data/NCManageDatabase+DashboardWidget.swift

@@ -27,7 +27,7 @@ import NextcloudKit
 
 extension NCManageDatabase {
 
-    func getDashboardWidget(account: String, id: String) -> (tableDashboardWidget?, Results<tableDashboardWidgetButton>?) {
+    func getDashboardWidget(account: String, id: String) -> (tableDashboardWidget?, [tableDashboardWidgetButton]?) {
      
         let realm = try! Realm()
         guard let resultDashboard = realm.objects(tableDashboardWidget.self).filter("account == %@ AND id == %@", account, id).first else {
@@ -35,13 +35,16 @@ extension NCManageDatabase {
         }
         let resultsButton = realm.objects(tableDashboardWidgetButton.self).filter("account == %@ AND id == %@", account, id).sorted(byKeyPath: "type", ascending: true)
         
-        return (resultDashboard, resultsButton)
+        return (tableDashboardWidget.init(value: resultDashboard), Array(resultsButton.map { tableDashboardWidgetButton.init(value: $0) }))
     }
 
-    func getDashboardWidgetApplications(account: String) -> Results<tableDashboardWidget> {
+    func getDashboardWidgetApplications(account: String) -> [tableDashboardWidget] {
 
         let realm = try! Realm()
-        return realm.objects(tableDashboardWidget.self).filter("account == %@", account).sorted(byKeyPath: "title", ascending: true)
+        let sortProperties = [SortDescriptor(keyPath: "order", ascending: true), SortDescriptor(keyPath: "title", ascending: true)]
+        let results = realm.objects(tableDashboardWidget.self).filter("account == %@", account).sorted(by: sortProperties)
+
+        return Array(results.map { tableDashboardWidget.init(value: $0) })
     }
     
     func addDashboardWidget(account: String, dashboardWidgets: [NCCDashboardWidget]) {

+ 1 - 0
iOSClient/NCGlobal.swift

@@ -100,6 +100,7 @@ class NCGlobal: NSObject {
     // Name
     //
     @objc let appName                               = "files"
+    @objc let talkName                              = "talk-message"
     
     // Nextcloud version
     //

+ 15 - 0
iOSClient/Viewer/NCViewer.swift

@@ -47,6 +47,21 @@ class NCViewer: NSObject {
         // URL
         if metadata.classFile == NKCommon.typeClassFile.url.rawValue {
 
+            // nextcloudtalk://open-conversation?server={serverURL}&user={userId}&withRoomToken={roomToken}
+            if metadata.name == NCGlobal.shared.talkName {
+                let pathComponents = metadata.url.components(separatedBy: "/")
+                if pathComponents.contains("call") {
+                    let talkComponents = pathComponents.last?.components(separatedBy: "#")
+                    if let roomToken = talkComponents?.first {
+                        let urlString = "nextcloudtalk://open-conversation?server=\(appDelegate.urlBase)&user=\(appDelegate.userId)&withRoomToken=\(roomToken)"
+                        if let url = URL(string: urlString), UIApplication.shared.canOpenURL(url) {
+                            UIApplication.shared.open(url)
+                            return
+                        }
+                    }
+                }
+            }
+
             if let url = URL(string: metadata.url) {
                 UIApplication.shared.open(url)
             }