diff --git a/.github/workflows/build_gnu.yml b/.github/workflows/build_gnu.yml index aae62390..f5ab6d48 100644 --- a/.github/workflows/build_gnu.yml +++ b/.github/workflows/build_gnu.yml @@ -4,8 +4,8 @@ on: push: branches: - 'feature/win' - schedule: - - cron: '50 5 * * *' + # schedule: + # - cron: '50 5 * * *' env: CARGO_TERM_COLOR: always @@ -18,7 +18,7 @@ jobs: strategy: matrix: include: - - arch-name: x86_64-windows-gnu + - arch: x86_64-windows-gnu os: windows-latest target: x86_64-pc-windows-gnu artifact: tsukimi.exe @@ -40,16 +40,26 @@ jobs: - name: Build ${{matrix.target}} run: | $env:Path = "C:\msys64\usr\bin;C:\msys64\mingw64\bin;C:\msys64\mingw64\lib;C:\msys64\mingw64\include;" + $env:Path; - cargo build --release --locked - mkdir C:/artifacts - cp target/release/${{matrix.artifact}} C:/artifacts/ - cd C:/msys64/mingw64/bin - cp *.dll C:/artifacts/ + cargo build --release --locked --target ${{matrix.target}} + mkdir artifact && cd artifact + mkdir tsukimi-windows-gnu-amd64/ && cd tsukimi-windows-gnu-amd64/ && mkdir bin/ && mkdir share/ && mkdir lib/ + cp ../../target/${{matrix.target}}/release/${{ matrix.artifact }} bin/ + cp C:/msys64/mingw64/bin/*.dll bin/ + cp -recurse C:/msys64/mingw64/lib/gdk-pixbuf-2.0 lib/ + remove-item lib/gdk-pixbuf-2.0/2.10.0/loaders/* -exclude "*svg.dll" + cp -recurse C:/msys64/mingw64/share/glib-2.0 share/ + get-childitem -recurse -path share/glib-2.0/* -exclude "*gschemas.compiled*"|remove-item -recurse + cp -recurse C:/msys64/mingw64/share/icons share/ + remove-item -recurse share/icons/hicolor && remove-item -recurse share/icons/Adwaita/scalable && remove-item -recurse share/icons/Adwaita/cursors + remove-item -recurse share/icons/Adwaita/16x16 && remove-item -recurse share/icons/Adwaita/symbolic-up-to-32 + gci -directory -recurse .|where-object {$_.getfilesysteminfos().count -eq 0}|remove-item -recurse + cd .. + compress-archive -path ./* -destinationpath ./tsukimi-${{matrix.arch}}.zip - name: Upload artifact uses: actions/upload-artifact@v4 with: name: tsukimi-${{matrix.arch-name}} - path: C:/artifacts/* + path: artifact/*.zip compression-level: 5 retention-days: 3 diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index 390833ca..922943eb 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -1,11 +1,11 @@ name: feature/win - Linux CI on: workflow_dispatch: - push: - branches: - - 'feature/win' - schedule: - - cron: '45 5 * * *' + # push: + # branches: + # - 'feature/win' + # schedule: + # - cron: '45 5 * * *' jobs: build-release: diff --git a/.github/workflows/build_macos.yml b/.github/workflows/build_macos.yml index e6fecd91..c8462cc5 100644 --- a/.github/workflows/build_macos.yml +++ b/.github/workflows/build_macos.yml @@ -1,11 +1,11 @@ name: feature/win - MacOS CI on: workflow_dispatch: - push: - branches: - - 'feature/win' - schedule: - - cron: '55 5 * * *' + # push: + # branches: + # - 'feature/win' + # schedule: + # - cron: '55 5 * * *' env: CARGO_TERM_COLOR: always diff --git a/.github/workflows/build_msvc.yml b/.github/workflows/build_msvc.yml index 8139c636..b31b6a1d 100644 --- a/.github/workflows/build_msvc.yml +++ b/.github/workflows/build_msvc.yml @@ -1,11 +1,11 @@ name: feature/win - Windows MSVC CI on: workflow_dispatch: - push: - branches: - - 'feature/win' - schedule: - - cron: '5 6 * * *' + # push: + # branches: + # - 'feature/win' + # schedule: + # - cron: '5 6 * * *' env: CARGO_TERM_COLOR: always diff --git a/.github/workflows/build_release.yml b/.github/workflows/build_release.yml index c1a74a00..2763c0f5 100644 --- a/.github/workflows/build_release.yml +++ b/.github/workflows/build_release.yml @@ -16,11 +16,11 @@ jobs: matrix: include: # x86_64-windows-msvc - - arch: x86_64-windows-msvc - os: windows-latest - target: x86_64-pc-windows-msvc - artifact: tsukimi.exe - ext: .exe + # - arch: x86_64-windows-msvc + # os: windows-latest + # target: x86_64-pc-windows-msvc + # artifact: tsukimi.exe + # ext: .exe # x86_64-windows-gnu - arch: x86_64-windows-gnu os: windows-latest @@ -34,11 +34,11 @@ jobs: artifact: tsukimi ext: # x86_64-apple-darwin - - arch: x86_64-apple-darwin - os: macos-latest - target: x86_64-apple-darwin - artifact: tsukimi - ext: + # - arch: x86_64-apple-darwin + # os: macos-latest + # target: x86_64-apple-darwin + # artifact: tsukimi + # ext: runs-on: ${{matrix.os}} @@ -46,23 +46,23 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Build ${{ matrix.target }} - if: ${{ matrix.target == 'x86_64-pc-windows-msvc' }} - run: | - rustup default stable-msvc - py -3.12 -m pip install --user pipx - py -3.12 -m pipx ensurepath - pipx install gvsbuild - $env:Path = "C:\gtk-build\gtk\x64\release\lib\pkgconfig;C:\gtk-build\gtk\x64\release\bin;C:\msys64\usr\bin;C:\msys64\mingw64\bin;C:\msys64\mingw64\lib;C:\msys64\mingw64\include;" + $env:Path - $env:LIB = "C:\gtk-build\gtk\x64\release\lib;C:\msys64\mingw64\lib;" + $env:LIB - $env:INCLUDE = "C:\gtk-build\gtk\x64\release\include;C:\gtk-build\gtk\x64\release\include\cairo;C:\gtk-build\gtk\x64\release\include\glib-2.0;C:\gtk-build\gtk\x64\release\include\gobject-introspection-1.0;C:\gtk-build\gtk\x64\release\lib\glib-2.0\include;C:\msys64\mingw64\include;" + $env:INCLUDE - $env:PKG_CONFIG_PATH = "C:\gtk-build\gtk\x64\release\lib\pkgconfig;" + $env:PKG_CONFIG_PATH - gvsbuild build gtk4 libadwaita adwaita-icon-theme - cargo build --release --locked --target ${{ matrix.target }} - mkdir artifact - cp target/${{matrix.target}}/release/${{ matrix.artifact }} artifact/tsukimi-${{ matrix.arch }}${{ matrix.ext }} - cp C:\gtk-build\gtk\x64\release\bin\*.dll artifact/ - compress-archive -path artifact/* -destination artifact/tsukimi-${{matrix.arch}}.zip + # - name: Build ${{ matrix.target }} + # if: ${{ matrix.target == 'x86_64-pc-windows-msvc' }} + # run: | + # rustup default stable-msvc + # py -3.12 -m pip install --user pipx + # py -3.12 -m pipx ensurepath + # pipx install gvsbuild + # $env:Path = "C:\gtk-build\gtk\x64\release\lib\pkgconfig;C:\gtk-build\gtk\x64\release\bin;C:\msys64\usr\bin;C:\msys64\mingw64\bin;C:\msys64\mingw64\lib;C:\msys64\mingw64\include;" + $env:Path + # $env:LIB = "C:\gtk-build\gtk\x64\release\lib;C:\msys64\mingw64\lib;" + $env:LIB + # $env:INCLUDE = "C:\gtk-build\gtk\x64\release\include;C:\gtk-build\gtk\x64\release\include\cairo;C:\gtk-build\gtk\x64\release\include\glib-2.0;C:\gtk-build\gtk\x64\release\include\gobject-introspection-1.0;C:\gtk-build\gtk\x64\release\lib\glib-2.0\include;C:\msys64\mingw64\include;" + $env:INCLUDE + # $env:PKG_CONFIG_PATH = "C:\gtk-build\gtk\x64\release\lib\pkgconfig;" + $env:PKG_CONFIG_PATH + # gvsbuild build gtk4 libadwaita adwaita-icon-theme + # cargo build --release --locked --target ${{ matrix.target }} + # mkdir artifact + # cp target/${{matrix.target}}/release/${{ matrix.artifact }} artifact/tsukimi-${{ matrix.arch }}${{ matrix.ext }} + # cp C:\gtk-build\gtk\x64\release\bin\*.dll artifact/ + # compress-archive -path artifact/* -destination artifact/tsukimi-${{matrix.arch}}.zip - name: Build ${{ matrix.target }} if: ${{ matrix.target == 'x86_64-pc-windows-gnu' }} @@ -77,10 +77,20 @@ jobs: run: | $env:Path = "C:\msys64\mingw64\bin;C:\msys64\mingw64\lib;C:\msys64\mingw64\include;" + $env:Path; cargo build --release --locked --target ${{ matrix.target }} - mkdir artifact/ - cp target/${{matrix.target}}/release/${{ matrix.artifact }} artifact/tsukimi-${{ matrix.arch }}${{ matrix.ext }} - cp C:/msys64/mingw64/bin/*.dll artifact - compress-archive -path artifact/* -destination artifact/tsukimi-${{matrix.arch}}.zip + mkdir artifact && cd artifact + mkdir tsukimi-windows-gnu-amd64/ && cd tsukimi-windows-gnu-amd64/ && mkdir bin/ && mkdir share/ && mkdir lib/ + cp ../../target/${{matrix.target}}/release/${{ matrix.artifact }} bin/ + cp C:/msys64/mingw64/bin/*.dll bin/ + cp -recurse C:/msys64/mingw64/lib/gdk-pixbuf-2.0 lib/ + remove-item lib/gdk-pixbuf-2.0/2.10.0/loaders/* -exclude "*svg.dll" + cp -recurse C:/msys64/mingw64/share/glib-2.0 share/ + get-childitem -recurse -path share/glib-2.0/* -exclude "*gschemas.compiled*"|remove-item -recurse + cp -recurse C:/msys64/mingw64/share/icons share/ + remove-item -recurse share/icons/hicolor && remove-item -recurse share/icons/Adwaita/scalable && remove-item -recurse share/icons/Adwaita/cursors + remove-item -recurse share/icons/Adwaita/16x16 && remove-item -recurse share/icons/Adwaita/symbolic-up-to-32 + gci -directory -recurse .|where-object {$_.getfilesysteminfos().count -eq 0}|remove-item -recurse + cd .. + compress-archive -path ./* -destinationpath ./tsukimi-${{matrix.arch}}.zip - name: Build ${{matrix.target}} if: ${{matrix.target == 'x86_64-unknown-linux-gnu'}} @@ -92,17 +102,17 @@ jobs: cd artifact tar -czf tsukimi-${{matrix.arch}}.tar.gz tsukimi - - name: Build ${{matrix.target}} - if: ${{matrix.target == 'x86_64-apple-darwin'}} - run: | - brew install gtk4 - brew install libadwaita - rustup target add ${{matrix.target}} - cargo build --release --locked --target ${{matrix.target}} - mkdir artifact - cp target/${{matrix.target}}/release/${{matrix.artifact}} artifact/ - cd artifact/ - tar -czf tsukimi-${{matrix.arch}}.tar.gz ./* + # - name: Build ${{matrix.target}} + # if: ${{matrix.target == 'x86_64-apple-darwin'}} + # run: | + # brew install gtk4 + # brew install libadwaita + # rustup target add ${{matrix.target}} + # cargo build --release --locked --target ${{matrix.target}} + # mkdir artifact + # cp target/${{matrix.target}}/release/${{matrix.artifact}} artifact/ + # cd artifact/ + # tar -czf tsukimi-${{matrix.arch}}.tar.gz ./* - name: Upload artifact uses: actions/upload-artifact@v4 @@ -128,23 +138,23 @@ jobs: - name: Download artifacts uses: actions/download-artifact@v4 - - name: Package MacOS x86_64 - run: | - tar -xzf tsukimi-x86_64-apple-darwin/tsukimi-x86_64-apple-darwin.tar.gz - mkdir -p Tsukimi.app/Contents/MacOS - mkdir -p Tsukimi.app/Contents/Resources - cp share/macos/Info.plist Tsukimi.app/Contents/ - cp share/macos/AppIcon.icns Tsukimi.app/Contents/Resources/ - mv tsukimi Tsukimi.app/Contents/MacOS/ - tar -czf tsukimi-x86_64-apple-darwin.tar.gz Tsukimi.app/ + # - name: Package MacOS x86_64 + # run: | + # tar -xzf tsukimi-x86_64-apple-darwin/tsukimi-x86_64-apple-darwin.tar.gz + # mkdir -p Tsukimi.app/Contents/MacOS + # mkdir -p Tsukimi.app/Contents/Resources + # cp share/macos/Info.plist Tsukimi.app/Contents/ + # cp share/macos/AppIcon.icns Tsukimi.app/Contents/Resources/ + # mv tsukimi Tsukimi.app/Contents/MacOS/ + # tar -czf tsukimi-x86_64-apple-darwin.tar.gz Tsukimi.app/ - name: Package Windows GNU run: | mv tsukimi-x86_64-windows-gnu/*.zip . - - name: Package Windows MSVC - run: | - mv tsukimi-x86_64-windows-msvc/*.zip . + # - name: Package Windows MSVC + # run: | + # mv tsukimi-x86_64-windows-msvc/*.zip . - name: Package Linux GNU run: | diff --git a/src/ui/config.rs b/src/ui/config.rs index 6d5e9f81..348d1a1e 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -2,7 +2,7 @@ use reqwest; use serde::{Deserialize, Serialize}; #[cfg(any(target_os = "windows", target_os = "macos"))] use std::env; -use std::fs; +use std::{fs, path::PathBuf}; use toml; #[derive(Debug, Serialize, Deserialize, Default)] @@ -112,15 +112,7 @@ impl MPVClient { } fn get_proxy_info() -> String { - #[cfg(unix)] - let config_path = dirs::home_dir().unwrap().join(".config/tsukimi.toml"); - - #[cfg(windows)] - let config_path = env::current_dir() - .unwrap() - .join("config") - .join("tsukimi.toml"); - + let config_path = Dir::get_config_path(); let data = std::fs::read_to_string(&config_path).unwrap(); let config: Config = toml::from_str(&data).unwrap(); return config.proxy; @@ -135,14 +127,7 @@ fn default_mpv() -> String { } fn mpv() -> String { - #[cfg(unix)] - let config_path = dirs::home_dir().unwrap().join(".config/tsukimi.toml"); - - #[cfg(windows)] - let config_path = env::current_dir() - .unwrap() - .join("config") - .join("tsukimi.toml"); + let config_path = Dir::get_config_path(); let data = std::fs::read_to_string(&config_path).unwrap(); let config: Config = toml::from_str(&data).unwrap(); @@ -169,17 +154,7 @@ pub fn get_server_info() -> ServerInfo { access_token: String::new(), port: String::new(), }; - #[cfg(unix)] - let path = dirs::home_dir() - .unwrap() - .join(".config") - .join("tsukimi.toml"); - - #[cfg(windows)] - let path = env::current_dir() - .unwrap() - .join("config") - .join("tsukimi.toml"); + let path = Dir::get_config_path(); if path.exists() { let data = fs::read_to_string(path).expect("read config file failed"); @@ -192,3 +167,34 @@ pub fn get_server_info() -> ServerInfo { server_info } + +pub struct Dir; + +impl Dir { + pub fn get_cache_dir() -> PathBuf { + #[cfg(unix)] + let pathbuf = dirs::home_dir().unwrap().join(".local/share/tsukimi"); + + #[cfg(windows)] + let pathbuf = env::current_dir().unwrap().parent().unwrap().join("cache"); + + return pathbuf; + } + + pub fn get_config_path() -> PathBuf { + #[cfg(unix)] + let path = dirs::home_dir() + .unwrap() + .join(".config") + .join("tsukimi.toml"); + + #[cfg(windows)] + let path = env::current_dir() + .unwrap() + .parent() + .unwrap() + .join("config") + .join("tsukimi.toml"); + return path; + } +} diff --git a/src/ui/image.rs b/src/ui/image.rs index 5c88e899..248d5f15 100644 --- a/src/ui/image.rs +++ b/src/ui/image.rs @@ -1,9 +1,7 @@ +use super::config::Dir; use gtk::glib::{self, clone}; use gtk::{prelude::*, Revealer}; use gtk::{Box, Orientation}; -#[cfg(windows)] -use std::env; -use std::path::PathBuf; use std::sync::Arc; use tokio::sync::Mutex; @@ -22,7 +20,7 @@ pub fn set_image(id: String, mutex: Arc>) -> Box { .vexpand(true) .transition_duration(700) .build(); - let pathbuf = get_thum_dir().join(format!("{}.png", id)); + let pathbuf = Dir::get_cache_dir().join(format!("{}.png", id)); if pathbuf.exists() { if image.file().is_none() { image.set_file(Some(>k::gio::File::for_path(&pathbuf))); @@ -76,7 +74,7 @@ pub fn setimage(id: String, mutex: Arc>) -> Revealer { .transition_duration(700) .build(); - let pathbuf = get_thum_dir().join(format!("{}.png", id)); + let pathbuf = Dir::get_cache_dir().join(format!("{}.png", id)); let idfuture = id.clone(); if pathbuf.exists() { if image.file().is_none() { @@ -107,7 +105,7 @@ pub fn setimage(id: String, mutex: Arc>) -> Revealer { glib::spawn_future_local(clone!(@weak image,@weak revealer => async move { while let Ok(_) = receiver.recv().await { - let path =get_thum_dir().join(format!("{}.png",idfuture)); + let path =Dir::get_cache_dir().join(format!("{}.png",idfuture)); let file = gtk::gio::File::for_path(&path); image.set_file(Some(&file)); @@ -132,7 +130,7 @@ pub fn setthumbimage(id: String, mutex: Arc>) -> Revealer { .transition_duration(700) .build(); - let pathbuf = get_thum_dir().join(format!("t{}.png", id)); + let pathbuf = Dir::get_cache_dir().join(format!("t{}.png", id)); let idfuture = id.clone(); if pathbuf.exists() { if image.file().is_none() { @@ -163,7 +161,7 @@ pub fn setthumbimage(id: String, mutex: Arc>) -> Revealer { glib::spawn_future_local(clone!(@weak image,@weak revealer => async move { while let Ok(_) = receiver.recv().await { - let path = get_thum_dir().join(format!("t{}.png",idfuture)); + let path = Dir::get_cache_dir().join(format!("t{}.png",idfuture)); let file = gtk::gio::File::for_path(&path); image.set_file(Some(&file)); revealer.set_reveal_child(true); @@ -187,7 +185,7 @@ pub fn setbackdropimage(id: String, mutex: Arc>) -> Revealer { .transition_duration(700) .build(); - let pathbuf = get_thum_dir().join(format!("b{}.png", id)); + let pathbuf = Dir::get_cache_dir().join(format!("b{}.png", id)); let idfuture = id.clone(); if pathbuf.exists() { if image.file().is_none() { @@ -218,7 +216,7 @@ pub fn setbackdropimage(id: String, mutex: Arc>) -> Revealer { glib::spawn_future_local(clone!(@weak image,@weak revealer => async move { while let Ok(_) = receiver.recv().await { - let path = get_thum_dir().join(format!("b{}.png",idfuture)); + let path = Dir::get_cache_dir().join(format!("b{}.png",idfuture)); let file = gtk::gio::File::for_path(&path); image.set_file(Some(&file)); revealer.set_reveal_child(true); @@ -241,7 +239,7 @@ pub fn setlogoimage(id: String, mutex: Arc>) -> Revealer { .transition_duration(700) .build(); - let pathbuf = get_thum_dir().join(format!("l{}.png", id)); + let pathbuf = Dir::get_cache_dir().join(format!("l{}.png", id)); let idfuture = id.clone(); if pathbuf.exists() { if image.file().is_none() { @@ -272,7 +270,7 @@ pub fn setlogoimage(id: String, mutex: Arc>) -> Revealer { glib::spawn_future_local(clone!(@weak image,@weak revealer => async move { while let Ok(_) = receiver.recv().await { - let path = get_thum_dir().join(format!("l{}.png",idfuture)); + let path = Dir::get_cache_dir().join(format!("l{}.png",idfuture)); let file = gtk::gio::File::for_path(&path); image.set_file(Some(&file)); revealer.set_reveal_child(true); @@ -281,13 +279,3 @@ pub fn setlogoimage(id: String, mutex: Arc>) -> Revealer { revealer } - -fn get_thum_dir() -> PathBuf { - #[cfg(unix)] - let pathbuf = dirs::home_dir().unwrap().join(".local/share/tsukimi"); - - #[cfg(windows)] - let pathbuf = env::current_dir().unwrap().join("thumbnails"); - - return pathbuf; -} diff --git a/src/ui/network.rs b/src/ui/network.rs index 444c365b..c1ebb591 100644 --- a/src/ui/network.rs +++ b/src/ui/network.rs @@ -1,14 +1,12 @@ #![allow(non_snake_case)] #![allow(non_camel_case_types)] -use super::config::{get_server_info, Config, ReqClient}; +use super::config::{get_server_info, Config, Dir, ReqClient}; use reqwest::header::{HeaderMap, HeaderValue}; use reqwest::Error; use serde::{Deserialize, Serialize}; use serde_json::json; use serde_json::Value; -#[cfg(windows)] -use std::env; use std::fs::{self, write}; use std::sync::OnceLock; use std::time::Duration; @@ -89,17 +87,7 @@ pub async fn login( }; let toml = to_string(&config).unwrap(); - #[cfg(unix)] - let path = dirs::home_dir() - .unwrap() - .join(".config") - .join("tsukimi.toml"); - - #[cfg(windows)] - let path = env::current_dir() - .unwrap() - .join("config") - .join("tsukimi.toml"); + let path = Dir::get_config_path(); if path.exists() { write(path, toml).unwrap(); @@ -442,11 +430,7 @@ pub async fn get_image(id: String) -> Result { let bytes_result = response.bytes().await; match bytes_result { Ok(bytes) => { - #[cfg(unix)] - let pathbuf = dirs::home_dir().unwrap().join(".local/share/tsukimi"); - - #[cfg(windows)] - let pathbuf = env::current_dir().unwrap().join("thumbnails"); + let pathbuf = Dir::get_cache_dir(); if pathbuf.exists() { fs::write(pathbuf.join(format!("{}.png", id)), &bytes).unwrap(); @@ -486,11 +470,7 @@ pub async fn get_thumbimage(id: String) -> Result { let bytes_result = response.bytes().await; match bytes_result { Ok(bytes) => { - #[cfg(unix)] - let pathbuf = dirs::home_dir().unwrap().join(".local/share/tsukimi"); - - #[cfg(windows)] - let pathbuf = env::current_dir().unwrap().join("thumbnails"); + let pathbuf = Dir::get_cache_dir(); if pathbuf.exists() { fs::write(pathbuf.join(format!("t{}.png", id)), &bytes).unwrap(); @@ -530,11 +510,7 @@ pub async fn get_backdropimage(id: String) -> Result { let bytes_result = response.bytes().await; match bytes_result { Ok(bytes) => { - #[cfg(unix)] - let pathbuf = dirs::home_dir().unwrap().join(".local/share/tsukimi"); - - #[cfg(windows)] - let pathbuf = env::current_dir().unwrap().join("thumbnails"); + let pathbuf = Dir::get_cache_dir(); if pathbuf.exists() { fs::write(pathbuf.join(format!("b{}.png", id)), &bytes).unwrap(); @@ -574,11 +550,7 @@ pub async fn get_logoimage(id: String) -> Result { let bytes_result = response.bytes().await; match bytes_result { Ok(bytes) => { - #[cfg(unix)] - let pathbuf = dirs::home_dir().unwrap().join(".local/share/tsukimi"); - - #[cfg(windows)] - let pathbuf = env::current_dir().unwrap().join("thumbnails"); + let pathbuf = Dir::get_cache_dir(); if pathbuf.exists() { fs::write(pathbuf.join(format!("l{}.png", id)), &bytes).unwrap(); diff --git a/src/ui/widgets/item.rs b/src/ui/widgets/item.rs index 145320d4..83fea332 100644 --- a/src/ui/widgets/item.rs +++ b/src/ui/widgets/item.rs @@ -3,7 +3,6 @@ use adw::subclass::prelude::*; use glib::Object; use gtk::prelude::*; use gtk::{gio, glib}; -use std::{env, path::PathBuf}; mod imp { use crate::ui::network; @@ -13,7 +12,7 @@ mod imp { use gtk::{glib, CompositeTemplate}; use std::cell::{OnceCell, Ref}; - use super::get_thum_dir; + use crate::ui::config::Dir; use std::collections::{HashMap, HashSet}; // Object holding the state #[derive(CompositeTemplate, Default, glib::Properties)] @@ -102,7 +101,7 @@ mod imp { let id = obj.id(); let idc = id.clone(); let inid = obj.inid(); - let pathbuf = get_thum_dir().join(format!("b{}.png", id)); + let pathbuf = Dir::get_cache_dir().join(format!("b{}.png", id)); let backdrop = self.backdrop.get(); let (sender, receiver) = async_channel::bounded::(1); let idclone = id.clone(); @@ -124,7 +123,7 @@ mod imp { glib::spawn_future_local(async move { while let Ok(_) = receiver.recv().await { - let pathbuf = get_thum_dir().join(format!("b{}.png", idclone)); + let pathbuf = Dir::get_cache_dir().join(format!("b{}.png", idclone)); let file = gtk::gio::File::for_path(&pathbuf); backdrop.set_file(Some(&file)); } @@ -672,12 +671,3 @@ impl ItemPage { actorscrolled.set_child(Some(&actorlist)); } } - -fn get_thum_dir() -> PathBuf { - #[cfg(unix)] - let path = dirs::home_dir().unwrap().join(".local/share/tsukimi"); - #[cfg(windows)] - let path = env::current_dir().unwrap().join("thumbnails"); - - return path; -} diff --git a/src/ui/widgets/list.rs b/src/ui/widgets/list.rs index b646535e..30c3b3dd 100644 --- a/src/ui/widgets/list.rs +++ b/src/ui/widgets/list.rs @@ -18,8 +18,8 @@ mod imp { use gtk::subclass::prelude::*; use gtk::{gio, glib, CompositeTemplate}; - use crate::ui::widgets::item::ItemPage; - use crate::ui::widgets::movie::MoviePage; + // use crate::ui::widgets::item::ItemPage; + // use crate::ui::widgets::movie::MoviePage; pub enum Page { Movie(Box), diff --git a/src/ui/widgets/movie.rs b/src/ui/widgets/movie.rs index 4e8db6a6..d84279d4 100644 --- a/src/ui/widgets/movie.rs +++ b/src/ui/widgets/movie.rs @@ -83,7 +83,9 @@ mod imp { #[cfg(windows)] let pathbuf = env::current_dir() .unwrap() - .join("thumbnails") + .parent() + .unwrap() + .join("cache") .join(format!("b{}.png", id)); let backdrop = self.backdrop.get(); @@ -116,7 +118,9 @@ mod imp { #[cfg(windows)] let path = env::current_dir() .unwrap() - .join("thumbnails") + .parent() + .unwrap() + .join("cache") .join(format!("b{}.png", idclone)); let file = gtk::gio::File::for_path(&path); diff --git a/src/ui/widgets/window.rs b/src/ui/widgets/window.rs index 6ab042cf..282e975b 100644 --- a/src/ui/widgets/window.rs +++ b/src/ui/widgets/window.rs @@ -1,10 +1,8 @@ +use crate::ui::config::Dir; use adw::prelude::NavigationPageExt; -#[cfg(unix)] -use dirs::home_dir; use gtk::prelude::*; use gtk::subclass::prelude::*; -#[cfg(windows)] -use std::env; + mod imp { use adw::subclass::application_window::AdwApplicationWindowImpl; use glib::subclass::InitializingObject; @@ -243,14 +241,7 @@ impl Window { } fn loginenter(&self) { - #[cfg(unix)] - let path = home_dir().unwrap().join(".config/tsukimi.toml"); - #[cfg(windows)] - let path = env::current_dir() - .unwrap() - .join("config") - .join("tsukimi.toml"); - + let path = Dir::get_config_path(); if path.exists() { self.mainpage(); }