mirror of
https://github.com/jeffvli/feishin.git
synced 2025-12-22 13:17:31 +00:00
Add flatpak metadata and script to keep versions in sync (#1215)
* Add flatpak metadata and script to keep versions in sync * Split .desktop out of appimage install script --------- Co-authored-by: Jeff <42182408+jeffvli@users.noreply.github.com>
This commit is contained in:
13
feishin.desktop.tmpl
Normal file
13
feishin.desktop.tmpl
Normal file
@@ -0,0 +1,13 @@
|
||||
[Desktop Entry]
|
||||
Name=Feishin
|
||||
GenericName=Music player
|
||||
Exec=${FEISHIN_DESKTOP_EXECUTABLE} ${FEISHIN_DESKTOP_ARGS}
|
||||
TryExec=${FEISHIN_DESKTOP_EXECUTABLE}
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Icon=org.jeffvli.feishin
|
||||
StartupWMClass=feishin
|
||||
SingleMainWindow=true
|
||||
Categories=AudioVideo;Audio;Player;Music;
|
||||
Keywords=Navidrome;Jellyfin;Subsonic;OpenSubsonic
|
||||
Comment=A player for your self-hosted music server
|
||||
@@ -1,17 +1,33 @@
|
||||
#!/bin/sh
|
||||
|
||||
dir=$1
|
||||
arg=$2
|
||||
arch=$(uname -m)
|
||||
set -eu
|
||||
|
||||
if [ "$arch" != "x86_64" ] && [ "$arch" != "aarch64" ]; then
|
||||
if [ "$#" -lt 1 ]; then
|
||||
echo "Usage: $0 <installation-directory> <option>"
|
||||
echo "Options:"
|
||||
echo " wayland-native Enable native Wayland support"
|
||||
echo " remove Remove Feishin AppImage and desktop entries"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dir="$(readlink -f "${1}")"
|
||||
arg="${2:-""}"
|
||||
arch="$(uname -m)"
|
||||
|
||||
if [ "$arg" != "wayland-native" ] && [ "$arg" != "remove" ] && [ "$arg" != "" ]; then
|
||||
echo "Invalid option: $arg"
|
||||
echo "Valid options are: wayland-native, remove"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "${arch}" != "x86_64" ] && [ "${arch}" != "aarch64" ]; then
|
||||
echo "CPU architecture not recognised (not x86_64 or aarch64). Aborting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# workaround if we're not renaming the artifact
|
||||
if [ "$arch" = "aarch64" ]; then
|
||||
arch='arm64'
|
||||
if [ "${arch}" = "aarch64" ]; then
|
||||
arch="arm64"
|
||||
fi
|
||||
|
||||
if [ ! -d "${dir}" ]; then
|
||||
@@ -19,56 +35,45 @@ if [ ! -d "${dir}" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
localShare="$HOME/.local/share"
|
||||
localShare="${XDG_DATA_HOME:-$HOME/.local/share}"
|
||||
localShareIcons="${localShare}/icons/hicolor"
|
||||
|
||||
if [ "${arg}" = "remove" ]; then
|
||||
rm -v \
|
||||
"${localShareIcons}"/512x512/apps/org.jeffvli.feishin.png \
|
||||
"${localShareIcons}"/256x256/apps/org.jeffvli.feishin.png \
|
||||
"${localShareIcons}"/128x128/apps/org.jeffvli.feishin.png \
|
||||
"${localShareIcons}"/64x64/apps/org.jeffvli.feishin.png \
|
||||
"${localShareIcons}"/32x32/apps/org.jeffvli.feishin.png \
|
||||
"${localShare}"/applications/org.jeffvli.feishin.desktop \
|
||||
"${localShareIcons}/512x512/apps/org.jeffvli.feishin.png" \
|
||||
"${localShareIcons}/256x256/apps/org.jeffvli.feishin.png" \
|
||||
"${localShareIcons}/128x128/apps/org.jeffvli.feishin.png" \
|
||||
"${localShareIcons}/64x64/apps/org.jeffvli.feishin.png" \
|
||||
"${localShareIcons}/32x32/apps/org.jeffvli.feishin.png" \
|
||||
"${localShare}/applications/org.jeffvli.feishin.desktop" \
|
||||
"${dir}/Feishin-linux-${arch}.AppImage"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
curl -L --create-dirs --write-out '%{filename_effective}\n' \
|
||||
curl --fail -L --create-dirs --write-out '%{filename_effective}\n' \
|
||||
-o "${dir}/Feishin-linux-${arch}.AppImage" "https://github.com/jeffvli/feishin/releases/latest/download/Feishin-linux-${arch}.AppImage" \
|
||||
-o "${localShareIcons}"/512x512/apps/org.jeffvli.feishin.png 'https://github.com/jeffvli/feishin/blob/development/assets/icons/512x512.png?raw=true' \
|
||||
-o "${localShareIcons}"/256x256/apps/org.jeffvli.feishin.png 'https://github.com/jeffvli/feishin/blob/development/assets/icons/256x256.png?raw=true' \
|
||||
-o "${localShareIcons}"/128x128/apps/org.jeffvli.feishin.png 'https://github.com/jeffvli/feishin/blob/development/assets/icons/128x128.png?raw=true' \
|
||||
-o "${localShareIcons}"/64x64/apps/org.jeffvli.feishin.png 'https://github.com/jeffvli/feishin/blob/development/assets/icons/64x64.png?raw=true' \
|
||||
-o "${localShareIcons}"/32x32/apps/org.jeffvli.feishin.png 'https://github.com/jeffvli/feishin/blob/development/assets/icons/32x32.png?raw=true'
|
||||
-o "${localShareIcons}/512x512/apps/org.jeffvli.feishin.png" 'https://github.com/jeffvli/feishin/blob/development/assets/icons/512x512.png?raw=true' \
|
||||
-o "${localShareIcons}/256x256/apps/org.jeffvli.feishin.png" 'https://github.com/jeffvli/feishin/blob/development/assets/icons/256x256.png?raw=true' \
|
||||
-o "${localShareIcons}/128x128/apps/org.jeffvli.feishin.png" 'https://github.com/jeffvli/feishin/blob/development/assets/icons/128x128.png?raw=true' \
|
||||
-o "${localShareIcons}/64x64/apps/org.jeffvli.feishin.png" 'https://github.com/jeffvli/feishin/blob/development/assets/icons/64x64.png?raw=true' \
|
||||
-o "${localShareIcons}/32x32/apps/org.jeffvli.feishin.png" 'https://github.com/jeffvli/feishin/blob/development/assets/icons/32x32.png?raw=true'
|
||||
chmod -v u+x "${dir}/Feishin-linux-${arch}.AppImage"
|
||||
|
||||
waylandFlags=''
|
||||
waylandFlags=""
|
||||
if [ "${arg}" = "wayland-native" ]; then
|
||||
waylandFlags=' --enable-features=UseOzonePlatform,WaylandWindowDecorations --ozone-platform-hint=auto'
|
||||
waylandFlags="--enable-features=UseOzonePlatform,WaylandWindowDecorations --ozone-platform-hint=auto"
|
||||
fi
|
||||
|
||||
# this is for Debian-based kernels and ALT respectively
|
||||
# https://unix.stackexchange.com/a/303214/145722
|
||||
sandboxFlag=''
|
||||
sandboxFlag=""
|
||||
if [ "$(sysctl kernel.unprivileged_userns_clone 2>/dev/null)" = "0" ] \
|
||||
|| [ "$(sysctl kernel.userns_restrict 2>/dev/null)" = "1" ]; then
|
||||
sandboxFlag=' --no-sandbox'
|
||||
sandboxFlag="--no-sandbox"
|
||||
fi
|
||||
|
||||
mkdir -pv "${localShare}"/applications
|
||||
cat > "${localShare}"/applications/org.jeffvli.feishin.desktop << EOL
|
||||
[Desktop Entry]
|
||||
Name=Feishin
|
||||
GenericName=Music player
|
||||
Exec=${dir}/Feishin-linux-${arch}.AppImage${sandboxFlag}${waylandFlags}
|
||||
TryExec=${dir}/Feishin-linux-${arch}.AppImage
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Icon=org.jeffvli.feishin
|
||||
StartupWMClass=feishin
|
||||
SingleMainWindow=true
|
||||
Categories=AudioVideo;Audio;Player;Music;
|
||||
Keywords=Navidrome;Jellyfin;Subsonic;OpenSubsonic
|
||||
Comment=A player for your self-hosted music server
|
||||
EOL
|
||||
mkdir -pv "${localShare}/applications"
|
||||
|
||||
export FEISHIN_DESKTOP_EXECUTABLE="${dir}/Feishin-linux-${arch}.AppImage"
|
||||
export FEISHIN_DESKTOP_ARGS="${sandboxFlag} ${waylandFlags}"
|
||||
curl --fail https://raw.githubusercontent.com/jeffvli/feishin/refs/heads/development/feishin.desktop.tmpl | envsubst > "${localShare}/applications/org.jeffvli.feishin.desktop"
|
||||
|
||||
100
org.jeffvli.feishin.metainfo.xml
Normal file
100
org.jeffvli.feishin.metainfo.xml
Normal file
@@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<component type="desktop-application">
|
||||
<id>org.jeffvli.feishin</id>
|
||||
<name>Feishin</name>
|
||||
<summary>Jellyfin, Navidrome, and OpenSubsonic Compatible Music Player</summary>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>GPL-3.0-only</project_license>
|
||||
<content_rating type="oars-1.1"/>
|
||||
<description>
|
||||
<p>A modern, cross-platform music player for Jellyfin, Navidrome, and OpenSubsonic servers.</p>
|
||||
<p>Features</p>
|
||||
<ul>
|
||||
<li>MPV player backend</li>
|
||||
<li>Web player backend</li>
|
||||
<li>Jellyfin server support</li>
|
||||
<li>Navidrome server support</li>
|
||||
<li>OpenSubsonic server support</li>
|
||||
<li>Modern UI</li>
|
||||
<li>Scrobble playback to your server</li>
|
||||
<li>Smart playlist editor (Navidrome)</li>
|
||||
<li>Synchronized and unsynchronized lyrics support</li>
|
||||
</ul>
|
||||
</description>
|
||||
<developer id="org.jeffvli">
|
||||
<name>jeffvli</name>
|
||||
</developer>
|
||||
<launchable type="desktop-id">org.jeffvli.feishin.desktop</launchable>
|
||||
<url type="homepage">https://github.com/jeffvli/feishin</url>
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<caption>The main menu</caption>
|
||||
<image type="source">https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_home.png</image>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<caption>Browsing an album</caption>
|
||||
<image type="source">https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_album_detail.png</image>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<caption>Smart playlist creation</caption>
|
||||
<image type="source">https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_smart_playlist.png</image>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<categories>
|
||||
<category>AudioVideo</category>
|
||||
<category>Audio</category>
|
||||
<category>Player</category>
|
||||
<category>Music</category>
|
||||
</categories>
|
||||
<releases>
|
||||
<release date="2025-10-13" type="stable" version="0.21.2"></release>
|
||||
<release date="2025-10-13" type="stable" version="0.21.1"></release>
|
||||
<release date="2025-10-13" type="stable" version="0.21.0"></release>
|
||||
<release date="2025-09-11" type="stable" version="0.20.1"></release>
|
||||
<release date="2025-09-07" type="stable" version="0.20.0"></release>
|
||||
<release date="2025-07-31" type="stable" version="0.19.0"></release>
|
||||
<release date="2025-07-08" type="stable" version="0.18.0"></release>
|
||||
<release date="2025-06-30" type="stable" version="0.17.0"></release>
|
||||
<release date="2025-06-26" type="stable" version="0.16.0"></release>
|
||||
<release date="2025-06-25" type="stable" version="0.15.1"></release>
|
||||
<release date="2025-06-25" type="stable" version="0.15.0"></release>
|
||||
<release date="2025-06-03" type="stable" version="0.14.0"></release>
|
||||
<release date="2025-05-26" type="stable" version="0.13.0"></release>
|
||||
<release date="2025-05-13" type="stable" version="0.12.7"></release>
|
||||
<release date="2025-05-08" type="stable" version="0.12.6"></release>
|
||||
<release date="2025-05-07" type="stable" version="0.12.5"></release>
|
||||
<release date="2025-03-10" type="stable" version="0.12.3"></release>
|
||||
<release date="2025-01-25" type="stable" version="0.12.2"></release>
|
||||
<release date="2024-11-20" type="stable" version="0.12.1"></release>
|
||||
<release date="2024-11-19" type="stable" version="0.12.0"></release>
|
||||
<release date="2024-10-15" type="stable" version="0.11.1"></release>
|
||||
<release date="2024-10-10" type="stable" version="0.11.0"></release>
|
||||
<release date="2024-09-29" type="stable" version="0.10.1"></release>
|
||||
<release date="2024-09-27" type="stable" version="0.10.0"></release>
|
||||
<release date="2024-09-11" type="stable" version="0.9.0"></release>
|
||||
<release date="2024-09-04" type="stable" version="0.8.1"></release>
|
||||
<release date="2024-09-03" type="stable" version="0.8.0"></release>
|
||||
<release date="2024-07-30" type="stable" version="0.7.3"></release>
|
||||
<release date="2024-07-30" type="stable" version="0.7.2"></release>
|
||||
<release date="2024-05-07" type="stable" version="0.7.1"></release>
|
||||
<release date="2024-05-07" type="stable" version="0.7.0"></release>
|
||||
<release date="2024-03-13" type="stable" version="0.6.1"></release>
|
||||
<release date="2024-03-06" type="stable" version="0.6.0"></release>
|
||||
<release date="2023-12-14" type="stable" version="0.5.3"></release>
|
||||
<release date="2023-11-18" type="stable" version="0.5.2"></release>
|
||||
<release date="2023-11-02" type="stable" version="0.5.1"></release>
|
||||
<release date="2023-10-31" type="stable" version="0.5.0"></release>
|
||||
<release date="2023-10-08" type="stable" version="0.4.1"></release>
|
||||
<release date="2023-09-25" type="stable" version="0.4.0"></release>
|
||||
<release date="2023-08-08" type="stable" version="0.3.0"></release>
|
||||
<release date="2023-06-14" type="stable" version="0.2.0"></release>
|
||||
<release date="2023-05-22" type="stable" version="0.1.1"></release>
|
||||
<release date="2023-05-22" type="stable" version="0.1.0"></release>
|
||||
<release date="2023-04-03" type="development" version="0.0.1-alpha6"></release>
|
||||
<release date="2023-02-09" type="development" version="0.0.1-alpha5"></release>
|
||||
<release date="2023-01-16" type="development" version="0.0.1-alpha4"></release>
|
||||
<release date="2023-01-03" type="development" version="0.0.1-alpha3"></release>
|
||||
<release date="2022-12-30" type="development" version="0.0.1-alpha2"></release>
|
||||
<release date="2022-11-21" type="development" version="0.0.1-alpha1"></release>
|
||||
</releases>
|
||||
</component>
|
||||
@@ -55,7 +55,9 @@
|
||||
"start": "electron-vite preview",
|
||||
"typecheck": "pnpm run typecheck:node && pnpm run typecheck:web",
|
||||
"typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
|
||||
"typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false"
|
||||
"typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false",
|
||||
"version": "pnpm version --no-git-tag-version",
|
||||
"postversion": "node ./scripts/update-app-stream.mjs"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ag-grid-community/client-side-row-model": "^28.2.1",
|
||||
@@ -94,6 +96,7 @@
|
||||
"electron-store": "^8.1.0",
|
||||
"electron-updater": "^6.3.9",
|
||||
"fast-average-color": "^9.3.0",
|
||||
"fast-xml-parser": "^5.3.0",
|
||||
"format-duration": "^2.0.0",
|
||||
"fuse.js": "^6.6.2",
|
||||
"i18next": "^21.10.0",
|
||||
|
||||
117
pnpm-lock.yaml
generated
117
pnpm-lock.yaml
generated
@@ -116,6 +116,9 @@ importers:
|
||||
fast-average-color:
|
||||
specifier: ^9.3.0
|
||||
version: 9.5.0
|
||||
fast-xml-parser:
|
||||
specifier: ^5.3.0
|
||||
version: 5.3.0
|
||||
format-duration:
|
||||
specifier: ^2.0.0
|
||||
version: 2.0.0
|
||||
@@ -223,7 +226,7 @@ importers:
|
||||
version: 3.25.23
|
||||
zustand:
|
||||
specifier: ^5.0.5
|
||||
version: 5.0.5(@types/react@18.3.23)(immer@9.0.21)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0))
|
||||
version: 5.0.8(@types/react@18.3.23)(immer@9.0.21)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0))
|
||||
devDependencies:
|
||||
'@electron-toolkit/eslint-config-prettier':
|
||||
specifier: ^3.0.0
|
||||
@@ -266,7 +269,7 @@ importers:
|
||||
version: 8.18.1
|
||||
'@vitejs/plugin-react':
|
||||
specifier: ^4.3.4
|
||||
version: 4.5.0(vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.6))(terser@5.39.2))
|
||||
version: 4.5.0(vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.2)(yaml@2.8.1))
|
||||
concurrently:
|
||||
specifier: ^7.1.0
|
||||
version: 7.6.0
|
||||
@@ -284,7 +287,7 @@ importers:
|
||||
version: 3.2.1
|
||||
electron-vite:
|
||||
specifier: ^3.1.0
|
||||
version: 3.1.0(vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.6))(terser@5.39.2))
|
||||
version: 3.1.0(vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.2)(yaml@2.8.1))
|
||||
eslint:
|
||||
specifier: ^9.24.0
|
||||
version: 9.27.0
|
||||
@@ -308,7 +311,7 @@ importers:
|
||||
version: 9.3.0
|
||||
postcss-preset-mantine:
|
||||
specifier: ^1.17.0
|
||||
version: 1.17.0(postcss@8.5.6)
|
||||
version: 1.17.0(postcss@8.5.3)
|
||||
prettier:
|
||||
specifier: ^3.5.3
|
||||
version: 3.5.3
|
||||
@@ -335,7 +338,7 @@ importers:
|
||||
version: 5.8.3
|
||||
vite:
|
||||
specifier: ^6.3.6
|
||||
version: 6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.6))(terser@5.39.2)
|
||||
version: 6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.2)(yaml@2.8.1)
|
||||
vite-plugin-conditional-import:
|
||||
specifier: ^0.1.7
|
||||
version: 0.1.7
|
||||
@@ -344,10 +347,10 @@ importers:
|
||||
version: 1.6.0
|
||||
vite-plugin-ejs:
|
||||
specifier: ^1.7.0
|
||||
version: 1.7.0(vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.6))(terser@5.39.2))
|
||||
version: 1.7.0(vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.2)(yaml@2.8.1))
|
||||
vite-plugin-pwa:
|
||||
specifier: ^1.0.3
|
||||
version: 1.0.3(vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.6))(terser@5.39.2))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0)
|
||||
version: 1.0.3(vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.2)(yaml@2.8.1))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0)
|
||||
|
||||
packages:
|
||||
|
||||
@@ -3042,6 +3045,10 @@ packages:
|
||||
fast-uri@3.0.6:
|
||||
resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==}
|
||||
|
||||
fast-xml-parser@5.3.0:
|
||||
resolution: {integrity: sha512-gkWGshjYcQCF+6qtlrqBqELqNqnt4CxruY6UVAWWnqb3DQ6qaNFEIKqzYep1XzHLM/QtrHVCxyPOtTk4LTQ7Aw==}
|
||||
hasBin: true
|
||||
|
||||
fastest-levenshtein@1.0.16:
|
||||
resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
|
||||
engines: {node: '>= 4.9.1'}
|
||||
@@ -5094,6 +5101,9 @@ packages:
|
||||
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
strnum@2.1.1:
|
||||
resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==}
|
||||
|
||||
stylelint-config-css-modules@4.4.0:
|
||||
resolution: {integrity: sha512-J93MtxPjRzs/TjwbJ5y9SQy4iIqULXwL1CF1yx2tQCJfS/VZUcDAmoGOwqlLbhHXSQtZO5XQiA75NVWUR3KDCQ==}
|
||||
peerDependencies:
|
||||
@@ -5705,6 +5715,11 @@ packages:
|
||||
yallist@4.0.0:
|
||||
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
|
||||
|
||||
yaml@2.8.1:
|
||||
resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==}
|
||||
engines: {node: '>= 14.6'}
|
||||
hasBin: true
|
||||
|
||||
yargs-parser@21.1.1:
|
||||
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
|
||||
engines: {node: '>=12'}
|
||||
@@ -5723,8 +5738,8 @@ packages:
|
||||
zod@3.25.23:
|
||||
resolution: {integrity: sha512-Od2bdMosahjSrSgJtakrwjMDb1zM1A3VIHCPGveZt/3/wlrTWBya2lmEh2OYe4OIu8mPTmmr0gnLHIWQXdtWBg==}
|
||||
|
||||
zustand@5.0.5:
|
||||
resolution: {integrity: sha512-mILtRfKW9xM47hqxGIxCv12gXusoY/xTSHBYApXozR0HmQv299whhBeeAcRy+KrPPybzosvJBCOmVjq6x12fCg==}
|
||||
zustand@5.0.8:
|
||||
resolution: {integrity: sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==}
|
||||
engines: {node: '>=12.20.0'}
|
||||
peerDependencies:
|
||||
'@types/react': '>=18.0.0'
|
||||
@@ -5892,7 +5907,7 @@ snapshots:
|
||||
'@babel/helper-member-expression-to-functions@7.27.1':
|
||||
dependencies:
|
||||
'@babel/traverse': 7.28.4
|
||||
'@babel/types': 7.27.1
|
||||
'@babel/types': 7.28.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -5914,7 +5929,7 @@ snapshots:
|
||||
|
||||
'@babel/helper-optimise-call-expression@7.27.1':
|
||||
dependencies:
|
||||
'@babel/types': 7.27.1
|
||||
'@babel/types': 7.28.4
|
||||
|
||||
'@babel/helper-plugin-utils@7.27.1': {}
|
||||
|
||||
@@ -5923,7 +5938,7 @@ snapshots:
|
||||
'@babel/core': 7.27.1
|
||||
'@babel/helper-annotate-as-pure': 7.27.3
|
||||
'@babel/helper-wrap-function': 7.28.3
|
||||
'@babel/traverse': 7.27.1
|
||||
'@babel/traverse': 7.28.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -5938,8 +5953,8 @@ snapshots:
|
||||
|
||||
'@babel/helper-skip-transparent-expression-wrappers@7.27.1':
|
||||
dependencies:
|
||||
'@babel/traverse': 7.27.1
|
||||
'@babel/types': 7.27.1
|
||||
'@babel/traverse': 7.28.4
|
||||
'@babel/types': 7.28.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -5974,7 +5989,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@babel/core': 7.27.1
|
||||
'@babel/helper-plugin-utils': 7.27.1
|
||||
'@babel/traverse': 7.27.1
|
||||
'@babel/traverse': 7.28.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -6153,7 +6168,7 @@ snapshots:
|
||||
'@babel/core': 7.27.1
|
||||
'@babel/helper-compilation-targets': 7.27.2
|
||||
'@babel/helper-plugin-utils': 7.27.1
|
||||
'@babel/traverse': 7.27.1
|
||||
'@babel/traverse': 7.28.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -6199,7 +6214,7 @@ snapshots:
|
||||
'@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1)
|
||||
'@babel/helper-plugin-utils': 7.27.1
|
||||
'@babel/helper-validator-identifier': 7.27.1
|
||||
'@babel/traverse': 7.27.1
|
||||
'@babel/traverse': 7.28.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -6448,7 +6463,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@babel/core': 7.27.1
|
||||
'@babel/helper-plugin-utils': 7.27.1
|
||||
'@babel/types': 7.27.1
|
||||
'@babel/types': 7.28.4
|
||||
esutils: 2.0.3
|
||||
|
||||
'@babel/runtime@7.27.1': {}
|
||||
@@ -7552,7 +7567,7 @@ snapshots:
|
||||
'@typescript-eslint/types': 8.32.1
|
||||
eslint-visitor-keys: 4.2.0
|
||||
|
||||
'@vitejs/plugin-react@4.5.0(vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.6))(terser@5.39.2))':
|
||||
'@vitejs/plugin-react@4.5.0(vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.2)(yaml@2.8.1))':
|
||||
dependencies:
|
||||
'@babel/core': 7.27.1
|
||||
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.1)
|
||||
@@ -7560,7 +7575,7 @@ snapshots:
|
||||
'@rolldown/pluginutils': 1.0.0-beta.9
|
||||
'@types/babel__core': 7.20.5
|
||||
react-refresh: 0.17.0
|
||||
vite: 6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.6))(terser@5.39.2)
|
||||
vite: 6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.2)(yaml@2.8.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -8504,7 +8519,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
electron-vite@3.1.0(vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.6))(terser@5.39.2)):
|
||||
electron-vite@3.1.0(vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.2)(yaml@2.8.1)):
|
||||
dependencies:
|
||||
'@babel/core': 7.27.1
|
||||
'@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.1)
|
||||
@@ -8512,7 +8527,7 @@ snapshots:
|
||||
esbuild: 0.25.4
|
||||
magic-string: 0.30.17
|
||||
picocolors: 1.1.1
|
||||
vite: 6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.6))(terser@5.39.2)
|
||||
vite: 6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.2)(yaml@2.8.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -8907,6 +8922,10 @@ snapshots:
|
||||
|
||||
fast-uri@3.0.6: {}
|
||||
|
||||
fast-xml-parser@5.3.0:
|
||||
dependencies:
|
||||
strnum: 2.1.1
|
||||
|
||||
fastest-levenshtein@1.0.16: {}
|
||||
|
||||
fastq@1.19.1:
|
||||
@@ -10142,32 +10161,32 @@ snapshots:
|
||||
|
||||
possible-typed-array-names@1.1.0: {}
|
||||
|
||||
postcss-js@4.0.1(postcss@8.5.6):
|
||||
postcss-js@4.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
camelcase-css: 2.0.1
|
||||
postcss: 8.5.6
|
||||
postcss: 8.5.3
|
||||
|
||||
postcss-media-query-parser@0.2.3:
|
||||
optional: true
|
||||
|
||||
postcss-mixins@9.0.4(postcss@8.5.6):
|
||||
postcss-mixins@9.0.4(postcss@8.5.3):
|
||||
dependencies:
|
||||
fast-glob: 3.3.3
|
||||
postcss: 8.5.6
|
||||
postcss-js: 4.0.1(postcss@8.5.6)
|
||||
postcss-simple-vars: 7.0.1(postcss@8.5.6)
|
||||
sugarss: 4.0.1(postcss@8.5.6)
|
||||
postcss: 8.5.3
|
||||
postcss-js: 4.0.1(postcss@8.5.3)
|
||||
postcss-simple-vars: 7.0.1(postcss@8.5.3)
|
||||
sugarss: 4.0.1(postcss@8.5.3)
|
||||
|
||||
postcss-nested@6.2.0(postcss@8.5.6):
|
||||
postcss-nested@6.2.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.6
|
||||
postcss: 8.5.3
|
||||
postcss-selector-parser: 6.1.2
|
||||
|
||||
postcss-preset-mantine@1.17.0(postcss@8.5.6):
|
||||
postcss-preset-mantine@1.17.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.6
|
||||
postcss-mixins: 9.0.4(postcss@8.5.6)
|
||||
postcss-nested: 6.2.0(postcss@8.5.6)
|
||||
postcss: 8.5.3
|
||||
postcss-mixins: 9.0.4(postcss@8.5.3)
|
||||
postcss-nested: 6.2.0(postcss@8.5.3)
|
||||
|
||||
postcss-resolve-nested-selector@0.1.6: {}
|
||||
|
||||
@@ -10185,9 +10204,9 @@ snapshots:
|
||||
cssesc: 3.0.0
|
||||
util-deprecate: 1.0.2
|
||||
|
||||
postcss-simple-vars@7.0.1(postcss@8.5.6):
|
||||
postcss-simple-vars@7.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.6
|
||||
postcss: 8.5.3
|
||||
|
||||
postcss-sorting@8.0.2(postcss@8.5.6):
|
||||
dependencies:
|
||||
@@ -10991,6 +11010,8 @@ snapshots:
|
||||
|
||||
strip-json-comments@3.1.1: {}
|
||||
|
||||
strnum@2.1.1: {}
|
||||
|
||||
stylelint-config-css-modules@4.4.0(stylelint@16.20.0(typescript@5.8.3)):
|
||||
dependencies:
|
||||
stylelint: 16.20.0(typescript@5.8.3)
|
||||
@@ -11074,9 +11095,9 @@ snapshots:
|
||||
- supports-color
|
||||
- typescript
|
||||
|
||||
sugarss@4.0.1(postcss@8.5.6):
|
||||
sugarss@4.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.6
|
||||
postcss: 8.5.3
|
||||
|
||||
sumchecker@3.0.1:
|
||||
dependencies:
|
||||
@@ -11451,23 +11472,23 @@ snapshots:
|
||||
fast-glob: 3.3.3
|
||||
magic-string: 0.30.17
|
||||
|
||||
vite-plugin-ejs@1.7.0(vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.6))(terser@5.39.2)):
|
||||
vite-plugin-ejs@1.7.0(vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.2)(yaml@2.8.1)):
|
||||
dependencies:
|
||||
ejs: 3.1.10
|
||||
vite: 6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.6))(terser@5.39.2)
|
||||
vite: 6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.2)(yaml@2.8.1)
|
||||
|
||||
vite-plugin-pwa@1.0.3(vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.6))(terser@5.39.2))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0):
|
||||
vite-plugin-pwa@1.0.3(vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.2)(yaml@2.8.1))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0):
|
||||
dependencies:
|
||||
debug: 4.4.3
|
||||
pretty-bytes: 6.1.1
|
||||
tinyglobby: 0.2.15
|
||||
vite: 6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.6))(terser@5.39.2)
|
||||
vite: 6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.2)(yaml@2.8.1)
|
||||
workbox-build: 7.3.0(@types/babel__core@7.20.5)
|
||||
workbox-window: 7.3.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.6))(terser@5.39.2):
|
||||
vite@6.3.6(@types/node@22.15.32)(sass-embedded@1.89.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.2)(yaml@2.8.1):
|
||||
dependencies:
|
||||
esbuild: 0.25.9
|
||||
fdir: 6.5.0(picomatch@4.0.3)
|
||||
@@ -11479,8 +11500,9 @@ snapshots:
|
||||
'@types/node': 22.15.32
|
||||
fsevents: 2.3.3
|
||||
sass-embedded: 1.89.0
|
||||
sugarss: 4.0.1(postcss@8.5.6)
|
||||
sugarss: 4.0.1(postcss@8.5.3)
|
||||
terser: 5.39.2
|
||||
yaml: 2.8.1
|
||||
|
||||
void-elements@3.1.0: {}
|
||||
|
||||
@@ -11715,6 +11737,9 @@ snapshots:
|
||||
|
||||
yallist@4.0.0: {}
|
||||
|
||||
yaml@2.8.1:
|
||||
optional: true
|
||||
|
||||
yargs-parser@21.1.1: {}
|
||||
|
||||
yargs@17.7.2:
|
||||
@@ -11736,7 +11761,7 @@ snapshots:
|
||||
|
||||
zod@3.25.23: {}
|
||||
|
||||
zustand@5.0.5(@types/react@18.3.23)(immer@9.0.21)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)):
|
||||
zustand@5.0.8(@types/react@18.3.23)(immer@9.0.21)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)):
|
||||
optionalDependencies:
|
||||
'@types/react': 18.3.23
|
||||
immer: 9.0.21
|
||||
|
||||
35
scripts/update-app-stream.mjs
Normal file
35
scripts/update-app-stream.mjs
Normal file
@@ -0,0 +1,35 @@
|
||||
import { XMLBuilder, XMLParser } from 'fast-xml-parser';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
if (args.length > 3) {
|
||||
console.error('Usage: node update-app-stream.js [package-file] [date] [metainfo-file]');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const packageFile = args[0] || path.resolve(process.cwd(), 'package.json');
|
||||
|
||||
const packageContent = fs.readFileSync(packageFile, 'utf8');
|
||||
const packageJson = JSON.parse(packageContent);
|
||||
const version = packageJson.version;
|
||||
|
||||
const time = Math.floor((Date.parse(args[1]) || Date.now()) / 1000);
|
||||
const metainfoFile = args[2] || path.resolve(process.cwd(), 'org.jeffvli.feishin.metainfo.xml');
|
||||
|
||||
const parser = new XMLParser({ ignoreAttributes: false });
|
||||
const metainfoContent = fs.readFileSync(metainfoFile, 'utf8');
|
||||
const metainfo = parser.parse(metainfoContent);
|
||||
|
||||
if (!metainfo.component.releases.release.find((release) => release['@_version'] === version)) {
|
||||
metainfo.component.releases.release.unshift({
|
||||
'@_date': new Date(time * 1000).toISOString().split('T')[0],
|
||||
'@_type': version.includes('-') ? 'development' : 'stable',
|
||||
'@_version': version,
|
||||
});
|
||||
}
|
||||
|
||||
const builder = new XMLBuilder({ format: true, ignoreAttributes: false, indentBy: ' ' });
|
||||
fs.writeFileSync(metainfoFile, builder.build(metainfo), 'utf8');
|
||||
|
||||
console.log(`Updated ${metainfoFile} with version ${version}`);
|
||||
Reference in New Issue
Block a user