storage helper keeps the last ten tracks and deletes only files of type .trackbook

This commit is contained in:
y20k 2016-09-27 16:07:33 +02:00
parent deed2f624d
commit a38270d2c4

View file

@ -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);