From 4f36c097acd8da4acc546ce827dfaa13eaa0eba7 Mon Sep 17 00:00:00 2001 From: L-Nafaryus Date: Thu, 26 Sep 2024 19:27:38 +0500 Subject: [PATCH] tune up player and stations, meet backend with frontend --- Cargo.lock | 370 ++++++++++++++++++ Cargo.toml | 9 +- crates/frontend/.gitignore | 1 + crates/frontend/Cargo.toml | 1 + crates/frontend/index.html | 4 +- crates/frontend/src/assets/logo.svg | 50 +++ crates/frontend/src/assets/style.css | 18 +- crates/frontend/src/client.ts | 6 +- .../frontend/src/components/DiscordIcon.vue | 7 + .../frontend/src/components/ExternalIcon.vue | 11 +- crates/frontend/src/components/GitIcon.vue | 7 + crates/frontend/src/components/Modal.vue | 48 --- crates/frontend/src/components/NavBar.vue | 4 +- crates/frontend/src/components/Player.vue | 17 +- crates/frontend/src/components/Station.vue | 32 +- crates/frontend/src/components/VinylIcon.vue | 27 +- crates/frontend/src/index.ts | 25 +- crates/frontend/src/lib.rs | 40 ++ crates/frontend/src/main.ts | 8 +- crates/frontend/src/plugins/directives.ts | 34 -- crates/frontend/src/plugins/index.ts | 1 - crates/frontend/src/router.ts | 2 +- crates/frontend/src/store.ts | 92 ++++- crates/frontend/src/types.ts | 30 -- crates/frontend/src/views/Base.vue | 51 ++- crates/frontend/src/views/Home.vue | 29 +- crates/frontend/templates/base.html | 13 +- crates/frontend/vite.config.ts | 6 +- src/api.rs | 35 +- src/config.rs | 11 + src/main.rs | 97 ++++- 31 files changed, 820 insertions(+), 266 deletions(-) create mode 100644 crates/frontend/src/assets/logo.svg create mode 100644 crates/frontend/src/components/DiscordIcon.vue create mode 100644 crates/frontend/src/components/GitIcon.vue delete mode 100644 crates/frontend/src/components/Modal.vue create mode 100644 crates/frontend/src/lib.rs delete mode 100644 crates/frontend/src/plugins/directives.ts delete mode 100644 crates/frontend/src/plugins/index.ts delete mode 100644 crates/frontend/src/types.ts diff --git a/Cargo.lock b/Cargo.lock index 3ab9bd2..47bfd11 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -26,6 +26,61 @@ dependencies = [ "memchr", ] +[[package]] +name = "askama" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b79091df18a97caea757e28cd2d5fda49c6cd4bd01ddffd7ff01ace0c0ad2c28" +dependencies = [ + "askama_derive", + "askama_escape", + "humansize", + "num-traits", + "percent-encoding", +] + +[[package]] +name = "askama_axum" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41603f7cdbf5ac4af60760f17253eb6adf6ec5b6f14a7ed830cf687d375f163" +dependencies = [ + "askama", + "axum-core", + "http", +] + +[[package]] +name = "askama_derive" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19fe8d6cb13c4714962c072ea496f3392015f0989b1a2847bb4b2d9effd71d83" +dependencies = [ + "askama_parser", + "basic-toml", + "mime", + "mime_guess", + "proc-macro2", + "quote", + "serde", + "syn", +] + +[[package]] +name = "askama_escape" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" + +[[package]] +name = "askama_parser" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acb1161c6b64d1c3d83108213c2a2533a342ac225aabd0bda218278c2ddb00c0" +dependencies = [ + "nom", +] + [[package]] name = "async-compression" version = "0.4.12" @@ -144,12 +199,40 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "basic-toml" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "823388e228f614e9558c6804262db37960ec8821856535f5c3f59913140558f8" +dependencies = [ + "serde", +] + [[package]] name = "bitflags" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bstr" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "bufstream" version = "0.1.4" @@ -168,6 +251,15 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cpufeatures" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.4.2" @@ -177,6 +269,41 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + [[package]] name = "deranged" version = "0.3.11" @@ -186,11 +313,44 @@ dependencies = [ "powerfmt", ] +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "unicode-xid", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + [[package]] name = "elnafo-radio" version = "0.1.0" dependencies = [ "axum", + "elnafo-radio-frontend", + "mime_guess", "mpd", "serde", "serde_json", @@ -202,6 +362,18 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "elnafo-radio-frontend" +version = "0.1.0" +dependencies = [ + "askama", + "askama_axum", + "derive_more", + "ignore", + "npm_rs", + "rust-embed", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -272,12 +444,35 @@ dependencies = [ "pin-utils", ] +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "gimli" version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" +[[package]] +name = "globset" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + [[package]] name = "h2" version = "0.4.6" @@ -355,6 +550,15 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "humansize" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" +dependencies = [ + "libm", +] + [[package]] name = "hyper" version = "1.4.1" @@ -392,6 +596,22 @@ dependencies = [ "tower-service", ] +[[package]] +name = "ignore" +version = "0.4.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" +dependencies = [ + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata 0.4.7", + "same-file", + "walkdir", + "winapi-util", +] + [[package]] name = "indexmap" version = "2.5.0" @@ -420,6 +640,12 @@ version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + [[package]] name = "log" version = "0.4.22" @@ -453,6 +679,22 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.8.0" @@ -483,6 +725,25 @@ dependencies = [ "bufstream", ] +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "npm_rs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1454347ca3c562570eff8af4a09445783dc4b7ccd00853390a7f88f76037b55" +dependencies = [ + "cfg-if", +] + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -499,6 +760,15 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + [[package]] name = "object" version = "0.36.4" @@ -626,6 +896,40 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +[[package]] +name = "rust-embed" +version = "8.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa66af4a4fdd5e7ebc276f115e895611a34739a9c1c01028383d612d550953c0" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6125dbc8867951125eec87294137f4e9c2c96566e61bf72c45095a7c77761478" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e5347777e9aacb56039b0e1f28785929a8a3b709e87482e7442c72e7c12529d" +dependencies = [ + "sha2", + "walkdir", +] + [[package]] name = "rustc-demangle" version = "0.1.24" @@ -644,6 +948,15 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "serde" version = "1.0.210" @@ -707,6 +1020,17 @@ dependencies = [ "serde", ] +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -993,18 +1317,55 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-ident" version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +[[package]] +name = "unicode-xid" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" + [[package]] name = "valuable" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -1027,6 +1388,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index 614a9cc..4c0d1f2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,8 @@ repository = "https://vcs.elnafo.ru/L-Nafaryus/elnafo-radio" [dependencies] axum = { version = "0.7.6", features = ["http2", "macros"] } -#elnafo-radio-frontend = { version = "0.1.0", path = "crates/frontend" } +elnafo-radio-frontend = { version = "0.1.0", path = "crates/frontend" } +mime_guess = "2.0.5" mpd = "0.1.0" serde = { version = "1.0.210", features = ["derive"] } serde_json = "1.0.128" @@ -22,6 +23,6 @@ tracing = "0.1.40" tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } -#[workspace] -#members = ["crates/frontend"] -#resolver = "2" +[workspace] +members = ["crates/frontend"] +resolver = "2" diff --git a/crates/frontend/.gitignore b/crates/frontend/.gitignore index 907155d..9793b11 100644 --- a/crates/frontend/.gitignore +++ b/crates/frontend/.gitignore @@ -4,5 +4,6 @@ node_modules/ *.tsbuildinfo *.mjs *.log +/dist openapi.json diff --git a/crates/frontend/Cargo.toml b/crates/frontend/Cargo.toml index ce5c98f..8834059 100644 --- a/crates/frontend/Cargo.toml +++ b/crates/frontend/Cargo.toml @@ -11,4 +11,5 @@ npm_rs = "1.0.0" [dependencies] askama = { version = "0.12.1", features = ["with-axum"] } askama_axum = "0.4.0" +derive_more = { version = "1.0.0", features = ["display"] } rust-embed = "8.3.0" diff --git a/crates/frontend/index.html b/crates/frontend/index.html index 03b04da..51822ad 100644 --- a/crates/frontend/index.html +++ b/crates/frontend/index.html @@ -2,9 +2,9 @@ - + - Materia Dev + Elnafo Radio Dev
diff --git a/crates/frontend/src/assets/logo.svg b/crates/frontend/src/assets/logo.svg new file mode 100644 index 0000000..8bbad54 --- /dev/null +++ b/crates/frontend/src/assets/logo.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/crates/frontend/src/assets/style.css b/crates/frontend/src/assets/style.css index dae9b8e..2a5697e 100644 --- a/crates/frontend/src/assets/style.css +++ b/crates/frontend/src/assets/style.css @@ -27,7 +27,7 @@ } .button { - @apply pt-1 pb-1 pl-3 pr-3 sm:pt-2 sm:pb-2 sm:pl-5 sm:pr-5 rounded bg-ctp-peach border hover:bg-ctp-overlay0/20 text-ctp-blue cursor-pointer; + @apply pt-1 pb-1 pl-3 pr-3 sm:pt-2 sm:pb-2 sm:pl-5 sm:pr-5 rounded-md bg-ctp-peach border hover:bg-ctp-surface0/20 text-ctp-blue cursor-pointer; } .link-button { @@ -51,19 +51,3 @@ } } -@layer utilities { - .bg-grid { - - background: - linear-gradient(180deg, rgba(0, 0, 0, 0) 0px, rgba(187, 65, 143, 1) 10%, - rgba(187, 65, 143, 1) 2px, rgba(0, 0, 0, 0) 0px), - linear-gradient(90deg, rgba(0, 0, 0, 0) 0px, rgba(187, 65, 143, 1) 10%, - rgba(187, 65, 143, 1) 2px, rgba(0, 0, 0, 0) 0px); - background-size: 2em 4em, 6em 2em; - transform: perspective(500px) rotateX(60deg) scale(0.5); - transform-origin: 50% 0%; - z-index: -1; - - @apply absolute w-[250%] -left-[75%] h-[200%]; - } -} diff --git a/crates/frontend/src/client.ts b/crates/frontend/src/client.ts index bbc1a48..1584599 100644 --- a/crates/frontend/src/client.ts +++ b/crates/frontend/src/client.ts @@ -30,6 +30,8 @@ export type StationInfo = { export type SongInfo = { artist: string | null; title: string | null; + duration: number | null; + elapsed: number | null; tags: Array<[string, string]>; }; @@ -38,7 +40,7 @@ export const stationsInfo = (options?: Opt url: '/api/stations' }); }; -export const songStatus = (options?: Options) => { return (options?.client ?? client).get({ +export const songStatus = (options?: Options) => { return (options?.client ?? client).post({ ...options, - url: '/api/status' + url: '/api/status', }); }; diff --git a/crates/frontend/src/components/DiscordIcon.vue b/crates/frontend/src/components/DiscordIcon.vue new file mode 100644 index 0000000..84bf3a7 --- /dev/null +++ b/crates/frontend/src/components/DiscordIcon.vue @@ -0,0 +1,7 @@ + diff --git a/crates/frontend/src/components/ExternalIcon.vue b/crates/frontend/src/components/ExternalIcon.vue index e813373..cc69f5d 100644 --- a/crates/frontend/src/components/ExternalIcon.vue +++ b/crates/frontend/src/components/ExternalIcon.vue @@ -1,7 +1,10 @@ diff --git a/crates/frontend/src/components/GitIcon.vue b/crates/frontend/src/components/GitIcon.vue new file mode 100644 index 0000000..8d7cb52 --- /dev/null +++ b/crates/frontend/src/components/GitIcon.vue @@ -0,0 +1,7 @@ + diff --git a/crates/frontend/src/components/Modal.vue b/crates/frontend/src/components/Modal.vue deleted file mode 100644 index a460521..0000000 --- a/crates/frontend/src/components/Modal.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - - - diff --git a/crates/frontend/src/components/NavBar.vue b/crates/frontend/src/components/NavBar.vue index 92aca33..034f306 100644 --- a/crates/frontend/src/components/NavBar.vue +++ b/crates/frontend/src/components/NavBar.vue @@ -1,6 +1,6 @@