musikr.metadata: dont expose file name

Not needed.
This commit is contained in:
Alexander Capehart 2024-12-17 20:03:04 -05:00
parent c431e90af8
commit 7e8764d6d4
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
5 changed files with 10 additions and 22 deletions

View file

@ -30,8 +30,6 @@ JVMInputStream::JVMInputStream(JNIEnv *env, jobject inputStream) : env(env), inp
}
jclass inputStreamClass = env->FindClass(
"org/oxycblt/musikr/metadata/NativeInputStream");
inputStreamNameMethod = env->GetMethodID(inputStreamClass, "name",
"()Ljava/lang/String;");
inputStreamReadBlockMethod = env->GetMethodID(inputStreamClass, "readBlock",
"(J)[B");
inputStreamIsOpenMethod = env->GetMethodID(inputStreamClass, "isOpen",
@ -55,12 +53,8 @@ JVMInputStream::~JVMInputStream() {
}
TagLib::FileName JVMInputStream::name() const {
auto name = (jstring) env->CallObjectMethod(inputStream,
inputStreamNameMethod);
const char *nameChars = env->GetStringUTFChars(name, nullptr);
auto fileName = TagLib::FileName(nameChars);
env->ReleaseStringUTFChars(name, nameChars);
return fileName;
// Not actually used except in FileRef, can safely ignore.
return "";
}
TagLib::ByteVector JVMInputStream::readBlock(size_t length) {

View file

@ -19,20 +19,18 @@
package org.oxycblt.musikr.metadata
import android.content.Context
import android.net.Uri
import java.io.FileInputStream
import java.nio.ByteBuffer
internal class AndroidInputStream(context: Context, fileRef: FileRef) : NativeInputStream {
private val fileName = fileRef.fileName
internal class AndroidInputStream(context: Context, uri: Uri) : NativeInputStream {
private val fd =
requireNotNull(context.contentResolver.openFileDescriptor(fileRef.uri, "r")) {
"Failed to open file descriptor for ${fileRef.fileName}"
requireNotNull(context.contentResolver.openFileDescriptor(uri, "r")) {
"Failed to open file descriptor for $uri"
}
private val fis = FileInputStream(fd.fileDescriptor)
private val channel = fis.channel
override fun name() = fileName
override fun readBlock(length: Long): ByteArray {
val buffer = ByteBuffer.allocate(length.toInt())
channel.read(buffer)

View file

@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.oxycblt.musikr.metadata
import android.content.Context
@ -35,6 +35,6 @@ internal interface MetadataExtractor {
private class MetadataExtractorImpl(private val context: Context) : MetadataExtractor {
override suspend fun extract(file: DeviceFile) =
withContext(Dispatchers.IO) {
TagLibJNI.open(context, FileRef(unlikelyToBeNull(file.path.name), file.uri))
TagLibJNI.open(context, file.uri)
}
}

View file

@ -24,8 +24,6 @@ package org.oxycblt.musikr.metadata
* The vast majority of IO shim between Taglib/KTaglib should occur here to minimize JNI calls.
*/
internal interface NativeInputStream {
fun name(): String
fun readBlock(length: Long): ByteArray
fun isOpen(): Boolean

View file

@ -31,8 +31,8 @@ internal object TagLibJNI {
*
* Note: This method is blocking and should be handled as such if calling from a coroutine.
*/
fun open(context: Context, ref: FileRef): Metadata? {
val inputStream = AndroidInputStream(context, ref)
fun open(context: Context, uri: Uri): Metadata? {
val inputStream = AndroidInputStream(context, uri)
val tag = openNative(inputStream)
inputStream.close()
return tag
@ -40,5 +40,3 @@ internal object TagLibJNI {
private external fun openNative(ioStream: AndroidInputStream): Metadata?
}
internal data class FileRef(val fileName: String, val uri: Uri)