ios/iOSClient/Favorites/CCFavorites.m

767 строки
31 KiB
Objective-C

//
// CCFavorites.m
// Nextcloud iOS
//
// 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 "CCFavorites.h"
#import "AppDelegate.h"
#import "CCSynchronize.h"
#import "NCBridgeSwift.h"
@interface CCFavorites () <CCActionsDeleteDelegate, CCActionsSettingFavoriteDelegate>
{
AppDelegate *appDelegate;
NSArray *_dataSource;
BOOL _reloadDataSource;
}
@end
@implementation CCFavorites
#pragma --------------------------------------------------------------------------------------------
#pragma mark ===== Init =====
#pragma --------------------------------------------------------------------------------------------
- (id)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super initWithCoder:aDecoder]) {
appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(triggerProgressTask:) name:@"NotificationProgressTask" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeTheming) name:@"changeTheming" object:nil];
appDelegate.activeFavorites = self;
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Custom Cell
[self.tableView registerNib:[UINib nibWithNibName:@"CCFavoritesCell" bundle:nil] forCellReuseIdentifier:@"Cell"];
// dataSource
_dataSource = [NSMutableArray new];
// Metadata
_metadata = [tableMetadata new];
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 1)];
self.tableView.separatorColor = [NCBrandColor sharedInstance].seperator;
self.tableView.emptyDataSetDelegate = self;
self.tableView.emptyDataSetSource = self;
self.tableView.delegate = self;
// calculate _serverUrl
if (!_serverUrl)
_serverUrl = nil;
// Title
if (_titleViewControl)
self.title = _titleViewControl;
else
self.title = NSLocalizedString(@"_favorites_", nil);
}
// Apparirà
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// Color
[appDelegate aspectNavigationControllerBar:self.navigationController.navigationBar online:[appDelegate.reachability isReachable] hidden:NO];
[appDelegate aspectTabBar:self.tabBarController.tabBar hidden:NO];
// Plus Button
[appDelegate plusButtonVisibile:true];
[self reloadDatasource];
}
// E' arrivato
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// Active Main
appDelegate.activeFavorites = self;
}
- (void)changeTheming
{
if (self.isViewLoaded && self.view.window)
[appDelegate changeTheming:self];
// Reload Table View
[self.tableView reloadData];
}
- (void)triggerProgressTask:(NSNotification *)notification
{
//NSDictionary *dict = notification.userInfo;
//float progress = [[dict valueForKey:@"progress"] floatValue];
}
#pragma --------------------------------------------------------------------------------------------
#pragma mark ==== DZNEmptyDataSetSource ====
#pragma --------------------------------------------------------------------------------------------
- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView
{
return [NCBrandColor sharedInstance].backgroundView;
}
- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView
{
return [UIImage imageNamed:@"favoriteNoFiles"];
}
- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView
{
NSString *text = [NSString stringWithFormat:@"%@", NSLocalizedString(@"_favorite_no_files_", nil)];
NSDictionary *attributes = @{NSFontAttributeName:[UIFont boldSystemFontOfSize:20.0f], NSForegroundColorAttributeName:[UIColor lightGrayColor]};
return [[NSAttributedString alloc] initWithString:text attributes:attributes];
}
- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView
{
NSString *text = [NSString stringWithFormat:@"\n%@", NSLocalizedString(@"_tutorial_favorite_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 ===== Delete <delegate> =====
#pragma--------------------------------------------------------------------------------------------
- (void)deleteFileOrFolderSuccessFailure:(CCMetadataNet *)metadataNet message:(NSString *)message errorCode:(NSInteger)errorCode
{
if (errorCode == 0)
[self reloadDatasource];
else
NSLog(@"[LOG] DeleteFileOrFolder failure error %d, %@", (int)errorCode, message);
}
#pragma --------------------------------------------------------------------------------------------
#pragma mark ===== Favorite <delegate> =====
#pragma--------------------------------------------------------------------------------------------
- (void)settingFavoriteFailure:(CCMetadataNet *)metadataNet message:(NSString *)message errorCode:(NSInteger)errorCode
{
NSLog(@"[LOG] Setting Favorite failure error %d, %@", (int)errorCode, message);
}
- (void)settingFavoriteSuccess:(CCMetadataNet *)metadataNet
{
[[NCManageDatabase sharedInstance] setMetadataFavoriteWithFileID:metadataNet.fileID favorite:[metadataNet.options boolValue]];
[self reloadDatasource];
}
- (void)readListingFavorites
{
// test
if (appDelegate.activeAccount.length == 0)
return;
[[CCActions sharedInstance] listingFavorites:@"" delegate:self];
}
- (void)addFavoriteFolder:(NSString *)serverUrl
{
NSString *directoryID = [[NCManageDatabase sharedInstance] getDirectoryID:serverUrl];
if (!directoryID) return;
NSString *selector;
CCMetadataNet *metadataNet = [[CCMetadataNet alloc] initWithAccount:appDelegate.activeAccount];
metadataNet.action = actionReadFolder;
metadataNet.depth = @"1";
metadataNet.directoryID = directoryID;
if ([CCUtility getFavoriteOffline])
selector = selectorReadFolderWithDownload;
else
selector = selectorReadFolder;
metadataNet.selector = selector;
metadataNet.serverUrl = serverUrl;
[appDelegate addNetworkingOperationQueue:appDelegate.netQueue delegate:[CCSynchronize sharedSynchronize] metadataNet:metadataNet];
}
- (void)listingFavoritesSuccess:(CCMetadataNet *)metadataNet metadatas:(NSArray *)metadatas
{
// Check Active Account
if (![metadataNet.account isEqualToString:appDelegate.activeAccount])
return;
NSString *father = @"";
NSMutableArray *filesEtag = [NSMutableArray new];
for (tableMetadata *metadata in metadatas) {
// insert for test NOT favorite
[filesEtag addObject:metadata.fileID];
NSString *serverUrl = [[NCManageDatabase sharedInstance] getServerUrl:metadata.directoryID];
NSString *serverUrlSon = [CCUtility stringAppendServerUrl:serverUrl addFileName:metadata.fileName];
if (![serverUrlSon containsString:father]) {
if (metadata.directory) {
if ([CCUtility getFavoriteOffline])
[[CCSynchronize sharedSynchronize] readFileForFolder:metadata.fileName serverUrl:serverUrl selector:selectorReadFileFolderWithDownload];
else
[[CCSynchronize sharedSynchronize] readFileForFolder:metadata.fileName serverUrl:serverUrl selector:selectorReadFileFolder];
} else {
if ([CCUtility getFavoriteOffline])
[[CCSynchronize sharedSynchronize] readFile:metadata selector:selectorReadFileWithDownload];
else
[[CCSynchronize sharedSynchronize] readFile:metadata selector:selectorReadFile];
}
father = serverUrlSon;
}
}
// Verify remove favorite
NSArray *allRecordFavorite = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND favorite = true", appDelegate.activeAccount] sorted:nil ascending:NO];
for (tableMetadata *metadata in allRecordFavorite)
if (![filesEtag containsObject:metadata.fileID])
[[NCManageDatabase sharedInstance] setMetadataFavoriteWithFileID:metadata.fileID favorite:NO];
[[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:@"clearDateReadDataSource" object:nil];
}
- (void)listingFavoritesFailure:(CCMetadataNet *)metadataNet message:(NSString *)message errorCode:(NSInteger)errorCode
{
// Check Active Account
if (![metadataNet.account isEqualToString:appDelegate.activeAccount])
return;
NSLog(@"[LOG] Listing Favorites failure error %d, %@", (int)errorCode, message);
}
#pragma --------------------------------------------------------------------------------------------
#pragma mark ==== Download Thumbnail <Delegate> ====
#pragma --------------------------------------------------------------------------------------------
- (void)downloadThumbnailSuccess:(CCMetadataNet *)metadataNet
{
// Check Active Account
if (![metadataNet.account isEqualToString:appDelegate.activeAccount])
return;
[self reloadDatasource];
}
#pragma --------------------------------------------------------------------------------------------
#pragma mark ==== Download <Delegate> ====
#pragma --------------------------------------------------------------------------------------------
- (void)downloadFileSuccessFailure:(NSString *)fileName fileID:(NSString *)fileID serverUrl:(NSString *)serverUrl selector:(NSString *)selector selectorPost:(NSString *)selectorPost errorMessage:(NSString *)errorMessage errorCode:(NSInteger)errorCode
{
if (errorCode == 0) {
_metadata = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"fileID = %@", fileID]];
if ([_metadata.typeFile isEqualToString: k_metadataTypeFile_compress]) {
//[self performSelector:@selector(unZipFile:) withObject:_metadata.fileID];
[self openWith:_metadata];
} else if ([_metadata.typeFile isEqualToString: k_metadataTypeFile_unknown]) {
[self openWith:_metadata];
} else {
if ([self shouldPerformSegue])
[self performSegueWithIdentifier:@"segueDetail" sender:self];
}
} else {
if (errorCode != k_CCErrorFileAlreadyInDownload)
[appDelegate messageNotification:@"_download_file_" description:errorMessage visible:YES delay:k_dismissAfterSecond type:TWMessageBarMessageTypeError errorCode:errorCode];
}
}
- (void)openWith:(tableMetadata *)metadata
{
NSString *fileNamePath = [NSString stringWithFormat:@"%@/%@", appDelegate.directoryUser, metadata.fileID];
if ([[NSFileManager defaultManager] fileExistsAtPath:fileNamePath]) {
[[NSFileManager defaultManager] removeItemAtPath:[NSTemporaryDirectory() stringByAppendingString:metadata.fileNameView] error:nil];
[[NSFileManager defaultManager] linkItemAtPath:fileNamePath toPath:[NSTemporaryDirectory() stringByAppendingString:metadata.fileNameView] error:nil];
NSURL *url = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingString:metadata.fileNameView]];
_docController = [UIDocumentInteractionController interactionControllerWithURL:url];
_docController.delegate = self;
[_docController presentOptionsMenuFromRect:self.view.frame inView:self.view animated:YES];
}
}
- (void)requestDeleteMetadata:(tableMetadata *)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) {
[[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
{
UIImage *iconHeader;
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;
actionSheet.automaticallyTintButtonImages = @(NO);
actionSheet.encryptedButtonTextAttributes = @{ NSFontAttributeName:[UIFont systemFontOfSize:16], NSForegroundColorAttributeName:[NCBrandColor sharedInstance].encrypted };
actionSheet.buttonTextAttributes = @{ NSFontAttributeName:[UIFont systemFontOfSize:16], NSForegroundColorAttributeName:[UIColor blackColor] };
actionSheet.cancelButtonTextAttributes = @{ NSFontAttributeName:[UIFont boldSystemFontOfSize:17], NSForegroundColorAttributeName:[UIColor blackColor] };
actionSheet.disableButtonTextAttributes = @{ NSFontAttributeName:[UIFont systemFontOfSize:16], NSForegroundColorAttributeName:[UIColor darkGrayColor] };
actionSheet.separatorColor = [NCBrandColor sharedInstance].seperator;
actionSheet.cancelButtonTitle = NSLocalizedString(@"_cancel_",nil);
// assegnamo l'immagine anteprima se esiste, altrimenti metti quella standars
if ([[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithFormat:@"%@/%@.ico", appDelegate.directoryUser, metadata.fileID]]) {
iconHeader = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.ico", appDelegate.directoryUser, metadata.fileID]];
} else {
if (metadata.directory)
iconHeader = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"folder"] color:[NCBrandColor sharedInstance].brandElement];
else
iconHeader = [UIImage imageNamed:metadata.iconName];
}
[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];
}];
// 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 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 --------------------------------------------------------------------------------------------
- (tableMetadata *)setSelfMetadataFromIndexPath:(NSIndexPath *)indexPath
{
tableMetadata *metadata = [_dataSource objectAtIndex:indexPath.row];
return metadata;
}
- (void)readFolder:(NSString *)serverUrl
{
[self reloadDatasource];
}
- (void)reloadDatasource
{
NSMutableArray *metadatas = [NSMutableArray new];
NSArray *recordsTableMetadata ;
NSString *sorted = [CCUtility getOrderSettings];
if ([sorted isEqualToString:@"fileName"])
sorted = @"fileName";
if (!_serverUrl) {
recordsTableMetadata = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND favorite = true", appDelegate.activeAccount] sorted:sorted ascending:[CCUtility getAscendingSettings]];
} else {
NSString *directoryID = [[NCManageDatabase sharedInstance] getDirectoryID:_serverUrl];
if (directoryID)
recordsTableMetadata = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND directoryID = %@", appDelegate.activeAccount, directoryID] sorted:sorted ascending:[CCUtility getAscendingSettings]];
}
CCSectionDataSourceMetadata *sectionDataSource = [CCSectionMetadata creataDataSourseSectionMetadata:recordsTableMetadata listProgressMetadata:nil e2eEncryptions:nil groupByField:nil activeAccount:appDelegate.activeAccount];
NSArray *fileIDs = [sectionDataSource.sectionArrayRow objectForKey:@"_none_"];
for (NSString *fileID in fileIDs)
[metadatas addObject:[sectionDataSource.allRecordsDataSource objectForKey:fileID]];
_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
{
CCFavoritesCell *cell = (CCFavoritesCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
tableMetadata *metadata;
// variable base
cell.delegate = self;
cell.indexPath = indexPath;
// separator
cell.separatorInset = UIEdgeInsetsMake(0.f, 60.f, 0.f, 0.f);
// Initialize
cell.status.image = nil;
cell.favorite.image = nil;
cell.local.image = nil;
cell.shared.image = nil;
// change color selection
UIView *selectionColor = [[UIView alloc] init];
selectionColor.backgroundColor = [[NCBrandColor sharedInstance] getColorSelectBackgrond];
cell.selectedBackgroundView = selectionColor;
metadata = [_dataSource objectAtIndex:indexPath.row];
// favorite
if (_serverUrl == nil)
cell.favorite.image = [UIImage imageNamed:@"favorite"];
cell.labelTitle.textColor = [UIColor blackColor];
// filename
cell.labelTitle.text = metadata.fileNameView;
cell.labelInfoFile.text = @"";
// Shared
NSString *serverUrl = [[NCManageDatabase sharedInstance] getServerUrl:metadata.directoryID];
if (!serverUrl)
return cell;
NSString *shareLink = [appDelegate.sharesLink objectForKey:[serverUrl stringByAppendingString:metadata.fileName]];
NSString *shareUserAndGroup = [appDelegate.sharesUserAndGroup objectForKey:[serverUrl stringByAppendingString:metadata.fileName]];
// Immage
if (metadata.directory) {
if ([shareLink length] > 0) {
cell.file.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"folder_public"] color:[NCBrandColor sharedInstance].brandElement];
} else if ([shareUserAndGroup length] > 0) {
cell.file.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"folder_shared_with_me"] color:[NCBrandColor sharedInstance].brandElement];
} else {
cell.file.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"folder"] color:[NCBrandColor sharedInstance].brandElement];
}
} else {
if ([shareLink length] > 0 || [shareUserAndGroup length] > 0) {
if ([shareLink length] > 0)
cell.shared.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"shareLink"] color:[NCBrandColor sharedInstance].brandElement];
else
cell.shared.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"actionSheetShare"] color:[NCBrandColor sharedInstance].brandElement];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapActionConnectionMounted:)];
[tap setNumberOfTapsRequired:1];
cell.shared.userInteractionEnabled = YES;
[cell.shared addGestureRecognizer:tap];
}
cell.file.image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.ico", appDelegate.directoryUser, metadata.fileID]];
if (cell.file.image == nil) {
cell.file.image = [UIImage imageNamed:metadata.iconName];
if (metadata.thumbnailExists)
[[CCActions sharedInstance] downloadTumbnail:metadata delegate:self];
}
// ----------------------------------------------------------------------------------------------------------
// E2EE Image Status Encrypted
// ----------------------------------------------------------------------------------------------------------
tableE2eEncryption *tableE2eEncryption = [[NCManageDatabase sharedInstance] getE2eEncryptionWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND fileNameIdentifier = %@", appDelegate.activeAccount, metadata.fileName]];
if (tableE2eEncryption)
cell.status.image = [UIImage imageNamed:@"encrypted"];
}
// 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];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithFormat:@"%@/%@", appDelegate.directoryUser, metadata.fileID]];
if (fileExists)
cell.local.image = [UIImage imageNamed:@"local"];
else
cell.local.image = nil;
cell.labelInfoFile.text = [NSString stringWithFormat:@"%@ %@", date, length];
cell.accessoryType = UITableViewCellAccessoryNone;
}
// ======== MGSwipe ========
//configure left buttons : 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.leftExpansion.buttonIndex = 0;
cell.leftExpansion.fillOnTrigger = NO;
//centerIconOverText
MGSwipeButton *favoriteButton = (MGSwipeButton *)[cell.leftButtons objectAtIndex:0];
[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;
//centerIconOverText
MGSwipeButton *deleteButton = (MGSwipeButton *)[cell.rightButtons objectAtIndex:0];
MGSwipeButton *moreButton = (MGSwipeButton *)[cell.rightButtons objectAtIndex:1];
[deleteButton centerIconOverText];
[moreButton centerIconOverText];
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.directory == NO) {
// File do not exists
NSString *serverUrl = [[NCManageDatabase sharedInstance] getServerUrl:_metadata.directoryID];
if (serverUrl) {
if ([[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithFormat:@"%@/%@", appDelegate.directoryUser, _metadata.fileID]]) {
[self downloadFileSuccessFailure:_metadata.fileName fileID:_metadata.fileID serverUrl:serverUrl selector:selectorLoadFileView selectorPost:@"" errorMessage:@"" errorCode:0];
} else {
[[CCNetworking sharedNetworking] downloadFile:_metadata.fileName fileID:_metadata.fileID serverUrl:serverUrl selector:selectorLoadFileView selectorPost:nil session:k_download_session taskStatus:k_taskStatusResume delegate:self];
}
}
}
// Directory
if (_metadata.directory)
[self performSegueDirectoryWithControlPasscode];
}
-(void)performSegueDirectoryWithControlPasscode
{
CCFavorites *vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"CCFavorites"];
NSString *serverUrl = [[NCManageDatabase sharedInstance] getServerUrl:_metadata.directoryID];
if (serverUrl) {
vc.serverUrl = [CCUtility stringAppendServerUrl:serverUrl addFileName:_metadata.fileName];
vc.titleViewControl = _metadata.fileNameView;
[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;
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];
for (tableMetadata *metadata in _dataSource) {
if ([metadata.typeFile isEqualToString: k_metadataTypeFile_image] || [metadata.typeFile isEqualToString: k_metadataTypeFile_video])
[allRecordsDataSourceImagesVideos addObject:metadata];
}
_detailViewController.metadataDetail = _metadata;
_detailViewController.dateFilterQuery = nil;
_detailViewController.dataSourceImagesVideos = allRecordsDataSourceImagesVideos;
[_detailViewController setTitle:_metadata.fileNameView];
}
@end