From c115e34aacd148818569613e267ebab4ef86ef7e Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Mon, 10 Feb 2025 11:21:49 -0700 Subject: [PATCH] musikr: reformat shim --- .../musikr/metadata/MetadataExtractor.kt | 6 +- .../oxycblt/musikr/metadata/MetadataJNI.kt | 2 +- musikr/src/main/jni/shim/file_shim.cpp | 68 ++--- musikr/src/main/jni/shim/file_shim.hpp | 25 +- musikr/src/main/jni/shim/iostream_shim.cpp | 246 ++++++++++-------- musikr/src/main/jni/shim/iostream_shim.hpp | 58 +++-- musikr/src/main/jni/shim/tk_shim.cpp | 34 ++- musikr/src/main/jni/shim/tk_shim.hpp | 22 +- 8 files changed, 254 insertions(+), 207 deletions(-) diff --git a/musikr/src/main/java/org/oxycblt/musikr/metadata/MetadataExtractor.kt b/musikr/src/main/java/org/oxycblt/musikr/metadata/MetadataExtractor.kt index 5b6b50bde..cb37b5133 100644 --- a/musikr/src/main/java/org/oxycblt/musikr/metadata/MetadataExtractor.kt +++ b/musikr/src/main/java/org/oxycblt/musikr/metadata/MetadataExtractor.kt @@ -17,7 +17,7 @@ */ package org.oxycblt.musikr.metadata - + import android.os.ParcelFileDescriptor import android.util.Log import java.io.FileInputStream @@ -39,7 +39,7 @@ private object MetadataExtractorImpl : MetadataExtractor { val fis = FileInputStream(fd.fileDescriptor) val input = NativeInputStream(deviceFile, fis) Log.d("MetadataExtractorImpl", MetadataJNI.openFile(input)) -// MetadataJNI.open(deviceFile, fis).also { fis.close() } - null + // MetadataJNI.open(deviceFile, fis).also { fis.close() } + null } } diff --git a/musikr/src/main/java/org/oxycblt/musikr/metadata/MetadataJNI.kt b/musikr/src/main/java/org/oxycblt/musikr/metadata/MetadataJNI.kt index 4969e7d04..08c6d05a3 100644 --- a/musikr/src/main/java/org/oxycblt/musikr/metadata/MetadataJNI.kt +++ b/musikr/src/main/java/org/oxycblt/musikr/metadata/MetadataJNI.kt @@ -1,6 +1,6 @@ /* * Copyright (c) 2024 Auxio Project - * TagLibJNI.kt is part of Auxio. + * MetadataJNI.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 diff --git a/musikr/src/main/jni/shim/file_shim.cpp b/musikr/src/main/jni/shim/file_shim.cpp index eaa57ceb0..549852a46 100644 --- a/musikr/src/main/jni/shim/file_shim.cpp +++ b/musikr/src/main/jni/shim/file_shim.cpp @@ -1,41 +1,51 @@ #include "file_shim.hpp" -namespace taglib_shim { +namespace taglib_shim +{ -const TagLib::Ogg::File* File_asOgg(const TagLib::File* file) { - return dynamic_cast(file); -} + const TagLib::Ogg::File *File_asOgg(const TagLib::File *file) + { + return dynamic_cast(file); + } -const TagLib::Ogg::Vorbis::File* File_asVorbis(const TagLib::File* file) { - return dynamic_cast(file); -} + const TagLib::Ogg::Vorbis::File *File_asVorbis(const TagLib::File *file) + { + return dynamic_cast(file); + } -const TagLib::Ogg::Opus::File* File_asOpus(const TagLib::File* file) { - return dynamic_cast(file); -} + const TagLib::Ogg::Opus::File *File_asOpus(const TagLib::File *file) + { + return dynamic_cast(file); + } -const TagLib::MPEG::File* File_asMPEG(const TagLib::File* file) { - return dynamic_cast(file); -} + const TagLib::MPEG::File *File_asMPEG(const TagLib::File *file) + { + return dynamic_cast(file); + } -const TagLib::FLAC::File* File_asFLAC(const TagLib::File* file) { - return dynamic_cast(file); -} + const TagLib::FLAC::File *File_asFLAC(const TagLib::File *file) + { + return dynamic_cast(file); + } -const TagLib::MP4::File* File_asMP4(const TagLib::File* file) { - return dynamic_cast(file); -} + const TagLib::MP4::File *File_asMP4(const TagLib::File *file) + { + return dynamic_cast(file); + } -const TagLib::RIFF::WAV::File* File_asWAV(const TagLib::File* file) { - return dynamic_cast(file); -} + const TagLib::RIFF::WAV::File *File_asWAV(const TagLib::File *file) + { + return dynamic_cast(file); + } -const TagLib::WavPack::File* File_asWavPack(const TagLib::File* file) { - return dynamic_cast(file); -} + const TagLib::WavPack::File *File_asWavPack(const TagLib::File *file) + { + return dynamic_cast(file); + } -const TagLib::APE::File* File_asAPE(const TagLib::File* file) { - return dynamic_cast(file); -} + const TagLib::APE::File *File_asAPE(const TagLib::File *file) + { + return dynamic_cast(file); + } -} // namespace taglib_shim \ No newline at end of file +} // namespace taglib_shim \ No newline at end of file diff --git a/musikr/src/main/jni/shim/file_shim.hpp b/musikr/src/main/jni/shim/file_shim.hpp index e381b76de..aa7cba3bd 100644 --- a/musikr/src/main/jni/shim/file_shim.hpp +++ b/musikr/src/main/jni/shim/file_shim.hpp @@ -14,17 +14,18 @@ #include #include -namespace taglib_shim { +namespace taglib_shim +{ -// File conversion functions -const TagLib::Ogg::File* File_asOgg(const TagLib::File* file); -const TagLib::Ogg::Vorbis::File* File_asVorbis(const TagLib::File* file); -const TagLib::Ogg::Opus::File* File_asOpus(const TagLib::File* file); -const TagLib::MPEG::File* File_asMPEG(const TagLib::File* file); -const TagLib::FLAC::File* File_asFLAC(const TagLib::File* file); -const TagLib::MP4::File* File_asMP4(const TagLib::File* file); -const TagLib::RIFF::WAV::File* File_asWAV(const TagLib::File* file); -const TagLib::WavPack::File* File_asWavPack(const TagLib::File* file); -const TagLib::APE::File* File_asAPE(const TagLib::File* file); + // File conversion functions + const TagLib::Ogg::File *File_asOgg(const TagLib::File *file); + const TagLib::Ogg::Vorbis::File *File_asVorbis(const TagLib::File *file); + const TagLib::Ogg::Opus::File *File_asOpus(const TagLib::File *file); + const TagLib::MPEG::File *File_asMPEG(const TagLib::File *file); + const TagLib::FLAC::File *File_asFLAC(const TagLib::File *file); + const TagLib::MP4::File *File_asMP4(const TagLib::File *file); + const TagLib::RIFF::WAV::File *File_asWAV(const TagLib::File *file); + const TagLib::WavPack::File *File_asWavPack(const TagLib::File *file); + const TagLib::APE::File *File_asAPE(const TagLib::File *file); -} // namespace taglib_shim \ No newline at end of file +} // namespace taglib_shim \ No newline at end of file diff --git a/musikr/src/main/jni/shim/iostream_shim.cpp b/musikr/src/main/jni/shim/iostream_shim.cpp index c56079b3c..c4bcd392c 100644 --- a/musikr/src/main/jni/shim/iostream_shim.cpp +++ b/musikr/src/main/jni/shim/iostream_shim.cpp @@ -4,126 +4,152 @@ #include // These are the functions we'll define in Rust -extern "C" { - const char* rust_stream_name(const void* stream); - size_t rust_stream_read(void* stream, uint8_t* buffer, size_t length); - void rust_stream_write(void* stream, const uint8_t* data, size_t length); - void rust_stream_seek(void* stream, int64_t offset, int32_t whence); - void rust_stream_truncate(void* stream, int64_t length); - int64_t rust_stream_tell(const void* stream); - int64_t rust_stream_length(const void* stream); - bool rust_stream_is_readonly(const void* stream); +extern "C" +{ + const char *rust_stream_name(const void *stream); + size_t rust_stream_read(void *stream, uint8_t *buffer, size_t length); + void rust_stream_write(void *stream, const uint8_t *data, size_t length); + void rust_stream_seek(void *stream, int64_t offset, int32_t whence); + void rust_stream_truncate(void *stream, int64_t length); + int64_t rust_stream_tell(const void *stream); + int64_t rust_stream_length(const void *stream); + bool rust_stream_is_readonly(const void *stream); } -namespace taglib_shim { +namespace taglib_shim +{ -// Factory function to create a new RustIOStream -std::unique_ptr new_rust_iostream(RustStream* stream) { - return std::unique_ptr(new RustIOStream(stream)); -} - -// Factory function to create a FileRef from a stream -std::unique_ptr new_FileRef_from_stream(std::unique_ptr stream) { - return std::make_unique(stream.release(), true); -} - -RustIOStream::RustIOStream(RustStream* stream) : rust_stream(stream) {} - -RustIOStream::~RustIOStream() = default; - -TagLib::FileName RustIOStream::name() const { - return rust_stream_name(rust_stream); -} - -TagLib::ByteVector RustIOStream::readBlock(size_t length) { - std::vector buffer(length); - size_t bytes_read = rust_stream_read(rust_stream, buffer.data(), length); - return TagLib::ByteVector(reinterpret_cast(buffer.data()), bytes_read); -} - -void RustIOStream::writeBlock(const TagLib::ByteVector& data) { - rust_stream_write(rust_stream, - reinterpret_cast(data.data()), - data.size()); -} - -void RustIOStream::insert(const TagLib::ByteVector& data, TagLib::offset_t start, size_t replace) { - // Save current position - auto current = tell(); - - // Seek to insert position - seek(start); - - // If replacing, remove that section first - if (replace > 0) { - removeBlock(start, replace); + // Factory function to create a new RustIOStream + std::unique_ptr new_rust_iostream(RustStream *stream) + { + return std::unique_ptr(new RustIOStream(stream)); } - - // Write new data - writeBlock(data); - - // Restore position - seek(current); -} -void RustIOStream::removeBlock(TagLib::offset_t start, size_t length) { - if (length == 0) return; - - // Save current position - auto current = tell(); - - // Get file size - auto file_length = this->length(); - - // Read everything after the removed section - seek(start + length); - auto remaining = readBlock(file_length - (start + length)); - - // Truncate to start position - seek(start); - truncate(start); - - // Write remaining data - writeBlock(remaining); - - // Restore position - seek(current); -} - -void RustIOStream::seek(TagLib::offset_t offset, Position p) { - int32_t whence; - switch (p) { - case Beginning: whence = SEEK_SET; break; - case Current: whence = SEEK_CUR; break; - case End: whence = SEEK_END; break; - default: throw std::runtime_error("Invalid seek position"); + // Factory function to create a FileRef from a stream + std::unique_ptr new_FileRef_from_stream(std::unique_ptr stream) + { + return std::make_unique(stream.release(), true); } - rust_stream_seek(rust_stream, offset, whence); -} -void RustIOStream::clear() { - truncate(0); - seek(0); -} + RustIOStream::RustIOStream(RustStream *stream) : rust_stream(stream) {} -void RustIOStream::truncate(TagLib::offset_t length) { - rust_stream_truncate(rust_stream, length); -} + RustIOStream::~RustIOStream() = default; -TagLib::offset_t RustIOStream::tell() const { - return rust_stream_tell(rust_stream); -} + TagLib::FileName RustIOStream::name() const + { + return rust_stream_name(rust_stream); + } -TagLib::offset_t RustIOStream::length() { - return rust_stream_length(rust_stream); -} + TagLib::ByteVector RustIOStream::readBlock(size_t length) + { + std::vector buffer(length); + size_t bytes_read = rust_stream_read(rust_stream, buffer.data(), length); + return TagLib::ByteVector(reinterpret_cast(buffer.data()), bytes_read); + } -bool RustIOStream::readOnly() const { - return rust_stream_is_readonly(rust_stream); -} + void RustIOStream::writeBlock(const TagLib::ByteVector &data) + { + rust_stream_write(rust_stream, + reinterpret_cast(data.data()), + data.size()); + } -bool RustIOStream::isOpen() const { - return true; // If we have a stream, it's open -} + void RustIOStream::insert(const TagLib::ByteVector &data, TagLib::offset_t start, size_t replace) + { + // Save current position + auto current = tell(); -} // namespace taglib_shim \ No newline at end of file + // Seek to insert position + seek(start); + + // If replacing, remove that section first + if (replace > 0) + { + removeBlock(start, replace); + } + + // Write new data + writeBlock(data); + + // Restore position + seek(current); + } + + void RustIOStream::removeBlock(TagLib::offset_t start, size_t length) + { + if (length == 0) + return; + + // Save current position + auto current = tell(); + + // Get file size + auto file_length = this->length(); + + // Read everything after the removed section + seek(start + length); + auto remaining = readBlock(file_length - (start + length)); + + // Truncate to start position + seek(start); + truncate(start); + + // Write remaining data + writeBlock(remaining); + + // Restore position + seek(current); + } + + void RustIOStream::seek(TagLib::offset_t offset, Position p) + { + int32_t whence; + switch (p) + { + case Beginning: + whence = SEEK_SET; + break; + case Current: + whence = SEEK_CUR; + break; + case End: + whence = SEEK_END; + break; + default: + throw std::runtime_error("Invalid seek position"); + } + rust_stream_seek(rust_stream, offset, whence); + } + + void RustIOStream::clear() + { + truncate(0); + seek(0); + } + + void RustIOStream::truncate(TagLib::offset_t length) + { + rust_stream_truncate(rust_stream, length); + } + + TagLib::offset_t RustIOStream::tell() const + { + return rust_stream_tell(rust_stream); + } + + TagLib::offset_t RustIOStream::length() + { + return rust_stream_length(rust_stream); + } + + bool RustIOStream::readOnly() const + { + return rust_stream_is_readonly(rust_stream); + } + + bool RustIOStream::isOpen() const + { + return true; // If we have a stream, it's open + } + +} // namespace taglib_shim \ No newline at end of file diff --git a/musikr/src/main/jni/shim/iostream_shim.hpp b/musikr/src/main/jni/shim/iostream_shim.hpp index 823a099b5..6845b89f9 100644 --- a/musikr/src/main/jni/shim/iostream_shim.hpp +++ b/musikr/src/main/jni/shim/iostream_shim.hpp @@ -5,37 +5,39 @@ #include #include -namespace taglib_shim { +namespace taglib_shim +{ -// Forward declaration of the Rust-side stream -struct RustStream; + // Forward declaration of the Rust-side stream + struct RustStream; -// C++ implementation of TagLib::IOStream that delegates to Rust -class RustIOStream : public TagLib::IOStream { -public: - explicit RustIOStream(RustStream* stream); - ~RustIOStream() override; + // C++ implementation of TagLib::IOStream that delegates to Rust + class RustIOStream : public TagLib::IOStream + { + public: + explicit RustIOStream(RustStream *stream); + ~RustIOStream() override; - // TagLib::IOStream interface implementation - TagLib::FileName name() const override; - TagLib::ByteVector readBlock(size_t length) override; - void writeBlock(const TagLib::ByteVector& data) override; - void insert(const TagLib::ByteVector& data, TagLib::offset_t start = 0, size_t replace = 0) override; - void removeBlock(TagLib::offset_t start = 0, size_t length = 0) override; - void seek(TagLib::offset_t offset, Position p = Beginning) override; - void clear() override; - void truncate(TagLib::offset_t length) override; - TagLib::offset_t tell() const override; - TagLib::offset_t length() override; - bool readOnly() const override; - bool isOpen() const override; + // TagLib::IOStream interface implementation + TagLib::FileName name() const override; + TagLib::ByteVector readBlock(size_t length) override; + void writeBlock(const TagLib::ByteVector &data) override; + void insert(const TagLib::ByteVector &data, TagLib::offset_t start = 0, size_t replace = 0) override; + void removeBlock(TagLib::offset_t start = 0, size_t length = 0) override; + void seek(TagLib::offset_t offset, Position p = Beginning) override; + void clear() override; + void truncate(TagLib::offset_t length) override; + TagLib::offset_t tell() const override; + TagLib::offset_t length() override; + bool readOnly() const override; + bool isOpen() const override; -private: - RustStream* rust_stream; -}; + private: + RustStream *rust_stream; + }; -// Factory functions -std::unique_ptr new_rust_iostream(RustStream* stream); -std::unique_ptr new_FileRef_from_stream(std::unique_ptr stream); + // Factory functions + std::unique_ptr new_rust_iostream(RustStream *stream); + std::unique_ptr new_FileRef_from_stream(std::unique_ptr stream); -} // namespace taglib_shim \ No newline at end of file +} // namespace taglib_shim \ No newline at end of file diff --git a/musikr/src/main/jni/shim/tk_shim.cpp b/musikr/src/main/jni/shim/tk_shim.cpp index 171394cd1..3f6bf9fd7 100644 --- a/musikr/src/main/jni/shim/tk_shim.cpp +++ b/musikr/src/main/jni/shim/tk_shim.cpp @@ -1,30 +1,36 @@ #include "tk_shim.hpp" +namespace taglib_shim +{ + Property::Property(TagLib::String key, TagLib::StringList value) : key_(key), value_(value) {} -namespace taglib_shim { -Property::Property(TagLib::String key, TagLib::StringList value) : key_(key), value_(value) {} + const TagLib::String &Property::key() const + { + return key_; + } -const TagLib::String &Property::key() const { - return key_; -} - -const TagLib::StringList &Property::value() const { - return value_; -} - std::unique_ptr> SimplePropertyMap_to_vector(const TagLib::SimplePropertyMap &map) { + const TagLib::StringList &Property::value() const + { + return value_; + } + std::unique_ptr> SimplePropertyMap_to_vector(const TagLib::SimplePropertyMap &map) + { std::unique_ptr> result = std::make_unique>(); - for (const auto &pair : map) { + for (const auto &pair : map) + { result->push_back(Property(pair.first, pair.second)); } return result; } - std::unique_ptr> StringList_to_vector(const TagLib::StringList &list) { + std::unique_ptr> StringList_to_vector(const TagLib::StringList &list) + { std::unique_ptr> result = std::make_unique>(); - for (const auto &str : list) { + for (const auto &str : list) + { result->push_back(str); } return result; } - + } diff --git a/musikr/src/main/jni/shim/tk_shim.hpp b/musikr/src/main/jni/shim/tk_shim.hpp index ae84faae1..e79786998 100644 --- a/musikr/src/main/jni/shim/tk_shim.hpp +++ b/musikr/src/main/jni/shim/tk_shim.hpp @@ -7,18 +7,20 @@ #include #include -namespace taglib_shim { +namespace taglib_shim +{ -struct Property { - Property(TagLib::String key, TagLib::StringList value); - const TagLib::String &key() const; - const TagLib::StringList &value() const; + struct Property + { + Property(TagLib::String key, TagLib::StringList value); + const TagLib::String &key() const; + const TagLib::StringList &value() const; -private: - TagLib::String key_; - TagLib::StringList value_; -}; + private: + TagLib::String key_; + TagLib::StringList value_; + }; std::unique_ptr> SimplePropertyMap_to_vector(const TagLib::SimplePropertyMap &map); std::unique_ptr> StringList_to_vector(const TagLib::StringList &list); -} \ No newline at end of file +} \ No newline at end of file