track import: get extension from file name, not URI

When importing tracks from nextcloud, the URI for a file may be something like

content://org.nextcloud.documents/tree/7keh3ot7zmiaxecoktv6bfn6gdygt2lg%2F707/document/7keh3ot7zmiaxecoktv6bfn6gdygt2lg%2F745

The URI contains no ".", so getExtension() would return the whole URI as the extension, resulting in an "Unsupported file format" error.

To fix this, also pass DocumentFile.getName() to the ImportWorker.
This commit is contained in:
Matt Votava
2025-12-27 20:23:33 -08:00
parent 5baa8fa21e
commit 278f6323f1
2 changed files with 5 additions and 1 deletions
@@ -25,6 +25,7 @@ public class ImportWorker extends Worker {
private static final String TAG = ImportWorker.class.getSimpleName();
static final String URI_KEY = "DIRECTORY_URI_KEY";
static final String FILENAME_KEY = "FILENAME_KEY";
static final String RESULT_SUCCESS_LIST_TRACKIDS_KEY = "RESULT_TRACK_IDS";
static final String RESULT_URI_KEY = "RESULT_URI";
@@ -32,11 +33,13 @@ public class ImportWorker extends Worker {
static final String RESULT_FAILURE_IS_DUPLICATE = "RESULT_FAILURE_IS_DUPLICATE";
private final Uri uri;
private final String filename;
public ImportWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
uri = Uri.parse(getInputData().getString(URI_KEY));
filename = getInputData().getString(FILENAME_KEY);
}
@NonNull
@@ -53,7 +56,7 @@ public class ImportWorker extends Worker {
.putString(RESULT_URI_KEY, uri.toString());
String fileExtension = FileUtils.getExtension(uri);
String fileExtension = FileUtils.getExtension(filename);
try {
if (TrackFileFormat.GPX.getExtension().equals(fileExtension)) {
trackIds.addAll(new XMLImporter(new GPXTrackImporter(getApplicationContext(), trackImporter)).importFile(context, uri));
@@ -69,6 +69,7 @@ public class Importer {
WorkRequest importRequest = new OneTimeWorkRequest.Builder(ImportWorker.class)
.setInputData(new Data.Builder()
.putString(ImportWorker.URI_KEY, documentFile.getUri().toString())
.putString(ImportWorker.FILENAME_KEY, documentFile.getName())
.build())
.build();