storage helper keeps the last ten tracks and deletes only files of type .trackbook
This commit is contained in:
parent
deed2f624d
commit
a38270d2c4
1 changed files with 78 additions and 15 deletions
|
@ -34,11 +34,9 @@ import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Comparator;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,6 +49,9 @@ public class StorageHelper implements TrackbookKeys {
|
||||||
private static final String LOG_TAG = StorageHelper.class.getSimpleName();
|
private static final String LOG_TAG = StorageHelper.class.getSimpleName();
|
||||||
|
|
||||||
/* Main class variables */
|
/* Main class variables */
|
||||||
|
private final int mMaxTrackFiles = 10;
|
||||||
|
private final String mDirectoryName = "tracks";
|
||||||
|
private final String mFileExtension = ".trackbook";
|
||||||
private final Activity mActivity;
|
private final Activity mActivity;
|
||||||
private File mFolder;
|
private File mFolder;
|
||||||
|
|
||||||
|
@ -61,7 +62,7 @@ public class StorageHelper implements TrackbookKeys {
|
||||||
mActivity = activity;
|
mActivity = activity;
|
||||||
|
|
||||||
// set name sub-directory to "tracks"
|
// set name sub-directory to "tracks"
|
||||||
mFolder = mActivity.getExternalFilesDir("tracks");
|
mFolder = mActivity.getExternalFilesDir(mDirectoryName);
|
||||||
// mFolder = getTracksDirectory();
|
// mFolder = getTracksDirectory();
|
||||||
|
|
||||||
// create folder if necessary
|
// create folder if necessary
|
||||||
|
@ -78,11 +79,11 @@ public class StorageHelper implements TrackbookKeys {
|
||||||
Date recordingStart = track.getRecordingStart();
|
Date recordingStart = track.getRecordingStart();
|
||||||
|
|
||||||
if (mFolder.exists() && mFolder.isDirectory() && mFolder.canWrite() && recordingStart != null) {
|
if (mFolder.exists() && mFolder.isDirectory() && mFolder.canWrite() && recordingStart != null) {
|
||||||
File lastTrackFile = getLastTrack();
|
File lastTrackFile = getMostCurrentTrack();
|
||||||
|
|
||||||
// construct filename from track recording date
|
// construct filename from track recording date
|
||||||
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.US);
|
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.US);
|
||||||
String fileName = dateFormat.format(recordingStart) + ".trackbook";
|
String fileName = dateFormat.format(recordingStart) + mFileExtension;
|
||||||
File file = new File(mFolder.toString() + "/" + fileName);
|
File file = new File(mFolder.toString() + "/" + fileName);
|
||||||
|
|
||||||
// convert to JSON
|
// convert to JSON
|
||||||
|
@ -138,23 +139,85 @@ public class StorageHelper implements TrackbookKeys {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Gets the last track from directory */
|
/* Gets most current track from directory */
|
||||||
public File getLastTrack() {
|
public File getMostCurrentTrack() {
|
||||||
if (mFolder != null && mFolder.isDirectory()) {
|
if (mFolder != null && mFolder.isDirectory()) {
|
||||||
List<File> files = new ArrayList<File>(Arrays.asList(mFolder.listFiles()));
|
// get files and sort them
|
||||||
Collections.sort(files);
|
File[] files = mFolder.listFiles();
|
||||||
// TODO
|
files = sortFiles(files);
|
||||||
return files.get(files.size() - 1);
|
// return latest track
|
||||||
|
return files[0];
|
||||||
}
|
}
|
||||||
// TODO
|
LogHelper.e(LOG_TAG, "Unable to get files from given folder.");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Gets the last track from directory */
|
||||||
|
private void deleteOldTracks() {
|
||||||
|
if (mFolder != null && mFolder.isDirectory()) {
|
||||||
|
LogHelper.v(LOG_TAG, "Deleting old Track files.");
|
||||||
|
|
||||||
|
// get files and sort them
|
||||||
|
File[] files = mFolder.listFiles();
|
||||||
|
files = sortFiles(files);
|
||||||
|
|
||||||
|
// store length of array
|
||||||
|
int numberOfFiles = files.length;
|
||||||
|
|
||||||
|
// keep the latest ten (mMaxTrackFiles) track files
|
||||||
|
int index = mMaxTrackFiles;
|
||||||
|
// iterate through array
|
||||||
|
while (index < numberOfFiles && files[index].getName().endsWith(mFileExtension)) {
|
||||||
|
files[index].delete();
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Sorts array of files in a way that the newest files are at the top and non-.trackbook files are at the bottom */
|
||||||
|
private File[] sortFiles(File[] files) {
|
||||||
|
// sort array
|
||||||
|
LogHelper.v(LOG_TAG, "Sorting files.");
|
||||||
|
Arrays.sort(files, new Comparator<File>() {
|
||||||
|
@Override
|
||||||
|
public int compare(File file1, File file2) {
|
||||||
|
|
||||||
|
// discard files not ending with ".trackbook"
|
||||||
|
boolean file1IsTrack = file1.getName().endsWith(mFileExtension);
|
||||||
|
boolean file2IsTrack = file2.getName().endsWith(mFileExtension);
|
||||||
|
|
||||||
|
// note: "greater" means higher index in array
|
||||||
|
if (!file1IsTrack && file2IsTrack) {
|
||||||
|
// file1 is not a track, file1 is greater
|
||||||
|
return 1;
|
||||||
|
} else if (!file2IsTrack && file1IsTrack) {
|
||||||
|
// file2 is not a track, file2 is greater
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
// "compareTo" compares abstract pathnames lexicographically | 0 == equal | -1 == file2 less than file1 | 1 == file2 greater than file1
|
||||||
|
return file2.compareTo(file1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// log sorting result // TODO comment out for release
|
||||||
|
String fileList = "";
|
||||||
|
for (File file : files) {
|
||||||
|
fileList = fileList + file.getName() + "\n";
|
||||||
|
}
|
||||||
|
LogHelper.v(LOG_TAG, "+++ List of files +++\n" + fileList);
|
||||||
|
|
||||||
|
// hand back sorted array of files
|
||||||
|
return files;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Return a write-able sub-directory from external storage */
|
/* Return a write-able sub-directory from external storage */
|
||||||
private File getTracksDirectory() {
|
private File getTracksDirectory() {
|
||||||
String subDirectory = "Tracks";
|
File[] storage = mActivity.getExternalFilesDirs(mDirectoryName);
|
||||||
File[] storage = mActivity.getExternalFilesDirs(subDirectory);
|
|
||||||
for (File file : storage) {
|
for (File file : storage) {
|
||||||
if (file != null) {
|
if (file != null) {
|
||||||
String state = EnvironmentCompat.getStorageState(file);
|
String state = EnvironmentCompat.getStorageState(file);
|
||||||
|
|
Loading…
Reference in a new issue