X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/d05770edfaf33217b90a0443ab054189bdcebb05..1fbc44b5743380523af7999c072299aad79fb65b:/src/com/owncloud/android/utils/FileStorageUtils.java diff --git a/src/com/owncloud/android/utils/FileStorageUtils.java b/src/com/owncloud/android/utils/FileStorageUtils.java index de1a3207..1740ca58 100644 --- a/src/com/owncloud/android/utils/FileStorageUtils.java +++ b/src/com/owncloud/android/utils/FileStorageUtils.java @@ -1,5 +1,8 @@ -/* ownCloud Android client application - * Copyright (C) 2012-2013 ownCloud Inc. +/** + * ownCloud Android client application + * + * @author David A. Velasco + * Copyright (C) 2015 ownCloud Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -29,6 +32,7 @@ import com.owncloud.android.R; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.lib.resources.files.RemoteFile; +import android.accounts.Account; import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; @@ -36,23 +40,20 @@ import android.preference.PreferenceManager; import android.net.Uri; import android.os.Environment; import android.os.StatFs; +import android.webkit.MimeTypeMap; /** * Static methods to help in access to local file system. - * - * @author David A. Velasco */ public class FileStorageUtils { - public static Integer mSortOrder; - public static Boolean mSortAscending; public static final Integer SORT_NAME = 0; public static final Integer SORT_DATE = 1; public static final Integer SORT_SIZE = 2; - - - //private static final String LOG_TAG = "FileStorageUtils"; + public static Integer mSortOrder = SORT_NAME; + public static Boolean mSortAscending = true; + public static final String getSavePath(String accountName) { File sdCard = Environment.getExternalStorageDirectory(); return sdCard.getAbsolutePath() + "/" + MainApp.getDataFolder() + "/" + Uri.encode(accountName, "@"); @@ -93,6 +94,20 @@ public class FileStorageUtils { String value = uploadPath + OCFile.PATH_SEPARATOR + (fileName == null ? "" : fileName); return value; } + + /** + * Gets the composed path when video is or must be stored + * @param context + * @param fileName: video file name + * @return String: video file path composed + */ + public static String getInstantVideoUploadFilePath(Context context, String fileName) { + SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context); + String uploadVideoPathdef = context.getString(R.string.instant_upload_path); + String uploadVideoPath = pref.getString("instant_video_upload_path", uploadVideoPathdef); + String value = uploadVideoPath + OCFile.PATH_SEPARATOR + (fileName == null ? "" : fileName); + return value; + } public static String getParentPath(String remotePath) { String parentPath = new File(remotePath).getParent(); @@ -104,7 +119,7 @@ public class FileStorageUtils { * Creates and populates a new {@link OCFile} object with the data read from the server. * * @param remote remote file read from the server (remote file or folder). - * @return New OCFile instance representing the remote resource described by we. + * @return New OCFile instance representing the remote resource described by remote. */ public static OCFile fillOCFile(RemoteFile remote) { OCFile file = new OCFile(remote.getRemotePath()); @@ -121,7 +136,7 @@ public class FileStorageUtils { /** * Creates and populates a new {@link RemoteFile} object with the data read from an {@link OCFile}. * - * @param oCFile OCFile + * @param ocFile OCFile * @return New RemoteFile instance representing the resource described by ocFile. */ public static RemoteFile fillRemoteFile(OCFile ocFile){ @@ -139,7 +154,7 @@ public class FileStorageUtils { /** * Sorts all filenames, regarding last user decision */ - public static Vector sortDirectory(Vector files){ + public static Vector sortFolder(Vector files){ switch (mSortOrder){ case 0: files = FileStorageUtils.sortByName(files); @@ -157,7 +172,7 @@ public class FileStorageUtils { /** * Sorts list by Date - * @param sortAscending true: ascending, false: descending + * @param files */ public static Vector sortByDate(Vector files){ final Integer val; @@ -225,7 +240,7 @@ public class FileStorageUtils { /** * Sorts list by Name - * @param sortAscending true: ascending, false: descending + * @param files files to sort */ public static Vector sortByName(Vector files){ final Integer val; @@ -238,7 +253,7 @@ public class FileStorageUtils { Collections.sort(files, new Comparator() { public int compare(OCFile o1, OCFile o2) { if (o1.isFolder() && o2.isFolder()) { - return val * o1.getRemotePath().toLowerCase().compareTo(o2.getRemotePath().toLowerCase()); + return val * new AlphanumComparator().compare(o1, o2); } else if (o1.isFolder()) { return -1; } else if (o2.isFolder()) { @@ -270,6 +285,49 @@ public class FileStorageUtils { return result; } return 0; - } - + } + + /** + * Mimetype String of a file + * @param path + * @return + */ + public static String getMimeTypeFromName(String path) { + String extension = ""; + int pos = path.lastIndexOf('.'); + if (pos >= 0) { + extension = path.substring(pos + 1); + } + String result = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase()); + return (result != null) ? result : ""; + } + + /** + * Scans the default location for saving local copies of files searching for + * a 'lost' file with the same full name as the {@link OCFile} received as + * parameter. + * + * This method helps to keep linked local copies of the files when the app is uninstalled, and then + * reinstalled in the device. OR after the cache of the app was deleted in system settings. + * + * The method is assuming that all the local changes in the file where synchronized in the past. This is dangerous, + * but assuming the contrary could lead to massive unnecessary synchronizations of downloaded file after deleting + * the app cache. + * + * This should be changed in the near future to avoid any chance of data loss, but we need to add some options + * to limit hard automatic synchronizations to wifi, unless the user wants otherwise. + * + * @param file File to associate a possible 'lost' local file. + * @param account Account holding file. + */ + public static void searchForLocalFileInDefaultPath(OCFile file, Account account) { + if (file.getStoragePath() == null && !file.isFolder()) { + File f = new File(FileStorageUtils.getDefaultSavePathFor(account.name, file)); + if (f.exists()) { + file.setStoragePath(f.getAbsolutePath()); + file.setLastSyncDateForData(f.lastModified()); + } + } + } + }