mirror of
https://github.com/KRTirtho/spotube.git
synced 2026-11-04 10:13:59 +00:00
Compare commits
5 Commits
5e47ea5ad5
...
4fcd04dae3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4fcd04dae3 | ||
|
|
fa9b42cf10 | ||
|
|
8d4ea82a7e | ||
|
|
eb972c8633 | ||
|
|
b0327fd224 |
168
.github/workflows/spotube-release-binary.yml
vendored
168
.github/workflows/spotube-release-binary.yml
vendored
@ -12,6 +12,19 @@ on:
|
||||
- stable
|
||||
- beta
|
||||
- nightly
|
||||
platform:
|
||||
description: 'Platform to build (nightly only; stable and beta always build everything)'
|
||||
required: true
|
||||
type: choice
|
||||
default: 'all'
|
||||
options:
|
||||
- all
|
||||
- android
|
||||
- linux-x86_64
|
||||
- linux-aarch64
|
||||
- windows
|
||||
- macos
|
||||
- ios
|
||||
dry_run:
|
||||
description: 'Dry run (build & upload artifacts only, skip creating release)'
|
||||
required: false
|
||||
@ -29,16 +42,94 @@ permissions:
|
||||
|
||||
# Never cancel a running release when another is dispatched, and let stable, beta and nightly run side by side
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.release_type }}
|
||||
group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.release_type }}-${{ inputs.platform }}
|
||||
cancel-in-progress: false
|
||||
|
||||
env:
|
||||
COMPOSE_WEBVIEW_REPO: KRTirtho/ComposeNativeWebview
|
||||
COMPOSE_WEBVIEW_COMMIT: cbd36f88927298a28a2d64c6acf7ec3b2def6f9d
|
||||
# fix/linux-wayland-input
|
||||
COMPOSE_WEBVIEW_COMMIT: b11ac748de1219f9432338c067a2c5dafef3072a
|
||||
|
||||
jobs:
|
||||
validate-inputs:
|
||||
name: Validate Inputs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Single platform builds are nightly only
|
||||
if: ${{ inputs.platform != 'all' && inputs.release_type != 'nightly' }}
|
||||
run: |
|
||||
echo "::error::Building a single platform is only supported for nightly releases"
|
||||
exit 1
|
||||
|
||||
# ComposeNativeWebview's JNI backends are gitignored and only built for the host OS, so a
|
||||
# publish from macOS alone ships a jar without the Linux / Windows WebView libraries (the
|
||||
# WebView then renders nothing). Build them on their own OS and hand them to prepare-deps.
|
||||
build-webview-natives:
|
||||
name: WebView Natives (${{ matrix.name }})
|
||||
needs: validate-inputs
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
include:
|
||||
- name: linux-x64
|
||||
os: ubuntu-latest
|
||||
- name: linux-aarch64
|
||||
os: ubuntu-24.04-arm
|
||||
- name: windows-x64
|
||||
os: windows-latest
|
||||
steps:
|
||||
- name: Checkout ComposeNativeWebview
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
repository: ${{ env.COMPOSE_WEBVIEW_REPO }}
|
||||
ref: ${{ env.COMPOSE_WEBVIEW_COMMIT }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
path: compose-webview
|
||||
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v6
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: 21
|
||||
|
||||
- name: Build Linux WebView native library
|
||||
if: runner.os == 'Linux'
|
||||
working-directory: compose-webview
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y build-essential pkg-config libgtk-3-dev libcairo2-dev \
|
||||
libsoup-3.0-dev libwebkit2gtk-4.1-dev
|
||||
bash webview-compose/src/jvmMain/native/linux/build.sh
|
||||
|
||||
- name: Build Windows WebView native library
|
||||
if: runner.os == 'Windows'
|
||||
working-directory: compose-webview
|
||||
shell: cmd
|
||||
run: webview-compose\src\jvmMain\native\windows\build.bat
|
||||
|
||||
- name: Verify WebView native library
|
||||
working-directory: compose-webview
|
||||
shell: bash
|
||||
run: |
|
||||
case "${{ matrix.name }}" in
|
||||
linux-*) files="${{ matrix.name }}/libcompose_webview_linux.so" ;;
|
||||
windows-x64) files="win32-x64/compose_webview_windows.dll win32-x64/WebView2Loader.dll" ;;
|
||||
esac
|
||||
for f in $files; do
|
||||
test -f "webview-compose/src/jvmMain/resources/nucleus/native/$f" || { echo "::error::Missing $f"; exit 1; }
|
||||
done
|
||||
|
||||
- name: Upload WebView native library
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: webview-natives-${{ matrix.name }}
|
||||
path: compose-webview/webview-compose/src/jvmMain/resources/nucleus/native/
|
||||
retention-days: 1
|
||||
|
||||
prepare-deps:
|
||||
name: Prepare Dependencies
|
||||
needs: [validate-inputs, build-webview-natives]
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: Checkout ComposeNativeWebview
|
||||
@ -49,6 +140,15 @@ jobs:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
path: compose-webview
|
||||
|
||||
# Downloaded after checkout, so they are newer than the native sources and
|
||||
# the build keeps them instead of trying to rebuild on the wrong OS.
|
||||
- name: Download WebView native libraries
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
pattern: webview-natives-*
|
||||
merge-multiple: true
|
||||
path: compose-webview/webview-compose/src/jvmMain/resources/nucleus/native
|
||||
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v6
|
||||
with:
|
||||
@ -70,6 +170,16 @@ jobs:
|
||||
chmod +x gradlew
|
||||
./gradlew publishToMavenLocal
|
||||
|
||||
- name: Verify published JVM jar carries every WebView backend
|
||||
run: |
|
||||
jar=$(ls ~/.m2/repository/dev/nucleusframework/composewebview-jvm/*/composewebview-jvm-*.jar | grep -v -e sources -e javadoc | head -1)
|
||||
contents=$(unzip -l "$jar")
|
||||
for f in linux-x64/libcompose_webview_linux.so linux-aarch64/libcompose_webview_linux.so \
|
||||
win32-x64/compose_webview_windows.dll win32-x64/WebView2Loader.dll \
|
||||
darwin-aarch64/libcompose_webview_macos.dylib darwin-x64/libcompose_webview_macos.dylib; do
|
||||
grep -q "nucleus/native/$f" <<< "$contents" || { echo "::error::$jar is missing $f"; exit 1; }
|
||||
done
|
||||
|
||||
- name: Upload maven local
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
@ -78,7 +188,8 @@ jobs:
|
||||
|
||||
build-android:
|
||||
name: Android
|
||||
needs: prepare-deps
|
||||
needs: [validate-inputs, prepare-deps]
|
||||
if: ${{ inputs.platform == 'all' || inputs.platform == 'android' }}
|
||||
timeout-minutes: 120
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
@ -152,7 +263,8 @@ jobs:
|
||||
|
||||
build-linux:
|
||||
name: Linux Desktop
|
||||
needs: prepare-deps
|
||||
needs: [validate-inputs, prepare-deps]
|
||||
if: ${{ inputs.platform == 'all' || inputs.platform == 'linux-x86_64' }}
|
||||
timeout-minutes: 120
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
@ -161,17 +273,17 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install packaging tools
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y rpm fuse build-essential zlib1g-dev patchelf zstd
|
||||
|
||||
- name: Download maven local
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: maven-local
|
||||
path: ~/.m2/repository/
|
||||
|
||||
- name: Install packaging tools
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y rpm fuse build-essential zlib1g-dev patchelf zstd
|
||||
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v6
|
||||
with:
|
||||
@ -265,7 +377,8 @@ jobs:
|
||||
|
||||
build-linux-arm64:
|
||||
name: Linux Desktop (aarch64)
|
||||
needs: prepare-deps
|
||||
needs: [validate-inputs, prepare-deps]
|
||||
if: ${{ inputs.platform == 'all' || inputs.platform == 'linux-aarch64' }}
|
||||
timeout-minutes: 120
|
||||
runs-on: ubuntu-24.04-arm
|
||||
steps:
|
||||
@ -281,17 +394,17 @@ jobs:
|
||||
with:
|
||||
packages: tools platform-tools ndk;28.2.13676358
|
||||
|
||||
- name: Install packaging tools
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y rpm fuse build-essential zlib1g-dev patchelf zstd
|
||||
|
||||
- name: Download maven local
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: maven-local
|
||||
path: ~/.m2/repository/
|
||||
|
||||
- name: Install packaging tools
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y rpm fuse build-essential zlib1g-dev patchelf zstd
|
||||
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v6
|
||||
with:
|
||||
@ -385,7 +498,8 @@ jobs:
|
||||
|
||||
build-windows:
|
||||
name: Windows Desktop
|
||||
needs: prepare-deps
|
||||
needs: [validate-inputs, prepare-deps]
|
||||
if: ${{ inputs.platform == 'all' || inputs.platform == 'windows' }}
|
||||
timeout-minutes: 120
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
@ -448,7 +562,8 @@ jobs:
|
||||
|
||||
build-macos:
|
||||
name: macOS Desktop
|
||||
needs: prepare-deps
|
||||
needs: [validate-inputs, prepare-deps]
|
||||
if: ${{ inputs.platform == 'all' || inputs.platform == 'macos' }}
|
||||
timeout-minutes: 120
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
@ -516,7 +631,8 @@ jobs:
|
||||
|
||||
build-ios:
|
||||
name: iOS
|
||||
needs: prepare-deps
|
||||
needs: [validate-inputs, prepare-deps]
|
||||
if: ${{ inputs.platform == 'all' || inputs.platform == 'ios' }}
|
||||
timeout-minutes: 120
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
@ -585,8 +701,11 @@ jobs:
|
||||
|
||||
create-release:
|
||||
name: Create GitHub Release
|
||||
if: ${{ !inputs.dry_run }}
|
||||
# Skipped platform jobs count as skipped, not failed, so a single platform build still releases
|
||||
if: ${{ !inputs.dry_run && !cancelled() && !contains(needs.*.result, 'failure') }}
|
||||
needs:
|
||||
- validate-inputs
|
||||
- prepare-deps
|
||||
- build-android
|
||||
- build-linux
|
||||
- build-linux-arm64
|
||||
@ -599,7 +718,6 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
|
||||
# The build resolves its plugins from mavenLocal, so Gradle needs the same setup as the build jobs
|
||||
- name: Download maven local
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
@ -639,6 +757,7 @@ jobs:
|
||||
uses: actions/download-artifact@v8
|
||||
|
||||
- name: Generate release notes
|
||||
if: ${{ inputs.platform == 'all' }}
|
||||
run: |
|
||||
echo "## Downloads" > release-notes.md
|
||||
echo "" >> release-notes.md
|
||||
@ -658,9 +777,12 @@ jobs:
|
||||
tag_name: ${{ steps.vars.outputs.tag }}
|
||||
# A new tag (stable) would otherwise point at the default branch instead of the built commit
|
||||
target_commitish: ${{ github.sha }}
|
||||
fail_on_unmatched_files: true
|
||||
name: ${{ steps.vars.outputs.release_name }}
|
||||
body_path: release-notes.md
|
||||
# A single platform build only has its own artifacts
|
||||
fail_on_unmatched_files: ${{ inputs.platform == 'all' }}
|
||||
# A single platform build only replaces that platform's assets (same file names are overwritten),
|
||||
# so leave the existing release's name and notes alone
|
||||
name: ${{ inputs.platform == 'all' && steps.vars.outputs.release_name || '' }}
|
||||
body_path: ${{ inputs.platform == 'all' && 'release-notes.md' || '' }}
|
||||
draft: ${{ steps.vars.outputs.is_draft }}
|
||||
prerelease: ${{ steps.vars.outputs.is_prerelease }}
|
||||
files: |
|
||||
|
||||
@ -646,6 +646,12 @@ tasks.withType<ComposeHotRun>().configureEach {
|
||||
jvmArgs(
|
||||
"--enable-native-access=ALL-UNNAMED"
|
||||
)
|
||||
// Linux: the hot-reload agent starts AWT before main(), and JBR's X11 toolkit pins GTK to
|
||||
// XWayland, where the embedded WebKit WebView renders black. Tao owns the windows, so the
|
||||
// reloadable JVM stays headless (DevTools runs in its own JVM and is unaffected).
|
||||
if (System.getProperty("os.name").lowercase().contains("linux")) {
|
||||
jvmArgs("-Djava.awt.headless=true")
|
||||
}
|
||||
systemProperty(
|
||||
"compose.application.resources.dir",
|
||||
project.layout.buildDirectory.dir("compose/tmp/prepareAppResources").get()
|
||||
|
||||
22
composeApp/src/androidMain/res/values-sv/strings.xml
Normal file
22
composeApp/src/androidMain/res/values-sv/strings.xml
Normal file
@ -0,0 +1,22 @@
|
||||
<!--
|
||||
~ Copyright (C) 2026 Kingkor Roy Tirtho and Spotube Contributors
|
||||
~
|
||||
~ This program is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU Affero General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ This program is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU Affero General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU Affero General Public License
|
||||
~ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<resources>
|
||||
<string name="app_name">Spotube</string>
|
||||
<string name="now_playing">Spelas nu</string>
|
||||
<string name="car_connect_hint">Spela musik från telefonen för att börja lyssna i bilen</string>
|
||||
</resources>
|
||||
169
composeApp/src/commonMain/composeResources/values-sv/strings.xml
Normal file
169
composeApp/src/commonMain/composeResources/values-sv/strings.xml
Normal file
@ -0,0 +1,169 @@
|
||||
<!--
|
||||
~ Copyright (C) 2026 Kingkor Roy Tirtho and Spotube Contributors
|
||||
~
|
||||
~ This program is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU Affero General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ This program is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU Affero General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU Affero General Public License
|
||||
~ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<resources>
|
||||
<string name="settings_screen_title">Inställningar</string>
|
||||
|
||||
<string name="settings_section_plugins">Tillägg</string>
|
||||
<string name="settings_section_language_region">Språk och region</string>
|
||||
<string name="settings_section_appearance">Utseende</string>
|
||||
<string name="settings_section_playback">Uppspelning</string>
|
||||
<string name="settings_section_downloads">Nedladdningar</string>
|
||||
<string name="settings_section_caching">Cachelagring</string>
|
||||
<string name="settings_section_desktop">Dator</string>
|
||||
<string name="settings_section_updates">Uppdateringar</string>
|
||||
|
||||
<string name="settings_action_close">Stäng</string>
|
||||
<string name="settings_action_save">Spara</string>
|
||||
<string name="settings_action_cancel">Avbryt</string>
|
||||
|
||||
<string name="settings_language_title">Språk</string>
|
||||
<string name="settings_language_subtitle_current">Språk för appens gränssnitt. Nuvarande: %1$s</string>
|
||||
<string name="settings_country_title">Land</string>
|
||||
<string name="settings_country_subtitle_current">Land som styr innehåll och tillgänglighet. Nuvarande: %1$s</string>
|
||||
<string name="settings_option_name_and_code">%1$s (%2$s)</string>
|
||||
|
||||
<string name="settings_theme_title">Tema</string>
|
||||
<string name="settings_theme_subtitle_current">Välj hur Spotube anpassar sig till systemets utseende. Nuvarande: %1$s</string>
|
||||
<string name="settings_theme_light">Ljust</string>
|
||||
<string name="settings_theme_dark">Mörkt</string>
|
||||
<string name="settings_theme_system">System</string>
|
||||
|
||||
<string name="settings_accent_title">Accentfärg</string>
|
||||
<string name="settings_accent_subtitle_current">Nuvarande färgpalett: %1$s</string>
|
||||
<string name="settings_accent_dialog_title">Accentfärg</string>
|
||||
<string name="settings_accent_dialog_description">Välj en accentpalett och förhandsgranska den i både ljust och mörkt tema.</string>
|
||||
<string name="settings_preview_light">Ljust</string>
|
||||
<string name="settings_preview_dark">Mörkt</string>
|
||||
<string name="settings_preview_label">Förhandsgranskning</string>
|
||||
<string name="settings_preview_button">Knapp</string>
|
||||
<string name="settings_accent_green_goblin">Gröna trollet</string>
|
||||
<string name="settings_accent_electric_violet">Elektriskt violett</string>
|
||||
<string name="settings_accent_oceanic_cyan">Havscyan</string>
|
||||
<string name="settings_accent_sunset_orange">Solnedgångsorange</string>
|
||||
<string name="settings_accent_rose_garden">Rosenträdgård</string>
|
||||
<string name="settings_accent_midnight_blue">Midnattsblått</string>
|
||||
<string name="settings_accent_metallic_slate">Metalliskt skiffergrått</string>
|
||||
|
||||
<string name="settings_download_folder_title">Egen nedladdningsmapp</string>
|
||||
<string name="settings_download_folder_current">Nuvarande mapp: %1$s</string>
|
||||
<string name="settings_download_folder_default">Nuvarande mapp: standardmappen för musik</string>
|
||||
<string name="settings_download_folder_description">Lämna fältet tomt för att använda standardmappen för musik.</string>
|
||||
<string name="settings_download_folder_placeholder">C:\Music\Spotube</string>
|
||||
<string name="settings_local_media_folders_title">Lokala mediemappar</string>
|
||||
<string name="settings_local_media_folders_subtitle_current">Egna mappar att skanna på datorn. Tillagda: %1$d</string>
|
||||
<string name="settings_local_media_folders_subtitle_empty">Ingen egen mapp har lagts till ännu</string>
|
||||
<string name="settings_local_media_folders_description">Lägg till mappar med mappväljaren. Den egna nedladdningsmappen tas med automatiskt.</string>
|
||||
<string name="settings_local_media_folders_manage">Hantera</string>
|
||||
<string name="settings_local_media_folders_add_action">Lägg till mapp</string>
|
||||
<string name="settings_local_media_folders_remove_action">Ta bort mapp</string>
|
||||
<string name="settings_local_media_folders_none_added">Inga egna mappar har lagts till.</string>
|
||||
<string name="settings_download_format_title">Musikformat för nedladdning</string>
|
||||
<string name="settings_download_format_subtitle_current">Önskad kodek och önskat behållarformat för nedladdningar. Nuvarande: %1$s</string>
|
||||
<string name="settings_download_quality_title">Musikkvalitet för nedladdning</string>
|
||||
|
||||
<string name="settings_streaming_format_title">Musikformat för strömning</string>
|
||||
<string name="settings_streaming_format_subtitle_current">Önskad kodek och önskat behållarformat för musikströmning. Nuvarande: %1$s</string>
|
||||
<string name="settings_streaming_quality_title">Musikkvalitet för strömning</string>
|
||||
<string name="settings_subtitle_current">Nuvarande: %1$s</string>
|
||||
<string name="settings_enable_music_caching_title">Aktivera cachelagring av musik</string>
|
||||
<string name="settings_enable_music_caching_subtitle">Lagra strömmat ljud lokalt så att det går snabbare att spela upp igen.</string>
|
||||
<string name="settings_cache_folder_title">Cachemapp</string>
|
||||
<string name="settings_cache_folder_current">Nuvarande: %1$s</string>
|
||||
<string name="settings_cache_folder_default">Nuvarande: appens standardcache</string>
|
||||
<string name="settings_cache_size_limit_title">Maximal cachestorlek</string>
|
||||
<string name="settings_cache_size_limit_unlimited">Ingen gräns</string>
|
||||
<string name="settings_cache_size_limit_current">Nuvarande gräns: %1$d MB</string>
|
||||
<string name="settings_cache_size_limit_description">Ange den maximala cachestorleken i MB. Ange 0 eller lämna tomt för obegränsad storlek.</string>
|
||||
<string name="settings_cache_size_limit_placeholder">500</string>
|
||||
<string name="settings_error_cache_size_range">Storleken måste vara 0 eller ett positivt tal.</string>
|
||||
<string name="settings_enable_endless_playback_title">Fortsätt spela automatiskt</string>
|
||||
<string name="settings_enable_endless_playback_subtitle">Fortsätt spela rekommenderade låtar när kön tar slut.</string>
|
||||
<string name="settings_enable_connect_title">Aktivera Connect</string>
|
||||
<string name="settings_enable_connect_subtitle">Gör det möjligt att fjärrstyra uppspelningen via Spotube Connect.</string>
|
||||
<string name="settings_playback_port_title">Port för uppspelningens proxyserver</string>
|
||||
<string name="settings_playback_port_subtitle_current">Port som uppspelningens proxyserver använder. Nuvarande: %1$d</string>
|
||||
<string name="settings_playback_port_description">Välj en port mellan 1 och 65535.</string>
|
||||
<string name="settings_playback_port_placeholder">14769</string>
|
||||
<string name="settings_error_whole_number">Ange ett giltigt heltal.</string>
|
||||
<string name="settings_error_port_range">Porten måste vara mellan 1 och 65535.</string>
|
||||
|
||||
<string name="settings_blacklist_title">Spärrlista</string>
|
||||
<string name="settings_blacklist_subtitle">Hantera spärrade låtar och artister</string>
|
||||
|
||||
<string name="settings_desktop_minimize_title">Minimera till meddelandefältet</string>
|
||||
<string name="settings_desktop_minimize_subtitle">Låt Spotube fortsätta köras i meddelandefältet när fönstret minimeras.</string>
|
||||
<string name="settings_desktop_discord_title">Discord Rich Presence</string>
|
||||
<string name="settings_desktop_discord_subtitle">Visa din aktuella uppspelningsstatus i Discord på datorn.</string>
|
||||
|
||||
<string name="settings_updates_auto_check_title">Sök automatiskt efter uppdateringar</string>
|
||||
<string name="settings_updates_auto_check_subtitle">Sök efter nya versioner av Spotube i bakgrunden.</string>
|
||||
|
||||
<string name="settings_plugins_manage_title">Hantera tillägg</string>
|
||||
<string name="settings_plugins_manage_subtitle">Hantera dina tillägg</string>
|
||||
<string name="settings_plugins_default_ability_title">Standardtillägg: %1$s</string>
|
||||
<string name="settings_plugins_ability_metadata">Metadata</string>
|
||||
<string name="settings_plugins_ability_audio">Ljud</string>
|
||||
<string name="settings_plugins_ability_lyrics">Låttexter</string>
|
||||
<string name="settings_plugins_ability_scrobble">Skrobbling</string>
|
||||
<string name="settings_plugins_no_selection">Inget tillägg valt</string>
|
||||
<string name="settings_plugins_action_change">Ändra</string>
|
||||
<string name="settings_plugins_action_select">Välj</string>
|
||||
<string name="settings_plugins_selected">Valt</string>
|
||||
<string name="settings_plugins_clear">Rensa val</string>
|
||||
<string name="settings_plugins_no_plugins">Inga tillägg är tillgängliga</string>
|
||||
<string name="settings_plugins_plugin_content_description">Tillägget %1$s</string>
|
||||
<string name="settings_plugins_clear_content_description">Rensa</string>
|
||||
|
||||
<string name="plugin_configure_title">Konfigurera</string>
|
||||
<string name="plugin_screen_title">Tilläggshanterare</string>
|
||||
<string name="plugin_error_enter_url">Ange en URL</string>
|
||||
<string name="plugin_error_url_scheme">URL:en måste börja med http:// eller https://</string>
|
||||
<string name="plugin_error_download_failed">Det gick inte att ladda ner tillägget</string>
|
||||
<string name="plugin_empty_title">Inga tillägg har installerats ännu</string>
|
||||
<string name="plugin_empty_subtitle">Klistra in en nedladdningsadress eller välj en fil ovan.</string>
|
||||
<string name="plugin_installed_count">Installerade %2$s: %1$d</string>
|
||||
<string name="plugin_installed_singular">tillägg</string>
|
||||
<string name="plugin_installed_plural">tillägg</string>
|
||||
<string name="plugin_install_section_title">Installera ett tillägg</string>
|
||||
<string name="plugin_url_placeholder">https://example.com/plugin.smplug</string>
|
||||
<string name="plugin_action_download">Ladda ner</string>
|
||||
<string name="plugin_action_install_from_file">Installera från fil (.smplug)</string>
|
||||
<string name="plugin_state_active">Aktivt</string>
|
||||
<string name="plugin_version_label">v%1$s</string>
|
||||
<string name="plugin_state_builtin">Inbyggt</string>
|
||||
<string name="plugin_action_remove">Ta bort tillägg</string>
|
||||
<string name="plugin_action_login">Logga in</string>
|
||||
<string name="plugin_action_logout">Logga ut</string>
|
||||
<string name="plugin_section_url_title">Ladda ner från URL</string>
|
||||
<string name="plugin_section_file_title">Installera från fil</string>
|
||||
<string name="plugin_section_install">Installera</string>
|
||||
|
||||
<string name="plugin_permissions_author_version">• %1$s</string>
|
||||
<string name="plugin_permissions_requested_title">Begärda behörigheter</string>
|
||||
<string name="plugin_permissions_none">Det här tillägget kräver inga särskilda behörigheter.</string>
|
||||
<string name="plugin_permissions_compare_title">Installerat och tillhandahållet</string>
|
||||
<string name="plugin_permissions_installed_label">Installerat</string>
|
||||
<string name="plugin_permissions_supplied_label">Tillhandahållet</string>
|
||||
<string name="plugin_permissions_api_diff">API %1$s → %2$s</string>
|
||||
<string name="plugin_permissions_capability_storage_title">Beständig lagring</string>
|
||||
<string name="plugin_permissions_capability_storage_desc">Läsa och skriva data på disken</string>
|
||||
<string name="plugin_permissions_capability_network_title">Nätverksförfrågningar</string>
|
||||
<string name="plugin_permissions_capability_network_desc">Skicka och ta emot data via internet</string>
|
||||
<string name="plugin_permissions_capability_webview_title">WebView</string>
|
||||
<string name="plugin_permissions_capability_webview_desc">Visa webbinnehåll i appen</string>
|
||||
</resources>
|
||||
@ -14,16 +14,12 @@
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
[versions]
|
||||
agp = "9.1.0"
|
||||
android-compileSdk = "37"
|
||||
android-minSdk = "28"
|
||||
android-targetSdk = "36"
|
||||
android-targetSdk = "37"
|
||||
agp = "9.1.0"
|
||||
androidx-activity = "1.13.0"
|
||||
androidx-appcompat = "1.7.1"
|
||||
androidx-core = "1.19.0"
|
||||
androidx-espresso = "3.7.0"
|
||||
androidx-lifecycle = "2.10.0"
|
||||
androidx-testExt = "1.3.0"
|
||||
appdirs = "1.5.0"
|
||||
cache4k = "0.14.0"
|
||||
carApp = "1.7.0"
|
||||
@ -34,12 +30,10 @@ composeShimmer = "1.5.0"
|
||||
desugar_jdk_libs = "2.1.5"
|
||||
haze = "2.0.0-alpha03"
|
||||
jna = "5.18.1"
|
||||
junit = "4.13.2"
|
||||
kermit = "2.1.0"
|
||||
kmpZip = "1.0.0"
|
||||
kotlin = "2.4.21"
|
||||
kotlinx-coroutines = "1.11.0"
|
||||
kotlinx-io = "0.9.1"
|
||||
kotlinx-serialization-json = "1.11.0"
|
||||
millennium = "0.1.1"
|
||||
mqttClient = "2.1.1"
|
||||
@ -55,27 +49,22 @@ vlcjNative = "4.12.0"
|
||||
ziplineVersion = "1.28.0"
|
||||
ktor = "3.5.1"
|
||||
dnssdkt = "1.1.0"
|
||||
runner = "1.7.0"
|
||||
core = "1.7.0"
|
||||
filekit = "0.14.2"
|
||||
compose-webview = "0.1.0-SNAPSHOT"
|
||||
composeNativeTray = "2.1.6"
|
||||
koin = "4.2.2"
|
||||
multiplatform-nav3-ui = "1.1.1"
|
||||
compose-multiplatform-adaptive = "1.3.0-alpha05"
|
||||
compose-multiplatform-lifecycle = "2.10.0"
|
||||
feather-icons = "1.1.1"
|
||||
kotlinx-datetime = "0.8.0"
|
||||
media3 = "1.10.1"
|
||||
androidx-datastore = "1.2.1"
|
||||
ksp = "2.3.12"
|
||||
spotube-gradle = "0.1.2"
|
||||
cryptography = "0.6.0"
|
||||
reorderable = "3.1.0"
|
||||
vlcjBundler = "0.2.1"
|
||||
vanniktechMavenPublish = "0.37.0"
|
||||
uniffi = "0.3.7"
|
||||
kotlinx-atomicfu = "0.33.0"
|
||||
mokkery = "3.5.1"
|
||||
jmustache = "1.16"
|
||||
|
||||
@ -98,12 +87,6 @@ kmp-zip = { module = "no.synth:kmp-zip", version.ref = "kmpZip" }
|
||||
kmp-zip-kotlinx = { module = "no.synth:kmp-zip-kotlinx", version.ref = "kmpZip" }
|
||||
kmp-zip-okio = { module = "no.synth:kmp-zip-okio", version.ref = "kmpZip" }
|
||||
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
|
||||
kotlin-testJunit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" }
|
||||
junit = { module = "junit:junit", version.ref = "junit" }
|
||||
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-core" }
|
||||
androidx-testExt-junit = { module = "androidx.test.ext:junit", version.ref = "androidx-testExt" }
|
||||
androidx-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "androidx-espresso" }
|
||||
androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" }
|
||||
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" }
|
||||
compose-uiTooling = { module = "org.jetbrains.compose.ui:ui-tooling", version.ref = "composeMultiplatform" }
|
||||
androidx-lifecycle-viewmodelCompose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" }
|
||||
@ -153,8 +136,6 @@ kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-c
|
||||
kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinx-coroutines" }
|
||||
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx-coroutines" }
|
||||
kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlin" }
|
||||
androidx-runner = { group = "androidx.test", name = "runner", version.ref = "runner" }
|
||||
androidx-core = { group = "androidx.test", name = "core", version.ref = "core" }
|
||||
filekit-core = { group = "io.github.vinceglb", name = "filekit-core", version.ref = "filekit" }
|
||||
filekit-dialogs = { group = "io.github.vinceglb", name = "filekit-dialogs", version.ref = "filekit" }
|
||||
filekit-dialogs-compose = { group = "io.github.vinceglb", name = "filekit-dialogs-compose", version.ref = "filekit" }
|
||||
@ -170,7 +151,6 @@ feather-icons = { module = "br.com.devsrsouza.compose.icons:feather", version.re
|
||||
kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" }
|
||||
androidx-datastore = { module = "androidx.datastore:datastore", version.ref = "androidx-datastore" }
|
||||
androidx-datastore-preferences = { module = "androidx.datastore:datastore-preferences", version.ref = "androidx-datastore" }
|
||||
kotlinx-io-okio = { module = "org.jetbrains.kotlinx:kotlinx-io-okio", version.ref = "kotlinx-io" }
|
||||
cryptography-core = { module = "dev.whyoleg.cryptography:cryptography-core", version.ref = "cryptography" }
|
||||
cryptography-provider-optimal = { module = "dev.whyoleg.cryptography:cryptography-provider-optimal", version.ref = "cryptography" }
|
||||
reorderable = { module = "sh.calvin.reorderable:reorderable", version.ref = "reorderable" }
|
||||
@ -189,10 +169,8 @@ kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", versio
|
||||
jetbrainsKotlinJvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
||||
androidKotlinMultiplatformLibrary = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" }
|
||||
zipline-gradle-plugin = { id = "app.cash.zipline", version.ref = "ziplineVersion" }
|
||||
mavenPublish = { id = "maven-publish" }
|
||||
spotubeGradle = { id = "org.spotube.gradle-plugin", version.ref = "spotube-gradle" }
|
||||
vlcjBundler = { id = "org.spotube.vlcj-bundler", version.ref = "vlcjBundler" }
|
||||
kotlinxAtomicFu = { id = "org.jetbrains.kotlinx.atomicfu", version.ref = "kotlinx-atomicfu" }
|
||||
uniffi = { id = "dev.gobley.uniffi", version.ref = "uniffi" }
|
||||
cargo = { id = "dev.gobley.cargo", version.ref = "uniffi" }
|
||||
mokkery = { id = "dev.mokkery", version.ref = "mokkery" }
|
||||
|
||||
Loading…
Reference in New Issue
Block a user