mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-06-08 14:18:08 +02:00
Introduce device specific writable directory (MAC address)
Also adds temporary method to move the fetched files from the legacy path to the new one which does not include the device name.
Also moves the FileIndex to the end of the cached files to allow for easier sorting.
Cherry-picked from 525b395c01
and adapted
This commit is contained in:
parent
7dcefd1815
commit
598549b1f5
|
@ -79,6 +79,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.StressSample;
|
|||
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureSample;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.ServiceDeviceSupport;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.SleepAsAndroidSender;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
||||
|
||||
|
@ -290,6 +291,18 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator {
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getWritableExportDirectory(final GBDevice device) throws IOException {
|
||||
File dir;
|
||||
dir = new File(FileUtils.getExternalFilesDir() + File.separator + device.getAddress());
|
||||
if (!dir.isDirectory()) {
|
||||
if (!dir.mkdir()) {
|
||||
throw new IOException("Cannot create device specific directory for " + device.getName());
|
||||
}
|
||||
}
|
||||
return dir;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAppCacheSortFilename() {
|
||||
return null;
|
||||
|
|
|
@ -442,6 +442,11 @@ public interface DeviceCoordinator {
|
|||
*/
|
||||
File getAppCacheDir() throws IOException;
|
||||
|
||||
/**
|
||||
* Returns the dedicated writable export directory for this device.
|
||||
*/
|
||||
File getWritableExportDirectory(GBDevice device) throws IOException;
|
||||
|
||||
/**
|
||||
* Returns a String containing the device app sort order filename.
|
||||
*/
|
||||
|
|
|
@ -338,7 +338,7 @@ public class FileTransferHandler implements MessageHandler {
|
|||
public String getFileName() {
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
|
||||
String dateString = dateFormat.format(fileDate);
|
||||
return getFiletype().name() + "_" + getFileIndex() + "_" + dateString + (getFiletype().isFitFile() ? ".fit" : ".bin");
|
||||
return getFiletype().name() + "_" + dateString + "_" + getFileIndex() + (getFiletype().isFitFile() ? ".fit" : ".bin");
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
|
|
@ -445,6 +445,9 @@ public class GarminSupport extends AbstractBTLEDeviceSupport implements ICommuni
|
|||
}
|
||||
|
||||
private void processDownloadQueue() {
|
||||
|
||||
moveFilesFromLegacyCache(); //TODO: remove before merging
|
||||
|
||||
if (!filesToDownload.isEmpty() && !fileTransferHandler.isDownloading()) {
|
||||
if (!gbDevice.isBusy()) {
|
||||
GB.updateTransferNotification(getContext().getString(R.string.busy_task_fetch_activity_data), "", true, 0, getContext());
|
||||
|
@ -484,6 +487,36 @@ public class GarminSupport extends AbstractBTLEDeviceSupport implements ICommuni
|
|||
}
|
||||
}
|
||||
|
||||
private void moveFilesFromLegacyCache() { //TODO: remove before merging
|
||||
File legacyDir;
|
||||
try {
|
||||
legacyDir = new File(FileUtils.getExternalFilesDir() + "/" + FileUtils.makeValidFileName(getDevice().getName() + "_" + getDevice().getAddress()));
|
||||
|
||||
if (legacyDir.isDirectory()) {
|
||||
final File newDir = getWritableExportDirectory();
|
||||
File[] files = legacyDir.listFiles();
|
||||
|
||||
for (File file : files) {
|
||||
if (file.isFile()) {
|
||||
File destFile = new File(newDir, file.getName());
|
||||
boolean success = file.renameTo(destFile);
|
||||
if (!success) {
|
||||
LOG.error("Failed to move file {}", file.getName());
|
||||
} else {
|
||||
LOG.info("Moved file {} to new cache directory", file.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
boolean removed = legacyDir.delete();
|
||||
if (!removed) {
|
||||
LOG.error("Failed to remove legacy directory: {}", legacyDir);
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
LOG.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private void enableBatteryLevelUpdate() {
|
||||
final ProtobufMessage batteryLevelProtobufRequest = protocolBufferHandler.prepareProtobufRequest(GdiSmartProto.Smart.newBuilder()
|
||||
.setDeviceStatusService(
|
||||
|
@ -597,14 +630,7 @@ public class GarminSupport extends AbstractBTLEDeviceSupport implements ICommuni
|
|||
}
|
||||
|
||||
public File getWritableExportDirectory() throws IOException {
|
||||
File dir;
|
||||
dir = new File(FileUtils.getExternalFilesDir() + "/" + FileUtils.makeValidFileName(getDevice().getName() + "_" + getDevice().getAddress()));
|
||||
if (!dir.isDirectory()) {
|
||||
if (!dir.mkdir()) {
|
||||
throw new IOException("Cannot create device specific directory for " + getDevice().getName());
|
||||
}
|
||||
}
|
||||
return dir;
|
||||
return getDevice().getDeviceCoordinator().getWritableExportDirectory(getDevice());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue
Block a user