Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9a6fa483a5 | |||
| 5db3650184 | |||
| 0524f26f97 | |||
|
740411f194
|
|||
| 1a2daec165 | |||
| 524b53b7b2 | |||
| b5ea96bb8b | |||
| 470bb1620a | |||
| b1372cacd7 |
@@ -1,4 +1,4 @@
|
||||
name: CI/CD
|
||||
name: Release
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -6,8 +6,8 @@ on:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Package
|
||||
build-arch:
|
||||
name: Build ArchLinux Package
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
@@ -33,13 +33,14 @@ jobs:
|
||||
url="https://git.uyani.de/Uyanide/WallReel"
|
||||
license=('MIT')
|
||||
depends=('qt6-base' 'qt6-declarative' 'gcc-libs' 'glibc')
|
||||
makedepends=('cmake' 'ninja')
|
||||
makedepends=('cmake')
|
||||
options=('!debug')
|
||||
source=("${pkgname}-${pkgver}.tar.gz::https://git.uyani.de/Uyanide/WallReel/archive/v${pkgver}.tar.gz")
|
||||
sha256sums=('INSERT_SHA256_HERE')
|
||||
|
||||
build() {
|
||||
cd "wallreel"
|
||||
cmake -B build -S . -G Ninja \
|
||||
cmake -B build -S . \
|
||||
-DCMAKE_BUILD_TYPE='Release' \
|
||||
-DCMAKE_INSTALL_PREFIX='/usr' \
|
||||
-Wno-dev
|
||||
@@ -64,7 +65,9 @@ jobs:
|
||||
|
||||
pacman-key --init && pacman-key --populate
|
||||
pacman -Sy --noconfirm archlinux-keyring
|
||||
pacman -Su --noconfirm base-devel cmake ninja qt6-base qt6-declarative sudo
|
||||
pacman -Su --noconfirm base-devel cmake qt6-base qt6-declarative sudo
|
||||
|
||||
echo 'MAKEFLAGS="-j$(nproc)"' >> /etc/makepkg.conf
|
||||
|
||||
useradd -m builduser
|
||||
chown -R builduser:builduser /workspace
|
||||
@@ -72,32 +75,31 @@ jobs:
|
||||
|
||||
su - builduser -c 'cd /workspace && makepkg -sf --noconfirm'
|
||||
su - builduser -c 'cd /workspace && makepkg --printsrcinfo' > SRCINFO.txt
|
||||
|
||||
tar -cf - *.pkg.tar.zst PKGBUILD LICENSE SRCINFO.txt >&3
|
||||
|
||||
tar -cf - *.pkg.tar.zst PKGBUILD SRCINFO.txt >&3
|
||||
" | tar -xf -
|
||||
|
||||
- name: Upload Artifacts
|
||||
- name: Upload Arch Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: release-artifacts
|
||||
name: arch-artifacts
|
||||
path: |
|
||||
*.pkg.tar.zst
|
||||
PKGBUILD
|
||||
LICENSE
|
||||
SRCINFO.txt
|
||||
|
||||
release:
|
||||
name: Publish
|
||||
needs: build
|
||||
publish-gitea:
|
||||
name: Publish to Gitea Release
|
||||
needs: [build-arch]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Extract Version
|
||||
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
|
||||
|
||||
- name: Download Artifacts
|
||||
- name: Download Arch Artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: release-artifacts
|
||||
name: arch-artifacts
|
||||
path: .
|
||||
|
||||
- name: Publish to Gitea Release
|
||||
@@ -110,6 +112,20 @@ jobs:
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
publish-aur:
|
||||
name: Publish to AUR
|
||||
needs: [build-arch]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Extract Version
|
||||
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
|
||||
|
||||
- name: Download Arch Artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: arch-artifacts
|
||||
path: .
|
||||
|
||||
- name: Publish to AUR
|
||||
env:
|
||||
AUR_KEY: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
|
||||
@@ -129,10 +145,18 @@ jobs:
|
||||
git config --global user.email "me@uyani.de"
|
||||
|
||||
git clone ssh://aur@aur.archlinux.org/wallreel.git aur-repo
|
||||
cp PKGBUILD LICENSE aur-repo/
|
||||
cp PKGBUILD aur-repo/
|
||||
cp SRCINFO.txt aur-repo/.SRCINFO
|
||||
cd aur-repo
|
||||
|
||||
cat << 'EOF' > LICENSE
|
||||
Copyright (C) 2026 by Uyanide me@uyani.de
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
EOF
|
||||
|
||||
git add PKGBUILD LICENSE .SRCINFO
|
||||
git commit -m "Release v${{ env.VERSION }}"
|
||||
git push origin master
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
project(WallReel VERSION 2.0.0 LANGUAGES CXX)
|
||||
project(WallReel VERSION 2.1.0 LANGUAGES CXX)
|
||||
|
||||
set(EXECUTABLE_NAME "wallreel")
|
||||
set(CORELIB_NAME "wallreel-core")
|
||||
|
||||
@@ -117,7 +117,6 @@ Configures system commands to execute on specific events mapping to your window
|
||||
| :-------------------- | :--------------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `previewDebounceTime` | Integer | `300` | Debounce time (ms) for triggering the preview action. |
|
||||
| `printSelected` | Boolean | `true` | Print selected wallpaper path to stdout on confirm. |
|
||||
| `printPreview` | Boolean | `false` | Print previewed wallpaper path to stdout on preview. |
|
||||
| `onSelected` | String | `""` | Command to execute when a wallpaper is confirmed. |
|
||||
| `onPreview` | String | `""` | Command to execute when a wallpaper is previewed. |
|
||||
| `saveState` | Array of Objects | `[]` | Commands to fetch system states before changing wallpapers. Each object defines: `key`, `fallback` (fallback value), `command` (stdout mapping), and `timeout` (ms). |
|
||||
|
||||
+10
-10
@@ -1,6 +1,6 @@
|
||||
.\" Automatically generated by Pandoc 3.5
|
||||
.\" Automatically generated by Pandoc 3.9.0.2
|
||||
.\"
|
||||
.TH "WALLREEL" "1" "2026\-03\-24" "WallReel 2.0.0" "User Commands"
|
||||
.TH "WALLREEL" "1" "2026\-03\-24" "WallReel 2.0.2" "User Commands"
|
||||
.SH NAME
|
||||
wallreel \- Choose and set desktop wallpapers with customizable themes
|
||||
and actions
|
||||
@@ -42,20 +42,20 @@ In this mode, the configuration is still parsed.
|
||||
Action placeholders are resolved from the selected image and any
|
||||
captured state values.
|
||||
.SH BEHAVIOR NOTES
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
CLI options are generally optional; configuration is the preferred
|
||||
customization path.
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
Some options are mutually exclusive (for example \f[CR]\-\-verbose\f[R]
|
||||
and \f[CR]\-\-quiet\f[R]).
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
With \f[CR]\-\-apply\f[R], WallReel executes configured selection
|
||||
actions without opening the UI.
|
||||
.SH FILES
|
||||
\f[CR]\[ti]/.config/wallreel/config.json\f[R] : Default configuration
|
||||
\f[CR]\(ti/.config/wallreel/config.json\f[R] : Default configuration
|
||||
file location.
|
||||
.PP
|
||||
\f[CR]\[ti]/.cache/wallreel/\f[R] : Runtime cache location.
|
||||
\f[CR]\(ti/.cache/wallreel/\f[R] : Runtime cache location.
|
||||
.SH EXAMPLES
|
||||
Run with default configuration:
|
||||
.IP
|
||||
@@ -66,19 +66,19 @@ wallreel
|
||||
Use a custom configuration file:
|
||||
.IP
|
||||
.EX
|
||||
wallreel \-\-config\-file \[ti]/.config/wallreel/config.json
|
||||
wallreel \-\-config\-file \(ti/.config/wallreel/config.json
|
||||
.EE
|
||||
.PP
|
||||
Append additional search directories:
|
||||
.IP
|
||||
.EX
|
||||
wallreel \-\-append\-dir \[ti]/Pictures/Wallpapers \-\-append\-dir \[ti]/Art
|
||||
wallreel \-\-append\-dir \(ti/Pictures/Wallpapers \-\-append\-dir \(ti/Art
|
||||
.EE
|
||||
.PP
|
||||
Apply a wallpaper and exit:
|
||||
.IP
|
||||
.EX
|
||||
wallreel \-\-apply \[ti]/Pictures/wallpaper.jpg
|
||||
wallreel \-\-apply \(ti/Pictures/wallpaper.jpg
|
||||
.EE
|
||||
.SH EXIT STATUS
|
||||
Returns \f[CR]0\f[R] on success.
|
||||
|
||||
+60
-63
@@ -1,22 +1,22 @@
|
||||
.\" Automatically generated by Pandoc 3.5
|
||||
.\" Automatically generated by Pandoc 3.9.0.2
|
||||
.\"
|
||||
.TH "WALLREEL" "5" "2026\-03\-24" "WallReel 2.0.0" "File Formats Manual"
|
||||
.TH "WALLREEL" "5" "2026\-03\-24" "WallReel 2.0.2" "File Formats Manual"
|
||||
.SH NAME
|
||||
wallreel\-config \- configuration format for wallreel
|
||||
.SH SYNOPSIS
|
||||
\f[CR]\[ti]/.config/wallreel/config.json\f[R]
|
||||
\f[CR]\(ti/.config/wallreel/config.json\f[R]
|
||||
.SH DESCRIPTION
|
||||
WallReel reads configuration from a JSON document.
|
||||
The root object is divided into five sections:
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
\f[CR]wallpaper\f[R]
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
\f[CR]theme\f[R]
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
\f[CR]action\f[R]
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
\f[CR]style\f[R]
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
\f[CR]cache\f[R]
|
||||
.PP
|
||||
For complete machine\-readable validation details, refer to
|
||||
@@ -25,7 +25,7 @@ For complete machine\-readable validation details, refer to
|
||||
Defines where WallReel looks for images and what to exclude.
|
||||
.PP
|
||||
If both \f[CR]paths\f[R] and \f[CR]dirs\f[R] are empty or omitted,
|
||||
WallReel defaults to recursively scanning the user\[aq]s Pictures
|
||||
WallReel defaults to recursively scanning the user\(aqs Pictures
|
||||
directory and treating all supported image files as wallpaper
|
||||
candidates.
|
||||
.PP
|
||||
@@ -36,9 +36,9 @@ to specific image files.
|
||||
to scan for images.
|
||||
.PP
|
||||
Each item has:
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
\f[CR]path\f[R] (string)
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
\f[CR]recursive\f[R] (boolean)
|
||||
.PP
|
||||
\f[CR]excludes\f[R] (array of string, default: \f[CR][]\f[R]) : Exclude
|
||||
@@ -54,16 +54,16 @@ the primary color.
|
||||
palette definitions.
|
||||
.PP
|
||||
Each palette has:
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
\f[CR]name\f[R] (string)
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
\f[CR]colors\f[R] (array)
|
||||
.PP
|
||||
Each color item has:
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
\f[CR]name\f[R] (string)
|
||||
.IP \[bu] 2
|
||||
\f[CR]value\f[R] (hex string, for example \f[CR]\[dq]#89b4fa\[dq]\f[R])
|
||||
.IP \(bu 2
|
||||
\f[CR]value\f[R] (hex string, for example \f[CR]\(dq#89b4fa\(dq\f[R])
|
||||
.SH ACTION SECTION
|
||||
Configures commands executed for preview, selection, and restore
|
||||
behavior.
|
||||
@@ -74,29 +74,26 @@ Debounce interval in milliseconds for preview actions.
|
||||
\f[CR]printSelected\f[R] (boolean, default: \f[CR]true\f[R]) : Print
|
||||
selected wallpaper path to stdout on confirmation.
|
||||
.PP
|
||||
\f[CR]printPreview\f[R] (boolean, default: \f[CR]false\f[R]) : Print
|
||||
previewed wallpaper path to stdout on preview.
|
||||
.PP
|
||||
\f[CR]onSelected\f[R] (string, default: \f[CR]\[dq]\[dq]\f[R]) : Command
|
||||
\f[CR]onSelected\f[R] (string, default: \f[CR]\(dq\(dq\f[R]) : Command
|
||||
executed when a wallpaper is confirmed.
|
||||
.PP
|
||||
\f[CR]onPreview\f[R] (string, default: \f[CR]\[dq]\[dq]\f[R]) : Command
|
||||
\f[CR]onPreview\f[R] (string, default: \f[CR]\(dq\(dq\f[R]) : Command
|
||||
executed when a wallpaper is previewed.
|
||||
.PP
|
||||
\f[CR]saveState\f[R] (array of object, default: \f[CR][]\f[R]) :
|
||||
Commands for capturing system values before changing wallpaper.
|
||||
.PP
|
||||
Each item has:
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
\f[CR]key\f[R] (placeholder key)
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
\f[CR]fallback\f[R] (default value)
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
\f[CR]command\f[R] (stdout\-mapped command)
|
||||
.IP \[bu] 2
|
||||
.IP \(bu 2
|
||||
\f[CR]timeout\f[R] (milliseconds)
|
||||
.PP
|
||||
\f[CR]onRestore\f[R] (string, default: \f[CR]\[dq]\[dq]\f[R]) : Command
|
||||
\f[CR]onRestore\f[R] (string, default: \f[CR]\(dq\(dq\f[R]) : Command
|
||||
executed on restore.
|
||||
Saved state keys are usable as placeholders.
|
||||
.PP
|
||||
@@ -117,13 +114,13 @@ The following placeholders are available in \f[CR]onSelected\f[R],
|
||||
wallpaper.
|
||||
.PP
|
||||
\f[CR]{{ palette }}\f[R] : Selected palette name
|
||||
(\f[CR]\[dq]null\[dq]\f[R] if none).
|
||||
(\f[CR]\(dqnull\(dq\f[R] if none).
|
||||
.PP
|
||||
\f[CR]{{ colorName }}\f[R] : Chosen primary color name
|
||||
(\f[CR]\[dq]null\[dq]\f[R] if none).
|
||||
(\f[CR]\(dqnull\(dq\f[R] if none).
|
||||
.PP
|
||||
\f[CR]{{ colorHex }}\f[R] : Chosen primary color hex
|
||||
(\f[CR]\[dq]null\[dq]\f[R] if none).
|
||||
(\f[CR]\(dqnull\(dq\f[R] if none).
|
||||
.PP
|
||||
\f[CR]{{ domColorHex }}\f[R] : Dominant color hex extracted from the
|
||||
wallpaper.
|
||||
@@ -162,54 +159,54 @@ Older entries are evicted.
|
||||
.IP
|
||||
.EX
|
||||
{
|
||||
\[dq]$schema\[dq]: \[dq]https://raw.githubusercontent.com/Uyanide/WallReel/refs/heads/master/config.schema.json\[dq],
|
||||
\[dq]wallpaper\[dq]: {
|
||||
\[dq]paths\[dq]: [\[dq]/home/user/Pictures/favorite.jpg\[dq]],
|
||||
\[dq]dirs\[dq]: [
|
||||
\(dq$schema\(dq: \(dqhttps://raw.githubusercontent.com/Uyanide/WallReel/refs/heads/master/config.schema.json\(dq,
|
||||
\(dqwallpaper\(dq: {
|
||||
\(dqpaths\(dq: [\(dq/home/user/Pictures/favorite.jpg\(dq],
|
||||
\(dqdirs\(dq: [
|
||||
{
|
||||
\[dq]path\[dq]: \[dq]/home/user/Pictures/Wallpapers\[dq],
|
||||
\[dq]recursive\[dq]: \f[B]true\f[R]
|
||||
\(dqpath\(dq: \(dq/home/user/Pictures/Wallpapers\(dq,
|
||||
\(dqrecursive\(dq: \f[B]true\f[R]
|
||||
}
|
||||
],
|
||||
\[dq]excludes\[dq]: [\[dq]\[rs]\[rs].gif$\[dq]]
|
||||
\(dqexcludes\(dq: [\(dq\(rs\(rs.gif$\(dq]
|
||||
},
|
||||
\[dq]theme\[dq]: {
|
||||
\[dq]palettes\[dq]: [
|
||||
\(dqtheme\(dq: {
|
||||
\(dqpalettes\(dq: [
|
||||
{
|
||||
\[dq]name\[dq]: \[dq]Dark\[dq],
|
||||
\[dq]colors\[dq]: [
|
||||
{ \[dq]name\[dq]: \[dq]blue\[dq], \[dq]value\[dq]: \[dq]#89b4fa\[dq] },
|
||||
{ \[dq]name\[dq]: \[dq]red\[dq], \[dq]value\[dq]: \[dq]#f38ba8\[dq] }
|
||||
\(dqname\(dq: \(dqDark\(dq,
|
||||
\(dqcolors\(dq: [
|
||||
{ \(dqname\(dq: \(dqblue\(dq, \(dqvalue\(dq: \(dq#89b4fa\(dq },
|
||||
{ \(dqname\(dq: \(dqred\(dq, \(dqvalue\(dq: \(dq#f38ba8\(dq }
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
\[dq]action\[dq]: {
|
||||
\[dq]previewDebounceTime\[dq]: 500,
|
||||
\[dq]quitOnSelected\[dq]: \f[B]true\f[R],
|
||||
\[dq]onPreview\[dq]: \[dq]swww img {{ path }}\[dq],
|
||||
\[dq]onSelected\[dq]: \[dq]cp {{ path }} \[ti]/.config/wallpaper/current/ && swww img {{ path }}\[dq],
|
||||
\[dq]saveState\[dq]: [
|
||||
\(dqaction\(dq: {
|
||||
\(dqpreviewDebounceTime\(dq: 500,
|
||||
\(dqquitOnSelected\(dq: \f[B]true\f[R],
|
||||
\(dqonPreview\(dq: \(dqswww img {{ path }}\(dq,
|
||||
\(dqonSelected\(dq: \(dqcp {{ path }} \(ti/.config/wallpaper/current/ && swww img {{ path }}\(dq,
|
||||
\(dqsaveState\(dq: [
|
||||
{
|
||||
\[dq]key\[dq]: \[dq]current_wp\[dq],
|
||||
\[dq]fallback\[dq]: \[dq]/home/user/Pictures/default.jpg\[dq],
|
||||
\[dq]command\[dq]: \[dq]find \[ti]/.config/wallpaper/current \-type f | head \-n 1\[dq],
|
||||
\[dq]timeout\[dq]: 1000
|
||||
\(dqkey\(dq: \(dqcurrent_wp\(dq,
|
||||
\(dqfallback\(dq: \(dq/home/user/Pictures/default.jpg\(dq,
|
||||
\(dqcommand\(dq: \(dqfind \(ti/.config/wallpaper/current \-type f | head \-n 1\(dq,
|
||||
\(dqtimeout\(dq: 1000
|
||||
}
|
||||
],
|
||||
\[dq]onRestore\[dq]: \[dq]swww img {{ current_wp }}\[dq]
|
||||
\(dqonRestore\(dq: \(dqswww img {{ current_wp }}\(dq
|
||||
},
|
||||
\[dq]style\[dq]: {
|
||||
\[dq]image_width\[dq]: 640,
|
||||
\[dq]image_height\[dq]: 400,
|
||||
\[dq]image_focus_scale\[dq]: 1.2,
|
||||
\[dq]window_width\[dq]: 1280,
|
||||
\[dq]window_height\[dq]: 720
|
||||
\(dqstyle\(dq: {
|
||||
\(dqimage_width\(dq: 640,
|
||||
\(dqimage_height\(dq: 400,
|
||||
\(dqimage_focus_scale\(dq: 1.2,
|
||||
\(dqwindow_width\(dq: 1280,
|
||||
\(dqwindow_height\(dq: 720
|
||||
},
|
||||
\[dq]cache\[dq]: {
|
||||
\[dq]saveSortMethod\[dq]: \f[B]true\f[R],
|
||||
\[dq]savePalette\[dq]: \f[B]true\f[R],
|
||||
\[dq]maxImageEntries\[dq]: 300
|
||||
\(dqcache\(dq: {
|
||||
\(dqsaveSortMethod\(dq: \f[B]true\f[R],
|
||||
\(dqsavePalette\(dq: \f[B]true\f[R],
|
||||
\(dqmaxImageEntries\(dq: 300
|
||||
}
|
||||
}
|
||||
.EE
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
//
|
||||
// action.previewDebounceTime number 300 Debounce time for preview action in milliseconds
|
||||
// action.printSelected boolean true Whether to print the selected wallpaper path to stdout on confirm
|
||||
// action.printPreview boolean false Whether to print the previewed wallpaper path to stdout on preview
|
||||
// action.onSelected string "" Command to execute on confirmation
|
||||
// action.onPreview string "" Command to execute on preview
|
||||
// action.saveState array [] Useful for restore command
|
||||
@@ -126,7 +125,6 @@ struct ActionConfigItems {
|
||||
QString onRestore;
|
||||
int previewDebounceTime = 300; // milliseconds
|
||||
bool printSelected = true;
|
||||
bool printPreview = false;
|
||||
bool quitOnSelected = false;
|
||||
bool restoreOnClose = true;
|
||||
};
|
||||
|
||||
@@ -26,8 +26,9 @@ Manager::Manager(
|
||||
const QDir& picturesDir,
|
||||
const QStringList& searchDirs,
|
||||
const QString& configPath,
|
||||
bool disableActions,
|
||||
QObject* parent)
|
||||
: QObject(parent), m_configDir(configDir) {
|
||||
: QObject(parent), m_configDir(configDir), m_disableActions(disableActions) {
|
||||
connect(this, &Manager::stateCaptured, this, [this]() {
|
||||
m_stateCaptured = true;
|
||||
WR_INFO("State capture completed");
|
||||
@@ -202,12 +203,6 @@ void Manager::_loadActionConfig(const QJsonObject& root) {
|
||||
m_actionConfig.printSelected = val.toBool();
|
||||
}
|
||||
}
|
||||
if (config.contains("printPreview")) {
|
||||
const auto& val = config["printPreview"];
|
||||
if (val.isBool()) {
|
||||
m_actionConfig.printPreview = val.toBool();
|
||||
}
|
||||
}
|
||||
if (config.contains("saveState") && config["saveState"].isArray()) {
|
||||
const QJsonArray& arr = config["saveState"].toArray();
|
||||
for (const auto& item : arr) {
|
||||
@@ -398,6 +393,13 @@ void Manager::captureState() {
|
||||
if (m_stateCaptured) {
|
||||
WR_DEBUG("State already captured, skipping capture");
|
||||
emit stateCaptured();
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_disableActions) {
|
||||
WR_DEBUG("Actions are disabled, skipping state capture");
|
||||
emit stateCaptured();
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_pendingCaptures > 0) {
|
||||
|
||||
@@ -27,6 +27,7 @@ class Manager : public QObject {
|
||||
* @param searchDirs Additional directories to search for wallpapers (not recursive)
|
||||
* @param configPath Optional path to a specific configuration file (overrides the default config path)
|
||||
* @param picturesDir The pictures directory (default location for user wallpapers)
|
||||
* @param disableActions Whether to disable actions
|
||||
* @param parent QObject parent
|
||||
*
|
||||
* @note The constructor will load the configuration and scan for wallpapers immediately.
|
||||
@@ -36,6 +37,7 @@ class Manager : public QObject {
|
||||
const QDir& picturesDir,
|
||||
const QStringList& searchDirs = {},
|
||||
const QString& configPath = "",
|
||||
bool disableActions = false,
|
||||
QObject* parent = nullptr);
|
||||
|
||||
~Manager();
|
||||
@@ -88,6 +90,8 @@ class Manager : public QObject {
|
||||
|
||||
private:
|
||||
const QDir m_configDir;
|
||||
bool m_disableActions = false;
|
||||
|
||||
WallpaperConfigItems m_wallpaperConfig;
|
||||
ThemeConfigItems m_themeConfig;
|
||||
ActionConfigItems m_actionConfig;
|
||||
|
||||
@@ -18,12 +18,13 @@ class Bootstrap {
|
||||
friend class Carousel;
|
||||
|
||||
public:
|
||||
Bootstrap(const AppOptions& options) {
|
||||
Bootstrap(const AppOptions& options) : options(options) {
|
||||
configMgr = new Config::Manager(
|
||||
Utils::getConfigDir(),
|
||||
Utils::getPicturesDir(),
|
||||
options.appendDirs,
|
||||
options.configPath);
|
||||
options.configPath,
|
||||
options.disableActions);
|
||||
|
||||
cacheMgr = new Cache::Manager(
|
||||
Utils::getCacheDir(),
|
||||
@@ -58,6 +59,11 @@ class Bootstrap {
|
||||
}
|
||||
|
||||
bool apply(const QString& path) {
|
||||
if (options.disableActions) {
|
||||
Logger::warn("Bootstrap", "Actions are disabled, cannot apply wallpaper");
|
||||
return false;
|
||||
}
|
||||
|
||||
QEventLoop loop;
|
||||
bool successFlag = false;
|
||||
|
||||
@@ -122,6 +128,7 @@ class Bootstrap {
|
||||
}
|
||||
|
||||
private:
|
||||
const AppOptions& options;
|
||||
Cache::Manager* cacheMgr{};
|
||||
Config::Manager* configMgr{};
|
||||
Image::Manager* imageMgr{};
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "manager.hpp"
|
||||
|
||||
#include "Utils/misc.hpp"
|
||||
#include "Utils/texttemplate.hpp"
|
||||
#include "logger.hpp"
|
||||
|
||||
@@ -61,6 +62,8 @@ void Manager::selectWallpaper(const QString& id) {
|
||||
return;
|
||||
}
|
||||
|
||||
Utils::printPath(data->getFullPath());
|
||||
|
||||
const auto command = _renderCommand(m_actionConfig.onSelected, _generateVariables(*data));
|
||||
m_wallpaperService->select(command);
|
||||
}
|
||||
|
||||
@@ -179,6 +179,24 @@ inline QDir getPicturesDir() {
|
||||
return QDir(picturesDir);
|
||||
}
|
||||
|
||||
inline void printPath(const QString& path, std::FILE* out = stdout) {
|
||||
if (path.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const QByteArray bytes = QFile::encodeName(path);
|
||||
|
||||
const size_t n = static_cast<size_t>(bytes.size());
|
||||
if (std::fwrite(bytes.constData(), 1, n, out) != n) {
|
||||
return;
|
||||
}
|
||||
if (std::fputc('\n', out) == EOF) {
|
||||
return;
|
||||
}
|
||||
std::fflush(out);
|
||||
return;
|
||||
}
|
||||
|
||||
} // namespace WallReel::Core::Utils
|
||||
|
||||
#endif // WALLREEL_MISC_HPP
|
||||
|
||||
@@ -96,11 +96,6 @@
|
||||
"default": true,
|
||||
"description": "Whether to print the selected wallpaper path to stdout on confirm"
|
||||
},
|
||||
"printPreview": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"description": "Whether to print the previewed wallpaper path to stdout on preview"
|
||||
},
|
||||
"onSelected": {
|
||||
"type": "string",
|
||||
"default": "",
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
title: WALLREEL
|
||||
section: 1
|
||||
header: User Commands
|
||||
footer: WallReel 2.0.0
|
||||
footer: WallReel 2.0.2
|
||||
date: 2026-03-24
|
||||
---
|
||||
|
||||
|
||||
+1
-4
@@ -2,7 +2,7 @@
|
||||
title: WALLREEL
|
||||
section: 5
|
||||
header: File Formats Manual
|
||||
footer: WallReel 2.0.0
|
||||
footer: WallReel 2.0.2
|
||||
date: 2026-03-24
|
||||
---
|
||||
|
||||
@@ -79,9 +79,6 @@ Configures commands executed for preview, selection, and restore behavior.
|
||||
`printSelected` (boolean, default: `true`)
|
||||
: Print selected wallpaper path to stdout on confirmation.
|
||||
|
||||
`printPreview` (boolean, default: `false`)
|
||||
: Print previewed wallpaper path to stdout on preview.
|
||||
|
||||
`onSelected` (string, default: `""`)
|
||||
: Command executed when a wallpaper is confirmed.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user