diff --git a/musikr/src/main/java/org/oxycblt/musikr/cache/CacheDatabase.kt b/musikr/src/main/java/org/oxycblt/musikr/cache/CacheDatabase.kt
index 4cb13d6d2..07a3d069a 100644
--- a/musikr/src/main/java/org/oxycblt/musikr/cache/CacheDatabase.kt
+++ b/musikr/src/main/java/org/oxycblt/musikr/cache/CacheDatabase.kt
@@ -36,8 +36,8 @@ import org.oxycblt.musikr.metadata.Properties
import org.oxycblt.musikr.pipeline.RawSong
import org.oxycblt.musikr.tag.Date
import org.oxycblt.musikr.tag.parse.ParsedTags
-import org.oxycblt.musikr.tag.util.correctWhitespace
-import org.oxycblt.musikr.tag.util.splitEscaped
+import org.oxycblt.musikr.util.correctWhitespace
+import org.oxycblt.musikr.util.splitEscaped
@Database(entities = [CachedSong::class], version = 50, exportSchema = false)
abstract class CacheDatabase : RoomDatabase() {
diff --git a/musikr/src/main/java/org/oxycblt/musikr/fs/MusicLocation.kt b/musikr/src/main/java/org/oxycblt/musikr/fs/MusicLocation.kt
index 559ed64ea..d1e5e6235 100644
--- a/musikr/src/main/java/org/oxycblt/musikr/fs/MusicLocation.kt
+++ b/musikr/src/main/java/org/oxycblt/musikr/fs/MusicLocation.kt
@@ -24,7 +24,7 @@ import android.net.Uri
import android.provider.DocumentsContract
import org.oxycblt.musikr.fs.path.DocumentPathFactory
import org.oxycblt.musikr.fs.query.contentResolverSafe
-import org.oxycblt.musikr.tag.util.splitEscaped
+import org.oxycblt.musikr.util.splitEscaped
class MusicLocation internal constructor(val uri: Uri, val path: Path) {
override fun equals(other: Any?) = other is MusicLocation && uri == other.uri
diff --git a/musikr/src/main/java/org/oxycblt/musikr/playlist/m3u/M3U.kt b/musikr/src/main/java/org/oxycblt/musikr/playlist/m3u/M3U.kt
index 6dabfbaf3..448ea8b4f 100644
--- a/musikr/src/main/java/org/oxycblt/musikr/playlist/m3u/M3U.kt
+++ b/musikr/src/main/java/org/oxycblt/musikr/playlist/m3u/M3U.kt
@@ -33,7 +33,7 @@ import org.oxycblt.musikr.playlist.ExportConfig
import org.oxycblt.musikr.playlist.ImportedPlaylist
import org.oxycblt.musikr.playlist.PossiblePaths
import org.oxycblt.musikr.tag.Name
-import org.oxycblt.musikr.tag.util.correctWhitespace
+import org.oxycblt.musikr.util.correctWhitespace
import org.oxycblt.musikr.util.unlikelyToBeNull
/**
diff --git a/musikr/src/main/java/org/oxycblt/musikr/tag/util/ID3.kt b/musikr/src/main/java/org/oxycblt/musikr/tag/format/ID3.kt
similarity index 99%
rename from musikr/src/main/java/org/oxycblt/musikr/tag/util/ID3.kt
rename to musikr/src/main/java/org/oxycblt/musikr/tag/format/ID3.kt
index e49a65f75..3712fc166 100644
--- a/musikr/src/main/java/org/oxycblt/musikr/tag/util/ID3.kt
+++ b/musikr/src/main/java/org/oxycblt/musikr/tag/format/ID3.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package org.oxycblt.musikr.tag.util
+package org.oxycblt.musikr.tag.format
/// --- ID3v2 PARSING ---
diff --git a/musikr/src/main/java/org/oxycblt/musikr/tag/util/Vorbis.kt b/musikr/src/main/java/org/oxycblt/musikr/tag/format/Vorbis.kt
similarity index 98%
rename from musikr/src/main/java/org/oxycblt/musikr/tag/util/Vorbis.kt
rename to musikr/src/main/java/org/oxycblt/musikr/tag/format/Vorbis.kt
index 632a516c4..05c3e2793 100644
--- a/musikr/src/main/java/org/oxycblt/musikr/tag/util/Vorbis.kt
+++ b/musikr/src/main/java/org/oxycblt/musikr/tag/format/Vorbis.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package org.oxycblt.musikr.tag.util
+package org.oxycblt.musikr.tag.format
import org.oxycblt.musikr.util.positiveOrNull
diff --git a/musikr/src/main/java/org/oxycblt/musikr/tag/interpret/Separators.kt b/musikr/src/main/java/org/oxycblt/musikr/tag/interpret/Separators.kt
index edde18804..fe3eb4282 100644
--- a/musikr/src/main/java/org/oxycblt/musikr/tag/interpret/Separators.kt
+++ b/musikr/src/main/java/org/oxycblt/musikr/tag/interpret/Separators.kt
@@ -18,8 +18,8 @@
package org.oxycblt.musikr.tag.interpret
-import org.oxycblt.musikr.tag.util.correctWhitespace
-import org.oxycblt.musikr.tag.util.splitEscaped
+import org.oxycblt.musikr.util.correctWhitespace
+import org.oxycblt.musikr.util.splitEscaped
/**
* Defines the user-specified parsing of multi-value tags. This should be used to parse any tags
diff --git a/musikr/src/main/java/org/oxycblt/musikr/tag/interpret/TagInterpreter.kt b/musikr/src/main/java/org/oxycblt/musikr/tag/interpret/TagInterpreter.kt
index de1e67abe..89de7fd62 100644
--- a/musikr/src/main/java/org/oxycblt/musikr/tag/interpret/TagInterpreter.kt
+++ b/musikr/src/main/java/org/oxycblt/musikr/tag/interpret/TagInterpreter.kt
@@ -27,7 +27,7 @@ import org.oxycblt.musikr.tag.Placeholder
import org.oxycblt.musikr.tag.ReleaseType
import org.oxycblt.musikr.tag.ReplayGainAdjustment
import org.oxycblt.musikr.tag.parse.ParsedTags
-import org.oxycblt.musikr.tag.util.parseId3GenreNames
+import org.oxycblt.musikr.tag.format.parseId3GenreNames
import org.oxycblt.musikr.util.toUuidOrNull
interface TagInterpreter {
diff --git a/musikr/src/main/java/org/oxycblt/musikr/tag/parse/ExoPlayerTagFields.kt b/musikr/src/main/java/org/oxycblt/musikr/tag/parse/ExoPlayerTagFields.kt
index 13a52b425..23ea14a18 100644
--- a/musikr/src/main/java/org/oxycblt/musikr/tag/parse/ExoPlayerTagFields.kt
+++ b/musikr/src/main/java/org/oxycblt/musikr/tag/parse/ExoPlayerTagFields.kt
@@ -21,8 +21,8 @@ package org.oxycblt.musikr.tag.parse
import androidx.core.text.isDigitsOnly
import org.oxycblt.musikr.metadata.Metadata
import org.oxycblt.musikr.tag.Date
-import org.oxycblt.musikr.tag.util.parseId3v2PositionField
-import org.oxycblt.musikr.tag.util.parseXiphPositionField
+import org.oxycblt.musikr.tag.format.parseId3v2PositionField
+import org.oxycblt.musikr.tag.format.parseXiphPositionField
import org.oxycblt.musikr.util.nonZeroOrNull
// Song
diff --git a/musikr/src/main/java/org/oxycblt/musikr/tag/util/Transform.kt b/musikr/src/main/java/org/oxycblt/musikr/util/ParseUtil.kt
similarity index 70%
rename from musikr/src/main/java/org/oxycblt/musikr/tag/util/Transform.kt
rename to musikr/src/main/java/org/oxycblt/musikr/util/ParseUtil.kt
index 48e690733..3a474a0c7 100644
--- a/musikr/src/main/java/org/oxycblt/musikr/tag/util/Transform.kt
+++ b/musikr/src/main/java/org/oxycblt/musikr/util/ParseUtil.kt
@@ -1,26 +1,4 @@
-/*
- * Copyright (c) 2022 Auxio Project
- * Transform.kt is part of Auxio.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package org.oxycblt.musikr.tag.util
-
-/// --- GENERIC PARSING ---
-
-// TODO: Remove the escaping checks, it's too expensive to do this for every single tag.
+package org.oxycblt.musikr.util
/**
* Split a [String] by the given selector, automatically handling escaped characters that satisfy
@@ -67,6 +45,8 @@ inline fun String.splitEscaped(selector: (Char) -> Boolean): List {
return split
}
+// TODO: Remove the escaping checks, it's too expensive to do this for every single tag.
+
/**
* Fix trailing whitespace or blank contents in a [String].
*
diff --git a/musikr/src/test/java/org/oxycblt/musikr/tag/parse/TagUtilTest.kt b/musikr/src/test/java/org/oxycblt/musikr/tag/parse/TagUtilTest.kt
index 1e59c3491..0eed70381 100644
--- a/musikr/src/test/java/org/oxycblt/musikr/tag/parse/TagUtilTest.kt
+++ b/musikr/src/test/java/org/oxycblt/musikr/tag/parse/TagUtilTest.kt
@@ -20,11 +20,11 @@ package org.oxycblt.musikr.tag.parse
import org.junit.Assert.assertEquals
import org.junit.Test
-import org.oxycblt.musikr.tag.util.correctWhitespace
-import org.oxycblt.musikr.tag.util.parseId3GenreNames
-import org.oxycblt.musikr.tag.util.parseId3v2PositionField
-import org.oxycblt.musikr.tag.util.parseXiphPositionField
-import org.oxycblt.musikr.tag.util.splitEscaped
+import org.oxycblt.musikr.util.correctWhitespace
+import org.oxycblt.musikr.tag.format.parseId3GenreNames
+import org.oxycblt.musikr.tag.format.parseId3v2PositionField
+import org.oxycblt.musikr.tag.format.parseXiphPositionField
+import org.oxycblt.musikr.util.splitEscaped
class TagUtilTest {
@Test