소스 검색

Merge branch 'develop'

Marino Faggiana 7 년 전
부모
커밋
30d296739a
100개의 변경된 파일58048개의 추가작업 그리고 646개의 파일을 삭제
  1. 14683 0
      Libraries external/Realm/Realm.framework/10EB89CC-72AA-3F83-8CB3-54C7229BBE5F.bcsymbolmap
  2. 13601 0
      Libraries external/Realm/Realm.framework/A654B282-1A1F-3624-B935-D0CEEE461D88.bcsymbolmap
  3. 40 3
      Libraries external/Realm/Realm.framework/CHANGELOG.md
  4. 7 1
      Libraries external/Realm/Realm.framework/Headers/RLMRealm+Sync.h
  5. 18 7
      Libraries external/Realm/Realm.framework/Headers/RLMSyncConfiguration.h
  6. 59 0
      Libraries external/Realm/Realm.framework/Headers/RLMSyncUser.h
  7. BIN
      Libraries external/Realm/Realm.framework/Info.plist
  8. 7 0
      Libraries external/Realm/Realm.framework/PrivateHeaders/RLMSyncConfiguration_Private.h
  9. BIN
      Libraries external/Realm/Realm.framework/Realm
  10. 14683 0
      Libraries external/Realm/RealmSwift.framework/10EB89CC-72AA-3F83-8CB3-54C7229BBE5F.bcsymbolmap
  11. 13601 0
      Libraries external/Realm/RealmSwift.framework/A654B282-1A1F-3624-B935-D0CEEE461D88.bcsymbolmap
  12. 494 0
      Libraries external/Realm/RealmSwift.framework/CDE9DD7A-1FA3-3AAD-8C06-CD4378D7E4C7.bcsymbolmap
  13. 494 0
      Libraries external/Realm/RealmSwift.framework/F10710DD-CE64-30B0-9188-54A104EA38C8.bcsymbolmap
  14. BIN
      Libraries external/Realm/RealmSwift.framework/Info.plist
  15. BIN
      Libraries external/Realm/RealmSwift.framework/Modules/RealmSwift.swiftmodule/arm.swiftdoc
  16. BIN
      Libraries external/Realm/RealmSwift.framework/Modules/RealmSwift.swiftmodule/arm.swiftmodule
  17. BIN
      Libraries external/Realm/RealmSwift.framework/Modules/RealmSwift.swiftmodule/arm64.swiftdoc
  18. BIN
      Libraries external/Realm/RealmSwift.framework/Modules/RealmSwift.swiftmodule/arm64.swiftmodule
  19. BIN
      Libraries external/Realm/RealmSwift.framework/Modules/RealmSwift.swiftmodule/i386.swiftdoc
  20. BIN
      Libraries external/Realm/RealmSwift.framework/Modules/RealmSwift.swiftmodule/i386.swiftmodule
  21. BIN
      Libraries external/Realm/RealmSwift.framework/Modules/RealmSwift.swiftmodule/x86_64.swiftdoc
  22. BIN
      Libraries external/Realm/RealmSwift.framework/Modules/RealmSwift.swiftmodule/x86_64.swiftmodule
  23. BIN
      Libraries external/Realm/RealmSwift.framework/RealmSwift
  24. 0 10
      Nextcloud.xcodeproj/project.pbxproj
  25. 2 2
      Picker/DocumentPickerViewController.swift
  26. 94 29
      PickerFileProvider/FileProviderData.swift
  27. 3 2
      PickerFileProvider/FileProviderEnumerator.swift
  28. 11 11
      PickerFileProvider/FileProviderExtension+Actions.swift
  29. 14 20
      PickerFileProvider/FileProviderExtension+Network.swift
  30. 23 98
      PickerFileProvider/FileProviderExtension.swift
  31. 1 1
      Share/ShareViewController.m
  32. 1 1
      iOSClient/Activity/CCActivity.m
  33. 30 32
      iOSClient/AppDelegate.m
  34. 1 0
      iOSClient/AutoUpload/NCAutoUpload.m
  35. 3 0
      iOSClient/Brand/NCBrand.swift
  36. 2 2
      iOSClient/Brand/Picker.plist
  37. 2 2
      iOSClient/Brand/PickerFileProvider.plist
  38. 2 2
      iOSClient/Brand/Share.plist
  39. 2 2
      iOSClient/Brand/iOSClient.plist
  40. 5 5
      iOSClient/CCGlobal.h
  41. 3 3
      iOSClient/Create/CCCreateCloud.swift
  42. 1 0
      iOSClient/Database/NCDatabase.swift
  43. 23 52
      iOSClient/Database/NCManageDatabase.swift
  44. 1 1
      iOSClient/Favorites/CCFavorites.h
  45. 107 87
      iOSClient/Favorites/CCFavorites.m
  46. 0 46
      iOSClient/Favorites/CCFavoritesCell.h
  47. 0 68
      iOSClient/Favorites/CCFavoritesCell.m
  48. 0 106
      iOSClient/Favorites/CCFavoritesCell.xib
  49. 0 0
      iOSClient/Images.xcassets/CryptoCloud.imageset/Contents.json
  50. 0 0
      iOSClient/Images.xcassets/CryptoCloud.imageset/settingsCryptoCloud.png
  51. 0 0
      iOSClient/Images.xcassets/CryptoCloud.imageset/settingsCryptoCloud@2x.png
  52. 0 0
      iOSClient/Images.xcassets/CryptoCloud.imageset/settingsCryptoCloud@3x.png
  53. BIN
      iOSClient/Images.xcassets/Icon-Back.imageset/Icon-Back.png
  54. BIN
      iOSClient/Images.xcassets/Icon-Back.imageset/Icon-Back@2x.png
  55. BIN
      iOSClient/Images.xcassets/Icon-Back.imageset/Icon-Back@3x.png
  56. 5 5
      iOSClient/Images.xcassets/MenuGroupByAlphabetic.imageset/Contents.json
  57. BIN
      iOSClient/Images.xcassets/MenuGroupByAlphabetic.imageset/MenuGroupByAlphabetic.png
  58. BIN
      iOSClient/Images.xcassets/MenuGroupByAlphabetic.imageset/MenuGroupByAlphabetic@2x.png
  59. BIN
      iOSClient/Images.xcassets/MenuGroupByAlphabetic.imageset/MenuGroupByAlphabetic@3x.png
  60. BIN
      iOSClient/Images.xcassets/MenuGroupByAlphabetic.imageset/MenuGroupByAlphabeticNextcloud.png
  61. BIN
      iOSClient/Images.xcassets/MenuGroupByAlphabetic.imageset/MenuGroupByAlphabeticNextcloud@2x.png
  62. BIN
      iOSClient/Images.xcassets/MenuGroupByAlphabetic.imageset/MenuGroupByAlphabeticNextcloud@3x.png
  63. 5 5
      iOSClient/Images.xcassets/MenuGroupByDate.imageset/Contents.json
  64. BIN
      iOSClient/Images.xcassets/MenuGroupByDate.imageset/MenuGroupByDate.png
  65. BIN
      iOSClient/Images.xcassets/MenuGroupByDate.imageset/MenuGroupByDate@2x.png
  66. BIN
      iOSClient/Images.xcassets/MenuGroupByDate.imageset/MenuGroupByDate@3x.png
  67. BIN
      iOSClient/Images.xcassets/MenuGroupByDate.imageset/MenuGroupByDateNextcloud.png
  68. BIN
      iOSClient/Images.xcassets/MenuGroupByDate.imageset/MenuGroupByDateNextcloud@2x.png
  69. BIN
      iOSClient/Images.xcassets/MenuGroupByDate.imageset/MenuGroupByDateNextcloud@3x.png
  70. 0 23
      iOSClient/Images.xcassets/MenuGroupByTypeFile.imageset/Contents.json
  71. BIN
      iOSClient/Images.xcassets/MenuGroupByTypeFile.imageset/MenuGroupByTypeFileNextcloud.png
  72. BIN
      iOSClient/Images.xcassets/MenuGroupByTypeFile.imageset/MenuGroupByTypeFileNextcloud@2x.png
  73. BIN
      iOSClient/Images.xcassets/MenuGroupByTypeFile.imageset/MenuGroupByTypeFileNextcloud@3x.png
  74. 5 5
      iOSClient/Images.xcassets/MenuOrderByFileName.imageset/Contents.json
  75. BIN
      iOSClient/Images.xcassets/MenuOrderByFileName.imageset/MenuOrderByFileName.png
  76. BIN
      iOSClient/Images.xcassets/MenuOrderByFileName.imageset/MenuOrderByFileName@2x.png
  77. BIN
      iOSClient/Images.xcassets/MenuOrderByFileName.imageset/MenuOrderByFileName@3x.png
  78. BIN
      iOSClient/Images.xcassets/MenuOrderByFileName.imageset/MenuOrderByFileNameNextcloud.png
  79. BIN
      iOSClient/Images.xcassets/MenuOrderByFileName.imageset/MenuOrderByFileNameNextcloud@2x.png
  80. BIN
      iOSClient/Images.xcassets/MenuOrderByFileName.imageset/MenuOrderByFileNameNextcloud@3x.png
  81. 5 5
      iOSClient/Images.xcassets/MenuOrdeyByDate.imageset/Contents.json
  82. BIN
      iOSClient/Images.xcassets/MenuOrdeyByDate.imageset/MenuOrdeyByDate.png
  83. BIN
      iOSClient/Images.xcassets/MenuOrdeyByDate.imageset/MenuOrdeyByDate@2x.png
  84. BIN
      iOSClient/Images.xcassets/MenuOrdeyByDate.imageset/MenuOrdeyByDate@3x.png
  85. BIN
      iOSClient/Images.xcassets/MenuOrdeyByDate.imageset/MenuOrdeyByDateNextcloud.png
  86. BIN
      iOSClient/Images.xcassets/MenuOrdeyByDate.imageset/MenuOrdeyByDateNextcloud@2x.png
  87. BIN
      iOSClient/Images.xcassets/MenuOrdeyByDate.imageset/MenuOrdeyByDateNextcloud@3x.png
  88. 5 5
      iOSClient/Images.xcassets/MenuOrdinamentoAscendente.imageset/Contents.json
  89. BIN
      iOSClient/Images.xcassets/MenuOrdinamentoAscendente.imageset/MenuOrdinamentoAscendente.png
  90. BIN
      iOSClient/Images.xcassets/MenuOrdinamentoAscendente.imageset/MenuOrdinamentoAscendente@2x.png
  91. BIN
      iOSClient/Images.xcassets/MenuOrdinamentoAscendente.imageset/MenuOrdinamentoAscendente@3x.png
  92. BIN
      iOSClient/Images.xcassets/MenuOrdinamentoAscendente.imageset/MenuOrdinamentoAscendenteNextcloud.png
  93. BIN
      iOSClient/Images.xcassets/MenuOrdinamentoAscendente.imageset/MenuOrdinamentoAscendenteNextcloud@2x.png
  94. BIN
      iOSClient/Images.xcassets/MenuOrdinamentoAscendente.imageset/MenuOrdinamentoAscendenteNextcloud@3x.png
  95. 5 5
      iOSClient/Images.xcassets/MenuOrdinamentoDiscendente.imageset/Contents.json
  96. BIN
      iOSClient/Images.xcassets/MenuOrdinamentoDiscendente.imageset/MenuOrdinamentoDiscendente.png
  97. BIN
      iOSClient/Images.xcassets/MenuOrdinamentoDiscendente.imageset/MenuOrdinamentoDiscendente@2x.png
  98. BIN
      iOSClient/Images.xcassets/MenuOrdinamentoDiscendente.imageset/MenuOrdinamentoDiscendente@3x.png
  99. BIN
      iOSClient/Images.xcassets/MenuOrdinamentoDiscendente.imageset/MenuOrdinamentoDiscendenteNextcloud.png
  100. BIN
      iOSClient/Images.xcassets/MenuOrdinamentoDiscendente.imageset/MenuOrdinamentoDiscendenteNextcloud@2x.png

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 14683 - 0
Libraries external/Realm/Realm.framework/10EB89CC-72AA-3F83-8CB3-54C7229BBE5F.bcsymbolmap


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 13601 - 0
Libraries external/Realm/Realm.framework/A654B282-1A1F-3624-B935-D0CEEE461D88.bcsymbolmap


+ 40 - 3
Libraries external/Realm/Realm.framework/CHANGELOG.md

@@ -1,9 +1,46 @@
-3.6.0 Release notes (2018-05-29)
+3.7.2 Release notes (2018-06-13)
 =============================================================
 
-### Breaking Changes
+### Enhancements
 
-* None.
+* Add some additional consistency checks that will hopefully produce better
+  errors when the "prev_ref + prev_size <= ref" assertion failure occurs.
+
+### Bugfixes
+
+* Fix a problem in the changeset indexing algorithm that would sometimes
+  cause "bad permission object" and "bad changeset" errors.
+* Fix a large number of linking warnings about symbol visibility by aligning
+  compiler flags used.
+* Fix large increase in size of files produced by `Realm.writeCopy()` introduced in 3.6.0.
+
+3.7.1 Release notes (2018-06-07)
+=============================================================
+
+* Add support for compiling Realm Swift with Xcode 10 beta 1.
+
+3.7.0 Release notes (2018-06-06)
+=============================================================
+
+The feature known as Partial Sync has been renamed to Query-based
+Synchronization. This has impacted a number of API's. See below for the
+details.
+
+### Deprecations
+
+* `+[RLMSyncConfiguration initWithUser] has been deprecated in favor of `-[RLMSyncUser configurationWithURL:url].
+* `+[RLMSyncConfiguration automaticConfiguration] has been deprecated in favor of `-[RLMSyncUser configuration]. 
+* `+[RLMSyncConfiguration automaticConfigurationForUser] has been deprecated in favor of `-[RLMSyncUser configuration].
+* `-[RLMSyncConfiguration isPartial] has been deprecated in favor of `-[RLMSyncConfiguration fullSynchronization]`.
+
+### Enhancements
+
+* Add `-[RLMRealm syncSession]` and  `Realm.syncSession` to obtain the session used for a synchronized Realm.
+* Add `-[RLMSyncUser configuration]`. Query-based sync is the default sync mode for this configuration.
+* Add `-[RLMSyncUser configurationWithURL:url]`. Query-based sync is the default sync mode for this configuration.
+
+3.6.0 Release notes (2018-05-29)
+=============================================================
 
 ### Enhancements
 

+ 7 - 1
Libraries external/Realm/Realm.framework/Headers/RLMRealm+Sync.h

@@ -20,7 +20,7 @@
 
 #import "RLMRealm.h"
 
-@class RLMResults;
+@class RLMResults, RLMSyncSession;
 
 /**
  A callback used to vend the results of a partial sync fetch.
@@ -45,6 +45,12 @@ NS_ASSUME_NONNULL_BEGIN
 - (void)subscribeToObjects:(Class)type where:(NSString *)query callback:(RLMPartialSyncFetchCallback)callback
 __deprecated_msg("Use -[RLMResults subscribe]");
 
+/**
+ Get the RLMSyncSession used by this Realm. Will be nil if this is not a
+ synchronized Realm.
+*/
+@property (nonatomic, nullable, readonly) RLMSyncSession *syncSession;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 18 - 7
Libraries external/Realm/Realm.framework/Headers/RLMSyncConfiguration.h

@@ -54,12 +54,23 @@ NS_ASSUME_NONNULL_BEGIN
  except those matching queries that the user explicitly specifies.
 
  @warning Partial synchronization is a tech preview. Its APIs are subject to change.
-*/
-@property (nonatomic) BOOL isPartial;
+ */
+@property (nonatomic) BOOL isPartial DEPRECATED_MSG_ATTRIBUTE("Use 'fullSynchronization' instead.");
+
+/**
+ Whether this Realm should be a fully synchronized Realm.
+ 
+ Synchronized Realms comes in two flavors: Query-based and Fully synchronized.
+ A fully synchronized Realm will automatically synchronize the entire Realm in
+ the background while a query-based Realm will only synchronize the data being
+ subscribed to. Synchronized realms are by default query-based unless this
+ boolean is set.
+ */
+@property (nonatomic) BOOL fullSynchronization;
 
 /**
- The prefix that is prepended to the path in the HTTP request
- that initiates a sync connection. The value specified must match with the server's expectation.
+ The prefix that is prepended to the path in the HTTP request that initiates a
+ sync connection. The value specified must match with the server's expectation.
  Changing the value of `urlPrefix` should be matched with a corresponding
  change of the server's configuration.
  If no value is specified here then the default `/realm-sync` path is used.
@@ -75,21 +86,21 @@ NS_ASSUME_NONNULL_BEGIN
                 contain the wildcard marker `~`, which will automatically be filled in with
                 the user identity by the Realm Object Server.
  */
-- (instancetype)initWithUser:(RLMSyncUser *)user realmURL:(NSURL *)url;
+- (instancetype)initWithUser:(RLMSyncUser *)user realmURL:(NSURL *)url __attribute__((deprecated("Use [RLMSyncUser configurationWithURL] instead")));
 
 /**
 Return a Realm configuration for syncing with the default Realm of the currently logged-in sync user.
 
 Partial synchronization is enabled in the returned configuration.
  */
-+ (RLMRealmConfiguration *)automaticConfiguration;
++ (RLMRealmConfiguration *)automaticConfiguration __attribute__((deprecated("Use [RLMSyncUser configuration] instead")));
 
 /**
  Return a Realm configuration for syncing with the default Realm of the given sync user.
 
  Partial synchronization is enabled in the returned configuration.
  */
-+ (RLMRealmConfiguration *)automaticConfigurationForUser:(RLMSyncUser *)user;
++ (RLMRealmConfiguration *)automaticConfigurationForUser:(RLMSyncUser *)user __attribute__((deprecated("Use [RLMSyncUser configuration] instead")));
 
 /// :nodoc:
 - (instancetype)init __attribute__((unavailable("This type cannot be created directly")));

+ 59 - 0
Libraries external/Realm/Realm.framework/Headers/RLMSyncUser.h

@@ -18,6 +18,7 @@
 
 #import <Foundation/Foundation.h>
 
+#import "RLMRealmConfiguration.h"
 #import "RLMResults.h"
 #import "RLMSyncCredentials.h"
 #import "RLMSyncPermission.h"
@@ -145,6 +146,64 @@ NS_ASSUME_NONNULL_BEGIN
                 onCompletion:(RLMUserCompletionBlock)completion
 NS_SWIFT_UNAVAILABLE("Use the full version of this API.");
 
+
+/**
+ Returns the default configuration for the user. The default configuration
+ points to the default query-based Realm on the server the user authenticated against.
+ */
+- (RLMRealmConfiguration *)configuration NS_REFINED_FOR_SWIFT;
+
+/**
+ Create a query-based configuration instance for the given url.
+
+ @param url The unresolved absolute URL to the Realm on the Realm Object Server,
+            e.g. "realm://example.org/~/path/to/realm". "Unresolved" means the
+            path should contain the wildcard marker `~`, which will automatically
+            be filled in with the user identity by the Realm Object Server.
+ @return A default configuration object with the sync configuration set to use the given URL.
+ */
+- (RLMRealmConfiguration *)configurationWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT;
+
+/**
+ Create a configuration instance for the given url.
+
+ @param url The unresolved absolute URL to the Realm on the Realm Object Server,
+            e.g. "realm://example.org/~/path/to/realm". "Unresolved" means the
+            path should contain the wildcard marker `~`, which will automatically
+            be filled in with the user identity by the Realm Object Server.
+ @param fullSynchronization If YES, all objects in the server Realm are
+                            automatically synchronized, and the query subscription
+                            methods cannot be used.
+ @return A default configuration object with the sync configuration set to use
+         the given URL and options.
+ */
+- (RLMRealmConfiguration *)configurationWithURL:(nullable NSURL *)url
+                            fullSynchronization:(bool)fullSynchronization NS_REFINED_FOR_SWIFT;
+
+/**
+ Create a configuration instance for the given url.
+
+ @param url The unresolved absolute URL to the Realm on the Realm Object Server,
+            e.g. "realm://example.org/~/path/to/realm". "Unresolved" means the
+            path should contain the wildcard marker `~`, which will automatically
+            be filled in with the user identity by the Realm Object Server.
+ @param fullSynchronization If YES, all objects in the server Realm are
+                            automatically synchronized, and the query subscription
+                            methods cannot be used.
+ @param enableSSLValidation If NO, invalid SSL certificates for the server will
+                            not be rejected. THIS SHOULD NEVER BE USED IN
+                            PRODUCTION AND EXISTS ONLY FOR TESTING PURPOSES.
+ @param urlPrefix A prefix which is prepending to URLs constructed for
+                  the server. This should normally be `nil`, and customized only
+                  to match corresponding settings on the server.
+ @return A default configuration object with the sync configuration set to use
+         the given URL and options.
+ */
+- (RLMRealmConfiguration *)configurationWithURL:(nullable NSURL *)url
+                            fullSynchronization:(bool)fullSynchronization
+                            enableSSLValidation:(bool)enableSSLValidation
+                                      urlPrefix:(nullable NSString *)urlPrefix NS_REFINED_FOR_SWIFT;
+
 /**
  Log a user out, destroying their server state, unregistering them from the SDK,
  and removing any synced Realms associated with them from on-disk storage on

BIN
Libraries external/Realm/Realm.framework/Info.plist


+ 7 - 0
Libraries external/Realm/Realm.framework/PrivateHeaders/RLMSyncConfiguration_Private.h

@@ -28,6 +28,13 @@ typedef NS_ENUM(NSUInteger, RLMSyncStopPolicy) {
 
 @interface RLMSyncConfiguration ()
 
+- (instancetype)initWithUser:(RLMSyncUser *)user
+                    realmURL:(NSURL *)url
+                   isPartial:(BOOL)isPartial
+                   urlPrefix:(nullable NSString *)urlPrefix
+                  stopPolicy:(RLMSyncStopPolicy)stopPolicy
+         enableSSLValidation:(BOOL)enableSSLValidation;
+
 @property (nonatomic, readwrite) RLMSyncStopPolicy stopPolicy;
 
 // Internal-only APIs

BIN
Libraries external/Realm/Realm.framework/Realm


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 14683 - 0
Libraries external/Realm/RealmSwift.framework/10EB89CC-72AA-3F83-8CB3-54C7229BBE5F.bcsymbolmap


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 13601 - 0
Libraries external/Realm/RealmSwift.framework/A654B282-1A1F-3624-B935-D0CEEE461D88.bcsymbolmap


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 494 - 0
Libraries external/Realm/RealmSwift.framework/CDE9DD7A-1FA3-3AAD-8C06-CD4378D7E4C7.bcsymbolmap


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 494 - 0
Libraries external/Realm/RealmSwift.framework/F10710DD-CE64-30B0-9188-54A104EA38C8.bcsymbolmap


BIN
Libraries external/Realm/RealmSwift.framework/Info.plist


BIN
Libraries external/Realm/RealmSwift.framework/Modules/RealmSwift.swiftmodule/arm.swiftdoc


BIN
Libraries external/Realm/RealmSwift.framework/Modules/RealmSwift.swiftmodule/arm.swiftmodule


BIN
Libraries external/Realm/RealmSwift.framework/Modules/RealmSwift.swiftmodule/arm64.swiftdoc


BIN
Libraries external/Realm/RealmSwift.framework/Modules/RealmSwift.swiftmodule/arm64.swiftmodule


BIN
Libraries external/Realm/RealmSwift.framework/Modules/RealmSwift.swiftmodule/i386.swiftdoc


BIN
Libraries external/Realm/RealmSwift.framework/Modules/RealmSwift.swiftmodule/i386.swiftmodule


BIN
Libraries external/Realm/RealmSwift.framework/Modules/RealmSwift.swiftmodule/x86_64.swiftdoc


BIN
Libraries external/Realm/RealmSwift.framework/Modules/RealmSwift.swiftmodule/x86_64.swiftmodule


BIN
Libraries external/Realm/RealmSwift.framework/RealmSwift


+ 0 - 10
Nextcloud.xcodeproj/project.pbxproj

@@ -372,8 +372,6 @@
 		F78964AF1EBB576C00403E13 /* JDStatusBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = F78964AC1EBB576C00403E13 /* JDStatusBarView.m */; };
 		F78BFEE11D31126B00E513CF /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F78BFEDE1D31126B00E513CF /* MainInterface.storyboard */; };
 		F7A321551E9E2A070069AD1B /* CCFavorites.m in Sources */ = {isa = PBXBuildFile; fileRef = F7A3214F1E9E2A070069AD1B /* CCFavorites.m */; };
-		F7A321561E9E2A070069AD1B /* CCFavoritesCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F7A321511E9E2A070069AD1B /* CCFavoritesCell.m */; };
-		F7A321571E9E2A070069AD1B /* CCFavoritesCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7A321521E9E2A070069AD1B /* CCFavoritesCell.xib */; };
 		F7A321651E9E37960069AD1B /* CCActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = F7A321641E9E37960069AD1B /* CCActivity.m */; };
 		F7A321791E9E3EAF0069AD1B /* CCTransfers.m in Sources */ = {isa = PBXBuildFile; fileRef = F7A321751E9E3EAF0069AD1B /* CCTransfers.m */; };
 		F7A3217A1E9E3EAF0069AD1B /* CCTransfersCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F7A321771E9E3EAF0069AD1B /* CCTransfersCell.m */; };
@@ -1339,9 +1337,6 @@
 		F7956FCB1B4886E60085DEA3 /* CCUploadFromOtherUpp.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = CCUploadFromOtherUpp.storyboard; sourceTree = "<group>"; };
 		F7A3214E1E9E2A070069AD1B /* CCFavorites.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCFavorites.h; sourceTree = "<group>"; };
 		F7A3214F1E9E2A070069AD1B /* CCFavorites.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CCFavorites.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
-		F7A321501E9E2A070069AD1B /* CCFavoritesCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCFavoritesCell.h; sourceTree = "<group>"; };
-		F7A321511E9E2A070069AD1B /* CCFavoritesCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CCFavoritesCell.m; sourceTree = "<group>"; };
-		F7A321521E9E2A070069AD1B /* CCFavoritesCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CCFavoritesCell.xib; sourceTree = "<group>"; };
 		F7A321631E9E37960069AD1B /* CCActivity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCActivity.h; sourceTree = "<group>"; };
 		F7A321641E9E37960069AD1B /* CCActivity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CCActivity.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
 		F7A321741E9E3EAF0069AD1B /* CCTransfers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCTransfers.h; sourceTree = "<group>"; };
@@ -2540,9 +2535,6 @@
 			children = (
 				F7A3214E1E9E2A070069AD1B /* CCFavorites.h */,
 				F7A3214F1E9E2A070069AD1B /* CCFavorites.m */,
-				F7A321501E9E2A070069AD1B /* CCFavoritesCell.h */,
-				F7A321511E9E2A070069AD1B /* CCFavoritesCell.m */,
-				F7A321521E9E2A070069AD1B /* CCFavoritesCell.xib */,
 			);
 			path = Favorites;
 			sourceTree = "<group>";
@@ -3547,7 +3539,6 @@
 				F73B4F151F470D9100BBEE4B /* symbols.cmake in Resources */,
 				F7F54CF21E5B14C700E19C62 /* ImageSelectedSmallOn@2x.png in Resources */,
 				F7D4233A1F0596AC009C9782 /* Reader-Button-H@3x.png in Resources */,
-				F7A321571E9E2A070069AD1B /* CCFavoritesCell.xib in Resources */,
 				F7D423341F0596AC009C9782 /* AppIcon-120.png in Resources */,
 				F7D4234F1F0596AC009C9782 /* Reader-Thumbs@3x.png in Resources */,
 				F7F54CE51E5B14C700E19C62 /* ImageError.png in Resources */,
@@ -3963,7 +3954,6 @@
 				F7B4F1CB1F44356F00B53B42 /* NCUchardet.m in Sources */,
 				F73B4EFB1F470D9100BBEE4B /* LangGermanModel.cpp in Sources */,
 				F73B4F061F470D9100BBEE4B /* nsEscCharsetProber.cpp in Sources */,
-				F7A321561E9E2A070069AD1B /* CCFavoritesCell.m in Sources */,
 				F7D4237D1F0596C6009C9782 /* ReaderContentView.m in Sources */,
 				F73B4EFA1F470D9100BBEE4B /* LangFrenchModel.cpp in Sources */,
 				F7D4245D1F063B82009C9782 /* CTAssetCollectionViewCell.m in Sources */,

+ 2 - 2
Picker/DocumentPickerViewController.swift

@@ -480,7 +480,7 @@ extension DocumentPickerViewController {
                     
                         // Upload fileName to Cloud
                     
-                        CCNetworking.shared().uploadFile(fileName, serverUrl: self!.serverUrl, fileID: nil, assetLocalIdentifier: nil, session: k_upload_session_foreground, taskStatus: Int(k_taskStatusResume), selector: "", selectorPost: "", errorCode: 0, delegate: self)
+                        CCNetworking.shared().uploadFile(fileName, serverUrl: self!.serverUrl, assetLocalIdentifier: nil, path:directoryUser,session: k_upload_session_foreground, taskStatus: Int(k_taskStatusResume), selector: "", selectorPost: "", errorCode: 0, delegate: self)
                         
                         self!.hud.visibleHudTitle(NSLocalizedString("_uploading_", comment: ""), mode: MBProgressHUDMode.determinate, color: NCBrandColor.sharedInstance.brandElement)
                     }
@@ -655,7 +655,7 @@ extension DocumentPickerViewController: UITableViewDataSource {
                 if (metadata.e2eEncrypted) {
                     cell.fileImageView.image = CCGraphics.changeThemingColorImage(UIImage(named: "folderEncrypted"), color: NCBrandColor.sharedInstance.brandElement)
                 } else if (metadata.fileName == autoUploadFileName && serverUrl == autoUploadDirectory) {
-                    cell.fileImageView.image = CCGraphics.changeThemingColorImage(UIImage(named: "folderphotocamera"), color: NCBrandColor.sharedInstance.brandElement)
+                    cell.fileImageView.image = CCGraphics.changeThemingColorImage(UIImage(named: "folderPhotos"), color: NCBrandColor.sharedInstance.brandElement)
                 } else {
                     cell.fileImageView.image = CCGraphics.changeThemingColorImage(UIImage(named: "folder"), color: NCBrandColor.sharedInstance.brandElement)
                 }

+ 94 - 29
PickerFileProvider/FileProviderData.swift

@@ -36,16 +36,12 @@ class FileProviderData: NSObject {
     var directoryUser = ""
     
     // Directory
-    var groupURL: URL?
     var fileProviderStorageURL: URL?
     
-    // metadata Selector
+    // metadata Selector Post
     let selectorPostImportDocument = "importDocument"
     let selectorPostItemChanged = "itemChanged"
-    
-    // Metadata Temp for Import
-    let FILEID_IMPORT_METADATA_TEMP = k_uploadSessionID + "FILE_PROVIDER_EXTENSION"
-    
+        
     // Max item for page
     let itemForPage = 20
 
@@ -67,22 +63,13 @@ class FileProviderData: NSObject {
     var fileProviderSignalDeleteWorkingSetItemIdentifier = [NSFileProviderItemIdentifier:NSFileProviderItemIdentifier]()
     var fileProviderSignalUpdateWorkingSetItem = [NSFileProviderItemIdentifier:FileProviderItem]()
 
+    // Reupload after error
+    let timeReupload: Double = 10
+    
     // MARK: - 
     
     func setupActiveAccount() -> Bool {
         
-        queueTradeSafe.sync(flags: .barrier) {
-            groupURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: NCBrandOptions.sharedInstance.capabilitiesGroups)
-            fileProviderStorageURL = groupURL!.appendingPathComponent(k_assetLocalIdentifierFileProviderStorage)
-        }
-        
-        // Create dir File Provider Storage
-        do {
-            try FileManager.default.createDirectory(atPath: fileProviderStorageURL!.path, withIntermediateDirectories: true, attributes: nil)
-        } catch let error as NSError {
-            NSLog("Unable to create directory \(error.debugDescription)")
-        }
-        
         if CCUtility.getDisableFilesApp() {
             return false
         }
@@ -91,23 +78,25 @@ class FileProviderData: NSObject {
             return false
         }
         
-        if account != "" && account != activeAccount.account {
+        if account == "" {
+            queueTradeSafe.sync(flags: .barrier) {
+                account = activeAccount.account
+                accountUser = activeAccount.user
+                accountUserID = activeAccount.userID
+                accountPassword = activeAccount.password
+                accountUrl = activeAccount.url
+                homeServerUrl = CCUtility.getHomeServerUrlActiveUrl(activeAccount.url)
+                directoryUser = CCUtility.getDirectoryActiveUser(activeAccount.user, activeUrl: activeAccount.url)
+            }
+        } else if account != activeAccount.account {
             assert(false, "change user")
         }
         
-        queueTradeSafe.sync(flags: .barrier) {
-            account = activeAccount.account
-            accountUser = activeAccount.user
-            accountUserID = activeAccount.userID
-            accountPassword = activeAccount.password
-            accountUrl = activeAccount.url
-            homeServerUrl = CCUtility.getHomeServerUrlActiveUrl(activeAccount.url)
-            directoryUser = CCUtility.getDirectoryActiveUser(activeAccount.user, activeUrl: activeAccount.url)
-        }
-        
         return true
     }
     
+    // MARK: -
+    
     func getAccountFromItemIdentifier(_ itemIdentifier: NSFileProviderItemIdentifier) -> String? {
         
         let fileID = itemIdentifier.rawValue
@@ -189,6 +178,82 @@ class FileProviderData: NSObject {
         return directory
     }
     
+    // MARK: -
+    
+    func updateFavoriteForWorkingSet() {
+        
+        /* ONLY iOS 11*/
+        guard #available(iOS 11, *) else { return }
+        
+        var updateWorkingSet = false
+        let oldListFavoriteIdentifierRank = listFavoriteIdentifierRank
+        listFavoriteIdentifierRank = NCManageDatabase.sharedInstance.getTableMetadatasDirectoryFavoriteIdentifierRank()
+        
+        // (ADD)
+        for (identifier, _) in listFavoriteIdentifierRank {
+            
+            if !oldListFavoriteIdentifierRank.keys.contains(identifier) {
+                
+                guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", account, identifier)) else {
+                    continue
+                }
+                guard let parentItemIdentifier = getParentItemIdentifier(metadata: metadata) else {
+                    continue
+                }
+                
+                let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier, providerData: self)
+                queueTradeSafe.sync(flags: .barrier) {
+                    fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
+                }
+                updateWorkingSet = true
+            }
+        }
+        
+        // (REMOVE)
+        for (identifier, _) in oldListFavoriteIdentifierRank {
+            
+            if !listFavoriteIdentifierRank.keys.contains(identifier) {
+                
+                guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", account, identifier)) else {
+                    continue
+                }
+                
+                let itemIdentifier = getItemIdentifier(metadata: metadata)
+                queueTradeSafe.sync(flags: .barrier) {
+                    fileProviderSignalDeleteWorkingSetItemIdentifier[itemIdentifier] = itemIdentifier
+                }
+                updateWorkingSet = true
+            }
+        }
+        
+        if updateWorkingSet {
+            signalEnumerator(for: [.workingSet])
+        }
+    }
+    
+    // MARK: -
+
+    // Convinent method to signal the enumeration for containers.
+    //
+    func signalEnumerator(for containerItemIdentifiers: [NSFileProviderItemIdentifier]) {
+        
+        /* ONLY iOS 11*/
+        guard #available(iOS 11, *) else { return }
+        
+        currentAnchor += 1
+        
+        for containerItemIdentifier in containerItemIdentifiers {
+            
+            NSFileProviderManager.default.signalEnumerator(for: containerItemIdentifier) { error in
+                if let error = error {
+                    print("SignalEnumerator for \(containerItemIdentifier) returned error: \(error)")
+                }
+            }
+        }
+    }
+    
+    // MARK: -
+    
     func copyFile(_ atPath: String, toPath: String) -> Error? {
         
         var errorResult: Error?

+ 3 - 2
PickerFileProvider/FileProviderEnumerator.swift

@@ -54,7 +54,8 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
     }
 
     func invalidate() {
-        // perform invalidation of server connection if necessary
+        // Update the WorkingSet -> Favorite
+        providerData.updateFavoriteForWorkingSet()
     }
 
     func enumerateItems(for observer: NSFileProviderEnumerationObserver, startingAt page: NSFileProviderPage) {
@@ -154,7 +155,7 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
             let ocNetworking = OCnetworking.init(delegate: nil, metadataNet: nil, withUser: providerData.accountUser, withUserID: providerData.accountUserID, withPassword: providerData.accountPassword, withUrl: providerData.accountUrl)
             ocNetworking?.readFile(fileName, serverUrl: serverUrlForFileName, account: providerData.account, success: { (metadata) in
                 
-                if self.providerData.listServerUrlEtag[serverUrl] == nil || self.providerData.listServerUrlEtag[serverUrl] != metadata!.etag {
+                if self.providerData.listServerUrlEtag[serverUrl] == nil || self.providerData.listServerUrlEtag[serverUrl] != metadata!.etag || metadatasFromDB == nil {
                     
                     ocNetworking?.readFolder(serverUrl, depth: "1", account: self.providerData.account, success: { (metadatas, metadataFolder, directoryID) in
                         

+ 11 - 11
PickerFileProvider/FileProviderExtension+Actions.swift

@@ -78,7 +78,7 @@ extension FileProviderExtension {
                     self.providerData.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
                 }
 
-                self.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+                self.providerData.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
 
                 completionHandler(item, nil)
                 
@@ -128,7 +128,7 @@ extension FileProviderExtension {
             providerData.fileProviderSignalDeleteWorkingSetItemIdentifier[itemIdentifier] = itemIdentifier
         }
 
-        self.signalEnumerator(for: [parentItemIdentifier, .workingSet])
+        self.providerData.signalEnumerator(for: [parentItemIdentifier, .workingSet])
 
         completionHandler(nil)
     }
@@ -196,7 +196,7 @@ extension FileProviderExtension {
                 self.providerData.fileProviderSignalUpdateWorkingSetItem[itemIdentifier] = item
             }
 
-            self.signalEnumerator(for: [parentItemIdentifier, .workingSet])
+            self.providerData.signalEnumerator(for: [parentItemIdentifier, .workingSet])
 
             completionHandler(item, nil)
             
@@ -269,7 +269,7 @@ extension FileProviderExtension {
                 self.providerData.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
             }
 
-            self.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+            self.providerData.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
 
             completionHandler(item, nil)
             
@@ -317,7 +317,7 @@ extension FileProviderExtension {
             providerData.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
         }
 
-        signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+        providerData.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
 
         completionHandler(item, nil)
         
@@ -351,7 +351,7 @@ extension FileProviderExtension {
             providerData.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
         }
         
-        signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+        providerData.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
         
         completionHandler(item, nil)
     }
@@ -418,7 +418,7 @@ extension FileProviderExtension {
                 }
             
                 let fileName = self.createFileName(fileURL.lastPathComponent, directoryID: tableDirectory.directoryID, serverUrl: serverUrl)
-                let fileNamePathDirectory = self.providerData.fileProviderStorageURL!.path + "/" + self.providerData.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
+                let fileNamePathDirectory = self.providerData.fileProviderStorageURL!.path + "/" + tableDirectory.directoryID + fileName
             
                 do {
                     try FileManager.default.createDirectory(atPath: fileNamePathDirectory, withIntermediateDirectories: true, attributes: nil)
@@ -434,12 +434,12 @@ extension FileProviderExtension {
             
                 // Metadata TEMP
                 metadata.account = self.providerData.account
-                metadata.assetLocalIdentifier = self.providerData.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
+                metadata.assetLocalIdentifier = tableDirectory.directoryID + fileName
                 metadata.date = NSDate()
                 metadata.directory = false
                 metadata.directoryID = tableDirectory.directoryID
                 metadata.etag = ""
-                metadata.fileID = self.providerData.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
+                metadata.fileID = tableDirectory.directoryID + fileName
                 metadata.size = size
                 metadata.status = Double(k_metadataStatusHide)
                 metadata.fileName = fileName
@@ -451,9 +451,9 @@ extension FileProviderExtension {
                     let metadataNet = CCMetadataNet()
                     
                     metadataNet.account = self.providerData.account
-                    metadataNet.assetLocalIdentifier = self.providerData.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
+                    metadataNet.assetLocalIdentifier = tableDirectory.directoryID + fileName
                     metadataNet.fileName = fileName
-                    metadataNet.path = fileNamePathDirectory + "/" + fileName
+                    metadataNet.path = fileNamePathDirectory
                     metadataNet.selector = selectorUploadFile
                     metadataNet.selectorPost = self.providerData.selectorPostImportDocument
                     metadataNet.serverUrl = serverUrl

+ 14 - 20
PickerFileProvider/FileProviderExtension+Network.swift

@@ -104,7 +104,7 @@ extension FileProviderExtension {
                 self.providerData.fileProviderSignalDeleteWorkingSetItemIdentifier.removeValue(forKey: itemIdentifier)
             }
             
-            self.signalEnumerator(for: [parentItemIdentifier, .workingSet])
+            self.providerData.signalEnumerator(for: [parentItemIdentifier, .workingSet])
         })
     }
     
@@ -170,7 +170,7 @@ extension FileProviderExtension {
                 self.providerData.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
             }
             
-            self.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+            self.providerData.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
         })
     }
     
@@ -193,6 +193,7 @@ extension FileProviderExtension {
         
         let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier, providerData: providerData)
 
+        // Register for bytesSent
         NSFileProviderManager.default.register(task, forItemWithIdentifier: NSFileProviderItemIdentifier(item.itemIdentifier.rawValue)) { (error) in }
         
         providerData.queueTradeSafe.sync(flags: .barrier) {
@@ -200,7 +201,7 @@ extension FileProviderExtension {
             self.providerData.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
         }
         
-        self.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+        self.providerData.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
     }
     
     func uploadFileSuccessFailure(_ fileName: String!, fileID: String!, assetLocalIdentifier: String!, serverUrl: String!, selector: String!, selectorPost: String!, errorMessage: String!, errorCode: Int) {
@@ -269,6 +270,11 @@ extension FileProviderExtension {
             if (selectorPost == providerData.selectorPostImportDocument) {
                 
                 NCManageDatabase.sharedInstance.unlockQueueUpload(assetLocalIdentifier: assetLocalIdentifier)
+                
+                DispatchQueue.main.asyncAfter(deadline: .now() + providerData.timeReupload) {
+                    
+                    self.uploadFileImportDocument()
+                }
             }
             
             // itemChanged
@@ -279,7 +285,7 @@ extension FileProviderExtension {
                 let urlString = (providerData.fileProviderStorageURL!.path + "/"  + itemIdentifier.rawValue + "/" + fileName).addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)!
                 let url = URL(string: urlString)!
                 
-                DispatchQueue.main.asyncAfter(deadline: .now() + Double(k_timerProcessAutoUploadExtension)) {
+                DispatchQueue.main.asyncAfter(deadline: .now() + providerData.timeReupload) {
                     
                     self.uploadFileItemChanged(for: itemIdentifier, url: url)
                 }
@@ -300,7 +306,7 @@ extension FileProviderExtension {
             }
         }
         
-        self.signalEnumerator(for: [parentItemIdentifier, .workingSet])
+        self.providerData.signalEnumerator(for: [parentItemIdentifier, .workingSet])
     }
     
     func uploadFileImportDocument() {
@@ -308,12 +314,12 @@ extension FileProviderExtension {
         let queueInLock = NCManageDatabase.sharedInstance.getQueueUploadInLock()
         if queueInLock != nil && queueInLock!.count == 0 {
             
-            let metadataNetQueue = NCManageDatabase.sharedInstance.lockQueueUpload(selector: selectorUploadFile, withPath: true)
+            let metadataNetQueue = NCManageDatabase.sharedInstance.lockQueueUpload(selector: selectorUploadFile, session: k_upload_session_extension)
             if  metadataNetQueue != nil {
                 
-                if self.providerData.copyFile(metadataNetQueue!.path, toPath: providerData.directoryUser + "/" + metadataNetQueue!.fileName) == nil {
+                if self.providerData.copyFile(metadataNetQueue!.path + "/" + metadataNetQueue!.fileName, toPath: providerData.directoryUser + "/" + metadataNetQueue!.fileName) == nil {
                     
-                    CCNetworking.shared().uploadFile(metadataNetQueue!.fileName, serverUrl: metadataNetQueue!.serverUrl, fileID: metadataNetQueue!.assetLocalIdentifier, assetLocalIdentifier: metadataNetQueue!.assetLocalIdentifier, session: metadataNetQueue!.session, taskStatus: metadataNetQueue!.taskStatus, selector: metadataNetQueue!.selector, selectorPost: metadataNetQueue!.selectorPost, errorCode: 0, delegate: self)
+                    CCNetworking.shared().uploadFile(metadataNetQueue!.fileName, serverUrl: metadataNetQueue!.serverUrl, assetLocalIdentifier: metadataNetQueue!.assetLocalIdentifier, path:providerData.directoryUser, session: metadataNetQueue!.session, taskStatus: metadataNetQueue!.taskStatus, selector: metadataNetQueue!.selector, selectorPost: metadataNetQueue!.selectorPost, errorCode: 0, delegate: self)
                     
                 } else {
                     // file not present, delete record Upload Queue
@@ -343,16 +349,4 @@ extension FileProviderExtension {
         
         CCNetworking.shared().uploadFileMetadata(metadataForUpload, taskStatus: Int(k_taskStatusResume), delegate: self)
     }
-    
-    func verifyUploadQueueInLock() {
-        
-        let tasks = CCNetworking.shared().getUploadTasksExtensionSession()
-        if tasks!.count == 0 {
-            let records = NCManageDatabase.sharedInstance.getQueueUpload(predicate: NSPredicate(format: "account = %@ AND selector = %@ AND lock == true AND path != nil", providerData.account, selectorUploadFile))
-            if records != nil && records!.count > 0 {
-                NCManageDatabase.sharedInstance.unlockAllQueueUploadWithPath()
-            }
-        }
-    }
-
 }

+ 23 - 98
PickerFileProvider/FileProviderExtension.swift

@@ -23,9 +23,6 @@
 
 import FileProvider
 
-// Timer for Upload (queue)
-var timerUpload: Timer?
-
 /* -----------------------------------------------------------------------------------------------------------------------------------------------
                                                             STRUCT item
    -----------------------------------------------------------------------------------------------------------------------------------------------
@@ -72,23 +69,23 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
         
         super.init()
         
-        _ = providerData.setupActiveAccount()
+        // Get group directiry
+        let groupURL = CCUtility.getDirectoryGroup()!
+        providerData.fileProviderStorageURL = groupURL.appendingPathComponent(k_DirectoryProviderStorage)
         
-        verifyUploadQueueInLock()
+        // Create directory File Provider Storage
+        do {
+            try FileManager.default.createDirectory(atPath: providerData.fileProviderStorageURL!.path, withIntermediateDirectories: true, attributes: nil)
+        } catch let error as NSError {
+            NSLog("Unable to create directory \(error.debugDescription)")
+        }
+        
+        // Setup account
+        _ = providerData.setupActiveAccount()
         
         if #available(iOSApplicationExtension 11.0, *) {
-                        
-            // Timer for upload
-            if timerUpload == nil {
-                
-                timerUpload = Timer.init(timeInterval: TimeInterval(k_timerProcessAutoUploadExtension), repeats: true, block: { (Timer) in
-                    
-                    // new upload
-                    self.uploadFileImportDocument()
-                })
-                
-                RunLoop.main.add(timerUpload!, forMode: .defaultRunLoopMode)
-            }
+            
+            self.uploadFileImportDocument()
             
         } else {
             
@@ -110,17 +107,15 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
         guard #available(iOS 11, *) else { throw NSError(domain: NSCocoaErrorDomain, code: NSFileNoSuchFileError, userInfo:[:]) }
         
         var maybeEnumerator: NSFileProviderEnumerator? = nil
-
-        if (containerItemIdentifier == NSFileProviderItemIdentifier.rootContainer) {
-            
-            // Check account
+        
+        // Check account
+        if (containerItemIdentifier != NSFileProviderItemIdentifier.workingSet) {
             if providerData.setupActiveAccount() == false {
                 throw NSError(domain: NSFileProviderErrorDomain, code: NSFileProviderError.notAuthenticated.rawValue, userInfo:[:])
             }
-            
-            // Update WorkingSet
-            self.updateWorkingSet()
-            
+        }
+
+        if (containerItemIdentifier == NSFileProviderItemIdentifier.rootContainer) {
             maybeEnumerator = FileProviderEnumerator(enumeratedItemIdentifier: containerItemIdentifier, providerData: providerData)
         } else if (containerItemIdentifier == NSFileProviderItemIdentifier.workingSet) {
             maybeEnumerator = FileProviderEnumerator(enumeratedItemIdentifier: containerItemIdentifier, providerData: providerData)
@@ -144,76 +139,6 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
         return enumerator
     }
     
-    // Convinent method to signal the enumeration for containers.
-    //
-    func signalEnumerator(for containerItemIdentifiers: [NSFileProviderItemIdentifier]) {
-        
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
-        providerData.currentAnchor += 1
-
-        for containerItemIdentifier in containerItemIdentifiers {
-            
-            NSFileProviderManager.default.signalEnumerator(for: containerItemIdentifier) { error in
-                if let error = error {
-                    print("SignalEnumerator for \(containerItemIdentifier) returned error: \(error)")
-                }
-            }
-        }
-    }
-    
-    // MARK: - WorkingSet
-    
-    func updateWorkingSet() {
-        
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
-        // ***** Favorite Files <-> Favorite Nextcloud *****
-        
-        providerData.listFavoriteIdentifierRank = NCManageDatabase.sharedInstance.getTableMetadatasDirectoryFavoriteIdentifierRank()
-        
-        // (ADD)
-        for (identifier, _) in providerData.listFavoriteIdentifierRank {
-            
-            guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", providerData.account, identifier)) else {
-                continue
-            }
-            
-            guard let parentItemIdentifier = providerData.getParentItemIdentifier(metadata: metadata) else {
-                continue
-            }
-            
-            let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier, providerData: providerData)
-            
-            providerData.queueTradeSafe.sync(flags: .barrier) {
-                providerData.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
-            }
-        }
-        
-        // (REMOVE)
-        let metadatas = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account = %@ AND directory = true AND favorite = false", providerData.account), sorted: "fileName", ascending: true)
-        if (metadatas != nil && metadatas!.count > 0) {
-            for metadata in metadatas! {
-                guard let parentItemIdentifier = providerData.getParentItemIdentifier(metadata: metadata) else {
-                    continue
-                }
-                
-                let itemIdentifier = providerData.getItemIdentifier(metadata: metadata)
-                providerData.listFavoriteIdentifierRank.removeValue(forKey: itemIdentifier.rawValue)
-                let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier, providerData: providerData)
-                
-                providerData.queueTradeSafe.sync(flags: .barrier) {
-                    providerData.fileProviderSignalUpdateWorkingSetItem[item.itemIdentifier] = item
-                }
-            }
-        }
-        
-        // Update workingSet
-        self.signalEnumerator(for: [.workingSet])
-    }
-    
     // MARK: - Item
 
     override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
@@ -350,7 +275,7 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
             }
             
             // is Upload [Office 365 !!!]
-            if metadata.sessionTaskIdentifier > 0 || metadata.fileID.contains(k_uploadSessionID) {
+            if metadata.sessionTaskIdentifier > 0 || metadata.fileID.contains(metadata.directoryID + metadata.fileName) {
                 completionHandler(nil)
                 return
             }
@@ -493,7 +418,7 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
             if metadata != nil {
                 
                 // Update
-                let uploadID = k_uploadSessionID + CCUtility.createRandomString(16)
+                let uploadID = metadata!.directoryID + metadata!.fileID
                 let directoryUser = CCUtility.getDirectoryActiveUser(account.user, activeUrl: account.url)
                 let destinationDirectoryUser = "\(directoryUser!)/\(uploadID)"
                 
@@ -514,7 +439,7 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
                 
                 _ = providerData.copyFile(url.path, toPath: destinationDirectoryUser)
 
-                CCNetworking.shared().uploadFile(fileName, serverUrl: serverUrl, fileID: nil, assetLocalIdentifier: nil, session: k_upload_session, taskStatus: Int(k_taskStatusResume), selector: nil, selectorPost: nil, errorCode: 0, delegate: self)
+                CCNetworking.shared().uploadFile(fileName, serverUrl: serverUrl, assetLocalIdentifier: nil, path:directoryUser!, session: k_upload_session, taskStatus: Int(k_taskStatusResume), selector: nil, selectorPost: nil, errorCode: 0, delegate: self)
             }
 
             self.stopProvidingItem(at: url)

+ 1 - 1
Share/ShareViewController.m

@@ -216,7 +216,7 @@
     
         NSString *fileName = [self.filesName objectAtIndex:0];
         
-        [[CCNetworking sharedNetworking] uploadFile:fileName serverUrl:_serverUrl fileID:nil assetLocalIdentifier:nil session:k_upload_session_foreground taskStatus:k_taskStatusResume selector:@"" selectorPost:@"" errorCode:0 delegate:self];
+        [[CCNetworking sharedNetworking] uploadFile:fileName serverUrl:_serverUrl assetLocalIdentifier:nil path:self.directoryUser session:k_upload_session_foreground taskStatus:k_taskStatusResume selector:@"" selectorPost:@"" errorCode:0 delegate:self];
         
         [self.hud visibleHudTitle:NSLocalizedString(@"_uploading_", nil) mode:MBProgressHUDModeDeterminate color:[NCBrandColor sharedInstance].brandElement];
     }

+ 1 - 1
iOSClient/Activity/CCActivity.m

@@ -129,7 +129,7 @@
 
 - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView
 {
-    return [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"activityNoRecord"] color:[NCBrandColor sharedInstance].brandElement];
+    return [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"activityNoRecord"] color:[NCBrandColor sharedInstance].graySoft];
 }
 
 - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView

+ 30 - 32
iOSClient/AppDelegate.m

@@ -101,10 +101,10 @@
     }
 
     NSString *dir;
-    NSURL *dirGroup = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:[NCBrandOptions sharedInstance].capabilitiesGroups];
+    NSURL *dirGroup = [CCUtility getDirectoryGroup];
     
     NSLog(@"[LOG] Start program group -----------------");
-    NSLog(@"%@", dirGroup);    
+    NSLog(@"%@", [dirGroup path]);    
     NSLog(@"[LOG] Start program application -----------");
     NSLog(@"%@", [[CCUtility getDirectoryDocuments] stringByDeletingLastPathComponent]);
     NSLog(@"[LOG] -------------------------------------");
@@ -122,8 +122,13 @@
     // create Directory database Nextcloud
     dir = [[dirGroup URLByAppendingPathComponent:appDatabaseNextcloud] path];
     if (![[NSFileManager defaultManager] fileExistsAtPath:dir])
-    [[NSFileManager defaultManager] createDirectoryAtPath:dir withIntermediateDirectories:YES attributes:nil error:nil];
+        [[NSFileManager defaultManager] createDirectoryAtPath:dir withIntermediateDirectories:YES attributes:nil error:nil];
 
+    // create directory Provider Storage
+    dir = [CCUtility getDirectoryProviderStorage];
+    if (![[NSFileManager defaultManager] fileExistsAtPath: dir] && [dir length])
+        [[NSFileManager defaultManager] createDirectoryAtPath:dir withIntermediateDirectories:YES attributes:nil error:nil];
+    
     NSError *error = nil;
     [[NSFileManager defaultManager] setAttributes:@{NSFileProtectionKey:NSFileProtectionNone} ofItemAtPath:dir error:&error];
     
@@ -857,14 +862,14 @@
     // File
     item = [tabBarController.tabBar.items objectAtIndex: k_tabBarApplicationIndexFile];
     [item setTitle:NSLocalizedString(@"_home_", nil)];
-    item.image = [UIImage imageNamed:@"tabBarFiles"];
-    item.selectedImage = [UIImage imageNamed:@"tabBarFiles"];
+    item.image = [UIImage imageNamed:@"folder"];
+    item.selectedImage = [UIImage imageNamed:@"folder"];
     
     // Favorites
     item = [tabBarController.tabBar.items objectAtIndex: k_tabBarApplicationIndexFavorite];
     [item setTitle:NSLocalizedString(@"_favorites_", nil)];
-    item.image = [UIImage imageNamed:@"tabBarFavorite"];
-    item.selectedImage = [UIImage imageNamed:@"tabBarFavorite"];
+    item.image = [UIImage imageNamed:@"favorite"];
+    item.selectedImage = [UIImage imageNamed:@"favorite"];
     
     // (PLUS)
     item = [tabBarController.tabBar.items objectAtIndex: k_tabBarApplicationIndexPlusHide];
@@ -875,8 +880,8 @@
     // Photos
     item = [tabBarController.tabBar.items objectAtIndex: k_tabBarApplicationIndexPhotos];
     [item setTitle:NSLocalizedString(@"_photo_camera_", nil)];
-    item.image = [UIImage imageNamed:@"tabBarPhotos"];
-    item.selectedImage = [UIImage imageNamed:@"tabBarPhotos"];
+    item.image = [UIImage imageNamed:@"photos"];
+    item.selectedImage = [UIImage imageNamed:@"photos"];
     
     // More
     item = [tabBarController.tabBar.items objectAtIndex: k_tabBarApplicationIndexMore];
@@ -1407,7 +1412,7 @@
         
     // E2EE : not in background
     if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) {
-        metadataNet = [[NCManageDatabase sharedInstance] getQueueUploadWithPath:false];
+        metadataNet = [[NCManageDatabase sharedInstance] getQueueUpload];
         if (metadataNet) {
             tableDirectory *directory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND serverUrl = %@ AND e2eEncrypted = 1", self.activeAccount, metadataNet.serverUrl]];
             if (directory != nil)
@@ -1445,7 +1450,7 @@
     
     if (counterUploadInSessionAndInLock < maxConcurrentDownloadUpload && counterUploadInLock < 1) {
         
-        metadataNet = [[NCManageDatabase sharedInstance] lockQueueUploadWithSelector:selectorUploadAutoUpload withPath:false];
+        metadataNet = [[NCManageDatabase sharedInstance] lockQueueUploadWithSelector:selectorUploadAutoUpload session:nil];
         if (metadataNet) {
             
             [[CCNetworking sharedNetworking] uploadFileFromAssetLocalIdentifier:metadataNet delegate:_activeMain];
@@ -1473,7 +1478,7 @@
         
         if (counterUploadInSessionAndInLock < maxConcurrentDownloadUpload && counterUploadInLock < 1) {
             
-            metadataNet = [[NCManageDatabase sharedInstance] lockQueueUploadWithSelector:selectorUploadAutoUploadAll withPath:false];
+            metadataNet = [[NCManageDatabase sharedInstance] lockQueueUploadWithSelector:selectorUploadAutoUploadAll session:nil];
             if (metadataNet) {
                 
                 [[CCNetworking sharedNetworking] uploadFileFromAssetLocalIdentifier:metadataNet delegate:_activeMain];
@@ -1489,33 +1494,26 @@
     
     if (counterUploadInSessionAndInLock < maxConcurrentDownloadUpload && counterUploadInLock < 1) {
         
-        metadataNet = [[NCManageDatabase sharedInstance] lockQueueUploadWithSelector:selectorUploadFile withPath:false];
-        if (metadataNet) {
-            
-            [[CCNetworking sharedNetworking] uploadFileFromAssetLocalIdentifier:metadataNet delegate:_activeMain];
-            counterNewUpload++;
-        }
-        
-        counterUploadInSessionAndInLock = [[[NCManageDatabase sharedInstance] getTableMetadataUpload] count] + [[[NCManageDatabase sharedInstance] getTableMetadataUploadWWan] count] + [[[NCManageDatabase sharedInstance] getQueueUploadInLock] count];
-    }
-    
-    // ------------------------- <selector Upload With PATH File File Provider Extension> -------------------------
-    
-    if (counterUploadInSessionAndInLock < maxConcurrentDownloadUpload && counterUploadInLock < 1 && [[UIApplication sharedApplication] applicationState] != UIApplicationStateBackground) {
-        
-        metadataNet = [[NCManageDatabase sharedInstance] lockQueueUploadWithSelector:selectorUploadFile withPath:true];
+        metadataNet = [[NCManageDatabase sharedInstance] lockQueueUploadWithSelector:selectorUploadFile session:nil];
         if (metadataNet) {
             
-            NSString *toPath = [NSString stringWithFormat:@"%@/%@", self.directoryUser, metadataNet.fileName];
-            [CCUtility copyFileAtPath:metadataNet.path toPath:toPath];
-            
-            // Convert k_upload_session_extension -> k_upload_session
             if ([metadataNet.session isEqualToString:k_upload_session_extension]) {
+                
+                NSString *atPath = [NSString stringWithFormat:@"%@/%@", metadataNet.path, metadataNet.fileName];
+                NSString *toPath = [NSString stringWithFormat:@"%@/%@", self.directoryUser, metadataNet.fileName];
+                [CCUtility copyFileAtPath:atPath toPath:toPath];
+                
                 metadataNet.fileID = @"";
                 metadataNet.session = k_upload_session;
+                
+                [[CCNetworking sharedNetworking] uploadFile:metadataNet.fileName serverUrl:metadataNet.serverUrl assetLocalIdentifier:metadataNet.assetLocalIdentifier path:self.directoryUser session:metadataNet.session taskStatus:k_taskStatusResume selector:metadataNet.selector selectorPost:metadataNet.selectorPost errorCode:0 delegate:_activeMain];
+                
+            } else {
+                
+                [[CCNetworking sharedNetworking] uploadFileFromAssetLocalIdentifier:metadataNet delegate:_activeMain];
             }
             
-            [[CCNetworking sharedNetworking] uploadFile:metadataNet.fileName serverUrl:metadataNet.serverUrl fileID:nil assetLocalIdentifier:metadataNet.assetLocalIdentifier session:metadataNet.session taskStatus:k_taskStatusResume selector:metadataNet.selector selectorPost:metadataNet.selectorPost errorCode:0 delegate:nil];
+            
             counterNewUpload++;
         }
         

+ 1 - 0
iOSClient/AutoUpload/NCAutoUpload.m

@@ -414,6 +414,7 @@
         }
         
         metadataNet.fileName = fileName;
+        metadataNet.path = appDelegate.directoryUser;
         metadataNet.selector = selector;
         metadataNet.serverUrl = serverUrl;
         metadataNet.session = session;

+ 3 - 0
iOSClient/Brand/NCBrand.swift

@@ -46,6 +46,9 @@ class NCBrandColor: NSObject {
     @objc public var tabBar:                UIColor = .white
     @objc public var transferBackground:    UIColor = UIColor(red: 178.0/255.0, green: 244.0/255.0, blue: 258.0/255.0, alpha: 0.1)
     @objc public let nextcloud:             UIColor = UIColor(red: 0.0/255.0, green: 130.0/255.0, blue: 201.0/255.0, alpha: 1.0)
+    @objc public let gray:                  UIColor = UIColor(red: 162.0/255.0, green: 162.0/255.0, blue: 162.0/255.0, alpha: 1.0)
+    @objc public let graySoft:              UIColor = UIColor(red: 162.0/255.0, green: 162.0/255.0, blue: 162.0/255.0, alpha: 0.5)
+    @objc public let yellowFavorite:        UIColor = UIColor(red: 248.0/255.0, green: 205.0/255.0, blue: 70.0/255.0, alpha: 1.0)
 
     override init() {
         self.brand = self.customer

+ 2 - 2
iOSClient/Brand/Picker.plist

@@ -17,9 +17,9 @@
 	<key>CFBundlePackageType</key>
 	<string>XPC!</string>
 	<key>CFBundleShortVersionString</key>
-	<string>2.21.1</string>
+	<string>2.21.2</string>
 	<key>CFBundleVersion</key>
-	<string>00005</string>
+	<string>5</string>
 	<key>NSAppTransportSecurity</key>
 	<dict>
 		<key>NSAllowsArbitraryLoads</key>

+ 2 - 2
iOSClient/Brand/PickerFileProvider.plist

@@ -17,9 +17,9 @@
 	<key>CFBundlePackageType</key>
 	<string>XPC!</string>
 	<key>CFBundleShortVersionString</key>
-	<string>2.21.1</string>
+	<string>2.21.2</string>
 	<key>CFBundleVersion</key>
-	<string>00005</string>
+	<string>5</string>
 	<key>NSExtension</key>
 	<dict>
 		<key>NSExtensionFileProviderDocumentGroup</key>

+ 2 - 2
iOSClient/Brand/Share.plist

@@ -17,9 +17,9 @@
 	<key>CFBundlePackageType</key>
 	<string>XPC!</string>
 	<key>CFBundleShortVersionString</key>
-	<string>2.21.1</string>
+	<string>2.21.2</string>
 	<key>CFBundleVersion</key>
-	<string>00005</string>
+	<string>5</string>
 	<key>NSAppTransportSecurity</key>
 	<dict>
 		<key>NSAllowsArbitraryLoads</key>

+ 2 - 2
iOSClient/Brand/iOSClient.plist

@@ -46,7 +46,7 @@
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>2.21.1</string>
+	<string>2.21.2</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleURLTypes</key>
@@ -69,7 +69,7 @@
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>00005</string>
+	<string>5</string>
 	<key>FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED</key>
 	<true/>
 	<key>Fabric</key>

+ 5 - 5
iOSClient/CCGlobal.h

@@ -135,7 +135,6 @@ extern NSString *const flowEndpoint;
 
 #define k_timerVerifySession                            10
 #define k_timerProcessAutoDownloadUpload                5
-#define k_timerProcessAutoUploadExtension               10
 #define k_timerUpdateApplicationIconBadgeNumber         3
 
 #define k_maxConcurrentOperation                         10
@@ -153,9 +152,6 @@ extern NSString *const flowEndpoint;
 // Search
 #define k_minCharsSearch                                2
 
-// Metadata ed ID
-#define k_uploadSessionID                               @"ID_UPLOAD_"
-
 // Metadata.Net SELECTOR
 #define selectorAddFavorite                             @"addFavorite"
 #define selectorCreateFolder                            @"createFolder"
@@ -237,6 +233,10 @@ extern NSString *const flowEndpoint;
 // Metadata : Status
 #define k_metadataStatusNormal                          0
 #define k_metadataStatusHide                            1
+#define k_metadataStatusInUpload                        2
+#define k_metadataStatusUploading                       3
+#define k_metadataStatusInDownload                      4
+#define k_metadataStatusDownloading                     5
 
 // TabBar button
 #define k_tabBarApplicationIndexFile                    0
@@ -282,7 +282,7 @@ extern NSString *const flowEndpoint;
 #define k_flow_version_available                        12
 
 //
-#define k_assetLocalIdentifierFileProviderStorage       @"File Provider Storage"
+#define k_DirectoryProviderStorage                      @"File Provider Storage"
 
 
 // -----------------------------------------------------------------------------------------------------------

+ 3 - 3
iOSClient/Create/CCCreateCloud.swift

@@ -65,11 +65,11 @@ class CreateMenuAdd: NSObject {
         
         actionSheet.cancelButtonTitle = NSLocalizedString("_cancel_", comment: "")
         
-        actionSheet.addButton(withTitle: NSLocalizedString("_upload_photos_videos_", comment: ""), image: CCGraphics.changeThemingColorImage(UIImage(named: "menuUploadPhoto"), color: colorGray), backgroundColor: NCBrandColor.sharedInstance.backgroundView, height: 50.0, type: AHKActionSheetButtonType.default, handler: {(AHKActionSheet) -> Void in
+        actionSheet.addButton(withTitle: NSLocalizedString("_upload_photos_videos_", comment: ""), image: CCGraphics.changeThemingColorImage(UIImage(named: "photos"), color: colorGray), backgroundColor: NCBrandColor.sharedInstance.backgroundView, height: 50.0, type: AHKActionSheetButtonType.default, handler: {(AHKActionSheet) -> Void in
             appDelegate.activeMain.returnCreate(Int(k_returnCreateFotoVideoPlain))
         })
         
-        actionSheet.addButton(withTitle: NSLocalizedString("_upload_file_", comment: ""), image: CCGraphics.changeThemingColorImage(UIImage(named: "menuUploadFile"), color: colorGray), backgroundColor: NCBrandColor.sharedInstance.backgroundView, height: 50.0, type: AHKActionSheetButtonType.default, handler: {(AHKActionSheet) -> Void in
+        actionSheet.addButton(withTitle: NSLocalizedString("_upload_file_", comment: ""), image: CCGraphics.changeThemingColorImage(UIImage(named: "file"), color: colorGray), backgroundColor: NCBrandColor.sharedInstance.backgroundView, height: 50.0, type: AHKActionSheetButtonType.default, handler: {(AHKActionSheet) -> Void in
             appDelegate.activeMain.returnCreate(Int(k_returnCreateFilePlain))
         })
         
@@ -633,7 +633,7 @@ class CreateFormUploadFile: XLFormViewController, CCMoveDelegate {
             let success = FileManager.default.createFile(atPath: "\(self.appDelegate.directoryUser!)/\(fileNameSave)", contents: data, attributes: nil)
             
             if success {
-                CCNetworking.shared().uploadFile(fileNameSave, serverUrl: self.serverUrl, fileID: nil, assetLocalIdentifier: nil, session: k_upload_session, taskStatus: Int(k_taskStatusResume), selector: nil, selectorPost: nil, errorCode: 0, delegate: self.appDelegate.activeMain)
+                CCNetworking.shared().uploadFile(fileNameSave, serverUrl: self.serverUrl, assetLocalIdentifier: nil, path:self.appDelegate.directoryUser!, session: k_upload_session, taskStatus: Int(k_taskStatusResume), selector: nil, selectorPost: nil, errorCode: 0, delegate: self.appDelegate.activeMain)
             } else {
                 self.appDelegate.messageNotification("_error_", description: "_error_creation_file_", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.info, errorCode: 0)
             }

+ 1 - 0
iOSClient/Database/NCDatabase.swift

@@ -207,6 +207,7 @@ class tableMetadata: Object {
     @objc dynamic var fileName = ""
     @objc dynamic var fileNameView = ""
     @objc dynamic var iconName = ""
+    @objc dynamic var path = ""
     @objc dynamic var permissions = ""
     @objc dynamic var session = ""
     @objc dynamic var sessionError = ""

+ 23 - 52
iOSClient/Database/NCManageDatabase.swift

@@ -57,7 +57,7 @@ class NCManageDatabase: NSObject {
         let config = Realm.Configuration(
         
             fileURL: dirGroup?.appendingPathComponent("\(appDatabaseNextcloud)/\(k_databaseDefault)"),
-            schemaVersion: 23,
+            schemaVersion: 24,
             
             // 10 : Version 2.18.0
             // 11 : Version 2.18.2
@@ -73,6 +73,7 @@ class NCManageDatabase: NSObject {
             // 21 : Version 2.21.0.3
             // 22 : Version 2.21.0.9
             // 23 : Version 2.21.0.15
+            // 24 : Version 2.21.2.5
             
             migrationBlock: { migration, oldSchemaVersion in
                 // We haven’t migrated anything yet, so oldSchemaVersion == 0
@@ -2371,44 +2372,36 @@ class NCManageDatabase: NSObject {
         return Array(results.map { tableQueueUpload.init(value:$0) })
     }
     
-    @objc func getQueueUpload(withPath: Bool) -> CCMetadataNet? {
+    @objc func getQueueUpload() -> CCMetadataNet? {
         
         guard let tableAccount = self.getAccountActive() else {
             return nil
         }
         
-        var result: tableQueueUpload?
-
         let realm = try! Realm()
         realm.refresh()
         
-        if withPath {
-            result = realm.objects(tableQueueUpload.self).filter("account = %@ AND lock == false AND path != nil", tableAccount.account).sorted(byKeyPath: "date", ascending: true).first
-        } else {
-            result = realm.objects(tableQueueUpload.self).filter("account = %@ AND lock == false AND path == nil", tableAccount.account).sorted(byKeyPath: "date", ascending: true).first
-        }
-        
-        if result == nil {
+        guard let result = realm.objects(tableQueueUpload.self).filter("account = %@ AND lock == false", tableAccount.account).sorted(byKeyPath: "date", ascending: true).first else {
             return nil
         }
         
         let metadataNet = CCMetadataNet()
         
-        metadataNet.account = result!.account
-        metadataNet.assetLocalIdentifier = result!.assetLocalIdentifier
-        metadataNet.errorCode = result!.errorCode
-        metadataNet.directoryID = self.getDirectoryID(result!.serverUrl)
-        metadataNet.fileName = result!.fileName
-        metadataNet.fileNameView = result!.fileNameView
-        metadataNet.path = result!.path
-        metadataNet.selector = result!.selector
-        metadataNet.selectorPost = result!.selectorPost
-        metadataNet.serverUrl = result!.serverUrl
-        metadataNet.session = result!.session
-        metadataNet.sessionError = result!.sessionError
-        metadataNet.sessionID = result!.sessionID
-        metadataNet.sessionTaskIdentifier = result!.sessionTaskIdentifier
-        metadataNet.size = result!.size
+        metadataNet.account = result.account
+        metadataNet.assetLocalIdentifier = result.assetLocalIdentifier
+        metadataNet.errorCode = result.errorCode
+        metadataNet.directoryID = self.getDirectoryID(result.serverUrl)
+        metadataNet.fileName = result.fileName
+        metadataNet.fileNameView = result.fileNameView
+        metadataNet.path = result.path
+        metadataNet.selector = result.selector
+        metadataNet.selectorPost = result.selectorPost
+        metadataNet.serverUrl = result.serverUrl
+        metadataNet.session = result.session
+        metadataNet.sessionError = result.sessionError
+        metadataNet.sessionID = result.sessionID
+        metadataNet.sessionTaskIdentifier = result.sessionTaskIdentifier
+        metadataNet.size = result.size
         metadataNet.taskStatus = Int(k_taskStatusResume)
         
         return metadataNet
@@ -2428,7 +2421,7 @@ class NCManageDatabase: NSObject {
         return Array(results.map { tableQueueUpload.init(value:$0) })
     }
     
-    @objc func lockQueueUpload(selector: String, withPath: Bool) -> CCMetadataNet? {
+    @objc func lockQueueUpload(selector: String, session: String?) -> CCMetadataNet? {
         
         guard let tableAccount = self.getAccountActive() else {
             return nil
@@ -2438,10 +2431,10 @@ class NCManageDatabase: NSObject {
         
         let realm = try! Realm()
         
-        if withPath {
-            result = realm.objects(tableQueueUpload.self).filter("account = %@ AND selector = %@ AND lock == false AND path != nil", tableAccount.account, selector).sorted(byKeyPath: "date", ascending: true).first
+        if session == nil {
+            result = realm.objects(tableQueueUpload.self).filter("account = %@ AND selector = %@ AND lock == false", tableAccount.account, selector).sorted(byKeyPath: "date", ascending: true).first
         } else {
-            result = realm.objects(tableQueueUpload.self).filter("account = %@ AND selector = %@ AND lock == false AND path == nil", tableAccount.account, selector).sorted(byKeyPath: "date", ascending: true).first
+            result = realm.objects(tableQueueUpload.self).filter("account = %@ AND selector = %@ AND lock == false AND session == %@", tableAccount.account, selector, session!).sorted(byKeyPath: "date", ascending: true).first
         }
         
         if result == nil {
@@ -2509,28 +2502,6 @@ class NCManageDatabase: NSObject {
         }
     }
     
-    @objc func unlockAllQueueUploadWithPath() {
-        
-        guard let tableAccount = self.getAccountActive() else {
-            return
-        }
-        
-        let realm = try! Realm()
-        
-        do {
-            try realm.write {
-                
-                let results = realm.objects(tableQueueUpload.self).filter("account = %@ AND path != nil", tableAccount.account)
-                
-                for result in results {
-                    result.lock = false;
-                }
-            }
-        } catch let error {
-            print("[LOG] Could not write to database: ", error)
-        }
-    }
-    
     @objc func deleteQueueUpload(assetLocalIdentifier: String, selector: String) {
         
         guard let tableAccount = self.getAccountActive() else {

+ 1 - 1
iOSClient/Favorites/CCFavorites.h

@@ -28,7 +28,7 @@
 #import "TWMessageBarManager.h"
 #import "AHKActionSheet.h"
 #import "MGSwipeTableCell.h"
-#import "CCFavoritesCell.h"
+#import "CCCellMain.h"
 #import "CCUtility.h"
 #import "CCMain.h"
 #import "CCGraphics.h"

+ 107 - 87
iOSClient/Favorites/CCFavorites.m

@@ -64,8 +64,7 @@
 {
     [super viewDidLoad];
     
-    // Custom Cell
-    [self.tableView registerNib:[UINib nibWithNibName:@"CCFavoritesCell" bundle:nil] forCellReuseIdentifier:@"Cell"];
+    [self.tableView registerNib:[UINib nibWithNibName:@"CCCellMain" bundle:nil] forCellReuseIdentifier:@"CellMain"];
 
     // dataSource
     _dataSource = [NSMutableArray new];
@@ -140,7 +139,7 @@
 
 - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView
 {
-    return [UIImage imageNamed:@"favoriteNoFiles"];
+    return [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"favoriteNoFiles"] color:[NCBrandColor sharedInstance].graySoft];
 }
 
 - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView
@@ -344,39 +343,91 @@
     }
 }
 
-- (void)requestDeleteMetadata:(tableMetadata *)metadata indexPath:(NSIndexPath *)indexPath
+
+- (void)tapActionConnectionMounted:(UITapGestureRecognizer *)tapGesture
 {
-    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
+    CGPoint location = [tapGesture locationInView:self.tableView];
+    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
+    
+    tableMetadata *metadata = [_dataSource objectAtIndex:indexPath.row];
+
+    if (metadata)
+        [appDelegate.activeMain openWindowShare:metadata];
+}
+
+#pragma mark -
+#pragma --------------------------------------------------------------------------------------------
+#pragma mark ===== menu action : Favorite, More, Delete [swipe] =====
+#pragma --------------------------------------------------------------------------------------------
+
+- (BOOL)canOpenMenuAction:(tableMetadata *)metadata
+{
+    return YES;
+}
+
+- (BOOL)swipeTableCell:(MGSwipeTableCell *)cell canSwipe:(MGSwipeDirection)direction
+{
+    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
+    tableMetadata *metadata = [_dataSource objectAtIndex:indexPath.row];
+    
+    return [self canOpenMenuAction:metadata];
+}
+
+- (BOOL)swipeTableCell:(MGSwipeTableCell *)cell tappedButtonAtIndex:(NSInteger)index direction:(MGSwipeDirection)direction fromExpansion:(BOOL)fromExpansion
+{
+    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
+    
+    if (direction == MGSwipeDirectionRightToLeft) {
+        
+        [self actionDelete:indexPath];
+    }
+    
+    if (direction == MGSwipeDirectionLeftToRight) {
         
+        tableMetadata *metadata = [_dataSource objectAtIndex:indexPath.row];
+        [[CCActions sharedInstance] settingFavorite:metadata favorite:NO delegate:self];
+    }
+    
+    return YES;
+}
+
+- (void)actionDelete:(NSIndexPath *)indexPath
+{
+    tableMetadata *metadata = [_dataSource objectAtIndex:indexPath.row];
+    
+    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
+    
     [alertController addAction: [UIAlertAction actionWithTitle:NSLocalizedString(@"_delete_", nil) style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {
         
         [[CCActions sharedInstance] deleteFileOrFolder:metadata delegate:self hud:nil hudTitled:nil];
         [self reloadDatasource];
     }]];
-        
-        
+    
+    
     [alertController addAction: [UIAlertAction actionWithTitle:NSLocalizedString(@"_cancel_", nil) style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
     }]];
-        
+    
     alertController.popoverPresentationController.sourceView = self.view;
     alertController.popoverPresentationController.sourceRect = [self.tableView rectForRowAtIndexPath:indexPath];
-        
+    
     if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
         [alertController.view layoutIfNeeded];
-        
+    
     [self presentViewController:alertController animated:YES completion:nil];
 }
 
-- (void)requestMoreMetadata:(tableMetadata *)metadata indexPath:(NSIndexPath *)indexPath
+- (void)actionMore:(UITapGestureRecognizer *)gestureRecognizer
 {
+    CGPoint touch = [gestureRecognizer locationInView:self.tableView];
+    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:touch];
     UIImage *iconHeader;
     
-    metadata = [_dataSource objectAtIndex:indexPath.row];
+    tableMetadata *metadata = [_dataSource objectAtIndex:indexPath.row];
     
     AHKActionSheet *actionSheet = [[AHKActionSheet alloc] initWithView:self.tabBarController.view title:nil];
     
     actionSheet.animationDuration = 0.2;
-        
+    
     actionSheet.buttonHeight = 50.0;
     actionSheet.cancelButtonHeight = 50.0f;
     actionSheet.separatorHeight = 5.0f;
@@ -405,73 +456,26 @@
     }
     
     [actionSheet addButtonWithTitle: metadata.fileNameView image: iconHeader backgroundColor: [NCBrandColor sharedInstance].tabBar height: 50.0 type: AHKActionSheetButtonTypeDisabled handler: nil
-    ];
-
+     ];
+    
     // Share
-    [actionSheet addButtonWithTitle:NSLocalizedString(@"_share_", nil) image:[CCGraphics changeThemingColorImage:[UIImage imageNamed:@"actionSheetShare"] color:[NCBrandColor sharedInstance].brandElement] backgroundColor:[NCBrandColor sharedInstance].backgroundView height: 50.0 type:AHKActionSheetButtonTypeDefault handler:^(AHKActionSheet *as) {
-                                    
-            [appDelegate.activeMain openWindowShare:metadata];
+    [actionSheet addButtonWithTitle:NSLocalizedString(@"_share_", nil) image:[CCGraphics changeThemingColorImage:[UIImage imageNamed:@"share"] color:[NCBrandColor sharedInstance].brandElement] backgroundColor:[NCBrandColor sharedInstance].backgroundView height: 50.0 type:AHKActionSheetButtonTypeDefault handler:^(AHKActionSheet *as) {
+        
+        [appDelegate.activeMain openWindowShare:metadata];
     }];
-
+    
     // NO Directory
     if (metadata.directory == NO) {
         
-        [actionSheet addButtonWithTitle:NSLocalizedString(@"_open_in_", nil) image:[CCGraphics changeThemingColorImage:[UIImage imageNamed:@"actionSheetOpenIn"] color:[NCBrandColor sharedInstance].brandElement] backgroundColor:[NCBrandColor sharedInstance].backgroundView height: 50.0 type:AHKActionSheetButtonTypeDefault handler:^(AHKActionSheet *as) {
-                [self.tableView setEditing:NO animated:YES];
-                [self openWith:metadata];
-            }];
+        [actionSheet addButtonWithTitle:NSLocalizedString(@"_open_in_", nil) image:[CCGraphics changeThemingColorImage:[UIImage imageNamed:@"openFile"] color:[NCBrandColor sharedInstance].brandElement] backgroundColor:[NCBrandColor sharedInstance].backgroundView height: 50.0 type:AHKActionSheetButtonTypeDefault handler:^(AHKActionSheet *as) {
+            [self.tableView setEditing:NO animated:YES];
+            [self openWith:metadata];
+        }];
     }
     
     [actionSheet show];
 }
 
-- (void)tapActionConnectionMounted:(UITapGestureRecognizer *)tapGesture
-{
-    CGPoint location = [tapGesture locationInView:self.tableView];
-    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
-    
-    tableMetadata *metadata = [_dataSource objectAtIndex:indexPath.row];
-
-    if (metadata)
-        [appDelegate.activeMain openWindowShare:metadata];
-}
-
-
-#pragma mark -
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== Swipe Tablet -> menu =====
-#pragma --------------------------------------------------------------------------------------------
-
-- (BOOL)swipeTableCell:(MGSwipeTableCell *)cell canSwipe:(MGSwipeDirection)direction
-{
-    return YES;
-}
-
-- (BOOL)swipeTableCell:(MGSwipeTableCell *)cell tappedButtonAtIndex:(NSInteger)index direction:(MGSwipeDirection)direction fromExpansion:(BOOL)fromExpansion
-{
-    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
-    
-    if (direction == MGSwipeDirectionRightToLeft) {
-        
-        // Delete
-        if (index == 0)
-            [self requestDeleteMetadata:[_dataSource objectAtIndex:indexPath.row] indexPath:indexPath];
-        
-        // More
-        if (index == 1)
-            [self requestMoreMetadata:[_dataSource objectAtIndex:indexPath.row] indexPath:indexPath];
-    }
-    
-    if (direction == MGSwipeDirectionLeftToRight) {
-        
-        tableMetadata *metadata = [_dataSource objectAtIndex:indexPath.row];
-        [[CCActions sharedInstance] settingFavorite:metadata favorite:NO delegate:self];
-    }
-    
-    return YES;
-}
-
-
 #pragma --------------------------------------------------------------------------------------------
 #pragma mark ==== Table ====
 #pragma --------------------------------------------------------------------------------------------
@@ -541,7 +545,7 @@
 
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
-    CCFavoritesCell *cell = (CCFavoritesCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
+    CCCellMain *cell = (CCCellMain *)[tableView dequeueReusableCellWithIdentifier:@"CellMain" forIndexPath:indexPath];
     tableMetadata *metadata;
     
     // variable base
@@ -566,7 +570,7 @@
         
     // favorite
     if (_serverUrl == nil)
-        cell.favorite.image = [UIImage imageNamed:@"favorite"];
+        cell.favorite.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"favorite"] color:[NCBrandColor sharedInstance].yellowFavorite];
     
     cell.labelTitle.textColor = [UIColor blackColor];
     
@@ -587,7 +591,7 @@
         if (metadata.e2eEncrypted) {
             cell.file.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"folderEncrypted"] color:[NCBrandColor sharedInstance].brandElement];
         } else if ([metadata.fileName isEqualToString:_autoUploadFileName] && [self.serverUrl isEqualToString:_autoUploadDirectory]) {
-            cell.file.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"folderphotocamera"] color:[NCBrandColor sharedInstance].brandElement];
+            cell.file.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"folderPhotos"] color:[NCBrandColor sharedInstance].brandElement];
         } else if ([shareLink length] > 0) {
             cell.file.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"folder_public"] color:[NCBrandColor sharedInstance].brandElement];
         } else if ([shareUserAndGroup length] > 0) {
@@ -601,9 +605,9 @@
         if ([shareLink length] > 0 || [shareUserAndGroup length] > 0) {
             
             if ([shareLink length] > 0)
-                cell.shared.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"shareLink"] color:[NCBrandColor sharedInstance].brandElement];
+                cell.shared.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"sharebylink"] color:[NCBrandColor sharedInstance].gray];
             else
-                cell.shared.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"actionSheetShare"] color:[NCBrandColor sharedInstance].brandElement];
+                cell.shared.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"share"] color:[NCBrandColor sharedInstance].gray];
                 
             UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapActionConnectionMounted:)];
             [tap setNumberOfTapsRequired:1];
@@ -634,9 +638,8 @@
     if (metadata.directory) {
         
         cell.labelInfoFile.text = [CCUtility dateDiff:metadata.date];
-        //cell.accessoryType = UITableViewCellAccessoryNone;
-        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
-          
+        cell.accessoryType = UITableViewCellAccessoryNone;
+        
     } else {
         
         NSString *date = [CCUtility dateDiff:metadata.date];
@@ -653,12 +656,14 @@
         
     }
     
-    // ======== MGSwipe ========
-    
-    //configure left buttons : ONLY Root Favorites : Remove file/folder Favorites
+    // ----------------------------------------------------------------------------------------------------------
+    // swipe
+    // ----------------------------------------------------------------------------------------------------------
     
+    // LEFT : configure ONLY Root Favorites : Remove file/folder Favorites
     if (_serverUrl == nil) {
-        cell.leftButtons = @[[MGSwipeButton buttonWithTitle:[NSString stringWithFormat:@" %@ ", NSLocalizedString(@"_unfavorite_", nil)] icon:[UIImage imageNamed:@"swipeUnfavorite"] backgroundColor:[UIColor colorWithRed:242.0/255.0 green:220.0/255.0 blue:132.0/255.0 alpha:1.000]]];
+        
+        cell.leftButtons = @[[MGSwipeButton buttonWithTitle:@"" icon:[CCGraphics changeThemingColorImage:[UIImage imageNamed:@"favorite"] color:[UIColor whiteColor]] backgroundColor:[NCBrandColor sharedInstance].yellowFavorite padding:25]];
         cell.leftExpansion.buttonIndex = 0;
         cell.leftExpansion.fillOnTrigger = NO;
         
@@ -667,15 +672,30 @@
         [favoriteButton centerIconOverText];
     }
     
-    //configure right buttons
-    cell.rightButtons = @[[MGSwipeButton buttonWithTitle:[NSString stringWithFormat:@" %@ ", NSLocalizedString(@"_delete_", nil)] icon:[UIImage imageNamed:@"swipeDelete"] backgroundColor:[UIColor redColor]], [MGSwipeButton buttonWithTitle:[NSString stringWithFormat:@" %@ ", NSLocalizedString(@"_more_", nil)] icon:[UIImage imageNamed:@"swipeMore"] backgroundColor:[UIColor lightGrayColor]]];
-    cell.rightSwipeSettings.transition = MGSwipeTransitionBorder;
+    
+    // RIGHT
+    cell.rightButtons = @[[MGSwipeButton buttonWithTitle:@"" icon:[CCGraphics changeThemingColorImage:[UIImage imageNamed:@"delete"] color:[UIColor whiteColor]] backgroundColor:[UIColor redColor] padding:25]];
+    
+    cell.rightExpansion.buttonIndex = 0;
+    cell.rightExpansion.fillOnTrigger = NO;
     
     //centerIconOverText
     MGSwipeButton *deleteButton = (MGSwipeButton *)[cell.rightButtons objectAtIndex:0];
-    MGSwipeButton *moreButton = (MGSwipeButton *)[cell.rightButtons objectAtIndex:1];
     [deleteButton centerIconOverText];
-    [moreButton centerIconOverText];
+
+    // ----------------------------------------------------------------------------------------------------------
+    // more
+    // ----------------------------------------------------------------------------------------------------------
+    
+    cell.more.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"more"] color:[NCBrandColor sharedInstance].gray];
+    
+    if ([self canOpenMenuAction:metadata]) {
+        
+        UITapGestureRecognizer *tapMore = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(actionMore:)];
+        [tapMore setNumberOfTapsRequired:1];
+        cell.more.userInteractionEnabled = YES;
+        [cell.more addGestureRecognizer:tapMore];
+    }
     
     return cell;
 }

+ 0 - 46
iOSClient/Favorites/CCFavoritesCell.h

@@ -1,46 +0,0 @@
-//
-//  CCFavoritesCell.h
-//  Nextcloud iOS
-//
-//  Created by Marino Faggiana on 05/05/15.
-//  Copyright (c) 2017 TWS. All rights reserved.
-//
-//  Author Marino Faggiana <m.faggiana@twsweb.it>
-//
-//  This program is free software: you can redistribute it and/or modify
-//  it under the terms of the GNU General Public License as published by
-//  the Free Software Foundation, either version 3 of the License, or
-//  (at your option) any later version.
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU General Public License
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-//
-
-#import <UIKit/UIKit.h>
-#import "MGSwipeTableCell.h"
-
-@interface CCFavoritesCell : MGSwipeTableCell
-
-@property(nonatomic, weak) IBOutlet UIImageView *file;
-@property(nonatomic, weak) IBOutlet UIImageView *status;
-@property(nonatomic, weak) IBOutlet UIImageView *favorite;
-@property(nonatomic, weak) IBOutlet UIImageView *local;
-@property(nonatomic, weak) IBOutlet UIImageView *shared;
-
-@property(nonatomic, weak) IBOutlet UILabel *labelTitle;
-@property(nonatomic, weak) IBOutlet UILabel *labelInfoFile;
-
-@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray *constraints;
-
-//Last position of the scroll of the swipe
-@property (nonatomic, assign) CGFloat lastContentOffset;
-
-//Index path of the cell swipe gesture ocured
-@property (nonatomic, strong) NSIndexPath *indexPath;
-
-@end

+ 0 - 68
iOSClient/Favorites/CCFavoritesCell.m

@@ -1,68 +0,0 @@
-//
-//  CCFavoritesCell.m
-//  Nextcloud iOS
-//
-//  Created by Marino Faggiana on 05/05/15.
-//  Copyright (c) 2017 TWS. All rights reserved.
-//
-//  Author Marino Faggiana <m.faggiana@twsweb.it>
-//
-//  This program is free software: you can redistribute it and/or modify
-//  it under the terms of the GNU General Public License as published by
-//  the Free Software Foundation, either version 3 of the License, or
-//  (at your option) any later version.
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU General Public License
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-//
-
-#import "CCFavoritesCell.h"
-
-@implementation CCFavoritesCell
-
-- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
-{
-    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
-    if (self) {
-        // Initialization code
-
-        
-    }
-    return self;
-}
-
-- (void)setSelected:(BOOL)selected animated:(BOOL)animated
-{
-    [super setSelected:selected animated:animated];
-
-    // Configure the view for the selected state
-}
-
-- (void)layoutSubviews {
-    
-    [super layoutSubviews];
-    
-    for (NSLayoutConstraint *constraint in self.constraints) {
-        constraint.constant = self.frame.size.width - self.contentView.frame.size.width;
-    }
-}
-
-///-----------------------------------
-/// @name scrollViewWillBeginDecelerating
-///-----------------------------------
-
-/**
- * Method to initialize the position where we make the swipe in order to detect the direction
- *
- * @param UIScrollView -> scrollView
- */
-- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
-    _lastContentOffset = scrollView.contentOffset.x;
-}
-
-@end

+ 0 - 106
iOSClient/Favorites/CCFavoritesCell.xib

@@ -1,106 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="12121" systemVersion="16F73" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES">
-    <device id="retina4_7" orientation="portrait">
-        <adaptation id="fullscreen"/>
-    </device>
-    <dependencies>
-        <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
-        <capability name="Constraints to layout margins" minToolsVersion="6.0"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="CustomCellFileAndDirectory"/>
-        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
-        <tableViewCell contentMode="scaleToFill" selectionStyle="blue" indentationWidth="0.0" reuseIdentifier="Cell" rowHeight="60" id="2" userLabel="CCFavoritesCell" customClass="CCFavoritesCell">
-            <rect key="frame" x="0.0" y="0.0" width="600" height="60"/>
-            <autoresizingMask key="autoresizingMask" flexibleMaxY="YES"/>
-            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="2" id="sQq-jC-UEV">
-                <rect key="frame" x="0.0" y="0.0" width="600" height="60"/>
-                <autoresizingMask key="autoresizingMask"/>
-                <subviews>
-                    <label opaque="NO" userInteractionEnabled="NO" tag="101" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QNC-8X-DAC">
-                        <rect key="frame" x="60" y="13" width="473" height="20"/>
-                        <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                        <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                        <nil key="highlightedColor"/>
-                    </label>
-                    <imageView userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5">
-                        <rect key="frame" x="10" y="10" width="40" height="40"/>
-                        <constraints>
-                            <constraint firstAttribute="width" constant="40" id="7r4-ao-ayY"/>
-                            <constraint firstAttribute="height" constant="40" id="cGI-9B-eWe"/>
-                        </constraints>
-                    </imageView>
-                    <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="8I8-C4-IpX" userLabel="Favorite">
-                        <rect key="frame" x="39" y="4" width="15" height="15"/>
-                        <constraints>
-                            <constraint firstAttribute="width" constant="15" id="Zqv-l0-LGD"/>
-                            <constraint firstAttribute="height" constant="15" id="gLU-er-iu6"/>
-                        </constraints>
-                    </imageView>
-                    <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="DQR-yN-JaH" userLabel="Local">
-                        <rect key="frame" x="40" y="40" width="15" height="15"/>
-                        <constraints>
-                            <constraint firstAttribute="width" constant="15" id="O4C-De-dnI"/>
-                            <constraint firstAttribute="height" constant="15" id="bun-Ao-Ysu"/>
-                        </constraints>
-                    </imageView>
-                    <label opaque="NO" userInteractionEnabled="NO" tag="102" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="p7I-KN-FVZ">
-                        <rect key="frame" x="60" y="33" width="473" height="15"/>
-                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
-                        <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
-                        <nil key="highlightedColor"/>
-                    </label>
-                    <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="dhG-hb-z3n" userLabel="Status">
-                        <rect key="frame" x="4" y="40" width="15" height="15"/>
-                        <constraints>
-                            <constraint firstAttribute="width" constant="15" id="ZiA-bt-IkC"/>
-                            <constraint firstAttribute="height" constant="15" id="aQq-XY-pNM"/>
-                        </constraints>
-                    </imageView>
-                    <imageView userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="XQL-3O-oXy" userLabel="Shared Image View">
-                        <rect key="frame" x="558" y="0.0" width="42" height="60"/>
-                        <constraints>
-                            <constraint firstAttribute="height" constant="60" id="7E9-W6-BKh"/>
-                            <constraint firstAttribute="width" constant="42" id="JBh-wn-m3z"/>
-                        </constraints>
-                    </imageView>
-                </subviews>
-                <constraints>
-                    <constraint firstItem="DQR-yN-JaH" firstAttribute="top" secondItem="dhG-hb-z3n" secondAttribute="top" id="0XU-Ho-ald"/>
-                    <constraint firstItem="5" firstAttribute="leading" secondItem="sQq-jC-UEV" secondAttribute="leadingMargin" constant="2" id="1yX-Zr-1lx"/>
-                    <constraint firstItem="p7I-KN-FVZ" firstAttribute="leading" secondItem="DQR-yN-JaH" secondAttribute="trailing" constant="5" id="2xR-G4-B2S"/>
-                    <constraint firstItem="dhG-hb-z3n" firstAttribute="top" secondItem="sQq-jC-UEV" secondAttribute="topMargin" constant="32" id="4Zy-SY-nfT"/>
-                    <constraint firstItem="QNC-8X-DAC" firstAttribute="trailing" secondItem="sQq-jC-UEV" secondAttribute="trailingMargin" constant="-59" id="7zt-c0-CsI"/>
-                    <constraint firstAttribute="centerY" secondItem="5" secondAttribute="centerY" id="FQP-wg-vPF"/>
-                    <constraint firstItem="DQR-yN-JaH" firstAttribute="top" secondItem="p7I-KN-FVZ" secondAttribute="top" constant="6.5" id="K6B-gJ-8Fp"/>
-                    <constraint firstItem="p7I-KN-FVZ" firstAttribute="leading" secondItem="5" secondAttribute="trailing" constant="10" id="K7G-0u-f8E"/>
-                    <constraint firstItem="8I8-C4-IpX" firstAttribute="leading" secondItem="5" secondAttribute="trailing" constant="-11" id="MeU-6N-LsY"/>
-                    <constraint firstItem="QNC-8X-DAC" firstAttribute="leading" secondItem="5" secondAttribute="trailing" constant="10" id="UYc-Al-a4h"/>
-                    <constraint firstAttribute="trailingMargin" secondItem="XQL-3O-oXy" secondAttribute="trailing" constant="-8" id="XoZ-u4-Bb4"/>
-                    <constraint firstItem="5" firstAttribute="top" secondItem="8I8-C4-IpX" secondAttribute="bottom" constant="-9" id="c7V-hW-ut8"/>
-                    <constraint firstItem="p7I-KN-FVZ" firstAttribute="top" secondItem="QNC-8X-DAC" secondAttribute="bottom" id="cJT-LE-kot"/>
-                    <constraint firstItem="dhG-hb-z3n" firstAttribute="leading" secondItem="sQq-jC-UEV" secondAttribute="leadingMargin" constant="-4" id="dNM-6x-zkx"/>
-                    <constraint firstItem="p7I-KN-FVZ" firstAttribute="trailing" secondItem="sQq-jC-UEV" secondAttribute="trailingMargin" constant="-59" id="kaB-WS-bDl"/>
-                    <constraint firstItem="XQL-3O-oXy" firstAttribute="centerY" secondItem="sQq-jC-UEV" secondAttribute="centerY" id="nbe-Zs-K8w"/>
-                </constraints>
-            </tableViewCellContentView>
-            <connections>
-                <outlet property="favorite" destination="8I8-C4-IpX" id="pLt-ju-d8T"/>
-                <outlet property="file" destination="5" id="whc-SL-Hxm"/>
-                <outlet property="labelInfoFile" destination="p7I-KN-FVZ" id="5Yb-hH-k73"/>
-                <outlet property="labelTitle" destination="QNC-8X-DAC" id="dFX-Cb-8IE"/>
-                <outlet property="local" destination="DQR-yN-JaH" id="Gbe-QU-cMb"/>
-                <outlet property="shared" destination="XQL-3O-oXy" id="TpF-AH-duD"/>
-                <outlet property="status" destination="dhG-hb-z3n" id="Jxk-qM-eWu"/>
-            </connections>
-            <point key="canvasLocation" x="256" y="19"/>
-        </tableViewCell>
-    </objects>
-    <simulatedMetricsContainer key="defaultSimulatedMetrics">
-        <simulatedStatusBarMetrics key="statusBar"/>
-        <simulatedOrientationMetrics key="orientation"/>
-        <simulatedScreenMetrics key="destination" type="retina4_7.fullscreen"/>
-    </simulatedMetricsContainer>
-</document>

+ 0 - 0
iOSClient/Images.xcassets/settingsCryptoCloud.imageset/Contents.json → iOSClient/Images.xcassets/CryptoCloud.imageset/Contents.json


+ 0 - 0
iOSClient/Images.xcassets/settingsCryptoCloud.imageset/settingsCryptoCloud.png → iOSClient/Images.xcassets/CryptoCloud.imageset/settingsCryptoCloud.png


+ 0 - 0
iOSClient/Images.xcassets/settingsCryptoCloud.imageset/settingsCryptoCloud@2x.png → iOSClient/Images.xcassets/CryptoCloud.imageset/settingsCryptoCloud@2x.png


+ 0 - 0
iOSClient/Images.xcassets/settingsCryptoCloud.imageset/settingsCryptoCloud@3x.png → iOSClient/Images.xcassets/CryptoCloud.imageset/settingsCryptoCloud@3x.png


BIN
iOSClient/Images.xcassets/Icon-Back.imageset/Icon-Back.png


BIN
iOSClient/Images.xcassets/Icon-Back.imageset/Icon-Back@2x.png


BIN
iOSClient/Images.xcassets/Icon-Back.imageset/Icon-Back@3x.png


+ 5 - 5
iOSClient/Images.xcassets/MenuGroupByAlphabetic.imageset/Contents.json

@@ -2,18 +2,18 @@
   "images" : [
     {
       "idiom" : "universal",
-      "scale" : "1x",
-      "filename" : "MenuGroupByAlphabeticNextcloud.png"
+      "filename" : "MenuGroupByAlphabetic.png",
+      "scale" : "1x"
     },
     {
       "idiom" : "universal",
-      "filename" : "MenuGroupByAlphabeticNextcloud@2x.png",
+      "filename" : "MenuGroupByAlphabetic@2x.png",
       "scale" : "2x"
     },
     {
       "idiom" : "universal",
-      "scale" : "3x",
-      "filename" : "MenuGroupByAlphabeticNextcloud@3x.png"
+      "filename" : "MenuGroupByAlphabetic@3x.png",
+      "scale" : "3x"
     }
   ],
   "info" : {

BIN
iOSClient/Images.xcassets/MenuGroupByAlphabetic.imageset/MenuGroupByAlphabetic.png


BIN
iOSClient/Images.xcassets/MenuGroupByAlphabetic.imageset/MenuGroupByAlphabetic@2x.png


BIN
iOSClient/Images.xcassets/MenuGroupByAlphabetic.imageset/MenuGroupByAlphabetic@3x.png


BIN
iOSClient/Images.xcassets/MenuGroupByAlphabetic.imageset/MenuGroupByAlphabeticNextcloud.png


BIN
iOSClient/Images.xcassets/MenuGroupByAlphabetic.imageset/MenuGroupByAlphabeticNextcloud@2x.png


BIN
iOSClient/Images.xcassets/MenuGroupByAlphabetic.imageset/MenuGroupByAlphabeticNextcloud@3x.png


+ 5 - 5
iOSClient/Images.xcassets/MenuGroupByDate.imageset/Contents.json

@@ -2,18 +2,18 @@
   "images" : [
     {
       "idiom" : "universal",
-      "scale" : "1x",
-      "filename" : "MenuGroupByDateNextcloud.png"
+      "filename" : "MenuGroupByDate.png",
+      "scale" : "1x"
     },
     {
       "idiom" : "universal",
-      "filename" : "MenuGroupByDateNextcloud@2x.png",
+      "filename" : "MenuGroupByDate@2x.png",
       "scale" : "2x"
     },
     {
       "idiom" : "universal",
-      "scale" : "3x",
-      "filename" : "MenuGroupByDateNextcloud@3x.png"
+      "filename" : "MenuGroupByDate@3x.png",
+      "scale" : "3x"
     }
   ],
   "info" : {

BIN
iOSClient/Images.xcassets/MenuGroupByDate.imageset/MenuGroupByDate.png


BIN
iOSClient/Images.xcassets/MenuGroupByDate.imageset/MenuGroupByDate@2x.png


BIN
iOSClient/Images.xcassets/MenuGroupByDate.imageset/MenuGroupByDate@3x.png


BIN
iOSClient/Images.xcassets/MenuGroupByDate.imageset/MenuGroupByDateNextcloud.png


BIN
iOSClient/Images.xcassets/MenuGroupByDate.imageset/MenuGroupByDateNextcloud@2x.png


BIN
iOSClient/Images.xcassets/MenuGroupByDate.imageset/MenuGroupByDateNextcloud@3x.png


+ 0 - 23
iOSClient/Images.xcassets/MenuGroupByTypeFile.imageset/Contents.json

@@ -1,23 +0,0 @@
-{
-  "images" : [
-    {
-      "idiom" : "universal",
-      "scale" : "1x",
-      "filename" : "MenuGroupByTypeFileNextcloud.png"
-    },
-    {
-      "idiom" : "universal",
-      "filename" : "MenuGroupByTypeFileNextcloud@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "idiom" : "universal",
-      "scale" : "3x",
-      "filename" : "MenuGroupByTypeFileNextcloud@3x.png"
-    }
-  ],
-  "info" : {
-    "version" : 1,
-    "author" : "xcode"
-  }
-}

BIN
iOSClient/Images.xcassets/MenuGroupByTypeFile.imageset/MenuGroupByTypeFileNextcloud.png


BIN
iOSClient/Images.xcassets/MenuGroupByTypeFile.imageset/MenuGroupByTypeFileNextcloud@2x.png


BIN
iOSClient/Images.xcassets/MenuGroupByTypeFile.imageset/MenuGroupByTypeFileNextcloud@3x.png


+ 5 - 5
iOSClient/Images.xcassets/MenuOrderByFileName.imageset/Contents.json

@@ -2,18 +2,18 @@
   "images" : [
     {
       "idiom" : "universal",
-      "scale" : "1x",
-      "filename" : "MenuOrderByFileNameNextcloud.png"
+      "filename" : "MenuOrderByFileName.png",
+      "scale" : "1x"
     },
     {
       "idiom" : "universal",
-      "filename" : "MenuOrderByFileNameNextcloud@2x.png",
+      "filename" : "MenuOrderByFileName@2x.png",
       "scale" : "2x"
     },
     {
       "idiom" : "universal",
-      "scale" : "3x",
-      "filename" : "MenuOrderByFileNameNextcloud@3x.png"
+      "filename" : "MenuOrderByFileName@3x.png",
+      "scale" : "3x"
     }
   ],
   "info" : {

BIN
iOSClient/Images.xcassets/MenuOrderByFileName.imageset/MenuOrderByFileName.png


BIN
iOSClient/Images.xcassets/MenuOrderByFileName.imageset/MenuOrderByFileName@2x.png


BIN
iOSClient/Images.xcassets/MenuOrderByFileName.imageset/MenuOrderByFileName@3x.png


BIN
iOSClient/Images.xcassets/MenuOrderByFileName.imageset/MenuOrderByFileNameNextcloud.png


BIN
iOSClient/Images.xcassets/MenuOrderByFileName.imageset/MenuOrderByFileNameNextcloud@2x.png


BIN
iOSClient/Images.xcassets/MenuOrderByFileName.imageset/MenuOrderByFileNameNextcloud@3x.png


+ 5 - 5
iOSClient/Images.xcassets/MenuOrdeyByDate.imageset/Contents.json

@@ -2,18 +2,18 @@
   "images" : [
     {
       "idiom" : "universal",
-      "scale" : "1x",
-      "filename" : "MenuOrdeyByDateNextcloud.png"
+      "filename" : "MenuOrdeyByDate.png",
+      "scale" : "1x"
     },
     {
       "idiom" : "universal",
-      "filename" : "MenuOrdeyByDateNextcloud@2x.png",
+      "filename" : "MenuOrdeyByDate@2x.png",
       "scale" : "2x"
     },
     {
       "idiom" : "universal",
-      "scale" : "3x",
-      "filename" : "MenuOrdeyByDateNextcloud@3x.png"
+      "filename" : "MenuOrdeyByDate@3x.png",
+      "scale" : "3x"
     }
   ],
   "info" : {

BIN
iOSClient/Images.xcassets/MenuOrdeyByDate.imageset/MenuOrdeyByDate.png


BIN
iOSClient/Images.xcassets/MenuOrdeyByDate.imageset/MenuOrdeyByDate@2x.png


BIN
iOSClient/Images.xcassets/MenuOrdeyByDate.imageset/MenuOrdeyByDate@3x.png


BIN
iOSClient/Images.xcassets/MenuOrdeyByDate.imageset/MenuOrdeyByDateNextcloud.png


BIN
iOSClient/Images.xcassets/MenuOrdeyByDate.imageset/MenuOrdeyByDateNextcloud@2x.png


BIN
iOSClient/Images.xcassets/MenuOrdeyByDate.imageset/MenuOrdeyByDateNextcloud@3x.png


+ 5 - 5
iOSClient/Images.xcassets/MenuOrdinamentoAscendente.imageset/Contents.json

@@ -2,18 +2,18 @@
   "images" : [
     {
       "idiom" : "universal",
-      "scale" : "1x",
-      "filename" : "MenuOrdinamentoAscendenteNextcloud.png"
+      "filename" : "MenuOrdinamentoAscendente.png",
+      "scale" : "1x"
     },
     {
       "idiom" : "universal",
-      "filename" : "MenuOrdinamentoAscendenteNextcloud@2x.png",
+      "filename" : "MenuOrdinamentoAscendente@2x.png",
       "scale" : "2x"
     },
     {
       "idiom" : "universal",
-      "scale" : "3x",
-      "filename" : "MenuOrdinamentoAscendenteNextcloud@3x.png"
+      "filename" : "MenuOrdinamentoAscendente@3x.png",
+      "scale" : "3x"
     }
   ],
   "info" : {

BIN
iOSClient/Images.xcassets/MenuOrdinamentoAscendente.imageset/MenuOrdinamentoAscendente.png


BIN
iOSClient/Images.xcassets/MenuOrdinamentoAscendente.imageset/MenuOrdinamentoAscendente@2x.png


BIN
iOSClient/Images.xcassets/MenuOrdinamentoAscendente.imageset/MenuOrdinamentoAscendente@3x.png


BIN
iOSClient/Images.xcassets/MenuOrdinamentoAscendente.imageset/MenuOrdinamentoAscendenteNextcloud.png


BIN
iOSClient/Images.xcassets/MenuOrdinamentoAscendente.imageset/MenuOrdinamentoAscendenteNextcloud@2x.png


BIN
iOSClient/Images.xcassets/MenuOrdinamentoAscendente.imageset/MenuOrdinamentoAscendenteNextcloud@3x.png


+ 5 - 5
iOSClient/Images.xcassets/MenuOrdinamentoDiscendente.imageset/Contents.json

@@ -2,18 +2,18 @@
   "images" : [
     {
       "idiom" : "universal",
-      "scale" : "1x",
-      "filename" : "MenuOrdinamentoDiscendenteNextcloud.png"
+      "filename" : "MenuOrdinamentoDiscendente.png",
+      "scale" : "1x"
     },
     {
       "idiom" : "universal",
-      "filename" : "MenuOrdinamentoDiscendenteNextcloud@2x.png",
+      "filename" : "MenuOrdinamentoDiscendente@2x.png",
       "scale" : "2x"
     },
     {
       "idiom" : "universal",
-      "scale" : "3x",
-      "filename" : "MenuOrdinamentoDiscendenteNextcloud@3x.png"
+      "filename" : "MenuOrdinamentoDiscendente@3x.png",
+      "scale" : "3x"
     }
   ],
   "info" : {

BIN
iOSClient/Images.xcassets/MenuOrdinamentoDiscendente.imageset/MenuOrdinamentoDiscendente.png


BIN
iOSClient/Images.xcassets/MenuOrdinamentoDiscendente.imageset/MenuOrdinamentoDiscendente@2x.png


BIN
iOSClient/Images.xcassets/MenuOrdinamentoDiscendente.imageset/MenuOrdinamentoDiscendente@3x.png


BIN
iOSClient/Images.xcassets/MenuOrdinamentoDiscendente.imageset/MenuOrdinamentoDiscendenteNextcloud.png


BIN
iOSClient/Images.xcassets/MenuOrdinamentoDiscendente.imageset/MenuOrdinamentoDiscendenteNextcloud@2x.png


이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.