diff --git a/musikr/src/main/jni/src/taglib/bridge.rs b/musikr/src/main/jni/src/taglib/bridge.rs index 7ceca1ada..a410d178a 100644 --- a/musikr/src/main/jni/src/taglib/bridge.rs +++ b/musikr/src/main/jni/src/taglib/bridge.rs @@ -132,6 +132,8 @@ mod bridge_impl { #[namespace = "TagLib::RIFF::WAV"] #[cxx_name = "File"] type CPPWAVFile; + #[cxx_name = "ID3v2Tag"] + fn WAVID3v2Tag(self: &CPPWAVFile) -> *mut CPPID3v2Tag; #[namespace = "TagLib::FLAC"] #[cxx_name = "Picture"] diff --git a/musikr/src/main/jni/src/taglib/mod.rs b/musikr/src/main/jni/src/taglib/mod.rs index 1f7e5a361..9315d4225 100644 --- a/musikr/src/main/jni/src/taglib/mod.rs +++ b/musikr/src/main/jni/src/taglib/mod.rs @@ -12,3 +12,4 @@ pub mod tk; pub mod id3v2; pub mod id3v1; pub mod mp4; +pub mod riff; \ No newline at end of file diff --git a/musikr/src/main/jni/src/taglib/riff.rs b/musikr/src/main/jni/src/taglib/riff.rs new file mode 100644 index 000000000..f33e51550 --- /dev/null +++ b/musikr/src/main/jni/src/taglib/riff.rs @@ -0,0 +1,21 @@ +use super::bridge::{self, CPPWAVFile}; +use super::id3v2::ID3v2Tag; +use super::this::{RefThisMut, This, ThisMut}; +use std::pin::Pin; + +pub struct WAVFile<'file_ref> { + this: RefThisMut<'file_ref, CPPWAVFile>, +} + +impl<'file_ref> WAVFile<'file_ref> { + pub(super) fn new(this: RefThisMut<'file_ref, CPPWAVFile>) -> Self { + Self { this } + } + + pub fn id3v2_tag(&mut self) -> Option> { + let tag = self.this.as_ref().WAVID3v2Tag(); + let tag_ref = unsafe { tag.as_mut() }; + let tag_this = tag_ref.map(|tag| unsafe { RefThisMut::new(tag) }); + tag_this.map(|this| ID3v2Tag::new(this)) + } +} \ No newline at end of file