Browse Source

New Favorite view

Marino Faggiana 8 years ago
parent
commit
ebf56385bb

+ 0 - 68
iOSClient/Offline/CCCellOffline.m

@@ -1,68 +0,0 @@
-//
-//  CCCellOffline.m
-//  Crypto Cloud Technology Nextcloud
-//
-//  Created by Marino Faggiana on 05/05/15.
-//  Copyright (c) 2014 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 "CCCellOffline.h"
-
-@implementation CCCellOffline
-
-- (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 - 107
iOSClient/Offline/CCCellOffline.xib

@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="12118" systemVersion="16E195" 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="12086"/>
-        <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="OfflineCell" rowHeight="60" id="2" userLabel="OfflineCell" customClass="CCCellOffline">
-            <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>
-                    <view alpha="0.10000000149011612" contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hzp-7C-oyF" userLabel="Gray">
-                        <rect key="frame" x="0.0" y="0.0" width="60" height="60"/>
-                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-                        <color key="backgroundColor" red="0.66666666669999997" green="0.66666666669999997" blue="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                    </view>
-                    <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="68" 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="8" y="11" 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="DQR-yN-JaH">
-                        <rect key="frame" x="37" 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="68" 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="Offline Image View">
-                        <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>
-                    <button opaque="NO" alpha="0.40000000000000002" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6B9-Jc-esJ" userLabel="buttonDown">
-                        <rect key="frame" x="541" y="0.0" width="60" height="60"/>
-                        <constraints>
-                            <constraint firstAttribute="height" constant="60" id="PcN-jN-71v"/>
-                            <constraint firstAttribute="width" constant="60" id="bAG-EX-HKe"/>
-                        </constraints>
-                        <state key="normal" image="buttonDown"/>
-                    </button>
-                </subviews>
-                <constraints>
-                    <constraint firstItem="p7I-KN-FVZ" firstAttribute="leading" secondItem="DQR-yN-JaH" secondAttribute="trailing" constant="16" 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="-51" id="7zt-c0-CsI"/>
-                    <constraint firstItem="6B9-Jc-esJ" firstAttribute="centerY" secondItem="5" secondAttribute="centerY" constant="-1" id="EoB-vw-kgn"/>
-                    <constraint firstAttribute="centerY" secondItem="5" secondAttribute="centerY" constant="-1.5" 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="20" id="K7G-0u-f8E"/>
-                    <constraint firstItem="5" firstAttribute="bottom" secondItem="p7I-KN-FVZ" secondAttribute="bottom" constant="3" id="MuE-C8-4UJ"/>
-                    <constraint firstItem="QNC-8X-DAC" firstAttribute="leading" secondItem="5" secondAttribute="trailing" constant="20" id="UYc-Al-a4h"/>
-                    <constraint firstItem="dhG-hb-z3n" firstAttribute="leading" secondItem="sQq-jC-UEV" secondAttribute="leadingMargin" constant="-4" id="dNM-6x-zkx"/>
-                    <constraint firstItem="5" firstAttribute="leading" secondItem="sQq-jC-UEV" secondAttribute="leadingMargin" id="ha0-VA-fF9"/>
-                    <constraint firstItem="p7I-KN-FVZ" firstAttribute="trailing" secondItem="sQq-jC-UEV" secondAttribute="trailingMargin" constant="-51" id="kaB-WS-bDl"/>
-                    <constraint firstItem="5" firstAttribute="top" secondItem="QNC-8X-DAC" secondAttribute="top" constant="-2" id="lyH-lh-z03"/>
-                    <constraint firstItem="6B9-Jc-esJ" firstAttribute="leading" secondItem="QNC-8X-DAC" secondAttribute="trailing" id="mBS-nt-t6R"/>
-                    <constraint firstItem="5" firstAttribute="top" secondItem="sQq-jC-UEV" secondAttribute="topMargin" constant="3" id="pRH-CQ-O4x"/>
-                </constraints>
-            </tableViewCellContentView>
-            <connections>
-                <outlet property="buttonDown" destination="6B9-Jc-esJ" id="tb8-y2-OM0"/>
-                <outlet property="fileImageView" destination="5" id="6"/>
-                <outlet property="labelInfoFile" destination="p7I-KN-FVZ" id="5Yb-hH-k73"/>
-                <outlet property="labelTitle" destination="QNC-8X-DAC" id="dFX-Cb-8IE"/>
-                <outlet property="offlineImageView" destination="dhG-hb-z3n" id="IGh-6c-M89"/>
-                <outlet property="statusImageView" destination="DQR-yN-JaH" id="UmC-pt-kjV"/>
-                <outletCollection property="constraints" destination="mBS-nt-t6R" id="4sz-P1-CPa"/>
-            </connections>
-            <point key="canvasLocation" x="316" y="128"/>
-        </tableViewCell>
-    </objects>
-    <resources>
-        <image name="buttonDown" width="25" height="25"/>
-    </resources>
-    <simulatedMetricsContainer key="defaultSimulatedMetrics">
-        <simulatedStatusBarMetrics key="statusBar"/>
-        <simulatedOrientationMetrics key="orientation"/>
-        <simulatedScreenMetrics key="destination" type="retina4_7.fullscreen"/>
-    </simulatedMetricsContainer>
-</document>

+ 0 - 33
iOSClient/Offline/CCOfflineContainer.h

@@ -1,33 +0,0 @@
-//
-//  CCOfflineContainer.h
-//  Crypto Cloud Technology Nextcloud
-//
-//  Created by Marino Faggiana on 16/01/17.
-//  Copyright (c) 2014 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>
-
-
-@interface CCOfflineContainer : UIViewController <UIPageViewControllerDataSource, UIPageViewControllerDelegate>
-
-@property (strong, nonatomic) UIPageViewController *pageViewController;
-@property (strong, nonatomic) NSArray *pageType;
-@property (strong, nonatomic) NSString *currentPageType;
-
-@end

+ 0 - 223
iOSClient/Offline/CCOfflineContainer.m

@@ -1,223 +0,0 @@
-//
-//  CCOfflineContainer.m
-//  Crypto Cloud Technology Nextcloud
-//
-//  Created by Marino Faggiana on 16/01/17.
-//  Copyright (c) 2014 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 "CCOfflineContainer.h"
-
-#import "CCOfflinePageContent.h"
-#import "AppDelegate.h"
-#import "CCSynchronize.h"
-
-#ifdef CUSTOM_BUILD
-    #import "CustomSwift.h"
-#else
-    #import "Nextcloud-Swift.h"
-#endif
-
-#pragma GCC diagnostic ignored "-Wundeclared-selector"
-
-@interface CCOfflineContainer ()
-{
-    UIPageControl *pageControl;
-}
-
-@end
-
-@implementation CCOfflineContainer
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== Init =====
-#pragma --------------------------------------------------------------------------------------------
-
-- (id)initWithCoder:(NSCoder *)aDecoder
-{
-    if (self = [super initWithCoder:aDecoder])  {
-        
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(triggerProgressTask:) name:@"NotificationProgressTask" object:nil];
-        
-        app.activeOffline = self;
-    }
-    return self;
-}
-
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== View =====
-#pragma --------------------------------------------------------------------------------------------
-
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-    
-    // Create data model
-
-    _pageType = @[k_pageOfflineFavorites, k_pageOfflineLocal];
-    
-    _currentPageType = k_pageOfflineFavorites;
-    self.title = NSLocalizedString(@"_favorites_", nil);
-    
-    // Create page view controller
-    self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"OfflinePageViewController"];
-    self.pageViewController.dataSource = self;
-    self.pageViewController.delegate = self;
-    
-    CCOfflinePageContent *startingViewController = [self viewControllerAtIndex:0];
-    NSArray *viewControllers = @[startingViewController];
-    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
-
-    // Change the size of page view controller
-    self.pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
-    
-    [self addChildViewController:_pageViewController];
-    [self.view addSubview:_pageViewController.view];
-    [self.pageViewController didMoveToParentViewController:self];
-    
-    /*
-    // Enable swipe gesture only for page controller
-    for (UIScrollView *view in self.pageViewController.view.subviews) {
-        if ([view isKindOfClass:[UIScrollView class]]) {
-            view.scrollEnabled = NO;
-        }
-    }
-    */
-}
-
-// Apparirà
-- (void)viewWillAppear:(BOOL)animated
-{
-    [super viewWillAppear:animated];
-    
-    // Color
-    [CCAspect aspectNavigationControllerBar:self.navigationController.navigationBar encrypted:NO online:[app.reachability isReachable] hidden:NO];
-    [CCAspect aspectTabBar:self.tabBarController.tabBar hidden:NO];
-    
-    // Plus Button
-    [app plusButtonVisibile:true];
-}
-
-- (void)triggerProgressTask:(NSNotification *)notification
-{
-    NSDictionary *dict = notification.userInfo;
-    float progress = [[dict valueForKey:@"progress"] floatValue];
-    
-    if (progress == 0)
-        [self.navigationController cancelCCProgress];
-    else
-        [self.navigationController setCCProgressPercentage:progress*100 andTintColor:COLOR_NAVIGATIONBAR_PROGRESS];
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== Page  =====
-#pragma --------------------------------------------------------------------------------------------
-
-- (CCOfflinePageContent *)viewControllerAtIndex:(NSUInteger)index
-{
-    if (([self.pageType count] == 0) || (index >= [self.pageType count])) {
-        return nil;
-    }
-    
-    // Create a new view controller and pass suitable data.
-    CCOfflinePageContent *pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"OfflinePageContent"];
-    
-    pageContentViewController.pageIndex = index;
-    pageContentViewController.pageType = self.pageType[index];
-    
-    return pageContentViewController;
-}
-
-- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
-{
-    NSUInteger index = ((CCOfflinePageContent*) viewController).pageIndex;
-    
-    if ((index == 0) || (index == NSNotFound)) {
-        return nil;
-    }
-    
-    index--;
-    return [self viewControllerAtIndex:index];
-}
-
-- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
-{
-    NSUInteger index = ((CCOfflinePageContent*) viewController).pageIndex;
-    
-    if (index == NSNotFound) {
-        return nil;
-    }
-    
-    index++;
-    if (index == [self.pageType count]) {
-        return nil;
-    }
-    return [self viewControllerAtIndex:index];
-}
-
-- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
-{
-    return [self.pageType count];
-}
-
-- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
-{
-    return 0;
-}
-
-/*
-- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray<UIViewController *> *)pendingViewControllers
-{
-}
-*/
-
-- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray<UIViewController *> *)previousViewControllers transitionCompleted:(BOOL)completed
-{
-    CCOfflinePageContent *vc = [self.pageViewController.viewControllers lastObject];
-    _currentPageType = vc.pageType;
-
-    if ([_currentPageType isEqualToString:k_pageOfflineFavorites]) {
-        
-        self.title = NSLocalizedString(@"_favorites_", nil);
-        
-        UITabBarItem *item = [self.tabBarController.tabBar.items objectAtIndex: k_tabBarApplicationIndexOffline];
-        item.selectedImage = [UIImage imageNamed:image_tabBarFavorite];
-        item.image = [UIImage imageNamed:image_tabBarFavorite];
-    }
-
-    if ([_currentPageType isEqualToString:k_pageOfflineOffline]) {
-        
-        self.title = NSLocalizedString(@"_offline_", nil);
-        
-        UITabBarItem *item = [self.tabBarController.tabBar.items objectAtIndex: k_tabBarApplicationIndexOffline];
-        item.selectedImage = [UIImage imageNamed:image_tabBarOffline];
-        item.image = [UIImage imageNamed:image_tabBarOffline];
-    }
-    
-    if ([_currentPageType isEqualToString:k_pageOfflineLocal]) {
-        
-        self.title = NSLocalizedString(@"_local_storage_", nil);
-        
-        UITabBarItem *item = [self.tabBarController.tabBar.items objectAtIndex: k_tabBarApplicationIndexOffline];
-        item.selectedImage = [UIImage imageNamed:image_tabBarLocal];
-        item.image = [UIImage imageNamed:image_tabBarLocal];
-    }
-}
-
-@end

+ 0 - 61
iOSClient/Offline/CCOfflinePageContent.h

@@ -1,61 +0,0 @@
-//
-//  CCOfflinePageContent.h
-//  Crypto Cloud Technology Nextcloud
-//
-//  Created by Marino Faggiana on 16/01/17.
-//  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 "CCDetail.h"
-#import "UIScrollView+EmptyDataSet.h"
-#import "TWMessageBarManager.h"
-#import "AHKActionSheet.h"
-#import "CCCellOffline.h"
-#import "CCUtility.h"
-#import "CCCoreData.h"
-#import "CCMain.h"
-#import "CCGraphics.h"
-#import "CCAccountWeb.h"
-#import "CCBancomat.h"
-#import "CCCartaDiCredito.h"
-#import "CCCartaIdentita.h"
-#import "CCContoCorrente.h"
-#import "CCNote.h"
-#import "CCPassaporto.h"
-#import "CCPatenteGuida.h"
-
-@interface CCOfflinePageContent : UIViewController <UITableViewDataSource, UITableViewDelegate, UIDocumentInteractionControllerDelegate, UIActionSheetDelegate, DZNEmptyDataSetSource, DZNEmptyDataSetDelegate, CCAccountWebDelegate, CCBancomatDelegate, CCCartaDiCreditoDelegate, CCCartaIdentitaDelegate, CCContoCorrenteDelegate, CCNoteDelegate, CCPassaportoDelegate, CCPatenteGuidaDelegate>
-
-@property NSUInteger pageIndex;
-@property (nonatomic, strong) NSString *pageType;
-
-@property (nonatomic, weak) IBOutlet UITableView *tableView;
-
-@property (nonatomic, strong) CCMetadata *metadata;
-@property (nonatomic, strong) NSString *serverUrl;
-@property (nonatomic, strong) NSString *titleViewControl;
-
-@property (nonatomic, weak) CCDetail *detailViewController;
-@property (nonatomic, strong) UIDocumentInteractionController *docController;
-
-- (void)reloadDatasource;
-- (void)readFolderWithForced:(BOOL)forced serverUrl:(NSString *)serverUrl;
-
-@end

+ 0 - 858
iOSClient/Offline/CCOfflinePageContent.m

@@ -1,858 +0,0 @@
-//
-//  CCOfflinePageContent.m
-//  Crypto Cloud Technology Nextcloud
-//
-//  Created by Marino Faggiana on 16/01/17.
-//  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 "CCOfflinePageContent.h"
-
-#import "AppDelegate.h"
-
-#ifdef CUSTOM_BUILD
-    #import "CustomSwift.h"
-#else
-    #import "Nextcloud-Swift.h"
-#endif
-
-@interface CCOfflinePageContent () <CCActionsDeleteDelegate, CCActionsSettingFavoriteDelegate>
-{
-    NSArray *dataSource;
-    BOOL _reloadDataSource;
-}
-@end
-
-@implementation CCOfflinePageContent
-
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-    
-    // Custom Cell
-    [self.tableView registerNib:[UINib nibWithNibName:@"CCCellOffline" bundle:nil] forCellReuseIdentifier:@"OfflineCell"];
-
-    // dataSource
-    dataSource = [NSMutableArray new];
-    
-    // Metadata
-    _metadata = [CCMetadata new];
-    
-    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 1)];
-    self.tableView.separatorColor = COLOR_SEPARATOR_TABLE;
-    self.tableView.emptyDataSetDelegate = self;
-    self.tableView.emptyDataSetSource = self;
-    self.tableView.allowsMultipleSelectionDuringEditing = NO;
-    
-    // calculate _serverUrl
-    if ([self.pageType isEqualToString:k_pageOfflineFavorites] && !_serverUrl)
-        _serverUrl = nil;
-    
-    if ([self.pageType isEqualToString:k_pageOfflineOffline] && !_serverUrl)
-        _serverUrl = nil;
-    
-    if ([self.pageType isEqualToString:k_pageOfflineLocal] && !_serverUrl)
-        _serverUrl = [CCUtility getDirectoryLocal];
-    
-    // Title & color
-    self.title = _titleViewControl;
-}
-
-// Apparirà
-- (void)viewWillAppear:(BOOL)animated
-{
-    [super viewWillAppear:animated];
-    
-    // Color
-    [CCAspect aspectNavigationControllerBar:self.navigationController.navigationBar encrypted:NO online:[app.reachability isReachable] hidden:NO];
-    [CCAspect aspectTabBar:self.tabBarController.tabBar hidden:NO];
-    
-    // Plus Button
-    [app plusButtonVisibile:true];
-    
-    [self reloadDatasource];
-}
-
-// E' arrivato
-- (void)viewDidAppear:(BOOL)animated
-{
-    [super viewDidAppear:animated];
-        
-    // update Badge
-    [app updateApplicationIconBadgeNumber];
-}
-
-- (void)didReceiveMemoryWarning {
-    [super didReceiveMemoryWarning];
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ==== DZNEmptyDataSetSource ====
-#pragma --------------------------------------------------------------------------------------------
-
-- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView
-{
-    // only for root
-    if (!_serverUrl || [_serverUrl isEqualToString:[CCUtility getDirectoryLocal]])
-        return YES;
-    else
-        return NO;
-}
-
-- (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView
-{
-    return 0.0f;
-}
-
-- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView
-{
-    return - self.navigationController.navigationBar.frame.size.height;
-}
-
-- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView
-{
-    return [UIColor whiteColor];
-}
-
-- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView
-{
-    return [UIImage imageNamed:image_brandBackgroundLite];
-}
-
-- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView
-{
-    NSString *text;
-    
-    if ([self.pageType isEqualToString:k_pageOfflineFavorites] || [self.pageType isEqualToString:k_pageOfflineOffline])
-        text = [NSString stringWithFormat:@"%@", @""];
-    
-    if ([self.pageType isEqualToString:k_pageOfflineLocal])
-        text = [NSString stringWithFormat:@"%@", @""];
-    
-    NSDictionary *attributes = @{NSFontAttributeName:[UIFont boldSystemFontOfSize:20.0f], NSForegroundColorAttributeName:COLOR_BRAND};
-    
-    return [[NSAttributedString alloc] initWithString:text attributes:attributes];
-}
-
-- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView
-{
-    NSString *text;
-    
-    if ([self.pageType isEqualToString:k_pageOfflineFavorites])
-        text = [NSString stringWithFormat:@"\n%@", NSLocalizedString(@"_tutorial_favorite_view_", nil)];
-    
-    if ([self.pageType isEqualToString:k_pageOfflineOffline])
-        text = [NSString stringWithFormat:@"\n%@", NSLocalizedString(@"_tutorial_offline_view_", nil)];
-        
-    if ([self.pageType isEqualToString:k_pageOfflineLocal])
-        text = [NSString stringWithFormat:@"\n%@", NSLocalizedString(@"_tutorial_local_view_", nil)];
-    
-    NSMutableParagraphStyle *paragraph = [NSMutableParagraphStyle new];
-    paragraph.lineBreakMode = NSLineBreakByWordWrapping;
-    paragraph.alignment = NSTextAlignmentCenter;
-    
-    NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:14.0], NSForegroundColorAttributeName: [UIColor lightGrayColor], NSParagraphStyleAttributeName: paragraph};
-    
-    return [[NSAttributedString alloc] initWithString:text attributes:attributes];
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== UIDocumentInteractionController <delegate> =====
-#pragma --------------------------------------------------------------------------------------------
-
-- (void)documentInteractionControllerDidDismissOptionsMenu:(UIDocumentInteractionController *)controller
-{
-    // evitiamo il rimando della eventuale photo e/o video
-    if ([CCCoreData getCameraUploadActiveAccount:app.activeAccount]) {
-        
-        [CCCoreData setCameraUploadDatePhoto:[NSDate date]];
-        [CCCoreData setCameraUploadDateVideo:[NSDate date]];
-    }
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== Delete <delegate> =====
-#pragma--------------------------------------------------------------------------------------------
-
-- (void)deleteFileOrFolderFailure:(CCMetadataNet *)metadataNet message:(NSString *)message errorCode:(NSInteger)errorCode
-{
-    NSLog(@"[LOG] Delete error %@", message);
-}
-
-- (void)deleteFileOrFolderSuccess:(CCMetadataNet *)metadataNet
-{
-    [self reloadDatasource];
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== Favorite <delegate> =====
-#pragma--------------------------------------------------------------------------------------------
-
-- (void)settingFavoriteFailure:(CCMetadataNet *)metadataNet message:(NSString *)message errorCode:(NSInteger)errorCode
-{
-    NSLog(@"[LOG] Remove Favorite error %@", message);
-}
-
-- (void)settingFavoriteSuccess:(CCMetadataNet *)metadataNet
-{
-    [CCCoreData setMetadataFavoriteFileID:metadataNet.fileID favorite:[metadataNet.options boolValue] activeAccount:app.activeAccount context:nil];
- 
-    [self reloadDatasource];
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ==== Download Thumbnail <Delegate> ====
-#pragma --------------------------------------------------------------------------------------------
-
-- (void)downloadThumbnailSuccess:(CCMetadataNet *)metadataNet
-{
-    // i am in Favorites
-    if ([_pageType isEqualToString:k_pageOfflineFavorites] || [_pageType isEqualToString:k_pageOfflineOffline])
-        [self reloadDatasource];
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ==== Download <Delegate> ====
-#pragma --------------------------------------------------------------------------------------------
-
-- (void)downloadFileFailure:(NSString *)fileID serverUrl:(NSString *)serverUrl selector:(NSString *)selector message:(NSString *)message errorCode:(NSInteger)errorCode
-{    
-    [app messageNotification:@"_download_file_" description:message visible:YES delay:k_dismissAfterSecond type:TWMessageBarMessageTypeError];
-    
-    [app updateApplicationIconBadgeNumber];
-}
-
-- (void)downloadFileSuccess:(NSString *)fileID serverUrl:(NSString *)serverUrl selector:(NSString *)selector selectorPost:(NSString *)selectorPost
-{
-    _metadata = [CCCoreData getMetadataWithPreficate:[NSPredicate predicateWithFormat:@"(fileID == %@) AND (account == %@)", fileID, app.activeAccount] context:nil];
-    
-    // File exists
-    if ([self shouldPerformSegue])
-        [self performSegueWithIdentifier:@"segueDetail" sender:self];
-    
-    [app updateApplicationIconBadgeNumber];
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== menu =====
-#pragma--------------------------------------------------------------------------------------------
-
-- (void)openModel:(CCMetadata *)metadata
-{
-    UIViewController *viewController;
-    BOOL isLocal = NO;
-    NSString *serverUrl = [CCCoreData getServerUrlFromDirectoryID:_metadata.directoryID activeAccount:app.activeAccount];
-    
-    if ([self.pageType isEqualToString:k_pageOfflineLocal])
-        isLocal = YES;
-    
-    if ([metadata.model isEqualToString:@"cartadicredito"])
-        viewController = [[CCCartaDiCredito alloc] initWithDelegate:self fileName:metadata.fileName uuid:metadata.uuid fileID:metadata.fileID isLocal:isLocal serverUrl:serverUrl];
-    
-    if ([metadata.model isEqualToString:@"bancomat"])
-        viewController = [[CCBancomat alloc] initWithDelegate:self fileName:metadata.fileName uuid:metadata.uuid fileID:metadata.fileID isLocal:isLocal serverUrl:serverUrl];
-    
-    if ([metadata.model isEqualToString:@"contocorrente"])
-        viewController = [[CCContoCorrente alloc] initWithDelegate:self fileName:metadata.fileName uuid:metadata.uuid fileID:metadata.fileID isLocal:isLocal serverUrl:serverUrl];
-    
-    if ([metadata.model isEqualToString:@"accountweb"])
-        viewController = [[CCAccountWeb alloc] initWithDelegate:self fileName:metadata.fileName uuid:metadata.uuid fileID:metadata.fileID isLocal:isLocal serverUrl:serverUrl];
-    
-    if ([metadata.model isEqualToString:@"patenteguida"])
-        viewController = [[CCPatenteGuida alloc] initWithDelegate:self fileName:metadata.fileName uuid:metadata.uuid fileID:metadata.fileID isLocal:isLocal serverUrl:serverUrl];
-    
-    if ([metadata.model isEqualToString:@"cartaidentita"])
-        viewController = [[CCCartaIdentita alloc] initWithDelegate:self fileName:metadata.fileName uuid:metadata.uuid fileID:metadata.fileID isLocal:isLocal serverUrl:serverUrl];
-    
-    if ([metadata.model isEqualToString:@"passaporto"])
-        viewController = [[CCPassaporto alloc] initWithDelegate:self fileName:metadata.fileName uuid:metadata.uuid fileID:metadata.fileID isLocal:isLocal serverUrl:serverUrl];
-    
-    if ([metadata.model isEqualToString:@"note"]) {
-        
-        viewController = [[CCNote alloc] initWithDelegate:self fileName:metadata.fileName uuid:metadata.uuid fileID:metadata.fileID isLocal:isLocal serverUrl:serverUrl];
-        
-        UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
-        
-        [self presentViewController:navigationController animated:YES completion:nil];
-        
-    } else {
-        
-        UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
-        
-        [navigationController setModalPresentationStyle:UIModalPresentationFormSheet];
-        
-        [self presentViewController:navigationController animated:YES completion:nil];
-    }
-}
-
-- (void)openWith:(CCMetadata *)metadata
-{
-    NSString *fileNamePath;
-    
-    if ([_pageType isEqualToString:k_pageOfflineFavorites] || [_pageType isEqualToString:k_pageOfflineOffline])
-        fileNamePath = [NSString stringWithFormat:@"%@/%@", app.directoryUser, metadata.fileID];
-    
-    if ([_pageType isEqualToString:k_pageOfflineLocal])
-        fileNamePath = [NSString stringWithFormat:@"%@/%@", _serverUrl, metadata.fileNameData];
-        
-    if ([[NSFileManager defaultManager] fileExistsAtPath:fileNamePath]) {
-        
-        [[NSFileManager defaultManager] removeItemAtPath:[NSTemporaryDirectory() stringByAppendingString:metadata.fileNamePrint] error:nil];
-        [[NSFileManager defaultManager] linkItemAtPath:fileNamePath toPath:[NSTemporaryDirectory() stringByAppendingString:metadata.fileNamePrint] error:nil];
-        
-        NSURL *url = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingString:metadata.fileNamePrint]];
-        
-        _docController = [UIDocumentInteractionController interactionControllerWithURL:url];
-        _docController.delegate = self;
-        
-        [_docController presentOptionsMenuFromRect:self.view.frame inView:self.view animated:YES];
-    }
-}
-
-- (void)requestDeleteMetadata:(CCMetadata *)metadata indexPath:(NSIndexPath *)indexPath
-{
-    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
-        
-    [alertController addAction: [UIAlertAction actionWithTitle:NSLocalizedString(@"_delete_", nil) style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {
-                                                               
-        if ([_pageType isEqualToString:k_pageOfflineFavorites] || [_pageType isEqualToString:k_pageOfflineOffline]) {
-                                                                   
-            [[CCActions sharedInstance] deleteFileOrFolder:metadata delegate:self];
-        }
-                                                               
-        if ([_pageType isEqualToString:k_pageOfflineLocal]) {
-                                                                   
-            NSString *fileNamePath = [NSString stringWithFormat:@"%@/%@", _serverUrl, metadata.fileNameData];
-            NSString *iconPath = [NSString stringWithFormat:@"%@/.%@.ico", _serverUrl, metadata.fileNameData];
-                                                                   
-            [[NSFileManager defaultManager] removeItemAtPath:fileNamePath error:nil];
-            [[NSFileManager defaultManager] removeItemAtPath:iconPath error: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)cellButtonDownWasTapped:(id)sender
-{
-    CGPoint touchPoint = [sender convertPoint:CGPointZero toView:self.tableView];
-    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:touchPoint];
-    CCMetadata *metadata = [CCMetadata new];
-    UIImage *iconHeader;
-    
-    if ([_pageType isEqualToString:k_pageOfflineLocal]) {
-        
-        NSString *cameraFolderName = [CCCoreData getCameraUploadFolderNameActiveAccount:app.activeAccount];
-        NSString *cameraFolderPath = [CCCoreData getCameraUploadFolderPathActiveAccount:app.activeAccount activeUrl:app.activeUrl];
-        
-        metadata = [CCUtility insertFileSystemInMetadata:[dataSource objectAtIndex:indexPath.row] directory:_serverUrl activeAccount:app.activeAccount cameraFolderName:cameraFolderName cameraFolderPath:cameraFolderPath];
-        
-    } else {
-        
-        metadata = [dataSource objectAtIndex:indexPath.row];
-    }
-    
-    AHKActionSheet *actionSheet = [[AHKActionSheet alloc] initWithView:self.view title:nil];
-    
-    actionSheet.animationDuration = 0.2;
-    
-    actionSheet.blurRadius = 0.0f;
-    actionSheet.blurTintColor = [UIColor colorWithWhite:0.0f alpha:0.50f];
-    
-    actionSheet.buttonHeight = 50.0;
-    actionSheet.cancelButtonHeight = 50.0f;
-    actionSheet.separatorHeight = 5.0f;
-    
-    actionSheet.automaticallyTintButtonImages = @(NO);
-    
-    actionSheet.encryptedButtonTextAttributes = @{ NSFontAttributeName:[UIFont systemFontOfSize:16], NSForegroundColorAttributeName:COLOR_CRYPTOCLOUD };
-    actionSheet.buttonTextAttributes = @{ NSFontAttributeName:[UIFont systemFontOfSize:16], NSForegroundColorAttributeName:COLOR_TEXT_ANTHRACITE };
-    actionSheet.cancelButtonTextAttributes = @{ NSFontAttributeName:[UIFont systemFontOfSize:16], NSForegroundColorAttributeName:COLOR_BRAND };
-    actionSheet.disableButtonTextAttributes = @{ NSFontAttributeName:[UIFont systemFontOfSize:16], NSForegroundColorAttributeName:COLOR_TEXT_ANTHRACITE };
-    
-    actionSheet.separatorColor = COLOR_SEPARATOR_TABLE;
-    actionSheet.cancelButtonTitle = NSLocalizedString(@"_cancel_",nil);
-    
-    // assegnamo l'immagine anteprima se esiste, altrimenti metti quella standars
-    if ([[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithFormat:@"%@/%@.ico", app.directoryUser, metadata.fileID]])
-        iconHeader = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.ico", app.directoryUser, metadata.fileID]];
-    else
-        iconHeader = [UIImage imageNamed:metadata.iconName];
-    
-    [actionSheet addButtonWithTitle: metadata.fileNamePrint
-                              image: iconHeader
-                    backgroundColor: COLOR_TABBAR
-                             height: 50.0
-                               type: AHKActionSheetButtonTypeDisabled
-                            handler: nil
-    ];
-
-    // ONLY Root Favorites : Remove file/folder Favorites
-    if (_serverUrl == nil && [_pageType isEqualToString:k_pageOfflineFavorites]) {
-        
-        [actionSheet addButtonWithTitle:NSLocalizedString(@"_remove_favorites_", nil) image:[UIImage imageNamed:image_actionSheetOffline] backgroundColor:[UIColor whiteColor] height: 50.0 type:AHKActionSheetButtonTypeDefault handler:^(AHKActionSheet *as) {
-                                    
-            [self.tableView setEditing:NO animated:YES];
-            [[CCActions sharedInstance] settingFavorite:metadata favorite:NO delegate:self];
-        }];
-    }
-    
-    // ONLY Root Offline : Remove file/folder offline
-    if (_serverUrl == nil && [_pageType isEqualToString:k_pageOfflineOffline]) {
-        
-        [actionSheet addButtonWithTitle:NSLocalizedString(@"_remove_offline_", nil) image:[UIImage imageNamed:image_actionSheetOffline] backgroundColor:[UIColor whiteColor] height: 50.0 type:AHKActionSheetButtonTypeDefault handler:^(AHKActionSheet *as) {
-                                    
-            if (metadata.directory) {
-                                        
-                // remove tag offline for all folder/subfolder/file
-                NSString *relativeRoot = [CCCoreData getServerUrlFromDirectoryID:metadata.directoryID activeAccount:app.activeAccount];
-                NSString *dirServerUrl = [CCUtility stringAppendServerUrl:relativeRoot addFileName:metadata.fileNameData];
-                NSArray *directories = [CCCoreData getOfflineDirectoryActiveAccount:app.activeAccount];
-                                        
-                for (TableDirectory *directory in directories)
-                    if ([directory.serverUrl containsString:dirServerUrl]) {
-                        [CCCoreData setOfflineDirectoryServerUrl:directory.serverUrl offline:NO activeAccount:app.activeAccount];
-                        [CCCoreData removeOfflineAllFileFromServerUrl:directory.serverUrl activeAccount:app.activeAccount];
-                    }
-                                        
-            } else {
-                                        
-                [CCCoreData setOfflineLocalFileID:metadata.fileID offline:NO activeAccount:app.activeAccount];
-            }
-                                    
-            [self.tableView setEditing:NO animated:YES];
-                                    
-            [self reloadDatasource];
-        }];
-    }
-    
-    // Share
-    if (_metadata.cryptated == NO && app.hasServerShareSupport) {
-        
-        [actionSheet addButtonWithTitle:NSLocalizedString(@"_share_", nil)
-                                  image:[UIImage imageNamed:image_actionSheetShare]
-                        backgroundColor:[UIColor whiteColor]
-                                 height: 50.0
-                                   type:AHKActionSheetButtonTypeDefault
-                                handler:^(AHKActionSheet *as) {
-                                    
-                                    // close swipe
-                                    [self setEditing:NO animated:YES];
-                                    
-                                    [app.activeMain openWindowShare:metadata];
-                                }];
-    }
-
-    // NO Directory - NO Template
-    if (metadata.directory == NO && [metadata.type isEqualToString:k_metadataType_template] == NO) {
-        
-        [actionSheet addButtonWithTitle:NSLocalizedString(@"_open_in_", nil) image:[UIImage imageNamed:image_actionSheetOpenIn] backgroundColor:[UIColor whiteColor] height: 50.0 type:AHKActionSheetButtonTypeDefault handler:^(AHKActionSheet *as) {
-            
-            [self.tableView setEditing:NO animated:YES];
-            [self openWith:metadata];
-        }];
-    }
-    
-    [actionSheet addButtonWithTitle:NSLocalizedString(@"_delete_", nil) image:[UIImage imageNamed:image_delete] backgroundColor:[UIColor whiteColor] height: 50.0 type:AHKActionSheetButtonTypeDestructive handler:^(AHKActionSheet *as) {
-        
-        [self requestDeleteMetadata:metadata indexPath:indexPath];
-    }];
-
-    
-    [actionSheet show];
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ==== Table ====
-#pragma --------------------------------------------------------------------------------------------
-
-- (CCMetadata *)setSelfMetadataFromIndexPath:(NSIndexPath *)indexPath
-{
-    CCMetadata *metadata;
-    
-    if ([_pageType isEqualToString:k_pageOfflineFavorites] || [_pageType isEqualToString:k_pageOfflineOffline]) {
-        
-        NSManagedObject *record = [dataSource objectAtIndex:indexPath.row];
-        metadata = [CCCoreData getMetadataWithPreficate:[NSPredicate predicateWithFormat:@"(fileID == %@) AND (account == %@)", [record valueForKey:@"fileID"], app.activeAccount] context:nil];
-    }
-
-    if ([_pageType isEqualToString:k_pageOfflineLocal]) {
-        
-        NSString *cameraFolderName = [CCCoreData getCameraUploadFolderNameActiveAccount:app.activeAccount];
-        NSString *cameraFolderPath = [CCCoreData getCameraUploadFolderPathActiveAccount:app.activeAccount activeUrl:app.activeUrl];
-        
-        metadata = [CCUtility insertFileSystemInMetadata:[dataSource objectAtIndex:indexPath.row] directory:_serverUrl activeAccount:app.activeAccount cameraFolderName:cameraFolderName cameraFolderPath:cameraFolderPath];
-    }
-    
-    return metadata;
-}
-
-- (void)readFolderWithForced:(BOOL)forced serverUrl:(NSString *)serverUrl
-{
-    [self reloadDatasource];
-}
-
-- (void)reloadDatasource
-{
-    if ([_pageType isEqualToString:k_pageOfflineFavorites]) {
-        
-        NSMutableArray *metadatas = [NSMutableArray new];
-        NSArray *recordsTableMetadata ;
-        
-        if (!_serverUrl) {
-            
-            recordsTableMetadata = [CCCoreData  getTableMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (favorite == 1)", app.activeAccount] context:nil];
-            
-        } else {
-            
-            NSString *directoryID = [CCCoreData getDirectoryIDFromServerUrl:_serverUrl activeAccount:app.activeAccount];
-            recordsTableMetadata = [CCCoreData getTableMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (directoryID == %@)", app.activeAccount, directoryID] fieldOrder:[CCUtility getOrderSettings]  ascending:[CCUtility getAscendingSettings]];
-        }
-        
-        CCSectionDataSourceMetadata *sectionDataSource = [CCSectionMetadata creataDataSourseSectionMetadata:recordsTableMetadata listProgressMetadata:nil groupByField:nil replaceDateToExifDate:NO activeAccount:app.activeAccount];
-        
-        NSArray *fileIDs = [sectionDataSource.sectionArrayRow objectForKey:@"_none_"];
-        for (NSString *fileID in fileIDs)
-            [metadatas addObject:[sectionDataSource.allRecordsDataSource objectForKey:fileID]];
-        
-        dataSource = [NSArray arrayWithArray:metadatas];
-    }
-
-    if ([_pageType isEqualToString:k_pageOfflineOffline]) {
-        
-        NSMutableArray *metadatas = [NSMutableArray new];
-        NSArray *recordsTableMetadata ;
-        
-        if (!_serverUrl) {
-            
-            recordsTableMetadata = [CCCoreData getHomeOfflineActiveAccount:app.activeAccount directoryUser:app.directoryUser fieldOrder:[CCUtility getOrderSettings] ascending:[CCUtility getAscendingSettings]];
-            
-        } else {
-            
-            NSString *directoryID = [CCCoreData getDirectoryIDFromServerUrl:_serverUrl activeAccount:app.activeAccount];
-            recordsTableMetadata = [CCCoreData getTableMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (directoryID == %@)", app.activeAccount, directoryID] fieldOrder:[CCUtility getOrderSettings]  ascending:[CCUtility getAscendingSettings]];
-        }
-        
-        CCSectionDataSourceMetadata *sectionDataSource = [CCSectionMetadata creataDataSourseSectionMetadata:recordsTableMetadata listProgressMetadata:nil groupByField:nil replaceDateToExifDate:NO activeAccount:app.activeAccount];
-            
-        NSArray *fileIDs = [sectionDataSource.sectionArrayRow objectForKey:@"_none_"];
-        for (NSString *fileID in fileIDs)
-            [metadatas addObject:[sectionDataSource.allRecordsDataSource objectForKey:fileID]];
-            
-        dataSource = [NSArray arrayWithArray:metadatas];
-    }
-    
-    if ([_pageType isEqualToString:k_pageOfflineLocal]) {
-        
-        NSArray *subpaths = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:_serverUrl error:nil];
-        NSMutableArray *metadatas = [NSMutableArray new];
-        
-        for (NSString *subpath in subpaths)
-            if (![[subpath lastPathComponent] hasPrefix:@"."])
-                [metadatas addObject:subpath];
-        
-        dataSource = [NSArray arrayWithArray:metadatas];
-    }
-    
-    [self.tableView reloadData];
-}
-
-- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
-{
-    return 60;
-}
-
-- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
-{
-    return 1;
-}
-
-- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
-{
-    return [dataSource count];
-}
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
-{
-    CCCellOffline *cell = (CCCellOffline *)[tableView dequeueReusableCellWithIdentifier:@"OfflineCell" forIndexPath:indexPath];
-    CCMetadata *metadata;
-    
-    // separator
-    cell.separatorInset = UIEdgeInsetsMake(0.f, 60.f, 0.f, 0.f);
-    
-    // Initialize
-    cell.statusImageView.image = nil;
-    cell.offlineImageView.image = nil;
-    
-    // change color selection
-    UIView *selectionColor = [[UIView alloc] init];
-    selectionColor.backgroundColor = COLOR_SELECT_BACKGROUND;
-    cell.selectedBackgroundView = selectionColor;
-    
-    // i am in Favorites OR i am in Offline
-    if ([_pageType isEqualToString:k_pageOfflineFavorites] || [_pageType isEqualToString:k_pageOfflineOffline]) {
-        
-        metadata = [dataSource objectAtIndex:indexPath.row];
-        
-        cell.fileImageView.image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.ico", app.directoryUser, metadata.fileID]];
-        
-        if (_serverUrl == nil) {
-            
-            if ([_pageType isEqualToString:k_pageOfflineFavorites])
-                cell.offlineImageView.image = [UIImage imageNamed:image_favorite];
-            if ([_pageType isEqualToString:k_pageOfflineOffline])
-                cell.offlineImageView.image = [UIImage imageNamed:image_offline];
-        }
-        
-        if (cell.fileImageView.image == nil && metadata.thumbnailExists)
-            [[CCActions sharedInstance] downloadTumbnail:metadata delegate:self];
-    }
-
-    // i am in local
-    if ([_pageType isEqualToString:k_pageOfflineLocal]) {
-        
-        NSString *cameraFolderName = [CCCoreData getCameraUploadFolderNameActiveAccount:app.activeAccount];
-        NSString *cameraFolderPath = [CCCoreData getCameraUploadFolderPathActiveAccount:app.activeAccount activeUrl:app.activeUrl];
-        
-        metadata = [CCUtility insertFileSystemInMetadata:[dataSource objectAtIndex:indexPath.row] directory:_serverUrl activeAccount:app.activeAccount cameraFolderName:cameraFolderName cameraFolderPath:cameraFolderPath];
-        
-        cell.fileImageView.image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/.%@.ico", _serverUrl, metadata.fileNamePrint]];
-        
-        if (!cell.fileImageView.image) {
-            
-            UIImage *icon = [CCGraphics createNewImageFrom:metadata.fileID directoryUser:_serverUrl fileNameTo:metadata.fileID fileNamePrint:metadata.fileNamePrint size:@"m" imageForUpload:NO typeFile:metadata.typeFile writePreview:NO optimizedFileName:[CCUtility getOptimizedPhoto]];
-            
-            if (icon) {
-                [CCGraphics saveIcoWithFileID:metadata.fileNamePrint image:icon writeToFile:[NSString stringWithFormat:@"%@/.%@.ico", _serverUrl, metadata.fileNamePrint] copy:NO move:NO fromPath:nil toPath:nil];
-                cell.fileImageView.image = icon;
-            }
-        }
-    }
-    
-    // ButtonDown Tapped
-    [cell.buttonDown addTarget:self action:@selector(cellButtonDownWasTapped:) forControlEvents:UIControlEventTouchUpInside];
-    
-    // encrypted color
-    if (metadata.cryptated) {
-        cell.labelTitle.textColor = COLOR_CRYPTOCLOUD;
-    } else {
-        cell.labelTitle.textColor = [UIColor blackColor];
-    }
-    
-    // File name
-    cell.labelTitle.text = metadata.fileNamePrint;
-    cell.labelInfoFile.text = @"";
-    
-    // Immagine del file, se non c'è l'anteprima mettiamo quella standard
-    if (cell.fileImageView.image == nil)
-        cell.fileImageView.image = [UIImage imageNamed:metadata.iconName];
-    
-    // it's encrypted ???
-    if (metadata.cryptated && [metadata.type isEqualToString: k_metadataType_template] == NO)
-        cell.statusImageView.image = [UIImage imageNamed:image_lock];
-    
-    // text and length
-    if (metadata.directory) {
-        
-        cell.labelInfoFile.text = [CCUtility dateDiff:metadata.date];
-        cell.accessoryType = UITableViewCellAccessoryNone;
-        //cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
-          
-    } else {
-        
-        NSString *date = [CCUtility dateDiff:metadata.date];
-        NSString *length = [CCUtility transformedSize:metadata.size];
-        
-        if ([metadata.type isEqualToString: k_metadataType_template])
-            cell.labelInfoFile.text = [NSString stringWithFormat:@"%@", date];
-        
-        if ([metadata.type isEqualToString: k_metadataType_file] || [metadata.type isEqualToString: k_metadataType_local]) {
-            
-            BOOL fileExists = NO;
-            
-            if ([_pageType isEqualToString:k_pageOfflineLocal])
-                fileExists = [[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithFormat:@"%@/%@", _serverUrl, metadata.fileName]];
-            
-            if ([_pageType isEqualToString:k_pageOfflineFavorites] || [_pageType isEqualToString:k_pageOfflineOffline])
-                fileExists = [[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithFormat:@"%@/%@", app.directoryUser, metadata.fileID]];
-            
-            if (fileExists)
-                cell.labelInfoFile.text = [NSString stringWithFormat:@"%@ • %@", date, length];
-            else
-                cell.labelInfoFile.text = [NSString stringWithFormat:@"%@ ◦ %@", date, length];
-        }
-        
-        cell.accessoryType = UITableViewCellAccessoryNone;
-        
-    }
-    
-    return cell;
-}
-
-- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
-{
-    // deselect row
-    [tableView deselectRowAtIndexPath:indexPath animated:YES];
-    
-    _metadata = [self setSelfMetadataFromIndexPath:indexPath];
-    
-    // if is in download [do not touch]
-    if ([_metadata.session length] > 0 && [_metadata.session containsString:@"download"])
-        return;
-    
-    // File
-    if (([_metadata.type isEqualToString: k_metadataType_file] || [_metadata.type isEqualToString: k_metadataType_local]) && _metadata.directory == NO) {
-        
-        // i am in local
-        if ([_pageType isEqualToString:k_pageOfflineLocal]) {
-            
-            if ([self shouldPerformSegue])
-                [self performSegueWithIdentifier:@"segueDetail" sender:self];
-
-        } else {
-            
-            if ([[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithFormat:@"%@/%@", app.directoryUser, _metadata.fileID]]) {
-            
-                // File exists
-                if ([self shouldPerformSegue])
-                    [self performSegueWithIdentifier:@"segueDetail" sender:self];
-
-            } else {
-            
-                // File do not exists
-                NSString *serverUrl = [CCCoreData getServerUrlFromDirectoryID:_metadata.directoryID activeAccount:_metadata.account];
-
-                [[CCNetworking sharedNetworking] downloadFile:_metadata serverUrl:serverUrl downloadData:YES downloadPlist:NO selector:selectorLoadFileView selectorPost:nil session:k_download_session taskStatus:k_taskStatusResume delegate:self];
-            }
-        }
-    }
-    
-    // Model
-    if ([self.metadata.type isEqualToString: k_metadataType_template])
-        [self openModel:self.metadata];
-    
-    // Directory
-    if (_metadata.directory)
-        [self performSegueDirectoryWithControlPasscode];
-}
-
--(void)performSegueDirectoryWithControlPasscode
-{
-    CCOfflinePageContent *vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"OfflinePageContent"];
-    
-    NSString *serverUrl;
-    
-    if (([_pageType isEqualToString:k_pageOfflineFavorites] || [_pageType isEqualToString:k_pageOfflineOffline]) && !_serverUrl) {
-    
-        serverUrl = [CCCoreData getServerUrlFromDirectoryID:_metadata.directoryID activeAccount:app.activeAccount];
-        
-    } else {
-        
-        serverUrl = _serverUrl;
-    }
-        
-    vc.serverUrl = [CCUtility stringAppendServerUrl:serverUrl addFileName:_metadata.fileNameData];
-    vc.pageType = _pageType;
-    vc.titleViewControl = _metadata.fileNamePrint;
-    
-    [self.navigationController pushViewController:vc animated:YES];
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== Navigation ====
-#pragma --------------------------------------------------------------------------------------------
-
-- (BOOL)shouldPerformSegue
-{
-    // if i am in background -> exit
-    if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) return NO;
-    
-    // if i am not window -> exit
-    if (self.view.window == NO)
-        return NO;
-    
-    // Collapsed but i am in detail -> exit
-    if (self.splitViewController.isCollapsed)
-        if (self.detailViewController.isViewLoaded && self.detailViewController.view.window) return NO;
-    
-    // Video in run -> exit
-    if (self.detailViewController.photoBrowser.currentVideoPlayerViewController.isViewLoaded && self.detailViewController.photoBrowser.currentVideoPlayerViewController.view.window) return NO;
-    
-    return YES;
-}
-
--(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
-{
-    id viewController = segue.destinationViewController;
-    
-    if ([viewController isKindOfClass:[UINavigationController class]]) {
-        UINavigationController *nav = viewController;
-        _detailViewController = (CCDetail *)nav.topViewController;
-    } else {
-        _detailViewController = segue.destinationViewController;
-    }
-    
-    NSMutableArray *allRecordsDataSourceImagesVideos = [NSMutableArray new];
-    
-    if ([self.pageType isEqualToString:k_pageOfflineFavorites] || [self.pageType isEqualToString:k_pageOfflineOffline]) {
-        
-        for (CCMetadata *metadata in dataSource) {
-            if ([metadata.typeFile isEqualToString: k_metadataTypeFile_image] || [metadata.typeFile isEqualToString: k_metadataTypeFile_video])
-                [allRecordsDataSourceImagesVideos addObject:metadata];
-        }
-    }
-    
-    if ([self.pageType isEqualToString:k_pageOfflineLocal]) {
-        
-        NSString *cameraFolderName = [CCCoreData getCameraUploadFolderNameActiveAccount:app.activeAccount];
-        NSString *cameraFolderPath = [CCCoreData getCameraUploadFolderPathActiveAccount:app.activeAccount activeUrl:app.activeUrl];
-        
-        for (NSString *fileName in dataSource) {
-            
-            CCMetadata *metadata = [CCMetadata new];
-            metadata = [CCUtility insertFileSystemInMetadata:fileName directory:_serverUrl activeAccount:app.activeAccount cameraFolderName:cameraFolderName cameraFolderPath:cameraFolderPath];
-            
-            if ([metadata.typeFile isEqualToString: k_metadataTypeFile_image] || [metadata.typeFile isEqualToString: k_metadataTypeFile_video])
-                [allRecordsDataSourceImagesVideos addObject:metadata];
-        }
-        
-        _detailViewController.sourceDirectoryLocal = YES;
-    }
-    
-    _detailViewController.metadataDetail = _metadata;
-    _detailViewController.dateFilterQuery = nil;
-    _detailViewController.isCameraUpload = NO;
-    _detailViewController.dataSourceImagesVideos = allRecordsDataSourceImagesVideos;
-
-    
-    [_detailViewController setTitle:_metadata.fileNamePrint];
-}
-
-@end

+ 0 - 50
iOSClient/Offline/CCSynchronize.h

@@ -1,50 +0,0 @@
-//
-//  CCSynchronize.h
-//  Crypto Cloud Technology Nextcloud
-//
-//  Created by Marino Faggiana on 19/10/16.
-//  Copyright (c) 2016 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 <Foundation/Foundation.h>
-
-#import "CCMetadata.h"
-#import "CCHud.h"
-#import "CCCellMain.h"
-
-@interface CCSynchronize : NSObject
-
-@property (nonatomic, strong) CCHud *hud;
-
-+ (CCSynchronize *)sharedSynchronize;
-
-@property (nonatomic, strong) NSMutableOrderedSet *foldersInSynchronized;
-
-- (void)readListingFavorites;
-- (void)readOffline;
-
-- (void)addFavoriteFolder:(NSString *)serverUrl;
-- (void)addOfflineFolder:(NSString *)serverUrl;
-
-- (void)verifyChangeMedatas:(NSArray *)allRecordMetadatas serverUrl:(NSString *)serverUrl account:(NSString *)account withDownload:(BOOL)withDownload;
-
-- (BOOL)synchronizeFolderAnimationDirectory:(NSArray *)directory setGraphicsFolder:(BOOL)setGraphicsFolder;
-
-- (void)readFolderServerUrl:(NSString *)serverUrl directoryID:(NSString *)directoryID selector:(NSString *)selector;
-
-@end

+ 0 - 604
iOSClient/Offline/CCSynchronize.m

@@ -1,604 +0,0 @@
-//
-//  CCSynchronize.m
-//  Crypto Cloud Technology Nextcloud
-//
-//  Created by Marino Faggiana on 19/10/16.
-//  Copyright (c) 2016 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 "CCSynchronize.h"
-
-#import "AppDelegate.h"
-#import "CCCoreData.h"
-#import "CCMain.h"
-
-#ifdef CUSTOM_BUILD
-    #import "CustomSwift.h"
-#else
-    #import "Nextcloud-Swift.h"
-#endif
-
-
-@interface CCSynchronize () <CCActionsListingFavoritesDelegate>
-{
-    // local
-}
-@end
-
-@implementation CCSynchronize
-
-+ (CCSynchronize *)sharedSynchronize {
-    
-    static CCSynchronize *sharedSynchronize;
-    
-    @synchronized(self)
-    {
-        if (!sharedSynchronize) {
-            
-            sharedSynchronize = [CCSynchronize new];
-            
-            sharedSynchronize.foldersInSynchronized = [NSMutableOrderedSet new];
-        }
-        return sharedSynchronize;
-    }
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== Read Listing Favorites =====
-#pragma --------------------------------------------------------------------------------------------
-
-- (void)readListingFavorites
-{
-    // test
-    if (app.activeAccount.length == 0)
-        return;
-    
-    // verify is offline procedure is in progress selectorDownloadSynchronize
-    if ([[app verifyExistsInQueuesDownloadSelector:selectorDownloadSynchronize] count] > 0)
-        return;
-    
-    [[CCActions sharedInstance] listingFavorites:@"" delegate:self];
-}
-
-- (void)addFavoriteFolder:(NSString *)serverUrl
-{
-    NSString *directoryID = [CCCoreData getDirectoryIDFromServerUrl:serverUrl activeAccount:app.activeAccount];
-    NSString *selector;
-    CCMetadataNet *metadataNet = [[CCMetadataNet alloc] initWithAccount:app.activeAccount];
-    
-    metadataNet.action = actionReadFolder;
-    metadataNet.directoryID = directoryID;
-    metadataNet.priority = NSOperationQueuePriorityNormal;
-    
-    if ([CCUtility getFavoriteOffline])
-        selector = selectorReadFolderWithDownload;
-    else
-        selector = selectorReadFolder;
-    
-    metadataNet.selector = selector;
-    metadataNet.serverUrl = serverUrl;
-    
-    [app addNetworkingOperationQueue:app.netQueue delegate:self metadataNet:metadataNet];
-}
-
-- (void)listingFavoritesSuccess:(CCMetadataNet *)metadataNet metadatas:(NSArray *)metadatas
-{
-    // verify active user
-    TableAccount *record = [CCCoreData getActiveAccount];
-    
-    if (![record.account isEqualToString:metadataNet.account])
-        return;
-    
-    NSString *father = @"";
-    NSMutableArray *filesID = [NSMutableArray new];
-    
-    for (CCMetadata *metadata in metadatas) {
-        
-        // type of file
-        NSInteger typeFilename = [CCUtility getTypeFileName:metadata.fileName];
-        
-        // do not insert cryptated favorite file
-        if (typeFilename == k_metadataTypeFilenameCrypto || typeFilename == k_metadataTypeFilenamePlist)
-            continue;
-
-        // Delete Record NOT in session
-        [CCCoreData deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (directoryID == %@) AND (fileID = %@) AND ((session == NULL) OR (session == ''))", app.activeAccount, metadata.directoryID, metadata.fileID]];
-        
-        // end test, insert in CoreData
-        [CCCoreData addMetadata:metadata activeAccount:app.activeAccount activeUrl:app.activeUrl context:nil];
-        
-        // insert for test NOT favorite
-        [filesID addObject:metadata.fileID];
-        
-        // ---- Synchronized ----
-        
-        // Get ServerUrl
-        NSString* serverUrl = [CCCoreData getServerUrlFromDirectoryID:metadata.directoryID activeAccount:app.activeAccount];
-        serverUrl = [CCUtility stringAppendServerUrl:serverUrl addFileName:metadata.fileNameData];
-        
-        if (![serverUrl containsString:father]) {
-            
-            if (metadata.directory) {
-                
-                NSString *directoryID = [CCCoreData getDirectoryIDFromServerUrl:serverUrl activeAccount:app.activeAccount];
-                NSString *selector;
-                
-                if ([CCUtility getFavoriteOffline])
-                    selector = selectorReadFolderWithDownload;
-                else
-                    selector = selectorReadFolder;
-                
-                [self readFolderServerUrl:serverUrl directoryID:directoryID selector:selector];
-                
-            } else {
-                
-                if ([CCUtility getFavoriteOffline])
-                    [self readFile:metadata withDownload:YES];
-                else
-                    [self readFile:metadata withDownload:NO];
-            }
-            
-            father = serverUrl;
-        }
-    }
-    
-    // Verify remove favorite
-    NSArray *allRecordFavorite = [CCCoreData getTableMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (favorite == 1)", app.activeAccount] context:nil];
-    
-    for (TableMetadata *tableMetadata in allRecordFavorite)
-        if (![filesID containsObject:tableMetadata.fileID])
-            [CCCoreData setMetadataFavoriteFileID:tableMetadata.fileID favorite:NO activeAccount:app.activeAccount context:nil];
-    
-    [[NSNotificationCenter defaultCenter] postNotificationName:@"clearDateReadDataSource" object:nil];
-}
-
-- (void)listingFavoritesFailure:(CCMetadataNet *)metadataNet message:(NSString *)message errorCode:(NSInteger)errorCode
-{
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== Read Offline =====
-#pragma --------------------------------------------------------------------------------------------
-
-- (void)readOffline
-{
-    // test
-    if (app.activeAccount.length == 0)
-        return;
-    
-    // verify is offline procedure is in progress selectorDownloadSynchronize
-    if ([[app verifyExistsInQueuesDownloadSelector:selectorDownloadSynchronize] count] > 0)
-        return;
-    
-    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
-        
-        NSString *father = @"";
-        NSArray *directories = [CCCoreData getOfflineDirectoryActiveAccount:app.activeAccount];
-
-        for (TableDirectory *directory in directories) {
-        
-            if (![directory.serverUrl containsString:father]) {
-             
-                father = directory.serverUrl;
-                [self readFolderServerUrl:directory.serverUrl directoryID:directory.directoryID selector:selectorReadFolder];
-            }
-        }
-        
-        NSArray *metadatas = [CCCoreData getOfflineLocalFileActiveAccount:app.activeAccount directoryUser:app.directoryUser];
-        
-        for (CCMetadata *metadata in metadatas) {
-            
-            [self readFile:metadata withDownload:YES];
-        }
-    });
-}
-
-//
-// Add Folder offline
-//
-- (void)addOfflineFolder:(NSString *)serverUrl
-{
-    NSString *directoryID = [CCCoreData getDirectoryIDFromServerUrl:serverUrl activeAccount:app.activeAccount];
-    
-    // Set offline directory
-    [CCCoreData setOfflineDirectoryServerUrl:serverUrl offline:YES activeAccount:app.activeAccount];
-    
-    CCMetadataNet *metadataNet = [[CCMetadataNet alloc] initWithAccount:app.activeAccount];
-    
-    metadataNet.action = actionReadFolder;
-    metadataNet.directoryID = directoryID;
-    metadataNet.priority = NSOperationQueuePriorityNormal;
-    metadataNet.selector = selectorReadFolder;
-    metadataNet.serverUrl = serverUrl;
-    
-    [app addNetworkingOperationQueue:app.netQueue delegate:self metadataNet:metadataNet];    
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== Read Folder =====
-#pragma --------------------------------------------------------------------------------------------
-
-// MULTI THREAD
-- (void)readFolderServerUrl:(NSString *)serverUrl directoryID:(NSString *)directoryID selector:(NSString *)selector
-{
-    CCMetadataNet *metadataNet = [[CCMetadataNet alloc] initWithAccount:app.activeAccount];
-    
-    metadataNet.action = actionReadFolder;
-    metadataNet.directoryID = directoryID;
-    metadataNet.priority = NSOperationQueuePriorityNormal;
-    metadataNet.selector = selector;
-    metadataNet.serverUrl = serverUrl;
-    
-    dispatch_async(dispatch_get_main_queue(), ^{
-        [app addNetworkingOperationQueue:app.netQueue delegate:self metadataNet:metadataNet];
-    });
-    
-    NSLog(@"[LOG] %@ directory : %@", selector, serverUrl);
-}
-
-- (void)readFolderFailure:(CCMetadataNet *)metadataNet message:(NSString *)message errorCode:(NSInteger)errorCode
-{
-    // verify active user
-    TableAccount *recordAccount = [CCCoreData getActiveAccount];
-    
-    // Folder not present, remove it
-    if (errorCode == 404 && [recordAccount.account isEqualToString:metadataNet.account])
-        [CCCoreData deleteDirectoryAndSubDirectory:metadataNet.serverUrl activeAccount:app.activeAccount];
-}
-
-// MULTI THREAD
-- (void)readFolderSuccess:(CCMetadataNet *)metadataNet permissions:(NSString *)permissions etag:(NSString *)etag metadatas:(NSArray *)metadatas
-{
-    TableAccount *recordAccount = [CCCoreData getActiveAccount];
-    
-    __block NSMutableArray *metadatasForVerifyChange = [NSMutableArray new];
-    
-    if ([recordAccount.account isEqualToString:metadataNet.account] == NO)
-        return;
-    
-    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
-        
-        NSArray *recordsInSessions = [CCCoreData getTableMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (directoryID == %@) AND (session != NULL) AND (session != '')", app.activeAccount, metadataNet.directoryID] context:nil];
-        
-        // ----- Test : (DELETE) -----
-        
-        NSMutableArray *metadatasNotPresents = [[NSMutableArray alloc] init];
-        NSArray *tableMetadatas = [CCCoreData getTableMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (directoryID == %@) AND ((session == NULL) OR (session == ''))", app.activeAccount, metadataNet.directoryID] context:nil];
-        
-        for (TableMetadata *tableMetadata in tableMetadatas) {
-            
-            // reject cryptated
-            if (tableMetadata.cryptated)
-                continue;
-            
-            BOOL fileIDFound = NO;
-            
-            for (CCMetadata *metadata in metadatas) {
-                
-                if ([tableMetadata.fileID isEqualToString:metadata.fileID]) {
-                    fileIDFound = YES;
-                    break;
-                }
-            }
-            
-            if (!fileIDFound)
-                [metadatasNotPresents addObject:[CCCoreData insertEntityInMetadata:tableMetadata]];
-        }
-        
-        dispatch_async(dispatch_get_main_queue(), ^{
-            
-            // delete metadata not present
-            for (CCMetadata *metadata in metadatasNotPresents) {
-                
-                [CCCoreData deleteFile:metadata serverUrl:metadataNet.serverUrl directoryUser:app.directoryUser activeAccount:app.activeAccount];
-            }
-            
-            if ([metadatasNotPresents count] > 0)
-                [app.activeMain reloadDatasource:metadataNet.serverUrl fileID:nil selector:nil];
-        });
-        
-        // ----- Test : (MODIFY) -----
-        
-        for (CCMetadata *metadata in metadatas) {
-            
-            // reject cryptated
-            if (metadata.cryptated)
-                continue;
-            
-            // dir recursive
-            if (metadata.directory) {
-                
-                NSString *serverUrl = [CCUtility stringAppendServerUrl:metadataNet.serverUrl addFileName:metadata.fileNameData];
-                NSString *directoryID = [CCCoreData getDirectoryIDFromServerUrl:serverUrl activeAccount:app.activeAccount];
-                    
-                // Verify if do not exists this Metadata
-                if (![CCCoreData getTableMetadataWithPreficate:[NSPredicate predicateWithFormat:@"(account == %@) AND (fileID == %@)", metadataNet.account, metadata.fileID]]) {
-                    
-                    dispatch_async(dispatch_get_main_queue(), ^{
-                        [CCCoreData addMetadata:metadata activeAccount:app.activeAccount activeUrl:app.activeUrl context:nil];
-                    });
-                }
-              
-                // Load if different etag
-                
-                TableDirectory *tableDirectory = [CCCoreData getTableDirectoryWithPreficate:[NSPredicate predicateWithFormat:@"(account == %@) AND (serverUrl == %@)", metadataNet.account, serverUrl]];
-                
-                if (![tableDirectory.rev isEqualToString:metadata.rev]) {
-                    
-                    [self readFolderServerUrl:serverUrl directoryID:directoryID selector:metadataNet.selector];
-                    [CCCoreData updateDirectoryEtagServerUrl:serverUrl etag:metadata.rev activeAccount:metadataNet.account];
-                }
-                
-            } else {
-            
-                if ([metadataNet.selector isEqualToString:selectorReadFolderWithDownload]) {
-                    
-                    // It's in session
-                    BOOL recordInSession = NO;
-                    for (TableMetadata *record in recordsInSessions) {
-                        if ([record.fileID isEqualToString:metadata.fileID]) {
-                            recordInSession = YES;
-                            break;
-                        }
-                    }
-                    
-                    if (recordInSession)
-                        continue;
-            
-                    // Ohhhh INSERT
-                    [metadatasForVerifyChange addObject:metadata];
-                }
-                
-                if ([metadataNet.selector isEqualToString:selectorReadFolder]) {
-                    
-                    // Verify if do not exists this Metadata
-                    if (![CCCoreData getTableMetadataWithPreficate:[NSPredicate predicateWithFormat:@"(account == %@) AND (fileID == %@)", metadataNet.account, metadata.fileID]]) {
-                    
-                        dispatch_async(dispatch_get_main_queue(), ^{
-                            [CCCoreData addMetadata:metadata activeAccount:metadataNet.account activeUrl:metadataNet.serverUrl context:nil];
-                        });
-                    }
-                }
-            }
-        }
-        
-        if ([metadatasForVerifyChange count] > 0)
-            [self verifyChangeMedatas:metadatasForVerifyChange serverUrl:metadataNet.serverUrl account:metadataNet.account withDownload:YES];
-    });
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== Read File =====
-#pragma --------------------------------------------------------------------------------------------
-
-- (void)readFile:(CCMetadata *)metadata withDownload:(BOOL)withDownload
-{
-    NSString *serverUrl = [CCCoreData getServerUrlFromDirectoryID:metadata.directoryID activeAccount:app.activeAccount];
-    if (serverUrl == nil) return;
-        
-    CCMetadataNet *metadataNet = [[CCMetadataNet alloc] initWithAccount:app.activeAccount];
-        
-    metadataNet.action = actionReadFile;
-    metadataNet.fileID = metadata.fileID;
-    metadataNet.fileName = metadata.fileName;
-    metadataNet.fileNamePrint = metadata.fileNamePrint;
-    metadataNet.options = [NSNumber numberWithBool:withDownload] ;
-    metadataNet.priority = NSOperationQueuePriorityLow;
-    metadataNet.selector = selectorReadFile;
-    metadataNet.serverUrl = serverUrl;
-    
-    [app addNetworkingOperationQueue:app.netQueue delegate:self metadataNet:metadataNet];
-}
-
-- (void)readFileFailure:(CCMetadataNet *)metadataNet message:(NSString *)message errorCode:(NSInteger)errorCode
-{
-    // verify active user
-    TableAccount *recordAccount = [CCCoreData getActiveAccount];
-    
-    // File not present, remove it
-    if (errorCode == 404 && [recordAccount.account isEqualToString:metadataNet.account]) {
-        [CCCoreData deleteLocalFileWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (fileID == %@)", metadataNet.account, metadataNet.fileID]];
-        [CCCoreData deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (fileID == %@)", metadataNet.account, metadataNet.fileID]];
-    }
-}
-
-- (void)readFileSuccess:(CCMetadataNet *)metadataNet metadata:(CCMetadata *)metadata
-{
-    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
-        
-        BOOL withDownload = [metadataNet.options boolValue];
-        
-        [self verifyChangeMedatas:[[NSArray alloc] initWithObjects:metadata, nil] serverUrl:metadataNet.serverUrl account:app.activeAccount withDownload:withDownload];
-    });
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== Verify Metadatas =====
-#pragma --------------------------------------------------------------------------------------------
-
-// MULTI THREAD
-- (void)verifyChangeMedatas:(NSArray *)allRecordMetadatas serverUrl:(NSString *)serverUrl account:(NSString *)account withDownload:(BOOL)withDownload
-{
-    NSMutableArray *metadatas = [[NSMutableArray alloc] init];
-    
-    for (CCMetadata *metadata in allRecordMetadatas) {
-        
-        BOOL changeRev = NO;
-        
-        // change account
-        if ([metadata.account isEqualToString:account] == NO)
-            return;
-        
-        // no dir
-        if (metadata.directory)
-            continue;
-        
-        TableLocalFile *record = [TableLocalFile MR_findFirstWithPredicate:[NSPredicate predicateWithFormat:@"(account == %@) AND (fileID == %@)", app.activeAccount, metadata.fileID]];
-        
-        if (withDownload) {
-            
-            if (![record.rev isEqualToString:metadata.rev])
-                changeRev = YES;
-            
-        } else {
-            
-            if (record && ![record.rev isEqualToString:metadata.rev]) // it must be in TableRecord
-                changeRev = YES;
-        }
-        
-        if (changeRev) {
-            
-            if ([metadata.type isEqualToString: k_metadataType_file]) {
-                
-                // remove file and ico
-                [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@", app.directoryUser, metadata.fileID] error:nil];
-                [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@.ico", app.directoryUser, metadata.fileID] error:nil];
-            }
-            
-            if ([metadata.type isEqualToString: k_metadataType_template]) {
-                
-                // remove model
-                [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@", app.directoryUser, metadata.fileName] error:nil];
-            }
-            
-            [metadatas addObject:metadata];
-        }
-    }
-    
-    dispatch_async(dispatch_get_main_queue(), ^{
-        if ([metadatas count])
-            [self SynchronizeMetadatas:metadatas serverUrl:serverUrl withDownload:withDownload];
-    });
-}
-
-// MAIN THREAD
-- (void)SynchronizeMetadatas:(NSArray *)metadatas serverUrl:(NSString *)serverUrl withDownload:(BOOL)withDownload
-{
-    // HUD
-    if ([metadatas count] > 50 && withDownload) {
-        if (!_hud) _hud = [[CCHud alloc] initWithView:[[[UIApplication sharedApplication] delegate] window]];
-        [_hud visibleIndeterminateHud];
-    }
-    
-    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.01 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) {
-        
-        NSString *oldDirectoryID, *serverUrl;
-
-        for (CCMetadata *metadata in metadatas) {
-        
-            NSString *selector, *selectorPost;
-            BOOL downloadData = NO, downloadPlist = NO;
-        
-            // it's a offline ?
-            BOOL isOffline = [CCCoreData isOfflineLocalFileID:metadata.fileID activeAccount:app.activeAccount];
-        
-            if (isOffline)
-                selectorPost = selectorAddOffline;
-        
-            if ([metadata.type isEqualToString: k_metadataType_file]) {
-                downloadData = YES;
-                selector = selectorDownloadSynchronize;
-            }
-        
-            if ([metadata.type isEqualToString: k_metadataType_template]) {
-                downloadPlist = YES;
-                selector = selectorLoadPlist;
-            }
-            
-            // Clear date for dorce refresh view
-            if (![oldDirectoryID isEqualToString:metadata.directoryID]) {
-                serverUrl = [CCCoreData getServerUrlFromDirectoryID:metadata.directoryID activeAccount:app.activeAccount];
-                oldDirectoryID = metadata.directoryID;
-                [CCCoreData clearDateReadAccount:app.activeAccount serverUrl:serverUrl directoryID:nil];
-            }
-            
-            [CCCoreData addMetadata:metadata activeAccount:app.activeAccount activeUrl:serverUrl context:nil];
-        
-            CCMetadataNet *metadataNet = [[CCMetadataNet alloc] initWithAccount:app.activeAccount];
-            
-            metadataNet.action = actionDownloadFile;
-            metadataNet.metadata = metadata;
-            metadataNet.downloadData = downloadData;
-            metadataNet.downloadPlist = downloadPlist;
-            metadataNet.selector = selector;
-            metadataNet.selectorPost = selectorPost;
-            metadataNet.serverUrl = serverUrl;
-            metadataNet.session = k_download_session;
-            metadataNet.taskStatus = k_taskStatusResume;
-
-            [app addNetworkingOperationQueue:app.netQueueDownload delegate:app.activeMain metadataNet:metadataNet];
-        }
-    
-        [[CCSynchronize sharedSynchronize] synchronizeFolderAnimationDirectory:[[NSArray alloc] initWithObjects:serverUrl, nil] setGraphicsFolder:YES];
-        
-        [app.activeMain reloadDatasource:serverUrl fileID:nil selector:nil];
-        
-        [_hud hideHud];
-    });
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== Synchronize Folder Animation =====
-#pragma --------------------------------------------------------------------------------------------
-
-- (BOOL)synchronizeFolderAnimationDirectory:(NSArray *)directory setGraphicsFolder:(BOOL)setGraphicsFolder
-{
-    BOOL animation = NO;
-    BOOL isAtLeastOneInAnimation = NO;
-    NSMutableOrderedSet *serversUrlInDownload = [NSMutableOrderedSet new];
-    
-    // test
-    if ([directory count] == 0 && [self.foldersInSynchronized count] == 0)
-        return isAtLeastOneInAnimation;
-    
-    if (directory)
-        [self.foldersInSynchronized addObjectsFromArray:directory];
-    else
-        directory = [[NSArray alloc] initWithArray:self.foldersInSynchronized.array];
-    
-    // Active in download
-    NSMutableArray *metadatasNet = [app verifyExistsInQueuesDownloadSelector:selectorDownloadSynchronize];
-    
-    for (CCMetadataNet *metadataNet in metadatasNet)
-        [serversUrlInDownload addObject:metadataNet.serverUrl];
-    
-    // Animation ON/OFF
-    
-    for (NSString *serverUrl in directory) {
-        
-        animation = [serversUrlInDownload containsObject:serverUrl];
-        
-        if (animation)
-            isAtLeastOneInAnimation = YES;
-        else
-            [self.foldersInSynchronized removeObject:serverUrl];
-        
-        if (setGraphicsFolder) {
-            
-            NSString *serverUrlOffline = [CCUtility deletingLastPathComponentFromServerUrl:serverUrl];
-            CCMain *viewController = [app.listMainVC objectForKey:serverUrlOffline];
-            if (viewController)
-                [viewController synchronizeFolderGraphicsServerUrl:serverUrl animation:animation];
-        }
-    }
-    
-    return isAtLeastOneInAnimation;
-}
-
-
-@end