mirror of
https://github.com/arabianq/pipewire-soundpad.git
synced 2026-09-20 14:13:32 +00:00
Compare commits
13
Commits
v1.16.0
...
6eff8b2c6d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6eff8b2c6d | ||
|
|
dd13eee0df | ||
|
|
3d1bc24c21 | ||
|
|
53fabcee75 | ||
|
|
6ebe7ec211 | ||
|
|
17146d2ce6 | ||
|
|
7ad69243cc | ||
|
|
5b78cb17d7 | ||
|
|
a1184588a0 | ||
|
|
9b65384cfd | ||
|
|
59c7f25a38 | ||
|
|
2b544d2e63 | ||
|
|
b939709047 |
Generated
+304
-300
File diff suppressed because it is too large
Load Diff
+7
-7
@@ -8,7 +8,7 @@ members = [
|
||||
resolver = "2"
|
||||
|
||||
[workspace.package]
|
||||
version = "1.16.0"
|
||||
version = "1.16.1"
|
||||
edition = "2024"
|
||||
authors = ["arabian"]
|
||||
homepage = "https://pwsp.arabianq.ru"
|
||||
@@ -52,26 +52,26 @@ rustix = { version = "1.1.4", features = ["process"] }
|
||||
rust-i18n = "4.0.0"
|
||||
sys-locale = "0.3.2"
|
||||
|
||||
rodio = { git = "https://github.com/RustAudio/rodio.git", rev = "c5f1e94290922fe4ee963ce6f85754ea6ba36243", default-features = false, features = [
|
||||
rodio = { git = "https://github.com/RustAudio/rodio.git", rev = "880aaba54b00aead53651ed1ccbdb672d1375a95", default-features = false, features = [
|
||||
"symphonia-all",
|
||||
"symphonia-libopus",
|
||||
"playback",
|
||||
] }
|
||||
pipewire = "0.10.0"
|
||||
|
||||
egui = { version = "0.35.0", default-features = false, features = [
|
||||
egui = { version = "0.36.0", default-features = false, features = [
|
||||
"default_fonts",
|
||||
"rayon",
|
||||
] }
|
||||
eframe = { version = "0.35.0", default-features = false, features = [
|
||||
eframe = { version = "0.36.0", default-features = false, features = [
|
||||
"default_fonts",
|
||||
"glow",
|
||||
"x11",
|
||||
"wayland",
|
||||
] }
|
||||
egui_extras = "0.35.0"
|
||||
egui_material_icons = "0.7.0"
|
||||
egui_dnd = "0.16.0"
|
||||
egui_extras = "0.36.0"
|
||||
egui_material_icons = "0.8.0"
|
||||
egui_dnd = "0.17.0"
|
||||
|
||||
reqwest = { version = "0.13.4", default-features = false, features = ["native-tls"] }
|
||||
percent-encoding = "2.3.2"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
pkgbase = pwsp-bin
|
||||
pkgdesc = Lets you play audio files through your microphone (Pre-built binaries)
|
||||
pkgver = 1.16.0
|
||||
pkgver = 1.16.1
|
||||
pkgrel = 1
|
||||
url = https://github.com/arabianq/pipewire-soundpad
|
||||
arch = x86_64
|
||||
@@ -10,11 +10,11 @@ pkgbase = pwsp-bin
|
||||
depends = alsa-lib
|
||||
provides = pwsp
|
||||
conflicts = pwsp
|
||||
source = pipewire-soundpad-1.16.0.tar.gz :: https://github.com/arabianq/pipewire-soundpad/archive/refs/tags/v1.16.0.tar.gz
|
||||
source = pipewire-soundpad-1.16.1.tar.gz :: https://github.com/arabianq/pipewire-soundpad/archive/refs/tags/v1.16.1.tar.gz
|
||||
sha256sums = SKIP
|
||||
source_x86_64 = pwsp-1.16.0-x86_64.zip :: https://github.com/arabianq/pipewire-soundpad/releases/download/v1.16.0/pwsp-v1.16.0-linux-x64.zip
|
||||
source_x86_64 = pwsp-1.16.1-x86_64.zip :: https://github.com/arabianq/pipewire-soundpad/releases/download/v1.16.1/pwsp-v1.16.1-linux-x64.zip
|
||||
sha256sums_x86_64 = SKIP
|
||||
source_aarch64 = pwsp-1.16.0-aarch64.zip :: https://github.com/arabianq/pipewire-soundpad/releases/download/v1.16.0/pwsp-v1.16.0-linux-arm64.zip
|
||||
source_aarch64 = pwsp-1.16.1-aarch64.zip :: https://github.com/arabianq/pipewire-soundpad/releases/download/v1.16.1/pwsp-v1.16.1-linux-arm64.zip
|
||||
sha256sums_aarch64 = SKIP
|
||||
|
||||
pkgname = pwsp-bin
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Maintainer: Alexander Tarasov <a.tevg@ya.ru>
|
||||
pkgname=pwsp-bin
|
||||
_pkgname=pipewire-soundpad
|
||||
pkgver=1.16.0
|
||||
pkgver=1.16.1
|
||||
pkgrel=1
|
||||
pkgdesc="Lets you play audio files through your microphone (Pre-built binaries)"
|
||||
arch=('x86_64' 'aarch64')
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
pkgbase = pwsp
|
||||
pkgdesc = Lets you play audio files through your microphone
|
||||
pkgver = 1.16.0
|
||||
pkgver = 1.16.1
|
||||
pkgrel = 1
|
||||
url = https://github.com/arabianq/pipewire-soundpad
|
||||
arch = x86_64
|
||||
@@ -12,7 +12,7 @@ pkgbase = pwsp
|
||||
makedepends = cmake
|
||||
makedepends = pipewire
|
||||
makedepends = alsa-lib
|
||||
source = https://github.com/arabianq/pipewire-soundpad/archive/refs/tags/v1.16.0.tar.gz
|
||||
source = https://github.com/arabianq/pipewire-soundpad/archive/refs/tags/v1.16.1.tar.gz
|
||||
sha256sums = SKIP
|
||||
|
||||
pkgname = pwsp
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Maintainer: Alexander Tarasov <a.tevg@ya.ru>
|
||||
pkgsubn=pwsp
|
||||
pkgname=pwsp
|
||||
pkgver=1.16.0
|
||||
pkgver=1.16.1
|
||||
pkgrel=1
|
||||
pkgdesc="Lets you play audio files through your microphone"
|
||||
arch=('x86_64' 'aarch64')
|
||||
|
||||
+592
-592
File diff suppressed because one or more lines are too long
@@ -31,7 +31,7 @@
|
||||
<name>arabian</name>
|
||||
</developer>
|
||||
<releases>
|
||||
<release version="1.16.0" date="2026-07-30" />
|
||||
<release version="1.16.1" date="2026-08-31" />
|
||||
</releases>
|
||||
<content_rating type="oars-1.1" />
|
||||
</component>
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
|
||||
Name: pwsp
|
||||
Version: 1.16.0
|
||||
Version: 1.16.1
|
||||
Release: %autorelease
|
||||
Summary: Lets you play audio files through your microphone
|
||||
|
||||
|
||||
+40
-24
@@ -5,7 +5,6 @@ mod views;
|
||||
use anyhow::{Result, anyhow};
|
||||
use eframe::{NativeOptions, icon_data::from_png_bytes, run_native};
|
||||
use egui::{Context, FontData, FontDefinitions, FontFamily, FontTweak, Vec2, ViewportBuilder};
|
||||
use itertools::Itertools;
|
||||
use pwsp_lib::{
|
||||
types::{
|
||||
audio_player::PlayerState,
|
||||
@@ -24,6 +23,7 @@ use std::{
|
||||
collections::{HashMap, HashSet},
|
||||
fs,
|
||||
hash::{DefaultHasher, Hash, Hasher},
|
||||
io::BufReader,
|
||||
path::{Path, PathBuf},
|
||||
sync::{Arc, Mutex},
|
||||
thread,
|
||||
@@ -110,12 +110,17 @@ impl SoundpadGui {
|
||||
pub fn add_dirs(&mut self) {
|
||||
let file_dialog = FileDialog::new();
|
||||
if let Some(paths) = file_dialog.pick_folders() {
|
||||
let mut changed = false;
|
||||
for path in paths {
|
||||
self.app_state.dirs.push(path);
|
||||
if !self.app_state.dirs.contains(&path) {
|
||||
self.app_state.dirs.push(path);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
if changed {
|
||||
self.config.dirs = self.app_state.dirs.clone();
|
||||
self.config.save_to_file().ok();
|
||||
}
|
||||
self.app_state.dirs = self.app_state.dirs.iter().unique().cloned().collect();
|
||||
self.config.dirs = self.app_state.dirs.clone();
|
||||
self.config.save_to_file().ok();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -171,11 +176,9 @@ impl SoundpadGui {
|
||||
|
||||
// 1. Try to load from disk cache if we don't have it in memory yet
|
||||
if !is_cached
|
||||
&& let Ok(data) = fs::read_to_string(&cache_file)
|
||||
&& let Ok((all_files, dir_updates)) = serde_json::from_str::<(
|
||||
Vec<PathBuf>,
|
||||
HashMap<PathBuf, Vec<PathBuf>>,
|
||||
)>(&data)
|
||||
&& let Ok(file) = fs::File::open(&cache_file)
|
||||
&& let Ok((all_files, dir_updates)) =
|
||||
serde_json::from_reader(BufReader::new(file))
|
||||
{
|
||||
finished_scans.lock().unwrap().push((
|
||||
path_clone.clone(),
|
||||
@@ -196,18 +199,27 @@ impl SoundpadGui {
|
||||
if let Ok(entries) = fs::read_dir(&dir) {
|
||||
let mut children = Vec::new();
|
||||
for entry in entries.filter_map(|e| e.ok()) {
|
||||
let p = entry.path();
|
||||
if p.is_dir() {
|
||||
dirs_to_visit.push(p.clone());
|
||||
children.push(p);
|
||||
} else if crate::gui::SUPPORTED_EXTENSIONS.contains(
|
||||
&p.extension()
|
||||
.unwrap_or_default()
|
||||
.to_str()
|
||||
.unwrap_or_default(),
|
||||
) {
|
||||
all_files.push(p.clone());
|
||||
children.push(p);
|
||||
if let Ok(file_type) = entry.file_type() {
|
||||
if file_type.is_dir() {
|
||||
let p = entry.path();
|
||||
dirs_to_visit.push(p.clone());
|
||||
children.push(p);
|
||||
} else {
|
||||
let file_name = entry.file_name();
|
||||
let is_supported = Path::new(&file_name)
|
||||
.extension()
|
||||
.map(|e| {
|
||||
crate::gui::SUPPORTED_EXTENSIONS
|
||||
.contains(&e.to_str().unwrap_or_default())
|
||||
})
|
||||
.unwrap_or(false);
|
||||
|
||||
if is_supported {
|
||||
let p = entry.path();
|
||||
all_files.push(p.clone());
|
||||
children.push(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
dir_updates.insert(dir, children);
|
||||
@@ -389,9 +401,13 @@ fn load_system_fonts(fonts: &mut FontDefinitions) -> Result<()> {
|
||||
let (_, ja_sans) = find_for_locale("ja", FontStyle::Sans);
|
||||
let (_, ar_sans) = find_for_locale("ar", FontStyle::Sans);
|
||||
|
||||
let system_fonts = [en_sans, en_serif, ja_sans, ar_sans].concat();
|
||||
let system_fonts = en_sans
|
||||
.into_iter()
|
||||
.chain(en_serif)
|
||||
.chain(ja_sans)
|
||||
.chain(ar_sans);
|
||||
|
||||
for font in system_fonts.iter().rev() {
|
||||
for font in system_fonts.rev() {
|
||||
let font_bytes = match &font.source {
|
||||
FoundFontSource::Path(path) => fs::read(path)?,
|
||||
FoundFontSource::Bytes(bytes) => bytes.to_vec(),
|
||||
|
||||
Reference in New Issue
Block a user