-
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor reparser UI and logic into extra class
- Loading branch information
Showing
4 changed files
with
124 additions
and
77 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package eu.darken.pgc.importer.core | ||
|
||
import eu.darken.pgc.common.ca.CaString | ||
import eu.darken.pgc.common.debug.logging.logTag | ||
import javax.inject.Inject | ||
|
||
class Reparser @Inject constructor( | ||
private val ingester: Ingester, | ||
) { | ||
|
||
suspend fun reparse(onProgress: (Int, Int, CaString) -> Unit): Int { | ||
var current = 0 | ||
val max = ingester.flightCount() | ||
return ingester.reingest { progress -> | ||
onProgress(current++, max, progress) | ||
} | ||
} | ||
|
||
companion object { | ||
internal val TAG = logTag("Importer", "Reparser") | ||
} | ||
} |
74 changes: 74 additions & 0 deletions
74
app/src/main/java/eu/darken/pgc/importer/core/UriImporter.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
package eu.darken.pgc.importer.core | ||
|
||
import android.content.ContentResolver | ||
import android.net.Uri | ||
import android.webkit.MimeTypeMap | ||
import eu.darken.pgc.common.ca.CaString | ||
import eu.darken.pgc.common.ca.toCaString | ||
import eu.darken.pgc.common.debug.logging.log | ||
import eu.darken.pgc.common.debug.logging.logTag | ||
import okhttp3.internal.closeQuietly | ||
import okio.source | ||
import java.io.InputStream | ||
import javax.inject.Inject | ||
|
||
class UriImporter @Inject constructor( | ||
private val contentResolver: ContentResolver, | ||
private val ingester: Ingester, | ||
) { | ||
|
||
suspend fun import(uris: Collection<Uri>, onProgress: (Int, Int, CaString) -> Unit): Result { | ||
|
||
val success = mutableListOf<Uri>() | ||
val skipped = mutableListOf<Uri>() | ||
val failed = mutableListOf<Pair<Uri, Exception>>() | ||
|
||
val validUris = uris | ||
.filter { MimeTypeMap.getFileExtensionFromUrl(it.path!!) == "igc" } | ||
var current = 0 | ||
validUris.forEach { uri -> | ||
log(TAG) { "import(...): $uri" } | ||
onProgress(current++, validUris.size, (uri.path ?: uri.toString()).toCaString()) | ||
|
||
val dangles = mutableSetOf<InputStream>() | ||
|
||
try { | ||
val added = ingester.ingest( | ||
IngestIGCPayload( | ||
sourceProvider = { | ||
contentResolver.openInputStream(uri)!!.also { dangles.add(it) }.source() | ||
}, | ||
originalSource = uri.toString(), | ||
sourceType = when { | ||
uri.authority?.contains("org.xcontest.XCTrack") == true -> IngestIGCPayload.SourceType.XCTRACK | ||
else -> IngestIGCPayload.SourceType.UNKNOWN | ||
}, | ||
) | ||
) | ||
|
||
if (added) success.add(uri) else skipped.add(uri) | ||
} catch (e: Exception) { | ||
failed.add(uri to e) | ||
} finally { | ||
dangles.forEach { it.closeQuietly() } | ||
} | ||
} | ||
|
||
(uris - (success + skipped).toSet()).forEach { | ||
failed.add(it to IllegalArgumentException("Unknown data type")) | ||
} | ||
|
||
return Result(success, skipped, failed) | ||
} | ||
|
||
data class Result( | ||
val success: List<Uri>, | ||
val skipped: List<Uri>, | ||
val failed: List<Pair<Uri, Exception>>, | ||
) | ||
|
||
|
||
companion object { | ||
internal val TAG = logTag("Importer", "Uri") | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters