package com.amaze.filemanager.filesystem;
import android.content.ContentResolver;
import android.content.Context;
import android.os.Build;
import android.preference.PreferenceManager;
import android.support.v4.provider.DocumentFile;
import android.util.Log;
import com.amaze.filemanager.database.CloudHandler;
import com.amaze.filemanager.exceptions.CloudPluginException;
import com.amaze.filemanager.exceptions.RootNotPermittedException;
import com.amaze.filemanager.fragments.MainFragment;
import com.amaze.filemanager.ui.LayoutElement;
import com.amaze.filemanager.ui.icons.Icons;
import com.amaze.filemanager.utils.CloudUtil;
import com.amaze.filemanager.utils.Futils;
import com.amaze.filemanager.utils.Logger;
import com.amaze.filemanager.utils.OTGUtil;
import com.amaze.filemanager.utils.OpenMode;
import com.amaze.filemanager.utils.RootUtils;
import com.amaze.filemanager.utils.provider.UtilitiesProviderInterface;
import com.cloudrail.si.interfaces.CloudStorage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.util.ArrayList;
import jcifs.smb.SmbException;
import jcifs.smb.SmbFile;
import static com.amaze.filemanager.activities.MainActivity.dataUtils;
/**
* Created by Arpit on 07-07-2015.
*/
//Hybrid file for handeling all types of files
public class HFile {
String path;
//public static final int ROOT_MODE=3,LOCAL_MODE=0,SMB_MODE=1,UNKNOWN=-1;
OpenMode mode = OpenMode.FILE;
public HFile(OpenMode mode, String path) {
this.path = path;
this.mode = mode;
}
public HFile(OpenMode mode, String path, String name, boolean isDirectory) {
this.mode = mode;
if (path.startsWith("smb://") || isSmb()) {
if (!isDirectory) this.path = path + name;
else if (!name.endsWith("/")) this.path = path + name + "/";
else this.path = path + name;
} else this.path = path + "/" + name;
}
public void generateMode(Context context) {
if (path.startsWith("smb://")) {
mode = OpenMode.SMB;
} else if (path.startsWith(OTGUtil.PREFIX_OTG)) {
mode = OpenMode.OTG;
} else if (isCustomPath()) {
mode = OpenMode.CUSTOM;
} else if (path.startsWith(CloudHandler.CLOUD_PREFIX_BOX)) {
mode = OpenMode.BOX;
} else if (path.startsWith(CloudHandler.CLOUD_PREFIX_ONE_DRIVE)) {
mode = OpenMode.ONEDRIVE;
} else if (path.startsWith(CloudHandler.CLOUD_PREFIX_GOOGLE_DRIVE)) {
mode = OpenMode.GDRIVE;
} else if (path.startsWith(CloudHandler.CLOUD_PREFIX_DROPBOX)) {
mode = OpenMode.DROPBOX;
} else {
if (context == null) {
mode = OpenMode.FILE;
return;
}
boolean rootmode = PreferenceManager.getDefaultSharedPreferences(context).getBoolean("rootMode", false);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
mode = OpenMode.FILE;
if (rootmode) {
if (!getFile().canRead()) mode = OpenMode.ROOT;
}
return;
}
if (FileUtil.isOnExtSdCard(getFile(), context)) mode = OpenMode.FILE;
else if (rootmode) {
if (!getFile().canRead()) mode = OpenMode.ROOT;
}
if (mode == OpenMode.UNKNOWN) mode = OpenMode.FILE;
}
}
public void setMode(OpenMode mode) {
this.mode = mode;
}
public OpenMode getMode() {
return mode;
}
public void setPath(String path) {
this.path = path;
}
public boolean isLocal() {
return mode == OpenMode.FILE;
}
public boolean isRoot() {
return mode == OpenMode.ROOT;
}
public boolean isSmb() {
return mode == OpenMode.SMB;
}
public boolean isOtgFile() {
return mode == OpenMode.OTG;
}
public boolean isBoxFile() {
return mode == OpenMode.BOX;
}
public boolean isDropBoxFile() {
return mode == OpenMode.DROPBOX;
}
public boolean isOneDriveFile() {
return mode == OpenMode.ONEDRIVE;
}
public boolean isGoogleDriveFile() {
return mode == OpenMode.GDRIVE;
}
File getFile() {
return new File(path);
}
BaseFile generateBaseFileFromParent() {
ArrayList<BaseFile> arrayList = null;
try {
arrayList = RootHelper.getFilesList(getFile().getParent(), true, true, null);
} catch (RootNotPermittedException e) {
e.printStackTrace();
return null;
}
for (BaseFile baseFile : arrayList) {
if (baseFile.getPath().equals(path))
return baseFile;
}
return null;
}
public long lastModified() throws MalformedURLException, SmbException {
switch (mode) {
case SMB:
SmbFile smbFile = getSmbFile();
if (smbFile != null)
return smbFile.lastModified();
break;
case FILE:
new File(path).lastModified();
break;
case ROOT:
BaseFile baseFile = generateBaseFileFromParent();
if (baseFile != null)
return baseFile.getDate();
}
return new File("/").lastModified();
}
/**
* @deprecated use {@link #length(Context)} to handle content resolvers
* @return
*/
public long length() {
long s = 0L;
switch (mode) {
case SMB:
SmbFile smbFile = getSmbFile();
if (smbFile != null)
try {
s = smbFile.length();
} catch (SmbException e) {
}
return s;
case FILE:
s = new File(path).length();
return s;
case ROOT:
BaseFile baseFile = generateBaseFileFromParent();
if (baseFile != null) return baseFile.getSize();
break;
}
return s;
}
/**
* Helper method to find length
* @param context
* @return
*/
public long length(Context context) {
long s = 0l;
switch (mode){
case SMB:
SmbFile smbFile=getSmbFile();
if(smbFile!=null)
try {
s = smbFile.length();
} catch (SmbException e) {
}
return s;
case FILE:
s = new File(path).length();
return s;
case ROOT:
BaseFile baseFile=generateBaseFileFromParent();
if(baseFile!=null) return baseFile.getSize();
break;
case OTG:
s = RootHelper.getDocumentFile(path, context, false).length();
break;
case DROPBOX:
s = dataUtils.getAccount(OpenMode.DROPBOX)
.getMetadata(CloudUtil.stripPath(OpenMode.DROPBOX, path)).getSize();
break;
case BOX:
s = dataUtils.getAccount(OpenMode.BOX)
.getMetadata(CloudUtil.stripPath(OpenMode.BOX, path)).getSize();
break;
case ONEDRIVE:
s = dataUtils.getAccount(OpenMode.ONEDRIVE)
.getMetadata(CloudUtil.stripPath(OpenMode.ONEDRIVE, path)).getSize();
break;
case GDRIVE:
s = dataUtils.getAccount(OpenMode.GDRIVE)
.getMetadata(CloudUtil.stripPath(OpenMode.GDRIVE, path)).getSize();
break;
default:
break;
}
return s;
}
public String getPath() {
return path;
}
/**
* @deprecated use {@link #getName(Context)}
* @return
*/
public String getName() {
String name = null;
switch (mode) {
case SMB:
SmbFile smbFile = getSmbFile();
if (smbFile != null)
return smbFile.getName();
break;
case FILE:
return new File(path).getName();
case ROOT:
return new File(path).getName();
default:
StringBuilder builder = new StringBuilder(path);
name = builder.substring(builder.lastIndexOf("/") + 1, builder.length());
}
return name;
}
public String getName(Context context) {
String name = null;
switch (mode){
case SMB:
SmbFile smbFile=getSmbFile();
if(smbFile!=null)
return smbFile.getName();
break;
case FILE:
return new File(path).getName();
case ROOT:
return new File(path).getName();
case OTG:
return RootHelper.getDocumentFile(path, context, false).getName();
default:
StringBuilder builder = new StringBuilder(path);
name = builder.substring(builder.lastIndexOf("/")+1, builder.length());
}
return name;
}
public SmbFile getSmbFile(int timeout) {
try {
SmbFile smbFile = new SmbFile(path);
smbFile.setConnectTimeout(timeout);
return smbFile;
} catch (MalformedURLException e) {
return null;
}
}
public SmbFile getSmbFile() {
try {
return new SmbFile(path);
} catch (MalformedURLException e) {
return null;
}
}
public boolean isCustomPath() {
return path.equals("0") ||
path.equals("1") ||
path.equals("2") ||
path.equals("3") ||
path.equals("4") ||
path.equals("5") ||
path.equals("6");
}
/**
* Returns a path to parent for various {@link #mode}
* @deprecated use {@link #getParent(Context)} to handle content resolvers
*
* @return
*/
public String getParent() {
String parentPath = "";
switch (mode) {
case SMB:
try {
parentPath = new SmbFile(path).getParent();
} catch (MalformedURLException e) {
parentPath = "";
e.printStackTrace();
}
break;
case FILE:
case ROOT:
parentPath = new File(path).getParent();
break;
default:
StringBuilder builder = new StringBuilder(path);
return builder.substring(0, builder.length() - (getName().length() + 1));
}
return parentPath;
}
/**
* Helper method to get parent path
*
* @param context
* @return
*/
public String getParent(Context context) {
String parentPath = "";
switch (mode) {
case SMB:
try {
parentPath = new SmbFile(path).getParent();
} catch (MalformedURLException e) {
parentPath = "";
e.printStackTrace();
}
break;
case FILE:
case ROOT:
parentPath = new File(path).getParent();
break;
case OTG:
default:
StringBuilder builder = new StringBuilder(path);
StringBuilder parentPathBuilder = new StringBuilder(builder.substring(0,
builder.length()-(getName().length()+1)));
return parentPathBuilder.toString();
}
return parentPath;
}
public String getParentName() {
StringBuilder builder = new StringBuilder(path);
StringBuilder parentPath = new StringBuilder(builder.substring(0,
builder.length() - (getName().length() + 1)));
String parentName = parentPath.substring(parentPath.lastIndexOf("/") + 1,
parentPath.length());
return parentName;
}
/**
* Whether this object refers to a directory or file, handles all types of files
* @deprecated use {@link #isDirectory(Context)} to handle content resolvers
*
* @return
*/
public boolean isDirectory() {
boolean isDirectory;
switch (mode) {
case SMB:
try {
isDirectory = new SmbFile(path).isDirectory();
} catch (SmbException e) {
isDirectory = false;
e.printStackTrace();
} catch (MalformedURLException e) {
isDirectory = false;
e.printStackTrace();
}
break;
case FILE:
isDirectory = new File(path).isDirectory();
break;
case ROOT:
try {
isDirectory = RootHelper.isDirectory(path, true, 5);
} catch (RootNotPermittedException e) {
e.printStackTrace();
isDirectory = false;
}
break;
case OTG:
// TODO: support for this method in OTG on-the-fly
// you need to manually call {@link RootHelper#getDocumentFile() method
isDirectory = false;
break;
default:
isDirectory = new File(path).isDirectory();
break;
}
return isDirectory;
}
public boolean isDirectory(Context context) {
boolean isDirectory;
switch (mode) {
case SMB:
try {
isDirectory = new SmbFile(path).isDirectory();
} catch (SmbException e) {
isDirectory = false;
e.printStackTrace();
} catch (MalformedURLException e) {
isDirectory = false;
e.printStackTrace();
}
break;
case FILE:
isDirectory = new File(path).isDirectory();
break;
case ROOT:
try {
isDirectory = RootHelper.isDirectory(path,true,5);
} catch (RootNotPermittedException e) {
e.printStackTrace();
isDirectory = false;
}
break;
case OTG:
isDirectory = RootHelper.getDocumentFile(path, context, false).isDirectory();
break;
case DROPBOX:
isDirectory = dataUtils.getAccount(OpenMode.DROPBOX)
.getMetadata(CloudUtil.stripPath(OpenMode.DROPBOX, path)).getFolder();
break;
case BOX:
isDirectory = dataUtils.getAccount(OpenMode.BOX)
.getMetadata(CloudUtil.stripPath(OpenMode.BOX, path)).getFolder();
break;
case GDRIVE:
isDirectory = dataUtils.getAccount(OpenMode.GDRIVE)
.getMetadata(CloudUtil.stripPath(OpenMode.GDRIVE, path)).getFolder();
break;
case ONEDRIVE:
isDirectory = dataUtils.getAccount(OpenMode.ONEDRIVE)
.getMetadata(CloudUtil.stripPath(OpenMode.ONEDRIVE, path)).getFolder();
break;
default:
isDirectory = new File(path).isDirectory();
break;
}
return isDirectory;
}
/**
* @deprecated use {@link #folderSize(Context)}
* @return
*/
public long folderSize() {
long size = 0L;
switch (mode) {
case SMB:
try {
size = Futils.folderSize(new SmbFile(path));
} catch (MalformedURLException e) {
size = 0L;
e.printStackTrace();
}
break;
case FILE:
size = Futils.folderSize(new File(path), null);
break;
case ROOT:
BaseFile baseFile = generateBaseFileFromParent();
if (baseFile != null) size = baseFile.getSize();
break;
default:
return 0L;
}
return size;
}
/**
* Helper method to get length of folder in an otg
*
* @param context
* @return
*/
public long folderSize(Context context) {
long size = 0l;
switch (mode){
case SMB:
try {
size = Futils.folderSize(new SmbFile(path));
} catch (MalformedURLException e) {
size = 0l;
e.printStackTrace();
}
break;
case FILE:
size = Futils.folderSize(new File(path), null);
break;
case ROOT:
BaseFile baseFile=generateBaseFileFromParent();
if(baseFile!=null) size = baseFile.getSize();
break;
case OTG:
size = Futils.folderSize(path, context);
break;
case DROPBOX:
case BOX:
case GDRIVE:
case ONEDRIVE:
size = Futils.folderSizeCloud(mode,
dataUtils.getAccount(mode).getMetadata(CloudUtil.stripPath(mode, path)));
break;
default:
return 0l;
}
return size;
}
public long getUsableSpace() {
long size = 0L;
if (isSmb()) {
try {
size = (new SmbFile(path).getDiskFreeSpace());
} catch (MalformedURLException e) {
size = 0L;
e.printStackTrace();
} catch (SmbException e) {
size = 0L;
e.printStackTrace();
}
} else
size = (new File(path).getUsableSpace());
return size;
}
/**
* @deprecated use {@link #listFiles(Context, boolean)}
* @param rootmode
* @return
*/
public ArrayList<BaseFile> listFiles(boolean rootmode) {
ArrayList<BaseFile> arrayList = new ArrayList<>();
if (isSmb()) {
try {
SmbFile smbFile = new SmbFile(path);
for (SmbFile smbFile1 : smbFile.listFiles()) {
BaseFile baseFile = new BaseFile(smbFile1.getPath());
baseFile.setName(smbFile1.getName());
baseFile.setMode(OpenMode.SMB);
baseFile.setDirectory(smbFile1.isDirectory());
baseFile.setDate(smbFile1.lastModified());
baseFile.setSize(baseFile.isDirectory() ? 0 : smbFile1.length());
arrayList.add(baseFile);
}
} catch (MalformedURLException e) {
if (arrayList != null) arrayList.clear();
e.printStackTrace();
} catch (SmbException e) {
if (arrayList != null) arrayList.clear();
e.printStackTrace();
}
} else if (isOtgFile()) {
} else {
try {
arrayList = RootHelper.getFilesList(path, rootmode, true, null);
} catch (RootNotPermittedException e) {
e.printStackTrace();
}
}
return arrayList;
}
/**
* Helper method to list children of this file
*
* @param context
* @return
*/
public ArrayList<BaseFile> listFiles(Context context, boolean isRoot) {
ArrayList<BaseFile> arrayList = new ArrayList<>();
switch (mode) {
case SMB:
try {
SmbFile smbFile = new SmbFile(path);
for (SmbFile smbFile1 : smbFile.listFiles()) {
BaseFile baseFile=new BaseFile(smbFile1.getPath());
baseFile.setName(smbFile1.getName());
baseFile.setMode(OpenMode.SMB);
baseFile.setDirectory(smbFile1.isDirectory());
baseFile.setDate(smbFile1.lastModified());
baseFile.setSize(baseFile.isDirectory()?0:smbFile1.length());
arrayList.add(baseFile);
}
} catch (MalformedURLException e) {
if (arrayList != null) arrayList.clear();
e.printStackTrace();
} catch (SmbException e) {
if (arrayList != null) arrayList.clear();
e.printStackTrace();
}
break;
case OTG:
arrayList = OTGUtil.getDocumentFilesList(path, context);
break;
case DROPBOX:
try {
arrayList = CloudUtil.listFiles(path, dataUtils.getAccount(OpenMode.DROPBOX), OpenMode.DROPBOX);
} catch (CloudPluginException e) {
e.printStackTrace();
arrayList = new ArrayList<>();
}
break;
case BOX:
try {
arrayList = CloudUtil.listFiles(path, dataUtils.getAccount(OpenMode.BOX), OpenMode.BOX);
} catch (CloudPluginException e) {
e.printStackTrace();
arrayList = new ArrayList<>();
}
break;
case GDRIVE:
try {
arrayList = CloudUtil.listFiles(path, dataUtils.getAccount(OpenMode.GDRIVE), OpenMode.GDRIVE);
} catch (CloudPluginException e) {
e.printStackTrace();
arrayList = new ArrayList<>();
}
break;
case ONEDRIVE:
try {
arrayList = CloudUtil.listFiles(path, dataUtils.getAccount(OpenMode.ONEDRIVE), OpenMode.ONEDRIVE);
} catch (CloudPluginException e) {
e.printStackTrace();
arrayList = new ArrayList<>();
}
break;
default:
try {
arrayList = RootHelper.getFilesList(path, isRoot, true, null);
} catch (RootNotPermittedException e) {
e.printStackTrace();
}
}
return arrayList;
}
public String getReadablePath(String path) {
if (isSmb())
return parseSmbPath(path);
return path;
}
String parseSmbPath(String a) {
if (a.contains("@"))
return "smb://" + a.substring(a.indexOf("@") + 1, a.length());
else return a;
}
/**
* Handles getting input stream for various {@link OpenMode}
* @deprecated use {@link #getInputStream(Context)} which allows handling content resolver
* @return
*/
public InputStream getInputStream() {
InputStream inputStream;
if (isSmb()) {
try {
inputStream = new SmbFile(path).getInputStream();
} catch (IOException e) {
inputStream = null;
e.printStackTrace();
}
} else {
try {
inputStream = new FileInputStream(path);
} catch (FileNotFoundException e) {
inputStream = null;
e.printStackTrace();
}
}
return inputStream;
}
public InputStream getInputStream(Context context) {
InputStream inputStream;
switch (mode) {
case SMB:
try {
inputStream = new SmbFile(path).getInputStream();
} catch (IOException e) {
inputStream = null;
e.printStackTrace();
}
break;
case OTG:
ContentResolver contentResolver = context.getContentResolver();
DocumentFile documentSourceFile = RootHelper.getDocumentFile(path,
context, false);
try {
inputStream = contentResolver.openInputStream(documentSourceFile.getUri());
} catch (FileNotFoundException e) {
e.printStackTrace();
inputStream = null;
}
break;
case DROPBOX:
CloudStorage cloudStorageDropbox = dataUtils.getAccount(OpenMode.DROPBOX);
Log.d(getClass().getSimpleName(), CloudUtil.stripPath(OpenMode.DROPBOX, path));
inputStream = cloudStorageDropbox.download(CloudUtil.stripPath(OpenMode.DROPBOX, path));
break;
case BOX:
CloudStorage cloudStorageBox = dataUtils.getAccount(OpenMode.BOX);
inputStream = cloudStorageBox.download(CloudUtil.stripPath(OpenMode.BOX, path));
break;
case GDRIVE:
CloudStorage cloudStorageGDrive = dataUtils.getAccount(OpenMode.GDRIVE);
inputStream = cloudStorageGDrive.download(CloudUtil.stripPath(OpenMode.GDRIVE, path));
break;
case ONEDRIVE:
CloudStorage cloudStorageOneDrive = dataUtils.getAccount(OpenMode.ONEDRIVE);
inputStream = cloudStorageOneDrive.download(CloudUtil.stripPath(OpenMode.ONEDRIVE, path));
break;
default:
try {
inputStream = new FileInputStream(path);
} catch (FileNotFoundException e) {
inputStream = null;
e.printStackTrace();
}
break;
}
return inputStream;
}
public OutputStream getOutputStream(Context context) {
OutputStream outputStream;
switch (mode) {
case SMB:
try {
outputStream = new SmbFile(path).getOutputStream();
} catch (IOException e) {
outputStream = null;
e.printStackTrace();
}
break;
case OTG:
ContentResolver contentResolver = context.getContentResolver();
DocumentFile documentSourceFile = RootHelper.getDocumentFile(path,
context, true);
try {
outputStream = contentResolver.openOutputStream(documentSourceFile.getUri());
} catch (FileNotFoundException e) {
e.printStackTrace();
outputStream = null;
}
break;
default:
try {
outputStream = FileUtil.getOutputStream(new File(path), context, length());
} catch (Exception e) {
outputStream=null;
e.printStackTrace();
}
}
return outputStream;
}
public boolean exists() {
boolean exists = false;
if (isSmb()) {
try {
SmbFile smbFile = getSmbFile(2000);
exists = smbFile != null && smbFile.exists();
} catch (SmbException e) {
exists = false;
}
} else if (isDropBoxFile()) {
CloudStorage cloudStorageDropbox = dataUtils.getAccount(OpenMode.DROPBOX);
exists = cloudStorageDropbox.exists(CloudUtil.stripPath(OpenMode.DROPBOX, path));
} else if (isBoxFile()) {
CloudStorage cloudStorageBox = dataUtils.getAccount(OpenMode.BOX);
exists = cloudStorageBox.exists(CloudUtil.stripPath(OpenMode.BOX, path));
} else if (isGoogleDriveFile()) {
CloudStorage cloudStorageGoogleDrive = dataUtils.getAccount(OpenMode.GDRIVE);
exists = cloudStorageGoogleDrive.exists(CloudUtil.stripPath(OpenMode.GDRIVE, path));
} else if (isOneDriveFile()) {
CloudStorage cloudStorageOneDrive = dataUtils.getAccount(OpenMode.ONEDRIVE);
exists = cloudStorageOneDrive.exists(CloudUtil.stripPath(OpenMode.ONEDRIVE, path));
} else if (isLocal()) {
exists = new File(path).exists();
} else if (isRoot()) {
try {
return RootHelper.fileExists(path);
} catch (RootNotPermittedException e) {
e.printStackTrace();
return false;
}
}
return exists;
}
/**
* Helper method to check file existence in otg
*
* @param context
* @return
*/
public boolean exists(Context context) {
if (isOtgFile()) {
DocumentFile fileToCheck = RootHelper.getDocumentFile(path, context, false);
return fileToCheck != null;
} else return (exists());
}
/**
* Whether file is a simple file (i.e. not a directory/smb/otg/other)
*
* @return true if file; other wise false
*/
public boolean isSimpleFile() {
return !isSmb() && !isOtgFile() && !isCustomPath()
&& !android.util.Patterns.EMAIL_ADDRESS.matcher(path).matches() &&
!new File(path).isDirectory() && !isOneDriveFile() && !isGoogleDriveFile()
&& !isDropBoxFile() && !isBoxFile();
}
public boolean setLastModified(long date) {
if (isSmb())
try {
new SmbFile(path).setLastModified(date);
return true;
} catch (SmbException e) {
return false;
} catch (MalformedURLException e) {
return false;
}
File f = new File(path);
return f.setLastModified(date);
}
public void mkdir(Context context) {
if (isSmb()) {
try {
new SmbFile(path).mkdirs();
} catch (SmbException | MalformedURLException e) {
Logger.log(e, path, context);
}
} else if (isOtgFile()) {
if (!exists(context)) {
DocumentFile parentDirectory = RootHelper.getDocumentFile(getParent(context), context, false);
if (parentDirectory.isDirectory()) {
parentDirectory.createDirectory(getName(context));
}
}
} else if (isDropBoxFile()) {
CloudStorage cloudStorageDropbox = dataUtils.getAccount(OpenMode.DROPBOX);
try {
cloudStorageDropbox.createFolder(CloudUtil.stripPath(OpenMode.DROPBOX, path));
} catch (Exception e) {
e.printStackTrace();
return;
}
} else if (isBoxFile()) {
CloudStorage cloudStorageBox = dataUtils.getAccount(OpenMode.BOX);
try {
cloudStorageBox.createFolder(CloudUtil.stripPath(OpenMode.BOX, path));
} catch (Exception e) {
e.printStackTrace();
return;
}
} else if (isOneDriveFile()) {
CloudStorage cloudStorageOneDrive = dataUtils.getAccount(OpenMode.ONEDRIVE);
try {
cloudStorageOneDrive.createFolder(CloudUtil.stripPath(OpenMode.ONEDRIVE, path));
} catch (Exception e) {
e.printStackTrace();
return;
}
} else if (isGoogleDriveFile()) {
CloudStorage cloudStorageGdrive = dataUtils.getAccount(OpenMode.GDRIVE);
try {
cloudStorageGdrive.createFolder(CloudUtil.stripPath(OpenMode.GDRIVE, path));
} catch (Exception e) {
e.printStackTrace();
return;
}
} else
FileUtil.mkdir(new File(path), context);
}
public boolean delete(Context context, boolean rootmode) throws RootNotPermittedException {
if (isSmb()) {
try {
new SmbFile(path).delete();
} catch (SmbException | MalformedURLException e) {
Logger.log(e, path, context);
}
} else {
if (isRoot() && rootmode) {
setMode(OpenMode.ROOT);
RootUtils.delete(getPath());
} else {
FileUtil.deleteFile(new File(path), context);
}
}
return !exists();
}
/**
* Generates a {@link LayoutElement} adapted compatible element.
* Currently supports only local filesystem
* @param mainFragment
* @param utilitiesProvider
* @return
*/
public LayoutElement generateLayoutElement(MainFragment mainFragment, UtilitiesProviderInterface utilitiesProvider) {
switch (mode) {
case FILE:
case ROOT:
File file = new File(path);
LayoutElement layoutElement;
if (isDirectory()) {
layoutElement = utilitiesProvider.getFutils()
.newElement(mainFragment.folder,
path, RootHelper.parseFilePermission(file),
"", folderSize() + "", 0, true, false,
file.lastModified() + "");
} else {
layoutElement = utilitiesProvider.getFutils().newElement(Icons.loadMimeIcon(
file.getPath(), !mainFragment.IS_LIST, mainFragment.res),
file.getPath(), RootHelper.parseFilePermission(file),
file.getPath(), file.length() + "", file.length(), false, false, file.lastModified() + "");
}
layoutElement.setMode(mode);
return layoutElement;
default:
return null;
}
}
}