Move DeviceType to core

This commit is contained in:
Roderick van Domburg 2022-01-06 09:48:11 +01:00
parent 4ca1f661d5
commit c1965198fc
No known key found for this signature in database
GPG key ID: FE2585E713F9F30A
7 changed files with 112 additions and 116 deletions

1
Cargo.lock generated
View file

@ -1369,7 +1369,6 @@ dependencies = [
"hmac",
"hyper",
"libmdns",
"librespot-connect",
"librespot-core",
"log",
"rand",

View file

@ -1,4 +1,4 @@
use std::{fmt, str::FromStr};
use crate::core::config::DeviceType;
#[derive(Clone, Debug)]
pub struct ConnectConfig {
@ -18,98 +18,3 @@ impl Default for ConnectConfig {
}
}
}
#[derive(Clone, Copy, Debug, Hash, PartialOrd, Ord, PartialEq, Eq)]
pub enum DeviceType {
Unknown = 0,
Computer = 1,
Tablet = 2,
Smartphone = 3,
Speaker = 4,
Tv = 5,
Avr = 6,
Stb = 7,
AudioDongle = 8,
GameConsole = 9,
CastAudio = 10,
CastVideo = 11,
Automobile = 12,
Smartwatch = 13,
Chromebook = 14,
UnknownSpotify = 100,
CarThing = 101,
Observer = 102,
HomeThing = 103,
}
impl FromStr for DeviceType {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
use self::DeviceType::*;
match s.to_lowercase().as_ref() {
"computer" => Ok(Computer),
"tablet" => Ok(Tablet),
"smartphone" => Ok(Smartphone),
"speaker" => Ok(Speaker),
"tv" => Ok(Tv),
"avr" => Ok(Avr),
"stb" => Ok(Stb),
"audiodongle" => Ok(AudioDongle),
"gameconsole" => Ok(GameConsole),
"castaudio" => Ok(CastAudio),
"castvideo" => Ok(CastVideo),
"automobile" => Ok(Automobile),
"smartwatch" => Ok(Smartwatch),
"chromebook" => Ok(Chromebook),
"carthing" => Ok(CarThing),
"homething" => Ok(HomeThing),
_ => Err(()),
}
}
}
impl From<&DeviceType> for &str {
fn from(d: &DeviceType) -> &'static str {
use self::DeviceType::*;
match d {
Unknown => "Unknown",
Computer => "Computer",
Tablet => "Tablet",
Smartphone => "Smartphone",
Speaker => "Speaker",
Tv => "TV",
Avr => "AVR",
Stb => "STB",
AudioDongle => "AudioDongle",
GameConsole => "GameConsole",
CastAudio => "CastAudio",
CastVideo => "CastVideo",
Automobile => "Automobile",
Smartwatch => "Smartwatch",
Chromebook => "Chromebook",
UnknownSpotify => "UnknownSpotify",
CarThing => "CarThing",
Observer => "Observer",
HomeThing => "HomeThing",
}
}
}
impl From<DeviceType> for &str {
fn from(d: DeviceType) -> &'static str {
(&d).into()
}
}
impl fmt::Display for DeviceType {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let str: &str = self.into();
f.write_str(str)
}
}
impl Default for DeviceType {
fn default() -> DeviceType {
DeviceType::Speaker
}
}

View file

@ -1,4 +1,4 @@
use std::path::PathBuf;
use std::{fmt, path::PathBuf, str::FromStr};
use url::Url;
@ -21,3 +21,98 @@ impl Default for SessionConfig {
}
}
}
#[derive(Clone, Copy, Debug, Hash, PartialOrd, Ord, PartialEq, Eq)]
pub enum DeviceType {
Unknown = 0,
Computer = 1,
Tablet = 2,
Smartphone = 3,
Speaker = 4,
Tv = 5,
Avr = 6,
Stb = 7,
AudioDongle = 8,
GameConsole = 9,
CastAudio = 10,
CastVideo = 11,
Automobile = 12,
Smartwatch = 13,
Chromebook = 14,
UnknownSpotify = 100,
CarThing = 101,
Observer = 102,
HomeThing = 103,
}
impl FromStr for DeviceType {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
use self::DeviceType::*;
match s.to_lowercase().as_ref() {
"computer" => Ok(Computer),
"tablet" => Ok(Tablet),
"smartphone" => Ok(Smartphone),
"speaker" => Ok(Speaker),
"tv" => Ok(Tv),
"avr" => Ok(Avr),
"stb" => Ok(Stb),
"audiodongle" => Ok(AudioDongle),
"gameconsole" => Ok(GameConsole),
"castaudio" => Ok(CastAudio),
"castvideo" => Ok(CastVideo),
"automobile" => Ok(Automobile),
"smartwatch" => Ok(Smartwatch),
"chromebook" => Ok(Chromebook),
"carthing" => Ok(CarThing),
"homething" => Ok(HomeThing),
_ => Err(()),
}
}
}
impl From<&DeviceType> for &str {
fn from(d: &DeviceType) -> &'static str {
use self::DeviceType::*;
match d {
Unknown => "Unknown",
Computer => "Computer",
Tablet => "Tablet",
Smartphone => "Smartphone",
Speaker => "Speaker",
Tv => "TV",
Avr => "AVR",
Stb => "STB",
AudioDongle => "AudioDongle",
GameConsole => "GameConsole",
CastAudio => "CastAudio",
CastVideo => "CastVideo",
Automobile => "Automobile",
Smartwatch => "Smartwatch",
Chromebook => "Chromebook",
UnknownSpotify => "UnknownSpotify",
CarThing => "CarThing",
Observer => "Observer",
HomeThing => "HomeThing",
}
}
}
impl From<DeviceType> for &str {
fn from(d: DeviceType) -> &'static str {
(&d).into()
}
}
impl fmt::Display for DeviceType {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let str: &str = self.into();
f.write_str(str)
}
}
impl Default for DeviceType {
fn default() -> DeviceType {
DeviceType::Speaker
}
}

View file

@ -25,10 +25,6 @@ sha-1 = "0.9"
thiserror = "1.0"
tokio = { version = "1.0", features = ["parking_lot", "sync", "rt"] }
[dependencies.librespot-connect]
path = "../connect"
version = "0.3.1"
[dependencies.librespot-core]
path = "../core"
version = "0.3.1"

View file

@ -9,26 +9,27 @@
mod server;
use std::borrow::Cow;
use std::io;
use std::pin::Pin;
use std::task::{Context, Poll};
use std::{
borrow::Cow,
io,
pin::Pin,
task::{Context, Poll},
};
use cfg_if::cfg_if;
use futures_core::Stream;
use librespot_connect as connect;
use librespot_core as core;
use thiserror::Error;
use self::server::DiscoveryServer;
pub use crate::core::Error;
use librespot_core as core;
/// Credentials to be used in [`librespot`](`librespot_core`).
pub use crate::core::authentication::Credentials;
/// Determining the icon in the list of available devices.
pub use crate::connect::config::DeviceType;
pub use crate::core::Error;
pub use crate::core::config::DeviceType;
/// Makes this device visible to Spotify clients in the local network.
///

View file

@ -28,7 +28,7 @@ use tokio::sync::{mpsc, oneshot};
use super::DiscoveryError;
use crate::{
connect::config::DeviceType,
core::config::DeviceType,
core::{authentication::Credentials, diffie_hellman::DhLocalKeys, Error},
};

View file

@ -18,11 +18,11 @@ use tokio::sync::mpsc::UnboundedReceiver;
use url::Url;
use librespot::{
connect::{
config::{ConnectConfig, DeviceType},
spirc::Spirc,
connect::{config::ConnectConfig, spirc::Spirc},
core::{
authentication::Credentials, cache::Cache, config::DeviceType, version, Session,
SessionConfig,
},
core::{authentication::Credentials, cache::Cache, version, Session, SessionConfig},
playback::{
audio_backend::{self, SinkBuilder, BACKENDS},
config::{