mirror of
https://github.com/arabianq/pipewire-soundpad.git
synced 2026-04-27 22:11:22 +00:00
merge dev
* cargo fmt * deps: bump clap to 4.6.0 * deps: cargo update * Fix daemon autostart issue caused by sync pipewire retry loop (#43) (#44) At boot time, PipeWire takes some time to register the `pwsp-daemon` and `pwsp-virtual-mic` devices. Previously, the daemon's retry loop for `link_player_to_virtual_mic()` was synchronous and limited to 5 attempts (1.5 seconds total). This caused systemd autostarts to fail with a code 1 if the devices were not yet available. This change replaces the synchronous wait with an asynchronous `tokio::spawn` task. It will retry the link attempt up to 60 times with a 1-second delay without blocking the startup of the rest of the daemon. This prevents it from exiting abruptly during autostart. Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> * deps: bump egui & eframe version to 0.34.1 * feat: replaced App::update with new App::logic and App::ui * deps: bump egui_material_icons to 0.6.0 * deps: bump egui_dnd to 0.15.0 * fix: use .codepoint for icons * refactor * refactor: replaced deprecated CentralPanel::show with CentralPanel::show_inside * refactor * change version to 1.6.3 * update rust toolchain in github actions * update freedesktop platform version to 25.08 for flaptak * update github actions for flatpak builds * add flatpak-builder installation inside actions * add flathub configuration to actions * add --user flag to flathub configuration * remove sudo from flatpak actions * Fix/dev flatpak actions 6082245116761610541 (#47) * remove sudo * remove steps --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
f01a0e656c
commit
b2b83f5c32
@@ -33,7 +33,7 @@ jobs:
|
||||
- name: Setup Rust toolchain
|
||||
uses: actions-rs/toolchain@v1
|
||||
with:
|
||||
toolchain: stable
|
||||
toolchain: 1.94.1
|
||||
|
||||
- name: Extract all binary names
|
||||
id: cargo-meta
|
||||
@@ -103,7 +103,7 @@ jobs:
|
||||
flatpak-build:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: bilelmoussaoui/flatpak-github-actions:freedesktop-24.08
|
||||
image: ghcr.io/flathub-infra/flatpak-github-actions:freedesktop-25.08
|
||||
options: --privileged
|
||||
|
||||
steps:
|
||||
@@ -116,4 +116,4 @@ jobs:
|
||||
manifest-path: packages/flatpak/ru.arabianq.pwsp.yaml
|
||||
cache: true
|
||||
branch: master
|
||||
build-bundle: true
|
||||
build-bundle: true
|
||||
@@ -85,7 +85,7 @@ jobs:
|
||||
- name: Setup Rust toolchain
|
||||
uses: actions-rs/toolchain@v1
|
||||
with:
|
||||
toolchain: stable
|
||||
toolchain: 1.94.1
|
||||
|
||||
- name: Extract all binary names
|
||||
id: cargo-meta
|
||||
@@ -158,14 +158,14 @@ jobs:
|
||||
needs: prepare
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: bilelmoussaoui/flatpak-github-actions:freedesktop-24.08
|
||||
image: ghcr.io/flathub-infra/flatpak-github-actions:freedesktop-25.08
|
||||
options: --privileged
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ needs.prepare.outputs.tag }}
|
||||
|
||||
|
||||
- name: Build Flatpak
|
||||
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
|
||||
with:
|
||||
|
||||
Generated
+526
-169
File diff suppressed because it is too large
Load Diff
+6
-6
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "pwsp"
|
||||
version = "1.6.2"
|
||||
version = "1.6.3"
|
||||
edition = "2024"
|
||||
authors = ["arabian"]
|
||||
description = "PWSP lets you play audio files through your microphone. Has both CLI and GUI clients."
|
||||
@@ -18,7 +18,7 @@ async-trait = "0.1.89"
|
||||
serde = { version = "1.0.228", features = ["derive"] }
|
||||
serde_json = "1.0.149"
|
||||
|
||||
clap = { version = "4.5.60", default-features = false, features = [
|
||||
clap = { version = "4.6.0", default-features = false, features = [
|
||||
"std",
|
||||
"suggestions",
|
||||
"help",
|
||||
@@ -39,18 +39,18 @@ rfd = { version = "0.17.2", default-features = false, features = [
|
||||
] }
|
||||
opener = { version = "0.8.4", features = ["reveal"] }
|
||||
|
||||
egui = { version = "0.33.3", default-features = false, features = [
|
||||
egui = { version = "0.34.1", default-features = false, features = [
|
||||
"default_fonts",
|
||||
"rayon",
|
||||
] }
|
||||
eframe = { version = "0.33.3", default-features = false, features = [
|
||||
eframe = { version = "0.34.1", default-features = false, features = [
|
||||
"default_fonts",
|
||||
"glow",
|
||||
"x11",
|
||||
"wayland",
|
||||
] }
|
||||
egui_material_icons = "0.5.0"
|
||||
egui_dnd = "0.14.0"
|
||||
egui_material_icons = "0.6.0"
|
||||
egui_dnd = "0.15.0"
|
||||
|
||||
[[bin]]
|
||||
name = "pwsp-daemon"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
pkgbase = pwsp-bin
|
||||
pkgdesc = Lets you play audio files through your microphone (Pre-built binaries)
|
||||
pkgver = 1.6.2
|
||||
pkgver = 1.6.3
|
||||
pkgrel = 2
|
||||
url = https://github.com/arabianq/pipewire-soundpad
|
||||
arch = x86_64
|
||||
@@ -9,8 +9,8 @@ depends = pipewire
|
||||
depends = alsa-lib
|
||||
provides = pwsp
|
||||
conflicts = pwsp
|
||||
source = pwsp-bin-1.6.2.zip :: https://github.com/arabianq/pipewire-soundpad/releases/download/v1.6.2/pwsp-v1.6.2-linux-x64.zip
|
||||
source = pipewire-soundpad-1.6.2.tar.gz :: https://github.com/arabianq/pipewire-soundpad/archive/refs/tags/v1.6.2.tar.gz
|
||||
source = pwsp-bin-1.6.3.zip :: https://github.com/arabianq/pipewire-soundpad/releases/download/v1.6.3/pwsp-v1.6.3-linux-x64.zip
|
||||
source = pipewire-soundpad-1.6.3.tar.gz :: https://github.com/arabianq/pipewire-soundpad/archive/refs/tags/v1.6.3.tar.gz
|
||||
sha256sums = SKIP
|
||||
sha256sums = SKIP
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Maintainer: Alexander Tarasov <a.tevg@ya.ru>
|
||||
pkgname=pwsp-bin
|
||||
_pkgname=pipewire-soundpad
|
||||
pkgver=1.6.2
|
||||
pkgver=1.6.3
|
||||
pkgrel=2
|
||||
pkgdesc="Lets you play audio files through your microphone (Pre-built binaries)"
|
||||
arch=('x86_64')
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
pkgbase = pwsp
|
||||
pkgdesc = Lets you play audio files through your microphone
|
||||
pkgver = 1.6.2
|
||||
pkgver = 1.6.3
|
||||
pkgrel = 1
|
||||
url = https://github.com/arabianq/pipewire-soundpad
|
||||
arch = any
|
||||
@@ -10,7 +10,7 @@ pkgbase = pwsp
|
||||
makedepends = cargo
|
||||
makedepends = pipewire
|
||||
makedepends = alsa-lib
|
||||
source = https://github.com/arabianq/pipewire-soundpad/archive/refs/tags/v1.6.2.tar.gz
|
||||
source = https://github.com/arabianq/pipewire-soundpad/archive/refs/tags/v1.6.3.tar.gz
|
||||
sha256sums = SKIP
|
||||
|
||||
pkgname = pwsp
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Maintainer: Alexander Tarasov <a.tevg@ya.ru>
|
||||
pkgsubn=pwsp
|
||||
pkgname=pwsp
|
||||
pkgver=1.6.2
|
||||
pkgver=1.6.3
|
||||
pkgrel=1
|
||||
pkgdesc="Lets you play audio files through your microphone"
|
||||
arch=('any')
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
app-id: ru.arabianq.pwsp
|
||||
runtime: org.freedesktop.Platform
|
||||
runtime-version: "24.08"
|
||||
runtime-version: "25.08"
|
||||
sdk: org.freedesktop.Sdk
|
||||
sdk-extensions:
|
||||
- org.freedesktop.Sdk.Extension.rust-stable
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
%global cargo_install_lib 0
|
||||
|
||||
Name: pwsp
|
||||
Version: 1.6.2
|
||||
Version: 1.6.3
|
||||
Release: %autorelease
|
||||
Summary: Lets you play audio files through your microphone
|
||||
|
||||
|
||||
+18
-12
@@ -19,13 +19,13 @@ enum TrackAction {
|
||||
impl SoundpadGui {
|
||||
fn get_volume_icon(volume: f32) -> &'static str {
|
||||
if volume > 0.7 {
|
||||
ICON_VOLUME_UP
|
||||
ICON_VOLUME_UP.codepoint
|
||||
} else if volume <= 0.0 {
|
||||
ICON_VOLUME_OFF
|
||||
ICON_VOLUME_OFF.codepoint
|
||||
} else if volume < 0.3 {
|
||||
ICON_VOLUME_MUTE
|
||||
ICON_VOLUME_MUTE.codepoint
|
||||
} else {
|
||||
ICON_VOLUME_DOWN
|
||||
ICON_VOLUME_DOWN.codepoint
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,7 +313,7 @@ impl SoundpadGui {
|
||||
let path = item.clone();
|
||||
ui.horizontal(|ui| {
|
||||
handle.ui(ui, |ui| {
|
||||
ui.label(ICON_DRAG_INDICATOR);
|
||||
ui.label(ICON_DRAG_INDICATOR.codepoint);
|
||||
});
|
||||
let name = path
|
||||
.file_name()
|
||||
@@ -345,7 +345,7 @@ impl SoundpadGui {
|
||||
// Context menu
|
||||
dir_button_response.context_menu(|ui| {
|
||||
if ui
|
||||
.button(format!("{} {}", ICON_OPEN_IN_NEW, "Show"))
|
||||
.button(format!("{} {}", ICON_OPEN_IN_NEW.codepoint, "Show"))
|
||||
.clicked()
|
||||
{
|
||||
self.open_dir(&path);
|
||||
@@ -354,7 +354,7 @@ impl SoundpadGui {
|
||||
if ui
|
||||
.button(format!(
|
||||
"{} {}",
|
||||
ICON_OPEN_IN_BROWSER, "Open in File Manager"
|
||||
ICON_OPEN_IN_BROWSER.codepoint, "Open in File Manager"
|
||||
))
|
||||
.clicked()
|
||||
{
|
||||
@@ -365,7 +365,10 @@ impl SoundpadGui {
|
||||
|
||||
ui.separator();
|
||||
|
||||
if ui.button(format!("{} {}", ICON_DELETE, "Remove")).clicked() {
|
||||
if ui
|
||||
.button(format!("{} {}", ICON_DELETE.codepoint, "Remove"))
|
||||
.clicked()
|
||||
{
|
||||
self.app_state.dirs_to_remove.insert(path.clone());
|
||||
}
|
||||
});
|
||||
@@ -452,20 +455,23 @@ impl SoundpadGui {
|
||||
// Context menu
|
||||
file_button_response.context_menu(|ui| {
|
||||
if ui
|
||||
.button(format!("{} {}", ICON_BOLT, "Play Solo"))
|
||||
.button(format!("{} {}", ICON_BOLT.codepoint, "Play Solo"))
|
||||
.clicked()
|
||||
{
|
||||
self.play_file(&entry_path, false);
|
||||
self.app_state.selected_file = Some(entry_path.clone());
|
||||
}
|
||||
|
||||
if ui.button(format!("{} {}", ICON_ADD, "Add New")).clicked() {
|
||||
if ui
|
||||
.button(format!("{} {}", ICON_ADD.codepoint, "Add New"))
|
||||
.clicked()
|
||||
{
|
||||
self.play_file(&entry_path, true);
|
||||
self.app_state.selected_file = Some(entry_path.clone());
|
||||
}
|
||||
|
||||
if ui
|
||||
.button(format!("{} {}", ICON_SWAP_HORIZ, "Replace Last"))
|
||||
.button(format!("{} {}", ICON_SWAP_HORIZ.codepoint, "Replace Last"))
|
||||
.clicked()
|
||||
&& let Some(last_track) = self.audio_player_state.tracks.last()
|
||||
{
|
||||
@@ -479,7 +485,7 @@ impl SoundpadGui {
|
||||
if ui
|
||||
.button(format!(
|
||||
"{} {}",
|
||||
ICON_OPEN_IN_BROWSER, "Show in File Manager"
|
||||
ICON_OPEN_IN_BROWSER.codepoint, "Show in File Manager"
|
||||
))
|
||||
.clicked()
|
||||
{
|
||||
|
||||
+5
-3
@@ -8,7 +8,7 @@ use pwsp::{
|
||||
use std::time::{Duration, Instant};
|
||||
|
||||
impl App for SoundpadGui {
|
||||
fn update(&mut self, ctx: &Context, _frame: &mut EFrame) {
|
||||
fn logic(&mut self, ctx: &Context, _frame: &mut EFrame) {
|
||||
// Remove directories
|
||||
for path in self.app_state.dirs_to_remove.drain() {
|
||||
self.app_state.dirs.retain(|x| x != &path);
|
||||
@@ -97,9 +97,11 @@ impl App for SoundpadGui {
|
||||
|
||||
// Handle input
|
||||
self.handle_input(ctx);
|
||||
}
|
||||
|
||||
fn ui(&mut self, ui: &mut egui::Ui, _frame: &mut EFrame) {
|
||||
// Draw UI
|
||||
CentralPanel::default().show(ctx, |ui| {
|
||||
CentralPanel::default().show_inside(ui, |ui| {
|
||||
if !self.audio_player_state.is_daemon_running {
|
||||
self.draw_waiting_for_daemon(ui);
|
||||
return;
|
||||
@@ -114,6 +116,6 @@ impl App for SoundpadGui {
|
||||
});
|
||||
|
||||
// Request repaint
|
||||
ctx.request_repaint_after_secs(1.0 / 60.0);
|
||||
ui.request_repaint_after_secs(1.0 / 60.0);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user