Skip to content

Commit

Permalink
feat(addons): stream from local music library to Chromecast
Browse files Browse the repository at this point in the history
chore: remove println messages
  • Loading branch information
tsirysndr committed Jan 26, 2023
1 parent 7f4f9a2 commit d82ef7b
Show file tree
Hide file tree
Showing 15 changed files with 82 additions and 134 deletions.
10 changes: 10 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion entity/src/album.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
use music_player_types::types::{Album as AlbumType, RemoteCoverUrl, Song, Track as TrackType, RemoteTrackUrl};
use music_player_types::types::{
Album as AlbumType, RemoteCoverUrl, RemoteTrackUrl, Song, Track as TrackType,
};
use sea_orm::{entity::prelude::*, ActiveValue};
use serde::{Deserialize, Serialize};

Expand Down
29 changes: 29 additions & 0 deletions graphql/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -216,3 +216,32 @@ pub fn update_track_url<T: RemoteTrackUrl>(devices: Vec<Device>, result: T) -> R
false => Err(Error::msg("Cannot find current device")),
}
}

pub fn update_cover_url<T: RemoteCoverUrl>(
devices: Vec<Device>,
result: T,
will_play_on_chromecast: bool,
) -> Result<T, Error> {
let base_url = match devices
.clone()
.into_iter()
.find(|device| device.is_current_device)
{
Some(device) => {
let host = match will_play_on_chromecast {
true => device.ip,
false => device.host,
};
Some(format!("http://{}:{}", host, device.port))
}
None => None,
};

match base_url.is_some() {
true => {
let base_url = base_url.unwrap();
Ok(result.with_remote_cover_url(&base_url))
}
false => Err(Error::msg("Cannot find current device")),
}
}
13 changes: 12 additions & 1 deletion graphql/src/schema/tracklist.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ use tokio::sync::{mpsc::UnboundedSender, Mutex};

use crate::load_tracks;
use crate::simple_broker::SimpleBroker;
use crate::update_cover_url;
use crate::update_track_url;
use crate::update_tracks_url;

Expand Down Expand Up @@ -340,7 +341,17 @@ impl TracklistMutation {
if device.receiver.is_some() {
let receiver = device.receiver.as_mut().unwrap();
let will_play_on_chromecast = receiver.device_type() == "chromecast";
result = update_tracks_url(devices, result, will_play_on_chromecast)?;
result = update_tracks_url(devices.clone(), result, will_play_on_chromecast)?;
result.tracks = result
.tracks
.into_iter()
.map(|track| {
let t: types::Track = track.into();
update_cover_url(devices.clone(), t.clone(), will_play_on_chromecast)
.unwrap_or_else(|_| t.clone())
.into()
})
.collect();
}

load_tracks(
Expand Down
1 change: 1 addition & 0 deletions types/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@ lofty = "0.9.0"
md5 = "0.7.0"
tantivy = "0.18.1"
mdns-sd = "0.5.9"
minreq = { version = "2.6.0" }
20 changes: 19 additions & 1 deletion types/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,19 @@ impl From<ServiceInfo> for Device {
let is_current_device = device_id == settings.device_id
&& srv.get_fullname().split("-").collect::<Vec<&str>>()[0].to_owned() == "http";

let mut addresses = srv.get_addresses().iter();
let mut ip = addresses.next().unwrap().to_string();

if is_current_device {
loop {
ip = addresses.next().unwrap().to_string();
let url = format!("http://{}:{}/", ip, srv.get_port());
if minreq::get(url).send().is_ok() {
break;
}
}
}

return Self {
id: device_id.clone(),
name: srv
Expand All @@ -373,7 +386,7 @@ impl From<ServiceInfo> for Device {
.split_at(srv.get_hostname().len() - 1)
.0
.to_owned(),
ip: srv.get_addresses().iter().next().unwrap().to_string(),
ip,
port: srv.get_port(),
service: srv.get_fullname().split("-").collect::<Vec<&str>>()[0].to_owned(),
app: "music-player".to_owned(),
Expand Down Expand Up @@ -520,6 +533,11 @@ impl RemoteCoverUrl for Album {
Some(ref cover) => Some(format!("{}/covers/{}", base_url, cover)),
None => None,
},
tracks: self
.tracks
.iter()
.map(|track| track.with_remote_cover_url(base_url))
.collect(),
..self.clone()
}
}
Expand Down
6 changes: 3 additions & 3 deletions webui/musicplayer/build/asset-manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"files": {
"main.css": "/static/css/main.6215da36.css",
"main.js": "/static/js/main.64124a82.js",
"main.js": "/static/js/main.fdcf2837.js",
"static/js/787.26bf0a29.chunk.js": "/static/js/787.26bf0a29.chunk.js",
"static/media/RockfordSans-ExtraBold.otf": "/static/media/RockfordSans-ExtraBold.1513e8fd97078bfb7708.otf",
"static/media/RockfordSans-Bold.otf": "/static/media/RockfordSans-Bold.c9f599ae01b13e565598.otf",
Expand All @@ -10,11 +10,11 @@
"static/media/RockfordSans-Light.otf": "/static/media/RockfordSans-Light.b4a12e8abb38f7d105c4.otf",
"index.html": "/index.html",
"main.6215da36.css.map": "/static/css/main.6215da36.css.map",
"main.64124a82.js.map": "/static/js/main.64124a82.js.map",
"main.fdcf2837.js.map": "/static/js/main.fdcf2837.js.map",
"787.26bf0a29.chunk.js.map": "/static/js/787.26bf0a29.chunk.js.map"
},
"entrypoints": [
"static/css/main.6215da36.css",
"static/js/main.64124a82.js"
"static/js/main.fdcf2837.js"
]
}
2 changes: 1 addition & 1 deletion webui/musicplayer/build/index.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>Music Player</title><script defer="defer" src="/static/js/main.64124a82.js"></script><link href="/static/css/main.6215da36.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>Music Player</title><script defer="defer" src="/static/js/main.fdcf2837.js"></script><link href="/static/css/main.6215da36.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1 change: 0 additions & 1 deletion webui/musicplayer/build/static/js/main.64124a82.js.map

This file was deleted.

3 changes: 0 additions & 3 deletions webui/musicplayer/build/static/js/main.b9c93193.js

This file was deleted.

119 changes: 0 additions & 119 deletions webui/musicplayer/build/static/js/main.b9c93193.js.LICENSE.txt

This file was deleted.

1 change: 0 additions & 1 deletion webui/musicplayer/build/static/js/main.b9c93193.js.map

This file was deleted.

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions webui/musicplayer/build/static/js/main.fdcf2837.js.map

Large diffs are not rendered by default.

0 comments on commit d82ef7b

Please sign in to comment.