mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-11-30 22:12:55 +01:00
Garmin: Overwrite files if local size is 0, omit date if equal to garmin epoch
This commit is contained in:
parent
aee42ec1be
commit
8be679d1fd
@ -13,6 +13,7 @@ import java.nio.ByteOrder;
|
|||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.deviceevents.FileDownloadedDeviceEvent;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.deviceevents.FileDownloadedDeviceEvent;
|
||||||
@ -312,6 +313,8 @@ public class FileTransferHandler implements MessageHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static class DirectoryEntry {
|
public static class DirectoryEntry {
|
||||||
|
private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss", Locale.ROOT);
|
||||||
|
|
||||||
private final int fileIndex;
|
private final int fileIndex;
|
||||||
private final FileType.FILETYPE filetype;
|
private final FileType.FILETYPE filetype;
|
||||||
private final int fileNumber;
|
private final int fileNumber;
|
||||||
@ -339,9 +342,12 @@ public class FileTransferHandler implements MessageHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getFileName() {
|
public String getFileName() {
|
||||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
|
final StringBuilder sb = new StringBuilder(getFiletype().name());
|
||||||
String dateString = dateFormat.format(fileDate);
|
if (fileDate.getTime() != GarminTimeUtils.GARMIN_TIME_EPOCH * 1000L) {
|
||||||
return getFiletype().name() + "_" + dateString + "_" + getFileIndex() + (getFiletype().isFitFile() ? ".fit" : ".bin");
|
sb.append("_").append(SDF.format(fileDate));
|
||||||
|
}
|
||||||
|
sb.append("_").append(getFileIndex()).append(getFiletype().isFitFile() ? ".fit" : ".bin");
|
||||||
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getLegacyFileName() {
|
public String getLegacyFileName() {
|
||||||
|
@ -81,6 +81,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages.Syst
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages.status.NotificationSubscriptionStatusMessage;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages.status.NotificationSubscriptionStatusMessage;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
|
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.util.Optional;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.StringUtils;
|
import nodomain.freeyourgadget.gadgetbridge.util.StringUtils;
|
||||||
|
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_ALLOW_HIGH_MTU;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_ALLOW_HIGH_MTU;
|
||||||
@ -484,7 +485,7 @@ public class GarminSupport extends AbstractBTLEDeviceSupport implements ICommuni
|
|||||||
|
|
||||||
while (!filesToDownload.isEmpty()) {
|
while (!filesToDownload.isEmpty()) {
|
||||||
final FileTransferHandler.DirectoryEntry directoryEntry = filesToDownload.remove();
|
final FileTransferHandler.DirectoryEntry directoryEntry = filesToDownload.remove();
|
||||||
if (checkFileExists(directoryEntry.getFileName()) || checkFileExists(directoryEntry.getLegacyFileName())) {
|
if (alreadyDownloaded(directoryEntry)) {
|
||||||
LOG.debug("File: {} already downloaded, not downloading again.", directoryEntry.getFileName());
|
LOG.debug("File: {} already downloaded, not downloading again.", directoryEntry.getFileName());
|
||||||
if (!getKeepActivityDataOnDevice()) { // delete file from watch if already downloaded
|
if (!getKeepActivityDataOnDevice()) { // delete file from watch if already downloaded
|
||||||
sendOutgoingMessage(new SetFileFlagsMessage(directoryEntry.getFileIndex(), SetFileFlagsMessage.FileFlags.ARCHIVE));
|
sendOutgoingMessage(new SetFileFlagsMessage(directoryEntry.getFileIndex(), SetFileFlagsMessage.FileFlags.ARCHIVE));
|
||||||
@ -493,12 +494,9 @@ public class GarminSupport extends AbstractBTLEDeviceSupport implements ICommuni
|
|||||||
}
|
}
|
||||||
|
|
||||||
final DownloadRequestMessage downloadRequestMessage = fileTransferHandler.downloadDirectoryEntry(directoryEntry);
|
final DownloadRequestMessage downloadRequestMessage = fileTransferHandler.downloadDirectoryEntry(directoryEntry);
|
||||||
if (downloadRequestMessage != null) {
|
LOG.debug("Will download file: {}", directoryEntry.getFileName());
|
||||||
sendOutgoingMessage(downloadRequestMessage);
|
sendOutgoingMessage(downloadRequestMessage);
|
||||||
return;
|
return;
|
||||||
} else {
|
|
||||||
LOG.debug("File: {} already downloaded, not downloading again, from inside.", directoryEntry.getFileName());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -698,17 +696,39 @@ public class GarminSupport extends AbstractBTLEDeviceSupport implements ICommuni
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean checkFileExists(String fileName) {
|
private boolean alreadyDownloaded(final FileTransferHandler.DirectoryEntry entry) {
|
||||||
|
final Optional<File> file = getFile(entry.getFileName());
|
||||||
|
if (file.isPresent()) {
|
||||||
|
if (file.get().length() == 0) {
|
||||||
|
LOG.warn("File {} is empty", entry.getFileName());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Optional<File> legacyFile = getFile(entry.getLegacyFileName());
|
||||||
|
if (legacyFile.isPresent()) {
|
||||||
|
if (legacyFile.get().length() == 0) {
|
||||||
|
LOG.warn("Legacy file {} is empty", entry.getFileName());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Optional<File> getFile(final String fileName) {
|
||||||
File dir;
|
File dir;
|
||||||
try {
|
try {
|
||||||
dir = getWritableExportDirectory();
|
dir = getWritableExportDirectory();
|
||||||
File outputFile = new File(dir, fileName);
|
File outputFile = new File(dir, fileName);
|
||||||
if (outputFile.exists()) //do not download again already downloaded file
|
if (outputFile.exists())
|
||||||
return true;
|
return Optional.of(outputFile);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOG.error("IOException: " + e);
|
LOG.error("Failed to get file", e);
|
||||||
}
|
}
|
||||||
return false;
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public File getWritableExportDirectory() throws IOException {
|
public File getWritableExportDirectory() throws IOException {
|
||||||
|
Loading…
Reference in New Issue
Block a user