aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkrolxon <krolyxon@tutanota.com>2024-04-22 02:42:36 +0530
committerkrolxon <krolyxon@tutanota.com>2024-04-22 02:42:36 +0530
commite5e69281caed57c5d76d77e3a5260f37a2673548 (patch)
tree72d3852e3c9680d6f4fadecd59d4e3b098dbf274
parenta025aad8e7910c8ab265003ce5a6b1f59bb33f09 (diff)
get basic stuff working
-rwxr-xr-x.gitignore1
-rwxr-xr-xCargo.lock253
-rwxr-xr-xCargo.toml11
-rwxr-xr-x[-rw-r--r--]README.md0
-rwxr-xr-xsrc/connection.rs92
-rwxr-xr-xsrc/main.rs34
6 files changed, 391 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100755
index 0000000..ea8c4bf
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/target
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100755
index 0000000..430356b
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,253 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "anstream"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
+dependencies = [
+ "anstyle",
+ "windows-sys",
+]
+
+[[package]]
+name = "bufstream"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8"
+
+[[package]]
+name = "clap"
+version = "4.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+[[package]]
+name = "mpd"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e12cace5746cb0aa78faa6cd2caec9f9c01882fc0e6b54d34685a2d3303ea34"
+dependencies = [
+ "bufstream",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rmptui"
+version = "0.1.0"
+dependencies = [
+ "clap",
+ "mpd",
+ "rust_fzf",
+]
+
+[[package]]
+name = "rust_fzf"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76a94b9c6a9880356cc6de038a52397509f8ac86a18c30d76da904b08fec2cb1"
+
+[[package]]
+name = "strsim"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+
+[[package]]
+name = "syn"
+version = "2.0.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100755
index 0000000..59d71b8
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "rmptui"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+mpd = "0.1.0"
+clap = { version = "4.0.29", features = ["derive"] }
+rust_fzf = "0.3.1"
diff --git a/README.md b/README.md
index 944d3a6..944d3a6 100644..100755
--- a/README.md
+++ b/README.md
diff --git a/src/connection.rs b/src/connection.rs
new file mode 100755
index 0000000..ebc847f
--- /dev/null
+++ b/src/connection.rs
@@ -0,0 +1,92 @@
+use mpd::song::Song;
+use mpd::Client;
+
+pub struct Connection {
+ pub conn: Client,
+}
+
+impl Connection {
+ pub fn new(addrs: &str) -> Result<Self, mpd::error::Error> {
+ let conn = Client::connect(addrs)?;
+ Ok(Self { conn })
+ }
+
+ pub fn play_fzf(&mut self) {
+ let mut ss: Vec<String> = Vec::new();
+ self.get_file_tree_into_vec(&mut ss, ".", ".");
+
+ let choice: usize;
+ let fzf_choice = rust_fzf::select(ss.clone(), Vec::new()).unwrap();
+ if let Some(index) = ss.iter().position(|s| s == fzf_choice.get(0).unwrap()) {
+ choice = index;
+ } else {
+ return;
+ }
+
+ let song = self.get_song(ss.get(choice).unwrap());
+
+ if self.conn.queue().unwrap().is_empty() {
+ self.push(song);
+ self.conn.play().unwrap();
+ } else {
+ self.push(song);
+ self.conn.next().unwrap();
+ }
+ }
+
+ fn get_file_tree_into_vec(&mut self, vec: &mut Vec<String>, path: &str, dir_append: &str) {
+ let songs = self.conn.listfiles(path).unwrap_or_default();
+ for (i, s) in songs {
+ // Output of listfiles contains the last-modified thing, we dont want that
+ if i != "Last-Modified" {
+ if i == "directory" {
+ self.get_file_tree_into_vec(vec, &s, &s);
+ } else {
+ // We parse the string as float because the output of listfiles contains some random numbers, we dont want that
+ if !s.parse::<f32>().is_ok() {
+ let mut sam: String = String::new();
+ sam.push_str(dir_append);
+ sam.push_str(r"/");
+ sam.push_str(s.as_str());
+ vec.push(sam);
+ }
+ }
+ }
+ }
+ }
+
+ fn push(&mut self, song: Song) {
+ self.conn.push(song).unwrap();
+
+ }
+
+ fn get_song(&self, filename: &str) -> Song {
+ Song {
+ file: filename.to_string(),
+ artist: None,
+ title: None,
+ duration: None,
+ last_mod: None,
+ name: None,
+ place: None,
+ range: None,
+ tags: vec![("".to_string(), "".to_string())],
+ }
+ }
+
+ pub fn status(&mut self) {
+ let current_song = self.conn.currentsong();
+ let status = self.conn.status().unwrap();
+
+ if current_song.is_ok() {
+ let song = current_song.unwrap();
+ if let Some(s) = song {
+ println!("{} - {}", s.artist.unwrap(), s.title.unwrap());
+ }
+ }
+ println!(
+ "volume: {}\trepeat: {}\trandom: {}\tsingle: {}\tconsume: {}",
+ status.volume, status.repeat, status.random, status.single, status.consume
+ );
+ }
+}
diff --git a/src/main.rs b/src/main.rs
new file mode 100755
index 0000000..48db1ba
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,34 @@
+mod connection;
+use clap::Parser;
+use connection::Connection;
+
+#[derive(Parser, Debug)]
+#[command(version, about, long_about = None)]
+struct Args {
+ /// Ignore case in search
+ #[arg(short, long, default_value = "false")]
+ pub pause: bool,
+
+ #[arg(short, long, default_value = "false")]
+ pub toggle_pause: bool,
+
+ #[arg(short, long, default_value = "false")]
+ pub show_status: bool,
+
+ #[arg(short, long, default_value = "false")]
+ pub fzf_select: bool,
+}
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let args = Args::parse();
+ let mut conn = Connection::new("127.0.0.1:6600")?;
+ if args.show_status {
+ conn.status();
+ }
+
+ if args.fzf_select {
+ conn.play_fzf()
+ }
+
+ Ok(())
+}