mirror of
https://github.com/arabianq/pipewire-soundpad.git
synced 2026-07-27 14:14:13 +00:00
Compare commits
26
Commits
07321afb60
...
v1.12.5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5c73bc1bea | ||
|
|
42e305869a | ||
|
|
cb7f4f7f6b | ||
|
|
62821904af | ||
|
|
3a218283db | ||
|
|
02fdfb6ca8 | ||
|
|
a027838d0e | ||
|
|
1828d903a1 | ||
|
|
83ca7a5e34 | ||
|
|
f2aca5e34a | ||
|
|
6130a99c4b | ||
|
|
322b93efa1 | ||
|
|
683f4127a0 | ||
|
|
c873166e21 | ||
|
|
ec4e873071 | ||
|
|
a91252d7fb | ||
|
|
239170df45 | ||
|
|
5fef42a2e2 | ||
|
|
4f8f663f12 | ||
|
|
6ccc55a1d0 | ||
|
|
d266a3f073 | ||
|
|
d2993592be | ||
|
|
1a53ab62dc | ||
|
|
51fcd94a61 | ||
|
|
7f6a122816 | ||
|
|
7ca01ed8cb |
@@ -37,7 +37,7 @@ jobs:
|
|||||||
pkg-config
|
pkg-config
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@ jobs:
|
|||||||
zip -j "$ARCHIVE_NAME" "${FILES[@]}"
|
zip -j "$ARCHIVE_NAME" "${FILES[@]}"
|
||||||
|
|
||||||
- name: Upload ZIP artifact
|
- name: Upload ZIP artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: archive-${{ matrix.arch }}
|
name: archive-${{ matrix.arch }}
|
||||||
path: pwsp-*.zip
|
path: pwsp-*.zip
|
||||||
@@ -124,7 +124,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Upload .deb artifact
|
- name: Upload .deb artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: deb-packages-${{ matrix.arch }}
|
name: deb-packages-${{ matrix.arch }}
|
||||||
path: target/debian/*.deb
|
path: target/debian/*.deb
|
||||||
@@ -139,7 +139,7 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
|
|
||||||
- name: Setup GPG
|
- name: Setup GPG
|
||||||
id: gpg
|
id: gpg
|
||||||
@@ -156,7 +156,7 @@ jobs:
|
|||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
|
|
||||||
- name: Checkout existing gh-pages
|
- name: Checkout existing gh-pages
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
with:
|
with:
|
||||||
ref: gh-pages
|
ref: gh-pages
|
||||||
path: gh-pages-branch
|
path: gh-pages-branch
|
||||||
@@ -202,7 +202,7 @@ jobs:
|
|||||||
done
|
done
|
||||||
|
|
||||||
- name: Deploy APT Repo to GitHub Pages
|
- name: Deploy APT Repo to GitHub Pages
|
||||||
uses: peaceiris/actions-gh-pages@v3
|
uses: peaceiris/actions-gh-pages@v4
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
publish_dir: ./apt-repo
|
publish_dir: ./apt-repo
|
||||||
@@ -225,7 +225,7 @@ jobs:
|
|||||||
options: --privileged
|
options: --privileged
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v7
|
||||||
|
|
||||||
- name: Build Flatpak
|
- name: Build Flatpak
|
||||||
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
|
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
|
||||||
|
|||||||
@@ -14,23 +14,23 @@ jobs:
|
|||||||
contents: write # Needed to push back to the branch
|
contents: write # Needed to push back to the branch
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.head_ref }}
|
ref: ${{ github.head_ref }}
|
||||||
|
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@v6
|
uses: actions/setup-python@v7
|
||||||
with:
|
with:
|
||||||
python-version: "3.x"
|
python-version: "3.x"
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pip install aiohttp toml
|
run: pip install aiohttp tomlkit
|
||||||
|
|
||||||
- name: Generate cargo-sources.json
|
- name: Generate cargo-sources.json
|
||||||
run: bash ./scripts/generate-sources.sh
|
run: bash ./scripts/generate-sources.sh
|
||||||
|
|
||||||
- name: Commit and push changes
|
- name: Commit and push changes
|
||||||
uses: stefanzweifel/git-auto-commit-action@v5
|
uses: stefanzweifel/git-auto-commit-action@v7
|
||||||
with:
|
with:
|
||||||
commit_message: "chore(flatpak): automatically update cargo-sources.json"
|
commit_message: "chore(flatpak): automatically update cargo-sources.json"
|
||||||
file_pattern: "packages/flatpak/cargo-sources.json"
|
file_pattern: "packages/flatpak/cargo-sources.json"
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
with:
|
with:
|
||||||
ref: ${{ inputs.tag_name || github.ref }}
|
ref: ${{ inputs.tag_name || github.ref }}
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
pattern: ru.arabianq.pwsp-*
|
pattern: ru.arabianq.pwsp-*
|
||||||
|
|
||||||
- name: Checkout existing gh-pages
|
- name: Checkout existing gh-pages
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
with:
|
with:
|
||||||
ref: gh-pages
|
ref: gh-pages
|
||||||
path: gh-pages-branch
|
path: gh-pages-branch
|
||||||
@@ -171,7 +171,7 @@ jobs:
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
- name: Deploy Flatpak Repo to GitHub Pages
|
- name: Deploy Flatpak Repo to GitHub Pages
|
||||||
uses: peaceiris/actions-gh-pages@v3
|
uses: peaceiris/actions-gh-pages@v4
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
publish_dir: ./pages-repo
|
publish_dir: ./pages-repo
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ jobs:
|
|||||||
pkg-config
|
pkg-config
|
||||||
|
|
||||||
- name: Checkout code at tag
|
- name: Checkout code at tag
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
with:
|
with:
|
||||||
ref: ${{ needs.prepare.outputs.tag }}
|
ref: ${{ needs.prepare.outputs.tag }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -119,7 +119,7 @@ jobs:
|
|||||||
zip -j "$ARCHIVE_NAME" "${FILES[@]}"
|
zip -j "$ARCHIVE_NAME" "${FILES[@]}"
|
||||||
|
|
||||||
- name: Upload ZIP artifact
|
- name: Upload ZIP artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: zip-archive-${{ matrix.arch }}
|
name: zip-archive-${{ matrix.arch }}
|
||||||
path: pwsp-*.zip
|
path: pwsp-*.zip
|
||||||
@@ -144,7 +144,7 @@ jobs:
|
|||||||
cargo-deb -p pwsp-gui --no-build
|
cargo-deb -p pwsp-gui --no-build
|
||||||
|
|
||||||
- name: Upload DEB artifact
|
- name: Upload DEB artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: deb-package-${{ matrix.arch }}
|
name: deb-package-${{ matrix.arch }}
|
||||||
path: target/debian/*.deb
|
path: target/debian/*.deb
|
||||||
@@ -196,7 +196,7 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
|
|
||||||
- name: Setup GPG
|
- name: Setup GPG
|
||||||
id: gpg
|
id: gpg
|
||||||
@@ -213,7 +213,7 @@ jobs:
|
|||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
|
|
||||||
- name: Checkout existing gh-pages
|
- name: Checkout existing gh-pages
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v7
|
||||||
with:
|
with:
|
||||||
ref: gh-pages
|
ref: gh-pages
|
||||||
path: gh-pages-branch
|
path: gh-pages-branch
|
||||||
@@ -264,7 +264,7 @@ jobs:
|
|||||||
done
|
done
|
||||||
|
|
||||||
- name: Deploy APT Repo to GitHub Pages
|
- name: Deploy APT Repo to GitHub Pages
|
||||||
uses: peaceiris/actions-gh-pages@v3
|
uses: peaceiris/actions-gh-pages@v4
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
publish_dir: ./apt-repo
|
publish_dir: ./apt-repo
|
||||||
|
|||||||
Generated
+324
-282
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -8,7 +8,7 @@ members = [
|
|||||||
resolver = "2"
|
resolver = "2"
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "1.12.3"
|
version = "1.12.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
authors = ["arabian"]
|
authors = ["arabian"]
|
||||||
homepage = "https://pwsp.arabianq.ru"
|
homepage = "https://pwsp.arabianq.ru"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
pkgbase = pwsp-bin
|
pkgbase = pwsp-bin
|
||||||
pkgdesc = Lets you play audio files through your microphone (Pre-built binaries)
|
pkgdesc = Lets you play audio files through your microphone (Pre-built binaries)
|
||||||
pkgver = 1.12.3
|
pkgver = 1.12.5
|
||||||
pkgrel = 1
|
pkgrel = 1
|
||||||
url = https://github.com/arabianq/pipewire-soundpad
|
url = https://github.com/arabianq/pipewire-soundpad
|
||||||
arch = x86_64
|
arch = x86_64
|
||||||
@@ -10,11 +10,11 @@ pkgbase = pwsp-bin
|
|||||||
depends = alsa-lib
|
depends = alsa-lib
|
||||||
provides = pwsp
|
provides = pwsp
|
||||||
conflicts = pwsp
|
conflicts = pwsp
|
||||||
source = pipewire-soundpad-1.12.3.tar.gz :: https://github.com/arabianq/pipewire-soundpad/archive/refs/tags/v1.12.3.tar.gz
|
source = pipewire-soundpad-1.12.5.tar.gz :: https://github.com/arabianq/pipewire-soundpad/archive/refs/tags/v1.12.5.tar.gz
|
||||||
sha256sums = SKIP
|
sha256sums = SKIP
|
||||||
source_x86_64 = pwsp-1.12.3-x86_64.zip :: https://github.com/arabianq/pipewire-soundpad/releases/download/v1.12.3/pwsp-v1.12.3-linux-x64.zip
|
source_x86_64 = pwsp-1.12.5-x86_64.zip :: https://github.com/arabianq/pipewire-soundpad/releases/download/v1.12.5/pwsp-v1.12.5-linux-x64.zip
|
||||||
sha256sums_x86_64 = SKIP
|
sha256sums_x86_64 = SKIP
|
||||||
source_aarch64 = pwsp-1.12.3-aarch64.zip :: https://github.com/arabianq/pipewire-soundpad/releases/download/v1.12.3/pwsp-v1.12.3-linux-arm64.zip
|
source_aarch64 = pwsp-1.12.5-aarch64.zip :: https://github.com/arabianq/pipewire-soundpad/releases/download/v1.12.5/pwsp-v1.12.5-linux-arm64.zip
|
||||||
sha256sums_aarch64 = SKIP
|
sha256sums_aarch64 = SKIP
|
||||||
|
|
||||||
pkgname = pwsp-bin
|
pkgname = pwsp-bin
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Maintainer: Alexander Tarasov <a.tevg@ya.ru>
|
# Maintainer: Alexander Tarasov <a.tevg@ya.ru>
|
||||||
pkgname=pwsp-bin
|
pkgname=pwsp-bin
|
||||||
_pkgname=pipewire-soundpad
|
_pkgname=pipewire-soundpad
|
||||||
pkgver=1.12.3
|
pkgver=1.12.5
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="Lets you play audio files through your microphone (Pre-built binaries)"
|
pkgdesc="Lets you play audio files through your microphone (Pre-built binaries)"
|
||||||
arch=('x86_64' 'aarch64')
|
arch=('x86_64' 'aarch64')
|
||||||
@@ -28,7 +28,7 @@ package() {
|
|||||||
|
|
||||||
install -Dm644 "$_srcsrc/pwsp-gui/assets/pwsp-gui.desktop" "${pkgdir}/usr/share/applications/pwsp-gui.desktop"
|
install -Dm644 "$_srcsrc/pwsp-gui/assets/pwsp-gui.desktop" "${pkgdir}/usr/share/applications/pwsp-gui.desktop"
|
||||||
install -Dm644 "$_srcsrc/pwsp-gui/assets/icon.png" "${pkgdir}/usr/share/icons/hicolor/256x256/apps/pwsp.png"
|
install -Dm644 "$_srcsrc/pwsp-gui/assets/icon.png" "${pkgdir}/usr/share/icons/hicolor/256x256/apps/pwsp.png"
|
||||||
install -Dm644 "$_srcsrc/pwsp-gui/assets/pwsp-daemon.service" "${pkgdir}/usr/lib/systemd/user/pwsp-daemon.service"
|
install -Dm644 "$_srcsrc/pwsp-daemon/assets/pwsp-daemon.service" "${pkgdir}/usr/lib/systemd/user/pwsp-daemon.service"
|
||||||
|
|
||||||
install -Dm644 "$_srcsrc/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
|
install -Dm644 "$_srcsrc/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
pkgbase = pwsp
|
pkgbase = pwsp
|
||||||
pkgdesc = Lets you play audio files through your microphone
|
pkgdesc = Lets you play audio files through your microphone
|
||||||
pkgver = 1.12.3
|
pkgver = 1.12.5
|
||||||
pkgrel = 1
|
pkgrel = 1
|
||||||
url = https://github.com/arabianq/pipewire-soundpad
|
url = https://github.com/arabianq/pipewire-soundpad
|
||||||
arch = x86_64
|
arch = x86_64
|
||||||
@@ -12,7 +12,7 @@ pkgbase = pwsp
|
|||||||
makedepends = cmake
|
makedepends = cmake
|
||||||
makedepends = pipewire
|
makedepends = pipewire
|
||||||
makedepends = alsa-lib
|
makedepends = alsa-lib
|
||||||
source = https://github.com/arabianq/pipewire-soundpad/archive/refs/tags/v1.12.3.tar.gz
|
source = https://github.com/arabianq/pipewire-soundpad/archive/refs/tags/v1.12.5.tar.gz
|
||||||
sha256sums = SKIP
|
sha256sums = SKIP
|
||||||
|
|
||||||
pkgname = pwsp
|
pkgname = pwsp
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Maintainer: Alexander Tarasov <a.tevg@ya.ru>
|
# Maintainer: Alexander Tarasov <a.tevg@ya.ru>
|
||||||
pkgsubn=pwsp
|
pkgsubn=pwsp
|
||||||
pkgname=pwsp
|
pkgname=pwsp
|
||||||
pkgver=1.12.3
|
pkgver=1.12.5
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="Lets you play audio files through your microphone"
|
pkgdesc="Lets you play audio files through your microphone"
|
||||||
arch=('x86_64' 'aarch64')
|
arch=('x86_64' 'aarch64')
|
||||||
@@ -44,5 +44,5 @@ package() {
|
|||||||
install -Dm644 "pwsp-gui/assets/pwsp-gui.desktop" "${pkgdir}/usr/share/applications/pwsp-gui.desktop"
|
install -Dm644 "pwsp-gui/assets/pwsp-gui.desktop" "${pkgdir}/usr/share/applications/pwsp-gui.desktop"
|
||||||
install -Dm644 "pwsp-gui/assets/icon.png" "${pkgdir}/usr/share/icons/hicolor/256x256/apps/pwsp.png"
|
install -Dm644 "pwsp-gui/assets/icon.png" "${pkgdir}/usr/share/icons/hicolor/256x256/apps/pwsp.png"
|
||||||
|
|
||||||
install -Dm644 "pwsp-gui/assets/pwsp-daemon.service" "${pkgdir}/usr/lib/systemd/user/pwsp-daemon.service"
|
install -Dm644 "pwsp-daemon/assets/pwsp-daemon.service" "${pkgdir}/usr/lib/systemd/user/pwsp-daemon.service"
|
||||||
}
|
}
|
||||||
|
|||||||
+423
-384
File diff suppressed because it is too large
Load Diff
@@ -25,7 +25,7 @@
|
|||||||
<name>arabian</name>
|
<name>arabian</name>
|
||||||
</developer>
|
</developer>
|
||||||
<releases>
|
<releases>
|
||||||
<release version="1.12.3" date="2026-07-05" />
|
<release version="1.12.5" date="2026-07-20" />
|
||||||
</releases>
|
</releases>
|
||||||
<content_rating type="oars-1.1" />
|
<content_rating type="oars-1.1" />
|
||||||
</component>
|
</component>
|
||||||
@@ -30,6 +30,7 @@ modules:
|
|||||||
- name: pwsp
|
- name: pwsp
|
||||||
buildsystem: simple
|
buildsystem: simple
|
||||||
build-commands:
|
build-commands:
|
||||||
|
- if [ -w /run/ccache ]; then mkdir -p /run/ccache/cargo-target && rm -rf target && ln -s /run/ccache/cargo-target target; fi
|
||||||
- export CARGO_HOME=$PWD/cargo && cargo build --release --offline
|
- export CARGO_HOME=$PWD/cargo && cargo build --release --offline
|
||||||
- install -Dm755 target/release/pwsp-daemon /app/bin/pwsp-daemon
|
- install -Dm755 target/release/pwsp-daemon /app/bin/pwsp-daemon
|
||||||
- install -Dm755 target/release/pwsp-cli /app/bin/pwsp-cli
|
- install -Dm755 target/release/pwsp-cli /app/bin/pwsp-cli
|
||||||
|
|||||||
@@ -68,7 +68,16 @@ install -Dm755 target/release/pwsp-gui %{buildroot}%{_bindir}/pwsp-gui
|
|||||||
install -Dm644 pwsp-gui/assets/pwsp-gui.desktop %{buildroot}%{_datadir}/applications/pwsp.desktop
|
install -Dm644 pwsp-gui/assets/pwsp-gui.desktop %{buildroot}%{_datadir}/applications/pwsp.desktop
|
||||||
install -Dm644 pwsp-gui/assets/icon.png %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/pwsp.png
|
install -Dm644 pwsp-gui/assets/icon.png %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/pwsp.png
|
||||||
|
|
||||||
install -Dm644 pwsp-gui/assets/pwsp-daemon.service %{buildroot}/usr/lib/systemd/user/pwsp-daemon.service
|
install -Dm644 pwsp-daemon/assets/pwsp-daemon.service %{buildroot}/usr/lib/systemd/user/pwsp-daemon.service
|
||||||
|
|
||||||
|
%post
|
||||||
|
%systemd_user_post pwsp-daemon.service
|
||||||
|
|
||||||
|
%preun
|
||||||
|
%systemd_user_preun pwsp-daemon.service
|
||||||
|
|
||||||
|
%postun
|
||||||
|
%systemd_user_postun_with_restart pwsp-daemon.service
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%license LICENSE
|
%license LICENSE
|
||||||
|
|||||||
+11
-2
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
|
|
||||||
Name: pwsp
|
Name: pwsp
|
||||||
Version: 1.12.3
|
Version: 1.12.5
|
||||||
Release: %autorelease
|
Release: %autorelease
|
||||||
Summary: Lets you play audio files through your microphone
|
Summary: Lets you play audio files through your microphone
|
||||||
|
|
||||||
@@ -68,7 +68,16 @@ install -Dm755 target/release/pwsp-gui %{buildroot}%{_bindir}/pwsp-gui
|
|||||||
install -Dm644 pwsp-gui/assets/pwsp-gui.desktop %{buildroot}%{_datadir}/applications/pwsp.desktop
|
install -Dm644 pwsp-gui/assets/pwsp-gui.desktop %{buildroot}%{_datadir}/applications/pwsp.desktop
|
||||||
install -Dm644 pwsp-gui/assets/icon.png %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/pwsp.png
|
install -Dm644 pwsp-gui/assets/icon.png %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/pwsp.png
|
||||||
|
|
||||||
install -Dm644 pwsp-gui/assets/pwsp-daemon.service %{buildroot}/usr/lib/systemd/user/pwsp-daemon.service
|
install -Dm644 pwsp-daemon/assets/pwsp-daemon.service %{buildroot}/usr/lib/systemd/user/pwsp-daemon.service
|
||||||
|
|
||||||
|
%post
|
||||||
|
%systemd_user_post pwsp-daemon.service
|
||||||
|
|
||||||
|
%preun
|
||||||
|
%systemd_user_preun pwsp-daemon.service
|
||||||
|
|
||||||
|
%postun
|
||||||
|
%systemd_user_postun_with_restart pwsp-daemon.service
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%license LICENSE
|
%license LICENSE
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Pipewire Soundpad Daemon
|
||||||
|
Requires=pipewire.service
|
||||||
|
After=pipewire.service
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/pwsp-daemon
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=3
|
||||||
|
RuntimeDirectory=pwsp
|
||||||
|
SyslogIdentifier=pwsp-daemon
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
+2
-1
@@ -38,6 +38,7 @@ percent-encoding.workspace = true
|
|||||||
name = "pwsp"
|
name = "pwsp"
|
||||||
section = "sound"
|
section = "sound"
|
||||||
priority = "optional"
|
priority = "optional"
|
||||||
|
maintainer-scripts = "maintainer-scripts"
|
||||||
assets = [
|
assets = [
|
||||||
[
|
[
|
||||||
"target/release/pwsp-daemon",
|
"target/release/pwsp-daemon",
|
||||||
@@ -65,7 +66,7 @@ assets = [
|
|||||||
"644",
|
"644",
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"assets/pwsp-daemon.service",
|
"../pwsp-daemon/assets/pwsp-daemon.service",
|
||||||
"usr/lib/systemd/user/pwsp-daemon.service",
|
"usr/lib/systemd/user/pwsp-daemon.service",
|
||||||
"644",
|
"644",
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=Pipewire Soundpad Daemon
|
|
||||||
After=pipewire.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
ExecStart=/usr/bin/pwsp-daemon
|
|
||||||
Restart=no
|
|
||||||
RuntimeDirectory=pwsp
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=default.target
|
|
||||||
Executable
+21
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$1" = "configure" ]; then
|
||||||
|
if [ -x "/usr/bin/systemctl" ]; then
|
||||||
|
systemctl --global enable pwsp-daemon.service || true
|
||||||
|
|
||||||
|
for uid_dir in /run/user/*; do
|
||||||
|
if [ -d "$uid_dir/systemd" ]; then
|
||||||
|
uid=$(basename "$uid_dir")
|
||||||
|
if [ "$uid" != "0" ]; then
|
||||||
|
username=$(id -un "$uid" 2>/dev/null) || continue
|
||||||
|
su -s /bin/sh -c "XDG_RUNTIME_DIR=$uid_dir systemctl --user daemon-reload" "$username" || true
|
||||||
|
su -s /bin/sh -c "XDG_RUNTIME_DIR=$uid_dir systemctl --user try-restart pwsp-daemon.service" "$username" || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$1" = "remove" ]; then
|
||||||
|
if [ -x "/usr/bin/systemctl" ]; then
|
||||||
|
for uid_dir in /run/user/*; do
|
||||||
|
if [ -d "$uid_dir/systemd" ]; then
|
||||||
|
uid=$(basename "$uid_dir")
|
||||||
|
if [ "$uid" != "0" ]; then
|
||||||
|
username=$(id -un "$uid" 2>/dev/null) || continue
|
||||||
|
su -s /bin/sh -c "XDG_RUNTIME_DIR=$uid_dir systemctl --user daemon-reload" "$username" || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
Executable
+20
@@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$1" = "remove" ] || [ "$1" = "deconfigure" ]; then
|
||||||
|
if [ -x "/usr/bin/systemctl" ]; then
|
||||||
|
systemctl --global disable pwsp-daemon.service || true
|
||||||
|
|
||||||
|
for uid_dir in /run/user/*; do
|
||||||
|
if [ -d "$uid_dir/systemd" ]; then
|
||||||
|
uid=$(basename "$uid_dir")
|
||||||
|
if [ "$uid" != "0" ]; then
|
||||||
|
username=$(id -un "$uid" 2>/dev/null) || continue
|
||||||
|
su -s /bin/sh -c "XDG_RUNTIME_DIR=$uid_dir systemctl --user stop pwsp-daemon.service" "$username" || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
@@ -199,11 +199,7 @@ impl SoundpadGui {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !search_query.is_empty() {
|
if !search_query.is_empty() {
|
||||||
let file_name = entry_path
|
let file_name = entry_path.file_name().unwrap_or_default().to_string_lossy();
|
||||||
.file_name()
|
|
||||||
.unwrap_or_default()
|
|
||||||
.to_string_lossy()
|
|
||||||
.to_string();
|
|
||||||
|
|
||||||
if !file_name.to_lowercase().contains(search_query) {
|
if !file_name.to_lowercase().contains(search_query) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
+25
-9
@@ -1,9 +1,13 @@
|
|||||||
mod gui;
|
mod gui;
|
||||||
|
|
||||||
use anyhow::{Context, Result};
|
use anyhow::{Context, Result, anyhow};
|
||||||
use pwsp_lib::utils::gui::ensure_pwsp_audio_dir;
|
use pwsp_lib::utils::gui::ensure_pwsp_audio_dir;
|
||||||
use rust_i18n::i18n;
|
use rust_i18n::i18n;
|
||||||
use std::{env, path::PathBuf};
|
use std::{
|
||||||
|
env,
|
||||||
|
path::{Path, PathBuf},
|
||||||
|
time::{SystemTime, UNIX_EPOCH},
|
||||||
|
};
|
||||||
|
|
||||||
i18n!("locales", fallback = "en");
|
i18n!("locales", fallback = "en");
|
||||||
|
|
||||||
@@ -31,19 +35,31 @@ async fn download_audio_from_url(uri: &str) -> Result<PathBuf> {
|
|||||||
|
|
||||||
let target_url = uri
|
let target_url = uri
|
||||||
.strip_prefix(prefix)
|
.strip_prefix(prefix)
|
||||||
.ok_or_else(|| anyhow::anyhow!("URI does not containt an expected prefix: {}", prefix))?;
|
.ok_or_else(|| anyhow!("URI does not containt an expected prefix: {}", prefix))?;
|
||||||
|
|
||||||
let file_name_encoded = target_url
|
let file_name_encoded = match target_url.split('/').next_back() {
|
||||||
.split('/')
|
Some(path) => path.to_string(),
|
||||||
.next_back()
|
None => {
|
||||||
.unwrap_or("downloaded_audio.mp3");
|
let id = SystemTime::now()
|
||||||
|
.duration_since(UNIX_EPOCH)
|
||||||
|
.expect("Time went back")
|
||||||
|
.as_nanos();
|
||||||
|
format!("downloaded_audio_{}.mp3", id)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
let file_name = percent_encoding::percent_decode_str(file_name_encoded)
|
let file_name = percent_encoding::percent_decode_str(&file_name_encoded.clone())
|
||||||
.decode_utf8()
|
.decode_utf8()
|
||||||
.unwrap_or_else(|_| file_name_encoded.into())
|
.unwrap_or_else(|_| file_name_encoded.into())
|
||||||
.into_owned();
|
.into_owned();
|
||||||
|
|
||||||
let save_path = ensure_pwsp_audio_dir().join(file_name);
|
let normalized_file_name = file_name.replace('\\', "/");
|
||||||
|
let sanitized_file_name = Path::new(&normalized_file_name)
|
||||||
|
.file_name()
|
||||||
|
.and_then(|n| n.to_str())
|
||||||
|
.unwrap_or("downloaded_audio.mp3");
|
||||||
|
|
||||||
|
let save_path = ensure_pwsp_audio_dir()?.join(sanitized_file_name);
|
||||||
|
|
||||||
let response = reqwest::get(target_url)
|
let response = reqwest::get(target_url)
|
||||||
.await?
|
.await?
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ impl Default for GuiConfig {
|
|||||||
save_scale_factor: false,
|
save_scale_factor: false,
|
||||||
pause_on_exit: false,
|
pause_on_exit: false,
|
||||||
|
|
||||||
dirs: vec![ensure_pwsp_audio_dir()],
|
dirs: vec![ensure_pwsp_audio_dir().unwrap()],
|
||||||
|
|
||||||
preferred_theme: PreferredTheme::System,
|
preferred_theme: PreferredTheme::System,
|
||||||
dirs_settings: HashMap::new(),
|
dirs_settings: HashMap::new(),
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
use anyhow::Result;
|
use anyhow::{Context, Result};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
pub fn get_config_path() -> Result<PathBuf> {
|
pub fn get_config_path() -> Result<PathBuf> {
|
||||||
let config_path = dirs::config_dir().expect("Failed to obtain config dir");
|
let config_path = dirs::config_dir().context("Failed to obtain config dir")?;
|
||||||
Ok(config_path.join("pwsp"))
|
Ok(config_path.join("pwsp"))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ use crate::{
|
|||||||
};
|
};
|
||||||
use anyhow::{Result, anyhow};
|
use anyhow::{Result, anyhow};
|
||||||
use std::{
|
use std::{
|
||||||
|
fs,
|
||||||
path::PathBuf,
|
path::PathBuf,
|
||||||
sync::{Arc, Mutex},
|
sync::{Arc, Mutex},
|
||||||
time::Instant,
|
time::Instant,
|
||||||
@@ -37,15 +38,19 @@ pub fn make_request_async(request: Request) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn ensure_pwsp_audio_dir() -> PathBuf {
|
pub fn ensure_pwsp_audio_dir() -> Result<PathBuf> {
|
||||||
let audio_dir = dirs::audio_dir().unwrap_or("~/Music".into());
|
let audio_dir = dirs::audio_dir().unwrap_or(
|
||||||
|
dirs::home_dir()
|
||||||
|
.map(|p| p.join("Music"))
|
||||||
|
.ok_or_else(|| anyhow!("Failed to get home directory. Is your system ok?"))?,
|
||||||
|
);
|
||||||
let pwsp_audio_dir = audio_dir.join("PWSP");
|
let pwsp_audio_dir = audio_dir.join("PWSP");
|
||||||
|
|
||||||
if !pwsp_audio_dir.exists() {
|
if !pwsp_audio_dir.exists() {
|
||||||
std::fs::create_dir_all(&pwsp_audio_dir).ok();
|
fs::create_dir_all(&pwsp_audio_dir)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
pwsp_audio_dir
|
Ok(pwsp_audio_dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn format_time_pair(position: f32, duration: f32) -> String {
|
pub fn format_time_pair(position: f32, duration: f32) -> String {
|
||||||
|
|||||||
@@ -27,18 +27,18 @@ with open(cargo_toml_path, "r", encoding="utf-8") as f:
|
|||||||
|
|
||||||
# We want to match version in [workspace.package]
|
# We want to match version in [workspace.package]
|
||||||
# First, let's find the [workspace.package] section
|
# First, let's find the [workspace.package] section
|
||||||
workspace_package_match = re.search(
|
workspace_package_match = re.search(r"\[workspace\.package\](.*?)(?=\n\[|$)", cargo_toml_content, re.DOTALL)
|
||||||
r"\[workspace\.package\](.*?)(?=\n\[|$)", cargo_toml_content, re.DOTALL
|
|
||||||
)
|
|
||||||
if not workspace_package_match:
|
if not workspace_package_match:
|
||||||
fatal("Could not find [workspace.package] section in Cargo.toml.")
|
fatal("Could not find [workspace.package] section in Cargo.toml.")
|
||||||
|
|
||||||
workspace_package_sec = workspace_package_match.group(1)
|
if isinstance(workspace_package_match, re.Match):
|
||||||
|
workspace_package_sec = workspace_package_match.group(1)
|
||||||
version_match = re.search(r'version\s*=\s*"([^"]+)"', workspace_package_sec)
|
version_match = re.search(r'version\s*=\s*"([^"]+)"', workspace_package_sec)
|
||||||
if not version_match:
|
if not version_match:
|
||||||
fatal("Could not find version in [workspace.package] in Cargo.toml.")
|
fatal("Could not find version in [workspace.package] in Cargo.toml.")
|
||||||
|
|
||||||
current_version = version_match.group(1)
|
if isinstance(version_match, re.Match):
|
||||||
|
current_version = version_match.group(1)
|
||||||
print(f"Current version detected: {current_version}")
|
print(f"Current version detected: {current_version}")
|
||||||
|
|
||||||
# Get new version
|
# Get new version
|
||||||
@@ -62,9 +62,7 @@ print("Updating Cargo.toml...")
|
|||||||
|
|
||||||
def replace_version_in_workspace(match):
|
def replace_version_in_workspace(match):
|
||||||
section_content = match.group(1)
|
section_content = match.group(1)
|
||||||
updated_section_content = re.sub(
|
updated_section_content = re.sub(r'(version\s*=\s*")[^"]+(")', rf"\g<1>{new_version}\g<2>", section_content)
|
||||||
r'(version\s*=\s*")[^"]+(")', rf"\g<1>{new_version}\g<2>", section_content
|
|
||||||
)
|
|
||||||
return f"[workspace.package]{updated_section_content}"
|
return f"[workspace.package]{updated_section_content}"
|
||||||
|
|
||||||
|
|
||||||
@@ -127,9 +125,7 @@ def update_srcinfo(directory, pkgbuild_path, srcinfo_path):
|
|||||||
f.write(result.stdout)
|
f.write(result.stdout)
|
||||||
return
|
return
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(
|
print(f"Warning: makepkg failed in {directory}: {e}. Falling back to text replacement.")
|
||||||
f"Warning: makepkg failed in {directory}: {e}. Falling back to text replacement."
|
|
||||||
)
|
|
||||||
|
|
||||||
# Text replacement fallback
|
# Text replacement fallback
|
||||||
with open(srcinfo_path, "r", encoding="utf-8") as f:
|
with open(srcinfo_path, "r", encoding="utf-8") as f:
|
||||||
@@ -142,9 +138,7 @@ def update_srcinfo(directory, pkgbuild_path, srcinfo_path):
|
|||||||
|
|
||||||
|
|
||||||
update_srcinfo("packages/aur/bin", pkgbuild_bin_path, "packages/aur/bin/.SRCINFO")
|
update_srcinfo("packages/aur/bin", pkgbuild_bin_path, "packages/aur/bin/.SRCINFO")
|
||||||
update_srcinfo(
|
update_srcinfo("packages/aur/standart", pkgbuild_std_path, "packages/aur/standart/.SRCINFO")
|
||||||
"packages/aur/standart", pkgbuild_std_path, "packages/aur/standart/.SRCINFO"
|
|
||||||
)
|
|
||||||
|
|
||||||
# 4. Update packages/flatpak/ru.arabianq.pwsp.metainfo.xml
|
# 4. Update packages/flatpak/ru.arabianq.pwsp.metainfo.xml
|
||||||
flatpak_xml_path = "packages/flatpak/ru.arabianq.pwsp.metainfo.xml"
|
flatpak_xml_path = "packages/flatpak/ru.arabianq.pwsp.metainfo.xml"
|
||||||
|
|||||||
Reference in New Issue
Block a user