Skip to content

Commit

Permalink
[WIP] Adjust NuclearMeta
Browse files Browse the repository at this point in the history
  • Loading branch information
Lucki committed Aug 27, 2024
1 parent ca09d7c commit 129ee02
Show file tree
Hide file tree
Showing 9 changed files with 41 additions and 19 deletions.
2 changes: 1 addition & 1 deletion packages/core/src/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export interface NuclearStatus {

export interface NuclearMeta {
uuid: string;
artist: string;
artists: string[];
streams?: Array<{ duration: number }>;
name?: string;
position?: number;
Expand Down
2 changes: 1 addition & 1 deletion packages/main/src/controllers/player.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ class IpcPlayer {
return;
}

this.window.setTitle(`${arg.artist} - ${arg.name} - Nuclear Music Player`);
this.window.setTitle(`${arg.artists[0]} - ${arg.name} - Nuclear Music Player`);
this.systemApi.sendMetadata && this.systemApi.sendMetadata(arg);
this.discord.trackChange(arg);
this.trayMenu.update({track: arg});
Expand Down
2 changes: 1 addition & 1 deletion packages/main/src/services/discord/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ class Discord {
this.baseStart = Date.now();
this.pausedTotal = 0;
this.activity = {
details: `${track.artist} - ${track.name}`,
details: `${track.artists[0]} - ${track.name}`,
startTimestamp: this.baseStart,
largeImageKey: 'logo'
};
Expand Down
4 changes: 2 additions & 2 deletions packages/main/src/services/local-library/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ class LocalLibrary {
}(),
position: common.track.no,
album: common.album,
artist: common.artist || 'unknown',
artists: [common.artist] || ['unknown'],
imageData: common.picture && common.picture[0].data,
lastScanned: +Date.now()
};
Expand Down Expand Up @@ -124,7 +124,7 @@ class LocalLibrary {

if (data && data.recordings && data.recordings.length) {
meta.name = data.recordings[0].name;
meta.artist = data.recordings[0].artists?.[0].name || 'unknown';
meta.artists = data.recordings[0].artists?.map(artist => artist.name) || ['unknown'];
}

if (!meta.name) {
Expand Down
4 changes: 2 additions & 2 deletions packages/main/src/services/trayMenu/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ class TrayMenu {
enabled: false
});
template.push({
label: `by ${this.playerContext.track.artist}`,
label: `by ${this.playerContext.track.artists[0]}`,
enabled: false
});
} else {
Expand Down Expand Up @@ -137,7 +137,7 @@ class TrayMenu {

getToolTipString() {
return this.playerContext.track ?
`${this.playerContext.isPlaying ? 'Playing: ' : ''} ${this.playerContext.track.name} - ${this.playerContext.track.artist}` :
`${this.playerContext.isPlaying ? 'Playing: ' : ''} ${this.playerContext.track.name} - ${this.playerContext.track.artists[0]}` :
this.config.title ;
}

Expand Down
2 changes: 1 addition & 1 deletion packages/scanner/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export type LocalTrack = {
uuid: string;
artist: string;
artists: string[];
title?: string;
album?: string;
duration?: number;
Expand Down
24 changes: 23 additions & 1 deletion packages/scanner/src/js.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,34 @@ pub fn set_optional_field_buffer(
}
}

pub fn set_optional_field_string_array(
cx: &mut FunctionContext,
obj: &mut Handle<JsObject>,
field_name: &str,
value: Option<Vec<String>>,
) {
match value {
Some(v) => {
let field_value = cx.empty_array();
for (i, str) in v.iter().enumerate() {
let js_str = cx.string(&str);
field_value.set(cx, i as u32, js_str).unwrap();
}
obj.set(cx, field_name, field_value).unwrap();
}
None => {
let undefined = cx.undefined();
obj.set(cx, field_name, undefined).unwrap();
}
}
}

pub fn set_properties_from_metadata(
cx: &mut FunctionContext,
obj: &mut Handle<JsObject>,
metadata: &AudioMetadata,
) {
set_optional_field_str(cx, obj, "artist", metadata.artist.clone());
set_optional_field_string_array(cx, obj, "artists", metadata.artists.clone());
set_optional_field_str(cx, obj, "title", metadata.title.clone());
set_optional_field_str(cx, obj, "album", metadata.album.clone());

Expand Down
12 changes: 6 additions & 6 deletions packages/scanner/src/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ use crate::{
#[derive(Default, Debug, Clone, Builder)]
#[builder(setter(strip_option))]
pub struct AudioMetadata {
pub artist: Option<String>,
pub artists: Option<Vec<String>>,
pub title: Option<String>,
pub album: Option<String>,
pub duration: Option<u32>,
Expand All @@ -35,7 +35,7 @@ pub struct AudioMetadata {
impl AudioMetadata {
pub fn new() -> Self {
Self {
artist: None,
artists: None,
title: None,
album: None,
duration: None,
Expand Down Expand Up @@ -74,7 +74,7 @@ impl MetadataExtractor for Mp3MetadataExtractor {
let tag = tag.unwrap();
let mut metadata = AudioMetadata::new();

metadata.artist = tag.artist().map(|s| s.to_string());
metadata.artists = tag.artist().map(|s| s.to_string()).and_then(|s| Some(vec![s]));
metadata.title = tag.title().map(|s| s.to_string());
metadata.album = tag.album().map(|s| s.to_string());
let duration = mp3_duration::from_path(&path).map(|duration| duration.as_secs() as u32);
Expand Down Expand Up @@ -139,7 +139,7 @@ impl MetadataExtractor for FlacMetadataExtractor {

let tag = tag.unwrap();
let mut metadata = AudioMetadata::new();
metadata.artist = Self::extract_string_metadata(&tag, "ARTIST", Some("ALBUMARTIST"));
metadata.artists = Self::extract_string_metadata(&tag, "ARTIST", Some("ALBUMARTIST")).and_then(|s| Some(vec![s]));
metadata.title = Self::extract_string_metadata(&tag, "TITLE", None);
metadata.album = Self::extract_string_metadata(&tag, "ALBUM", None);
let total_samples = tag.get_streaminfo().unwrap().total_samples;
Expand Down Expand Up @@ -213,7 +213,7 @@ impl MetadataExtractor for OggMetadataExtractor {
metadata.title = Some(tag.value.to_string());
}
Some(StandardTagKey::Artist) => {
metadata.artist = Some(tag.value.to_string());
metadata.artists = Some(vec![tag.value.to_string()]);
}
Some(StandardTagKey::Album) => {
metadata.album = Some(tag.value.to_string());
Expand Down Expand Up @@ -257,7 +257,7 @@ impl MetadataExtractor for Mp4MetadataExtractor {
let tag = tag.unwrap();
let mut metadata = AudioMetadata::new();

metadata.artist = tag.artist().map(|s| s.to_string());
metadata.artists = tag.artist().map(|s| s.to_string()).and_then(|s| Some(vec![s]));
metadata.title = tag.title().map(|s| s.to_string());
metadata.album = tag.album().map(|s| s.to_string());
metadata.duration = tag.duration().map(|d| d.as_secs() as u32);
Expand Down
8 changes: 4 additions & 4 deletions packages/scanner/src/scanner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ where

if let Ok(mut metadata) = metadata {
metadata.title = metadata.title.clone().or(Some(filename.clone()));
metadata.artist = metadata.artist.clone().or(Some("unknown".to_string()));
metadata.artists = metadata.artists.clone().or(Some(vec!["unknown".to_string()]));
Ok(LocalTrack {
uuid: Uuid::new_v4().to_string(),
metadata: metadata,
Expand Down Expand Up @@ -112,7 +112,7 @@ mod tests {
pub fn test_extractor_from_path(_path: &str) -> Option<Box<dyn MetadataExtractor>> {
Some(Box::new(TestMetadataExtractor::new(
AudioMetadataBuilder::default()
.artist("Test Artist".to_string())
.artists(vec!["Test Artist".to_string()])
.title("Test Title".to_string())
.album("Test Album".to_string())
.duration(10)
Expand All @@ -131,7 +131,7 @@ mod tests {
let thumbnails_dir: String = "tests/thumbnails".to_string();
let local_track = visit_file(path, test_extractor_from_path, &thumbnails_dir).unwrap();
assert_eq!(local_track.filename, "test.mp3");
assert_eq!(local_track.metadata.artist, Some("Test Artist".to_string()));
assert_eq!(local_track.metadata.artists, Some(vec!["Test Artist".to_string()]));
assert_eq!(local_track.metadata.title, Some("Test Title".to_string()));
assert_eq!(local_track.metadata.album, Some("Test Album".to_string()));
assert_eq!(local_track.metadata.duration, Some(10));
Expand All @@ -157,7 +157,7 @@ mod tests {
let local_track =
visit_file(path, test_extractor_from_path_no_metadata, &thumbnails_dir).unwrap();
assert_eq!(local_track.filename, "test.mp3");
assert_eq!(local_track.metadata.artist, Some("unknown".to_string()));
assert_eq!(local_track.metadata.artists, Some(vec!["unknown".to_string()]));
assert_eq!(local_track.metadata.title, Some("test.mp3".to_string()));
assert_eq!(local_track.metadata.album, None);
assert_eq!(local_track.metadata.duration, None);
Expand Down

0 comments on commit 129ee02

Please sign in to comment.