Compare commits
150 Commits
5db4bf7bd7
...
bbaa3738ad
Author | SHA1 | Date | |
---|---|---|---|
![]() |
bbaa3738ad | ||
![]() |
a8f70f201e | ||
![]() |
b8ecd758cf | ||
![]() |
70970f62f1 | ||
![]() |
4ed40d95b2 | ||
![]() |
b24dcd2951 | ||
![]() |
8ff90bafd7 | ||
![]() |
9190af92ef | ||
![]() |
151a440e7e | ||
![]() |
9471e008e3 | ||
![]() |
ecc0bdcc42 | ||
![]() |
49c04af302 | ||
![]() |
afe0bea306 | ||
![]() |
eadf2d928f | ||
![]() |
a299a97ca4 | ||
![]() |
cbbd0a2b40 | ||
![]() |
216fdadf25 | ||
![]() |
3599a4340f | ||
![]() |
719229b2b7 | ||
![]() |
49db82083c | ||
![]() |
84f119e482 | ||
![]() |
aeb8caf059 | ||
![]() |
7c4956153a | ||
![]() |
58dc80aa09 | ||
![]() |
4a07945214 | ||
![]() |
7b21eca37b | ||
![]() |
43ddf90c48 | ||
![]() |
878a441a9f | ||
![]() |
90493f0ea3 | ||
![]() |
db22b4fcce | ||
![]() |
0d6d482630 | ||
![]() |
a4162dc2ad | ||
![]() |
469a76dbd6 | ||
![]() |
6940e92142 | ||
![]() |
4d57b134a3 | ||
![]() |
a370166576 | ||
![]() |
69d50eec35 | ||
![]() |
2e48ac380b | ||
![]() |
d22b5349a3 | ||
![]() |
83172f198c | ||
![]() |
f870e12011 | ||
![]() |
345c6ac714 | ||
![]() |
005355e267 | ||
![]() |
aee2c9282d | ||
![]() |
ea329f40e8 | ||
![]() |
b248f90403 | ||
![]() |
e2c0ddef24 | ||
![]() |
2a0853026a | ||
![]() |
dddaa5a964 | ||
![]() |
412f3dd81c | ||
![]() |
7f30ae8d31 | ||
![]() |
c0d50d441e | ||
![]() |
66cae6c7ac | ||
![]() |
308c417ed3 | ||
![]() |
0823629fb5 | ||
![]() |
7037145519 | ||
![]() |
08d1c98674 | ||
![]() |
c0dcc87eb2 | ||
![]() |
b4f8d2dfbf | ||
![]() |
48490cf168 | ||
![]() |
ea7138e95b | ||
![]() |
5add53e269 | ||
![]() |
c615d48e27 | ||
![]() |
92c05a51e1 | ||
![]() |
71bcf355ec | ||
![]() |
089a3445a1 | ||
![]() |
dbba55606b | ||
![]() |
a2894db652 | ||
![]() |
edcd784335 | ||
![]() |
0a153fe770 | ||
![]() |
3f18f35c0b | ||
![]() |
30fd4acf37 | ||
![]() |
0e34057794 | ||
![]() |
032309a2c6 | ||
![]() |
858cbd17ad | ||
![]() |
fbd7b771ef | ||
![]() |
8bdbe7dfba | ||
![]() |
b3f6824a94 | ||
![]() |
7bb69c02de | ||
![]() |
a734ded6f8 | ||
![]() |
f228937e3e | ||
![]() |
ee7d0cfeb5 | ||
![]() |
7a630507fb | ||
![]() |
dffd494d4a | ||
![]() |
49e2d1b759 | ||
![]() |
fd3ddfece9 | ||
![]() |
2bb91feb34 | ||
![]() |
eb3fcfdd6f | ||
![]() |
066fe2a326 | ||
![]() |
93d6e0642b | ||
![]() |
1e61bca1e9 | ||
![]() |
3bb7f0d78f | ||
![]() |
75bdbeccc0 | ||
![]() |
846fa679f6 | ||
![]() |
3a5ddd6214 | ||
![]() |
3b21b05fdc | ||
![]() |
53ef9e15e1 | ||
![]() |
7309e900bc | ||
![]() |
c9556c2ecb | ||
![]() |
efdf091894 | ||
![]() |
92dde7286f | ||
![]() |
0a604a9ad5 | ||
![]() |
cfda46e07e | ||
![]() |
60f032039f | ||
![]() |
d2e0dc1ac9 | ||
![]() |
3e7b36f4e6 | ||
![]() |
cdc64e4bb0 | ||
![]() |
2f304fa943 | ||
![]() |
e83a4bb388 | ||
![]() |
90f9cc28eb | ||
![]() |
f23a078b64 | ||
![]() |
d2827a52d3 | ||
![]() |
7de6423935 | ||
![]() |
5573deb52a | ||
![]() |
412c427cec | ||
![]() |
5be4747c66 | ||
![]() |
5b457fc4bd | ||
![]() |
cb97f4352c | ||
![]() |
ee71dbf552 | ||
![]() |
1538dc6d52 | ||
![]() |
53ad5bd448 | ||
![]() |
aa65bf291d | ||
![]() |
41cc79b5e6 | ||
![]() |
86e55f7a3d | ||
![]() |
1eb0b5f847 | ||
![]() |
d898d45b4a | ||
![]() |
5f47dc3d6d | ||
![]() |
4e6db8b9e1 | ||
![]() |
b979a6ede9 | ||
![]() |
fcc05a4243 | ||
![]() |
7569c37739 | ||
![]() |
b8cae569b4 | ||
![]() |
4b09f6c96b | ||
![]() |
758b0bc9d9 | ||
![]() |
326d8212f6 | ||
![]() |
a9ba2582fb | ||
![]() |
f8211cbcc7 | ||
![]() |
3306f21860 | ||
![]() |
7a6821f28d | ||
![]() |
69c0333327 | ||
![]() |
2d6fe886e2 | ||
![]() |
67713c60d4 | ||
![]() |
bb0afa5a0c | ||
![]() |
f4306ad1c3 | ||
![]() |
b9c6c98e38 | ||
![]() |
0326630a19 | ||
![]() |
abe04b28b2 | ||
![]() |
8ac30c0031 | ||
![]() |
9a861b9954 | ||
![]() |
7491175bb6 |
@ -1,7 +1,3 @@
|
|||||||
# The format:
|
|
||||||
# SPOTIFY_SECRETS=clintId1:clientSecret1,clientId2:clientSecret2
|
|
||||||
SPOTIFY_SECRETS=$SPOTIFY_SECRETS
|
|
||||||
|
|
||||||
# 0 or 1
|
# 0 or 1
|
||||||
# 0 = disable
|
# 0 = disable
|
||||||
# 1 = enable
|
# 1 = enable
|
||||||
@ -13,5 +9,4 @@ LASTFM_API_SECRET=$LASTFM_API_SECRET
|
|||||||
# Release channel. Can be: nightly, stable
|
# Release channel. Can be: nightly, stable
|
||||||
RELEASE_CHANNEL=$RELEASE_CHANNEL
|
RELEASE_CHANNEL=$RELEASE_CHANNEL
|
||||||
|
|
||||||
HIDE_DONATIONS=$HIDE_DONATIONS
|
HIDE_DONATIONS=$HIDE_DONATIONS
|
||||||
DISABLE_SPOTIFY_IMAGES=$DISABLE_SPOTIFY_IMAGES
|
|
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"flutterSdkVersion": "3.29.2"
|
"flutterSdkVersion": "3.35.2"
|
||||||
}
|
}
|
2
.fvmrc
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"flutter": "3.29.2",
|
"flutter": "3.35.2",
|
||||||
"flavors": {}
|
"flavors": {}
|
||||||
}
|
}
|
3
.github/workflows/pr-lint.yml
vendored
@ -4,7 +4,7 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FLUTTER_VERSION: 3.29.2
|
FLUTTER_VERSION: 3.35.2
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint:
|
lint:
|
||||||
@ -21,7 +21,6 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
envsubst < .env.example > .env
|
envsubst < .env.example > .env
|
||||||
env:
|
env:
|
||||||
SPOTIFY_SECRETS: xxx:xxx
|
|
||||||
ENABLE_UPDATE_CHECK: true
|
ENABLE_UPDATE_CHECK: true
|
||||||
LASTFM_API_KEY: xxx
|
LASTFM_API_KEY: xxx
|
||||||
LASTFM_API_SECRET: xxx
|
LASTFM_API_SECRET: xxx
|
||||||
|
6
.github/workflows/spotube-release-binary.yml
vendored
@ -20,7 +20,7 @@ on:
|
|||||||
description: Dry run without uploading to release
|
description: Dry run without uploading to release
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FLUTTER_VERSION: 3.29.2
|
FLUTTER_VERSION: 3.35.2
|
||||||
FLUTTER_CHANNEL: master
|
FLUTTER_CHANNEL: master
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
@ -56,7 +56,7 @@ jobs:
|
|||||||
files: |
|
files: |
|
||||||
dist/Spotube-windows-x86_64.nupkg
|
dist/Spotube-windows-x86_64.nupkg
|
||||||
dist/Spotube-windows-x86_64-setup.exe
|
dist/Spotube-windows-x86_64-setup.exe
|
||||||
- os: macos-latest
|
- os: macos-14
|
||||||
platform: ios
|
platform: ios
|
||||||
arch: all
|
arch: all
|
||||||
files: |
|
files: |
|
||||||
@ -95,7 +95,7 @@ jobs:
|
|||||||
if: ${{matrix.platform == 'ios'}}
|
if: ${{matrix.platform == 'ios'}}
|
||||||
uses: maxim-lobanov/setup-xcode@v1
|
uses: maxim-lobanov/setup-xcode@v1
|
||||||
with:
|
with:
|
||||||
xcode-version: "16.1"
|
xcode-version: "16.2"
|
||||||
|
|
||||||
- name: Install ${{matrix.platform}} dependencies
|
- name: Install ${{matrix.platform}} dependencies
|
||||||
run: |
|
run: |
|
||||||
|
10
.metadata
@ -4,7 +4,7 @@
|
|||||||
# This file should be version controlled and should not be manually edited.
|
# This file should be version controlled and should not be manually edited.
|
||||||
|
|
||||||
version:
|
version:
|
||||||
revision: "300451adae589accbece3490f4396f10bdf15e6e"
|
revision: "d7b523b356d15fb81e7d340bbe52b47f93937323"
|
||||||
channel: "stable"
|
channel: "stable"
|
||||||
|
|
||||||
project_type: app
|
project_type: app
|
||||||
@ -13,11 +13,11 @@ project_type: app
|
|||||||
migration:
|
migration:
|
||||||
platforms:
|
platforms:
|
||||||
- platform: root
|
- platform: root
|
||||||
create_revision: 300451adae589accbece3490f4396f10bdf15e6e
|
create_revision: d7b523b356d15fb81e7d340bbe52b47f93937323
|
||||||
base_revision: 300451adae589accbece3490f4396f10bdf15e6e
|
base_revision: d7b523b356d15fb81e7d340bbe52b47f93937323
|
||||||
- platform: windows
|
- platform: windows
|
||||||
create_revision: 300451adae589accbece3490f4396f10bdf15e6e
|
create_revision: d7b523b356d15fb81e7d340bbe52b47f93937323
|
||||||
base_revision: 300451adae589accbece3490f4396f10bdf15e6e
|
base_revision: d7b523b356d15fb81e7d340bbe52b47f93937323
|
||||||
|
|
||||||
# User provided section
|
# User provided section
|
||||||
|
|
||||||
|
11
.vscode/launch.json
vendored
@ -17,6 +17,17 @@
|
|||||||
"dev"
|
"dev"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "spotube (mobile-skia)",
|
||||||
|
"type": "dart",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "lib/main.dart",
|
||||||
|
"args": [
|
||||||
|
"--flavor",
|
||||||
|
"dev",
|
||||||
|
"--no-enable-impeller"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "spotube (profile)",
|
"name": "spotube (profile)",
|
||||||
"type": "dart",
|
"type": "dart",
|
||||||
|
3
.vscode/settings.json
vendored
@ -5,6 +5,7 @@
|
|||||||
"ambiguate",
|
"ambiguate",
|
||||||
"Amoled",
|
"Amoled",
|
||||||
"Buildless",
|
"Buildless",
|
||||||
|
"configurators",
|
||||||
"danceability",
|
"danceability",
|
||||||
"fuzzywuzzy",
|
"fuzzywuzzy",
|
||||||
"gapless",
|
"gapless",
|
||||||
@ -29,5 +30,5 @@
|
|||||||
"README.md": "LICENSE,CODE_OF_CONDUCT.md,CONTRIBUTING.md,SECURITY.md,CONTRIBUTION.md,CHANGELOG.md,PRIVACY_POLICY.md",
|
"README.md": "LICENSE,CODE_OF_CONDUCT.md,CONTRIBUTING.md,SECURITY.md,CONTRIBUTION.md,CHANGELOG.md,PRIVACY_POLICY.md",
|
||||||
"*.dart": "${capture}.g.dart,${capture}.freezed.dart"
|
"*.dart": "${capture}.g.dart,${capture}.freezed.dart"
|
||||||
},
|
},
|
||||||
"dart.flutterSdkPath": ".fvm/versions/3.29.2"
|
"dart.flutterSdkPath": ".fvm/versions/3.35.2"
|
||||||
}
|
}
|
63
CHANGELOG.md
@ -1,5 +1,68 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [5.0.0](https://github.com/KRTirtho/spotube/compare/v4.0.2...v5.0.0) (2025-09-08)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
- Add ISRC track search for YouTube ([#2594](https://github.com/KRTirtho/spotube/issues/2594))
|
||||||
|
- Add new icons #2676 by @alexio-dev ([#2678](https://github.com/KRTirtho/spotube/issues/2678))
|
||||||
|
- Add connect confirmation dialog
|
||||||
|
- Add metadata api service and models
|
||||||
|
- **metadata-plugin**: Add pagination support, feed and playlist CRUD endpoints
|
||||||
|
- **metadata-plugin**: Add local storage api
|
||||||
|
- Add webview, totp and setInterval apis for plugins
|
||||||
|
- Enhance local storage and webview APIs with improved error handling and resource management
|
||||||
|
- **metadata_plugin**: Add logout method
|
||||||
|
- Update plugin configuration with more fields
|
||||||
|
- Implement metadata plugins based on hetu
|
||||||
|
- Update models to match hetu_spotube_plugin signature
|
||||||
|
- Add user endpoint calls in metadata and paginated async notifiers
|
||||||
|
- Add playlist endpoint and providers
|
||||||
|
- Add albums metadata endpoint and provider
|
||||||
|
- Add artist and album providers
|
||||||
|
- Add track endpoint for metadata service
|
||||||
|
- Remove green corp names formally
|
||||||
|
- **metadata**: Add plugin form
|
||||||
|
- Add support for entity specific search
|
||||||
|
- Enhance image handling
|
||||||
|
- Add support for automatic plugin repository from github and codeberg
|
||||||
|
- Use isolate for youtube_explode engine
|
||||||
|
- Add repository and plugin API version fields to metadata plugins
|
||||||
|
- Update new pipe version
|
||||||
|
- **metadata**: Add plugin update checker and dialog for available updates
|
||||||
|
- Optimize track options and related artists
|
||||||
|
- Add plugin scrobbling support and support button
|
||||||
|
- Add ErrorBox and NoDefaultMetadataPlugin components
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- Calling /track/:streamId endpoint causes active sourced track to be anything
|
||||||
|
- **mobile**: Dialogs in bottom sheet are not opening
|
||||||
|
- Default accent color is orange but it shows blue in settings
|
||||||
|
- Artist images are not loading up
|
||||||
|
- CVE: Remote path traversal through websocket when devices are on same network
|
||||||
|
- Endless playback not working
|
||||||
|
- **android**: NewPipe invalid search content filters
|
||||||
|
- Make YoutubeExplode engine faster
|
||||||
|
- Create and delete playlist not working
|
||||||
|
- Local track not working and images of local not showing up
|
||||||
|
- Local playback not working for tracks with special # (hashtag) characters
|
||||||
|
- Inaccessible streaming url causing rapid skips
|
||||||
|
- **yt**: Fallback to different search result if all streaming url is inaccessible
|
||||||
|
- **playback**: Skip network requests if cached file already exists
|
||||||
|
- Yt-dlp playback not working and add partial support for HLS streaming
|
||||||
|
- Windows webview2 environment permission issue
|
||||||
|
- **playback**: Play not fetching full playlist if playlist is too long
|
||||||
|
- **track_options**: Tapping on option doesn't close the menu
|
||||||
|
- **playback**: Alternative track sources switch not working
|
||||||
|
- **ui**: Lyrics white text in white background and small player buttons
|
||||||
|
|
||||||
|
### Translation
|
||||||
|
|
||||||
|
- Add Traditional Chinese translation ([#2762](https://github.com/KRTirtho/spotube/issues/2762))
|
||||||
|
- Fix Japanese translations ([#2732](https://github.com/KRTirtho/spotube/issues/2732))
|
||||||
|
- Correction of the dutch language ([#1306](https://github.com/KRTirtho/spotube/issues/1306))
|
||||||
|
|
||||||
## [4.0.2](https://github.com/krtirtho/spotube/compare/v4.0.1...v4.0.2) (2025-03-16)
|
## [4.0.2](https://github.com/krtirtho/spotube/compare/v4.0.1...v4.0.2) (2025-03-16)
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
@ -119,7 +119,7 @@ Enhancement suggestions are tracked as [GitHub issues](https://github.com/KRTirt
|
|||||||
|
|
||||||
Do the following:
|
Do the following:
|
||||||
|
|
||||||
- Download the latest Flutter SDK (>=3.16.0) & enable desktop support
|
- Install [Dart](https://dart.dev/get-dart) and [fvm](https://fvm.app/documentation/getting-started/installation)
|
||||||
- Install Development dependencies in linux
|
- Install Development dependencies in linux
|
||||||
- Debian (>=12/Bookworm)/Ubuntu
|
- Debian (>=12/Bookworm)/Ubuntu
|
||||||
```bash
|
```bash
|
||||||
@ -138,11 +138,11 @@ Do the following:
|
|||||||
- Create a `.env` in root of the project following the `.env.example` template
|
- Create a `.env` in root of the project following the `.env.example` template
|
||||||
- Now run the following to bootstrap the project
|
- Now run the following to bootstrap the project
|
||||||
```bash
|
```bash
|
||||||
flutter pub get && dart run build_runner build --delete-conflicting-outputs --enable-experiment=records,patterns
|
fvm flutter pub get && fvm dart run build_runner build --delete-conflicting-outputs
|
||||||
```
|
```
|
||||||
- Finally run these following commands in the root of the project to start the Spotube Locally
|
- Finally run these following commands in the root of the project to start the Spotube Locally
|
||||||
```bash
|
```bash
|
||||||
flutter run -d <window|macos|linux|(<android-device-id>)>
|
fvm flutter run -d <window|macos|linux|(<android-device-id>)>
|
||||||
```
|
```
|
||||||
|
|
||||||
Do debugging/testing/build etc then submit to us with PR against the development branch (dev) & we'll review your code
|
Do debugging/testing/build etc then submit to us with PR against the development branch (dev) & we'll review your code
|
||||||
|
7
Makefile
@ -8,7 +8,7 @@ tar:
|
|||||||
mkdir -p $(TEMP_DIR)\
|
mkdir -p $(TEMP_DIR)\
|
||||||
&& cp -r $(BUNDLE_DIR)/* $(TEMP_DIR)\
|
&& cp -r $(BUNDLE_DIR)/* $(TEMP_DIR)\
|
||||||
&& cp linux/spotube.desktop $(TEMP_DIR)\
|
&& cp linux/spotube.desktop $(TEMP_DIR)\
|
||||||
&& cp assets/spotube-logo.png $(TEMP_DIR)\
|
&& cp assets/branding/spotube-logo.png $(TEMP_DIR)\
|
||||||
&& cp linux/com.github.KRTirtho.Spotube.appdata.xml $(TEMP_DIR)\
|
&& cp linux/com.github.KRTirtho.Spotube.appdata.xml $(TEMP_DIR)\
|
||||||
&& tar -cJf build/spotube-linux-${VERSION}-${PKG_ARCH}.tar.xz -C $(TEMP_DIR) .\
|
&& tar -cJf build/spotube-linux-${VERSION}-${PKG_ARCH}.tar.xz -C $(TEMP_DIR) .\
|
||||||
&& rm -rf $(TEMP_DIR)
|
&& rm -rf $(TEMP_DIR)
|
||||||
@ -52,4 +52,7 @@ dmg:
|
|||||||
if [ -f dist/Spotube-macos-universal.dmg ];\
|
if [ -f dist/Spotube-macos-universal.dmg ];\
|
||||||
then rm dist/Spotube-macos-universal.dmg;\
|
then rm dist/Spotube-macos-universal.dmg;\
|
||||||
fi &&\
|
fi &&\
|
||||||
appdmg appdmg.json dist/Spotube-macos-universal.dmg
|
appdmg appdmg.json dist/Spotube-macos-universal.dmg
|
||||||
|
|
||||||
|
changelog:
|
||||||
|
git-cliff --unreleased
|
57
README.md
@ -1,8 +1,8 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<img width="600" src="assets/spotube_banner.png" alt="Spotube Logo">
|
<img width="600" src="assets/branding/spotube_banner.png" alt="Spotube Logo">
|
||||||
|
|
||||||
An open source, cross-platform music client<br />
|
A cross-platform extensible open-source music streaming platform.<br>
|
||||||
utilizing selected music provider API and YouTube, Piped.video or JioSaavn as an audio source
|
Bring your own music metadata/playlist with plugins created by community or by yourself. A small step towards the decentralized music streaming era!
|
||||||
|
|
||||||
Btw it's not just another Electron app 😉
|
Btw it's not just another Electron app 😉
|
||||||
|
|
||||||
@ -18,31 +18,24 @@ Btw it's not just another Electron app 😉
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## 🌃 Features
|
## 🌃 Features
|
||||||
|
|
||||||
- 🚫 No ads, thanks to the use of public & free music metadata providers and YT Music APIs¹
|
- 🧩 Plugin powered, supports any platform or custom music service through plugins.
|
||||||
- ⬇️ Freely downloadable tracks
|
- 🗺️ Community driven plugins for popular platforms or create your own.
|
||||||
- 🖥️ 📱 Cross-platform support
|
- ⬇️ Freely downloadable tracks with tagged metadata.
|
||||||
- 🪶 Small size & less data usage
|
- 🖥️ 📱 Cross-platform support.
|
||||||
- 🕵️ Anonymous/guest login
|
- 🪶 Small size & less data usage.
|
||||||
- 🕒 Time synced lyrics
|
- 🕒 Time synced lyrics regardless of the plugin support.
|
||||||
- ✋ No telemetry, diagnostics or user data collection
|
- ✋ No telemetry, diagnostics or user data collection.
|
||||||
- 🚀 Native performance
|
- 🚀 Native performance.
|
||||||
- 📖 Open source/libre software
|
- 📖 Open source/libre software.
|
||||||
- 🔉 Playback control is done locally, not on the server
|
- 🔉 Playback control is done locally, not on the server.
|
||||||
|
|
||||||
**¹** It is still **recommended** to support creators by engaging with their YouTube channels/tracks in music platforms (or preferably by buying their merch/concert tickets/physical media).
|
|
||||||
|
|
||||||
### ❌ Unsupported features
|
|
||||||
|
|
||||||
- 🗣️ **Shows & Podcasts:** Shows and Podcasts will <ins>**never be supported**</ins> because the audio tracks are <ins>_only_</ins> available on music providers and accessing them would require premium.
|
|
||||||
- 🎧 **Listen Along:** [Coming soon!](https://github.com/KRTirtho/spotube/issues/8)
|
|
||||||
|
|
||||||
## 📜 ⬇️ Installation guide
|
## 📜 ⬇️ Installation guide
|
||||||
|
|
||||||
@ -65,7 +58,7 @@ This handy table lists all the methods you can use to install Spotube:
|
|||||||
<td>MacOS</td>
|
<td>MacOS</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-macos-universal.dmg">
|
<a href="https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-macos-universal.dmg">
|
||||||
<img width="220" alt="MacOS Download" src="https://reachify.io/wp-content/uploads/2018/09/mac-download-button-1.png">
|
<img width="220" alt="MacOS Download" src="https://memory-map.com/wp-content/uploads/download-mac-OS-01.svg">
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -80,10 +73,6 @@ This handy table lists all the methods you can use to install Spotube:
|
|||||||
<tr>
|
<tr>
|
||||||
<td>Android</td>
|
<td>Android</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="https://play.google.com/store/apps/details?id=oss.krtirtho.spotube">
|
|
||||||
<img width="220" alt="Get it on Google Play" src="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png">
|
|
||||||
</a>
|
|
||||||
<br>
|
|
||||||
<a href="https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-android-all-arch.apk">
|
<a href="https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-android-all-arch.apk">
|
||||||
<img width="220" alt="APK download" src="https://user-images.githubusercontent.com/114044633/223920025-83687de0-e463-4c5d-8122-e06e4bb7d40c.png">
|
<img width="220" alt="APK download" src="https://user-images.githubusercontent.com/114044633/223920025-83687de0-e463-4c5d-8122-e06e4bb7d40c.png">
|
||||||
</a>
|
</a>
|
||||||
@ -196,9 +185,7 @@ You can compile Spotube's source code by [following these instructions](CONTRIBU
|
|||||||
## 👥 The Spotube team
|
## 👥 The Spotube team
|
||||||
|
|
||||||
- [Kingkor Roy Tirtho](https://github.com/KRTirtho) - The Founder, Maintainer and Lead Developer
|
- [Kingkor Roy Tirtho](https://github.com/KRTirtho) - The Founder, Maintainer and Lead Developer
|
||||||
- [RaptaG](https://github.com/RaptaG) - The GitHub Moderator and Community Manager
|
|
||||||
- [Owen Connor](https://github.com/owencz1998) - The Cool Discord Moderator
|
- [Owen Connor](https://github.com/owencz1998) - The Cool Discord Moderator
|
||||||
- [Meenbeese](https://github.com/meenbeese) - The Android Developer
|
|
||||||
- [Piotr Rogowski](https://github.com/karniv00l) - The MacOS Developer
|
- [Piotr Rogowski](https://github.com/karniv00l) - The MacOS Developer
|
||||||
- [Rusty Apple](https://github.com/RustyApple) - The Mysterious Unknown Guy
|
- [Rusty Apple](https://github.com/RustyApple) - The Mysterious Unknown Guy
|
||||||
|
|
||||||
@ -206,7 +193,7 @@ You can compile Spotube's source code by [following these instructions](CONTRIBU
|
|||||||
|
|
||||||
Spotube is open source and licensed under the [BSD-4-Clause](/LICENSE) License.
|
Spotube is open source and licensed under the [BSD-4-Clause](/LICENSE) License.
|
||||||
|
|
||||||
If you are concerned, you can [read the reason of choosing this license](https://dev.to/krtirtho/choosing-open-source-license-wisely-1m3p).
|
If you are curious, you can [read the reason of choosing this license](https://dev.to/krtirtho/choosing-open-source-license-wisely-1m3p).
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>
|
<summary>
|
||||||
@ -217,14 +204,14 @@ If you are concerned, you can [read the reason of choosing this license](https:/
|
|||||||
|
|
||||||
1. [Flutter](https://flutter.dev) - Flutter transforms the app development process. Build, test, and deploy beautiful mobile, web, desktop, and embedded apps from a single codebase
|
1. [Flutter](https://flutter.dev) - Flutter transforms the app development process. Build, test, and deploy beautiful mobile, web, desktop, and embedded apps from a single codebase
|
||||||
1. [MPV](https://mpv.io) - mpv is a free (as in freedom) media player for the command line. It supports a wide variety of media file formats, audio and video codecs, and subtitle types.
|
1. [MPV](https://mpv.io) - mpv is a free (as in freedom) media player for the command line. It supports a wide variety of media file formats, audio and video codecs, and subtitle types.
|
||||||
|
1. [Musicbrainz](https://musicbrainz.org) - MusicBrainz is a MetaBrainz project that aims to create a collaborative music database that is similar to the freedb project.
|
||||||
|
1. [Listenbrainz](https://listenbrainz.org) - ListenBrainz is a open-source project by the MetaBrainz Foundation that allows users to crowdsource and publicly store their digital music listening data.
|
||||||
1. [Piped](https://piped-docs.kavin.rocks/) - Piped is a privacy friendly alternative YouTube frontend, which is efficient and scalable by design.
|
1. [Piped](https://piped-docs.kavin.rocks/) - Piped is a privacy friendly alternative YouTube frontend, which is efficient and scalable by design.
|
||||||
1. [Invidious](https://invidious.io/) - Invidious is an open source alternative front-end to YouTube.
|
1. [Invidious](https://invidious.io/) - Invidious is an open source alternative front-end to YouTube.
|
||||||
1. [YouTube](https://youtube.com/) - YouTube is an American online video-sharing platform headquartered in San Bruno, California. Three former PayPal employees—Chad Hurley, Steve Chen, and Jawed Karim—created the service in February 2005
|
1. [yt-dlp](https://github.com/yt-dlp/yt-dlp) - A feature-rich command-line audio/video downloader.
|
||||||
1. [yt-dlp](https://github.com/yt-dlp/yt-dlp) - A feature-rich command-line audio/video downloader
|
1. [NewPipeExtractor](https://github.com/TeamNewPipe/NewPipeExtractor) - NewPipe's core library for extracting data from streaming sites.
|
||||||
1. [NewPipeExtractor](https://github.com/TeamNewPipe/NewPipeExtractor) - NewPipe's core library for extracting data from streaming sites
|
|
||||||
1. [JioSaavn](https://www.jiosaavn.com) - JioSaavn is an Indian online music streaming service and a digital distributor of Bollywood, English and other regional Indian music across the world. Since it was founded in 2007 as Saavn, the company has acquired rights to over 5 crore (50 million) music tracks in 15 languages
|
|
||||||
1. [SongLink](https://song.link) - SongLink is a free smart link service that helps you share music with your audience. It's a one-stop-shop for creating smart links for music, podcasts, and other audio content
|
1. [SongLink](https://song.link) - SongLink is a free smart link service that helps you share music with your audience. It's a one-stop-shop for creating smart links for music, podcasts, and other audio content
|
||||||
1. [LRCLib](https://lrclib.net/) - A public synced lyric API
|
1. [LRCLib](https://lrclib.net/) - A public synced lyric API.
|
||||||
1. [Linux](https://www.linux.org) - Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged in a Linux distribution
|
1. [Linux](https://www.linux.org) - Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged in a Linux distribution
|
||||||
1. [AUR](https://aur.archlinux.org) - AUR stands for Arch User Repository. It is a community-driven repository for Arch-based Linux distributions users
|
1. [AUR](https://aur.archlinux.org) - AUR stands for Arch User Repository. It is a community-driven repository for Arch-based Linux distributions users
|
||||||
1. [Flatpak](https://flatpak.org) - Flatpak is a utility for software deployment and package management for Linux
|
1. [Flatpak](https://flatpak.org) - Flatpak is a utility for software deployment and package management for Linux
|
||||||
|
@ -33,7 +33,7 @@ def composeVersion = "1.4.8"
|
|||||||
android {
|
android {
|
||||||
namespace "oss.krtirtho.spotube"
|
namespace "oss.krtirtho.spotube"
|
||||||
|
|
||||||
compileSdkVersion 35
|
compileSdkVersion 36
|
||||||
|
|
||||||
ndkVersion = "27.0.12077973"
|
ndkVersion = "27.0.12077973"
|
||||||
|
|
||||||
|
9
android/app/proguard-rules.pro
vendored
@ -1,3 +1,12 @@
|
|||||||
|
#Flutter Wrapper
|
||||||
|
# -keep class io.flutter.app.** { *; }
|
||||||
|
-keep class io.flutter.plugin.** { *; }
|
||||||
|
-keep class io.flutter.util.** { *; }
|
||||||
|
-keep class io.flutter.view.** { *; }
|
||||||
|
# -keep class io.flutter.** { *; }
|
||||||
|
-keep class io.flutter.plugins.** { *; }
|
||||||
|
-keep class de.prosiebensat1digital.** { *; }
|
||||||
|
|
||||||
-keep class androidx.lifecycle.DefaultLifecycleObserver
|
-keep class androidx.lifecycle.DefaultLifecycleObserver
|
||||||
|
|
||||||
-keepnames class kotlinx.serialization.** { *; }
|
-keepnames class kotlinx.serialization.** { *; }
|
||||||
|
@ -57,10 +57,6 @@
|
|||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
|
|
||||||
<data
|
|
||||||
android:host="open.spotify.com"
|
|
||||||
android:scheme="https" />
|
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
@ -74,8 +70,6 @@
|
|||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
<!-- Accepts URIs that begin with "spotify:// -->
|
|
||||||
<data android:scheme="spotify" />
|
|
||||||
<data android:scheme="spotube" />
|
<data android:scheme="spotube" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"title": "Spotube",
|
"title": "Spotube",
|
||||||
"icon": "assets/spotube-logo-macos.png",
|
"icon": "assets/branding/spotube-logo-macos.png",
|
||||||
"contents": [
|
"contents": [
|
||||||
{
|
{
|
||||||
"x": 448,
|
"x": 448,
|
||||||
@ -15,4 +15,4 @@
|
|||||||
"path": "build/macos/Build/Products/Release/Spotube.app"
|
"path": "build/macos/Build/Products/Release/Spotube.app"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 176 KiB |
Before Width: | Height: | Size: 689 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
BIN
assets/branding/mobile-screenshots/android-1.jpg
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
assets/branding/mobile-screenshots/android-2.jpg
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
assets/branding/mobile-screenshots/android-3.jpg
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
assets/branding/mobile-screenshots/android-4.jpg
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
assets/branding/mobile-screenshots/android-5.jpg
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
assets/branding/mobile-screenshots/combined.jpg
Normal file
After Width: | Height: | Size: 172 KiB |
Before Width: | Height: | Size: 771 KiB After Width: | Height: | Size: 771 KiB |
Before Width: | Height: | Size: 191 KiB After Width: | Height: | Size: 191 KiB |
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.4 MiB |
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 435 KiB After Width: | Height: | Size: 435 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 144 KiB |
Before Width: | Height: | Size: 351 KiB After Width: | Height: | Size: 351 KiB |
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.4 MiB |
Before Width: | Height: | Size: 241 KiB After Width: | Height: | Size: 241 KiB |
Before Width: | Height: | Size: 531 KiB After Width: | Height: | Size: 531 KiB |
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 158 KiB |
Before Width: | Height: | Size: 396 KiB After Width: | Height: | Size: 396 KiB |
BIN
assets/branding/spotube-screenshot.png
Normal file
After Width: | Height: | Size: 771 KiB |
Before Width: | Height: | Size: 156 KiB After Width: | Height: | Size: 156 KiB |
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 383 KiB After Width: | Height: | Size: 383 KiB |
Before Width: | Height: | Size: 167 KiB |
96
assets/fonts/Ubuntu_Mono/UFL.txt
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
-------------------------------
|
||||||
|
UBUNTU FONT LICENCE Version 1.0
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
This licence allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely. The fonts, including any derivative works, can be
|
||||||
|
bundled, embedded, and redistributed provided the terms of this licence
|
||||||
|
are met. The fonts and derivatives, however, cannot be released under
|
||||||
|
any other licence. The requirement for fonts to remain under this
|
||||||
|
licence does not require any document created using the fonts or their
|
||||||
|
derivatives to be published under this licence, as long as the primary
|
||||||
|
purpose of the document is not to be a vehicle for the distribution of
|
||||||
|
the fonts.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this licence and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components
|
||||||
|
as received under this licence.
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to
|
||||||
|
a new environment.
|
||||||
|
|
||||||
|
"Copyright Holder(s)" refers to all individuals and companies who have a
|
||||||
|
copyright ownership of the Font Software.
|
||||||
|
|
||||||
|
"Substantially Changed" refers to Modified Versions which can be easily
|
||||||
|
identified as dissimilar to the Font Software by users of the Font
|
||||||
|
Software comparing the Original Version with the Modified Version.
|
||||||
|
|
||||||
|
To "Propagate" a work means to do anything with it that, without
|
||||||
|
permission, would make you directly or secondarily liable for
|
||||||
|
infringement under applicable copyright law, except executing it on a
|
||||||
|
computer or modifying a private copy. Propagation includes copying,
|
||||||
|
distribution (with or without modification and with or without charging
|
||||||
|
a redistribution fee), making available to the public, and in some
|
||||||
|
countries other activities as well.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
This licence does not grant any rights under trademark law and all such
|
||||||
|
rights are reserved.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of the Font Software, to propagate the Font Software, subject to
|
||||||
|
the below conditions:
|
||||||
|
|
||||||
|
1) Each copy of the Font Software must contain the above copyright
|
||||||
|
notice and this licence. These can be included either as stand-alone
|
||||||
|
text files, human-readable headers or in the appropriate machine-
|
||||||
|
readable metadata fields within text or binary files as long as those
|
||||||
|
fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
2) The font name complies with the following:
|
||||||
|
(a) The Original Version must retain its name, unmodified.
|
||||||
|
(b) Modified Versions which are Substantially Changed must be renamed to
|
||||||
|
avoid use of the name of the Original Version or similar names entirely.
|
||||||
|
(c) Modified Versions which are not Substantially Changed must be
|
||||||
|
renamed to both (i) retain the name of the Original Version and (ii) add
|
||||||
|
additional naming elements to distinguish the Modified Version from the
|
||||||
|
Original Version. The name of such Modified Versions must be the name of
|
||||||
|
the Original Version, with "derivative X" where X represents the name of
|
||||||
|
the new work, appended to that name.
|
||||||
|
|
||||||
|
3) The name(s) of the Copyright Holder(s) and any contributor to the
|
||||||
|
Font Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except (i) as required by this licence, (ii) to
|
||||||
|
acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with
|
||||||
|
their explicit written permission.
|
||||||
|
|
||||||
|
4) The Font Software, modified or unmodified, in part or in whole, must
|
||||||
|
be distributed entirely under this licence, and must not be distributed
|
||||||
|
under any other licence. The requirement for fonts to remain under this
|
||||||
|
licence does not affect any document created using the Font Software,
|
||||||
|
except any version of the Font Software extracted from a document
|
||||||
|
created using the Font Software may only be distributed under this
|
||||||
|
licence.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This licence becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||||
|
COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER
|
||||||
|
DEALINGS IN THE FONT SOFTWARE.
|
BIN
assets/fonts/Ubuntu_Mono/UbuntuMono-Bold.ttf
Normal file
BIN
assets/fonts/Ubuntu_Mono/UbuntuMono-BoldItalic.ttf
Normal file
BIN
assets/fonts/Ubuntu_Mono/UbuntuMono-Italic.ttf
Normal file
BIN
assets/fonts/Ubuntu_Mono/UbuntuMono-Regular.ttf
Normal file
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
BIN
assets/images/bengali-patterns-bg.jpg
Normal file
After Width: | Height: | Size: 285 KiB |
BIN
assets/images/liked-tracks.jpg
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
assets/images/logos/invidious.jpg
Normal file
After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
BIN
assets/images/logos/songlink-transparent.png
Normal file
After Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 790 KiB |
Before Width: | Height: | Size: 336 KiB |
Before Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 498 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 172 KiB |
Before Width: | Height: | Size: 141 KiB |
Before Width: | Height: | Size: 158 KiB |
Before Width: | Height: | Size: 180 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 167 KiB |
Before Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 1006 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 149 KiB |
Before Width: | Height: | Size: 137 KiB |
@ -15,7 +15,7 @@ enclosed in quotation marks, you should use an editor that supports UTF-8, not t
|
|||||||
<authors>Kingkor Roy Tirtho</authors>
|
<authors>Kingkor Roy Tirtho</authors>
|
||||||
<projectUrl>https://spotube.krtirtho.dev</projectUrl>
|
<projectUrl>https://spotube.krtirtho.dev</projectUrl>
|
||||||
<iconUrl>
|
<iconUrl>
|
||||||
https://rawcdn.githack.com/KRTirtho/spotube/7edb0bb834eb18c05551e30a891720a6abf53dbe/assets/spotube-logo.png</iconUrl>
|
https://rawcdn.githack.com/KRTirtho/spotube/7edb0bb834eb18c05551e30a891720a6abf53dbe/assets/branding/spotube-logo.png</iconUrl>
|
||||||
<copyright>2022 Spotube</copyright>
|
<copyright>2022 Spotube</copyright>
|
||||||
<!-- If there is a license Url available, it is required for the community feed -->
|
<!-- If there is a license Url available, it is required for the community feed -->
|
||||||
<licenseUrl>https://github.com/KRTirtho/spotube/blob/master/LICENSE</licenseUrl>
|
<licenseUrl>https://github.com/KRTirtho/spotube/blob/master/LICENSE</licenseUrl>
|
||||||
|
@ -74,7 +74,7 @@ class LinuxBuildCommand extends Command with BuildCommandCommonSteps {
|
|||||||
).copy(
|
).copy(
|
||||||
join(tempDir, "com.github.KRTirtho.Spotube.appdata.xml"),
|
join(tempDir, "com.github.KRTirtho.Spotube.appdata.xml"),
|
||||||
);
|
);
|
||||||
await File(join(cwd.path, "assets", "spotube-logo.png")).copy(
|
await File(join(cwd.path, "assets", "branding", "spotube-logo.png")).copy(
|
||||||
join(tempDir, "spotube-logo.png"),
|
join(tempDir, "spotube-logo.png"),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
92
cliff.toml
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
# git-cliff ~ configuration file
|
||||||
|
# https://git-cliff.org/docs/configuration
|
||||||
|
|
||||||
|
|
||||||
|
[changelog]
|
||||||
|
# A Tera template to be rendered for each release in the changelog.
|
||||||
|
# See https://keats.github.io/tera/docs/#introduction
|
||||||
|
body = """
|
||||||
|
{% if version %}\
|
||||||
|
## [{{ version | trim_start_matches(pat="v") }}](<REPO>/compare/v{{ previous.version | trim_start_matches(pat="v") }}...v{{ version | trim_start_matches(pat="v") }}) ({{ timestamp | date(format="%Y-%m-%d") }})
|
||||||
|
{% else %}\
|
||||||
|
## [unreleased]
|
||||||
|
{% endif %}\
|
||||||
|
{% for group, commits in commits | group_by(attribute="group") %}
|
||||||
|
### {{ group | striptags | trim | upper_first }}
|
||||||
|
{% for commit in commits %}
|
||||||
|
- {% if commit.scope %}**{{ commit.scope }}**: {% endif %}\
|
||||||
|
{% if commit.breaking %}[**breaking**] {% endif %}\
|
||||||
|
{{ commit.message | upper_first }}\
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
"""
|
||||||
|
# Remove leading and trailing whitespaces from the changelog's body.
|
||||||
|
trim = true
|
||||||
|
# Render body even when there are no releases to process.
|
||||||
|
render_always = true
|
||||||
|
# An array of regex based postprocessors to modify the changelog.
|
||||||
|
postprocessors = [
|
||||||
|
# Replace the placeholder <REPO> with a URL.
|
||||||
|
{ pattern = '<REPO>', replace = "https://github.com/KRTirtho/spotube" },
|
||||||
|
]
|
||||||
|
# render body even when there are no releases to process
|
||||||
|
# render_always = true
|
||||||
|
# output file path
|
||||||
|
# output = "test.md"
|
||||||
|
|
||||||
|
[git]
|
||||||
|
# Parse commits according to the conventional commits specification.
|
||||||
|
# See https://www.conventionalcommits.org
|
||||||
|
conventional_commits = true
|
||||||
|
# Exclude commits that do not match the conventional commits specification.
|
||||||
|
filter_unconventional = true
|
||||||
|
# Require all commits to be conventional.
|
||||||
|
# Takes precedence over filter_unconventional.
|
||||||
|
require_conventional = false
|
||||||
|
# Split commits on newlines, treating each line as an individual commit.
|
||||||
|
split_commits = false
|
||||||
|
# An array of regex based parsers to modify commit messages prior to further processing.
|
||||||
|
commit_preprocessors = [
|
||||||
|
# Replace issue numbers with link templates to be updated in `changelog.postprocessors`.
|
||||||
|
{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](<REPO>/issues/${2}))" },
|
||||||
|
# Check spelling of the commit message using https://github.com/crate-ci/typos.
|
||||||
|
# If the spelling is incorrect, it will be fixed automatically.
|
||||||
|
#{ pattern = '.*', replace_command = 'typos --write-changes -' },
|
||||||
|
]
|
||||||
|
# Prevent commits that are breaking from being excluded by commit parsers.
|
||||||
|
protect_breaking_commits = false
|
||||||
|
# An array of regex based parsers for extracting data from the commit message.
|
||||||
|
# Assigns commits to groups.
|
||||||
|
# Optionally sets the commit's scope and can decide to exclude commits from further processing.
|
||||||
|
commit_parsers = [
|
||||||
|
{ message = "^feat", group = "<!-- 0 -->Features" },
|
||||||
|
{ message = "^fix", group = "<!-- 1 -->Bug Fixes" },
|
||||||
|
{ message = "^translation", group = "<!-- 3 --> Translation" },
|
||||||
|
# { message = "^perf", group = "<!-- 4 -->⚡ Performance" },
|
||||||
|
# { message = "^refactor", group = "<!-- 2 -->🚜 Refactor" },
|
||||||
|
# { message = "^style", group = "<!-- 5 -->🎨 Styling" },
|
||||||
|
# { message = "^test", group = "<!-- 6 -->🧪 Testing" },
|
||||||
|
# { message = "^chore\\(release\\): prepare for", skip = true },
|
||||||
|
# { message = "^chore\\(deps.*\\)", skip = true },
|
||||||
|
# { message = "^chore\\(pr\\)", skip = true },
|
||||||
|
# { message = "^chore\\(pull\\)", skip = true },
|
||||||
|
# { message = "^chore|^ci", group = "<!-- 7 -->⚙️ Miscellaneous Tasks" },
|
||||||
|
# { body = ".*security", group = "<!-- 8 -->🛡️ Security" },
|
||||||
|
# { message = "^revert", group = "<!-- 9 -->◀️ Revert" },
|
||||||
|
# { message = ".*", group = "<!-- 10 -->💼 Other" },
|
||||||
|
]
|
||||||
|
# Exclude commits that are not matched by any commit parser.
|
||||||
|
filter_commits = true
|
||||||
|
# An array of link parsers for extracting external references, and turning them into URLs, using regex.
|
||||||
|
link_parsers = []
|
||||||
|
# Include only the tags that belong to the current branch.
|
||||||
|
use_branch_tags = false
|
||||||
|
# Order releases topologically instead of chronologically.
|
||||||
|
topo_order = false
|
||||||
|
# Order releases topologically instead of chronologically.
|
||||||
|
topo_order_commits = true
|
||||||
|
# Order of commits in each group/release within the changelog.
|
||||||
|
# Allowed values: newest, oldest
|
||||||
|
sort_commits = "oldest"
|
||||||
|
# Process submodules commits
|
||||||
|
recurse_submodules = false
|
1
drift_schemas/app_db/drift_schema_v7.json
Normal file
1143
drift_schemas/app_db/drift_schema_v8.json
Normal file
@ -1,6 +1,6 @@
|
|||||||
flutter_launcher_icons:
|
flutter_launcher_icons:
|
||||||
android: true
|
android: true
|
||||||
ios: true
|
ios: true
|
||||||
image_path: "assets/spotube-nightly-logo.png"
|
image_path: "assets/branding/spotube-nightly-logo.png"
|
||||||
adaptive_icon_foreground: "assets/spotube-nightly-logo-foreground.png"
|
adaptive_icon_foreground: "assets/branding/spotube-nightly-logo-foreground.png"
|
||||||
adaptive_icon_background: "#242832"
|
adaptive_icon_background: "#242832"
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
# flutter pub run flutter_launcher_icons
|
# flutter pub run flutter_launcher_icons
|
||||||
flutter_launcher_icons:
|
flutter_launcher_icons:
|
||||||
image_path: "assets/spotube-logo.png"
|
image_path: "assets/branding/spotube-logo.png"
|
||||||
|
|
||||||
android: true
|
android: true
|
||||||
# image_path_android: "assets/icon/icon.png"
|
# image_path_android: "assets/branding/icon/icon.png"
|
||||||
min_sdk_android: 21 # android min sdk min:16, default 21
|
min_sdk_android: 21 # android min sdk min:16, default 21
|
||||||
adaptive_icon_background: "#242832"
|
adaptive_icon_background: "#242832"
|
||||||
adaptive_icon_foreground: "assets/spotube-logo-foreground.png"
|
adaptive_icon_foreground: "assets/branding/spotube-logo-foreground.png"
|
||||||
# adaptive_icon_monochrome: "assets/icon/monochrome.png"
|
# adaptive_icon_monochrome: "assets/branding/icon/monochrome.png"
|
||||||
|
|
||||||
ios: true
|
ios: true
|
||||||
# image_path_ios: "assets/icon/icon.png"
|
# image_path_ios: "assets/branding/icon/icon.png"
|
||||||
remove_alpha_channel_ios: true
|
remove_alpha_channel_ios: true
|
||||||
# image_path_ios_dark_transparent: "assets/icon/icon_dark.png"
|
# image_path_ios_dark_transparent: "assets/branding/icon/icon_dark.png"
|
||||||
# image_path_ios_tinted_grayscale: "assets/icon/icon_tinted.png"
|
# image_path_ios_tinted_grayscale: "assets/branding/icon/icon_tinted.png"
|
||||||
# desaturate_tinted_to_grayscale_ios: true
|
# desaturate_tinted_to_grayscale_ios: true
|
||||||
|
|
||||||
web:
|
web:
|
||||||
@ -21,9 +21,9 @@ flutter_launcher_icons:
|
|||||||
|
|
||||||
windows:
|
windows:
|
||||||
generate: true
|
generate: true
|
||||||
image_path: "assets/spotube-logo.png"
|
image_path: "assets/branding/spotube-logo.png"
|
||||||
icon_size: 48 # min:48, max:256, default: 48
|
icon_size: 48 # min:48, max:256, default: 48
|
||||||
|
|
||||||
macos:
|
macos:
|
||||||
generate: true
|
generate: true
|
||||||
image_path: "assets/spotube-logo-macos.png"
|
image_path: "assets/branding/spotube-logo-macos.png"
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
flutter_native_splash:
|
flutter_native_splash:
|
||||||
background_image: assets/bengali-patterns-bg.jpg
|
background_image: assets/images/bengali-patterns-bg.jpg
|
||||||
image: assets/spotube-nightly-logo.png
|
image: assets/branding/spotube-nightly-logo.png
|
||||||
branding: assets/branding.png
|
branding: assets/branding/branding.png
|
||||||
android_12:
|
android_12:
|
||||||
image: assets/spotube-nightly-logo_android12.png
|
image: assets/branding/spotube-nightly-logo_android12.png
|
||||||
branding: assets/branding.png
|
branding: assets/branding/branding.png
|
||||||
color: "#000000"
|
color: "#000000"
|
||||||
icon_background_color: "#000000"
|
icon_background_color: "#000000"
|
||||||
|
123
ios/Podfile.lock
@ -1,13 +1,16 @@
|
|||||||
PODS:
|
PODS:
|
||||||
- app_links (0.0.2):
|
- app_links (6.4.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- audio_service (0.0.1):
|
- audio_service (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- FlutterMacOS
|
||||||
- audio_session (0.0.1):
|
- audio_session (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- bonsoir_darwin (0.0.1):
|
- bonsoir_darwin (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
|
- connectivity_plus (0.0.1):
|
||||||
|
- Flutter
|
||||||
- device_info_plus (0.0.1):
|
- device_info_plus (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- DKImagePickerController/Core (4.3.4):
|
- DKImagePickerController/Core (4.3.4):
|
||||||
@ -46,6 +49,8 @@ PODS:
|
|||||||
- Flutter
|
- Flutter
|
||||||
- file_selector_ios (0.0.1):
|
- file_selector_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- fk_user_agent (2.0.0):
|
||||||
|
- Flutter
|
||||||
- Flutter (1.0.0)
|
- Flutter (1.0.0)
|
||||||
- flutter_broadcasts (0.0.1):
|
- flutter_broadcasts (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
@ -64,15 +69,17 @@ PODS:
|
|||||||
- Flutter
|
- Flutter
|
||||||
- flutter_sharing_intent (0.0.1):
|
- flutter_sharing_intent (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- flutter_timezone (0.0.1):
|
||||||
|
- Flutter
|
||||||
- home_widget (0.0.1):
|
- home_widget (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- image_picker_ios (0.0.1):
|
- image_picker_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- integration_test (0.0.1):
|
- integration_test (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- media_kit_libs_ios_audio (1.0.4):
|
- irondash_engine_context (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- media_kit_native_event_loop (1.0.0):
|
- media_kit_libs_ios_audio (1.0.4):
|
||||||
- Flutter
|
- Flutter
|
||||||
- metadata_god (0.0.1):
|
- metadata_god (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
@ -95,25 +102,33 @@ PODS:
|
|||||||
- sqflite_darwin (0.0.4):
|
- sqflite_darwin (0.0.4):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- sqlite3 (3.47.1):
|
- sqlite3 (3.50.4):
|
||||||
- sqlite3/common (= 3.47.1)
|
- sqlite3/common (= 3.50.4)
|
||||||
- sqlite3/common (3.47.1)
|
- sqlite3/common (3.50.4)
|
||||||
- sqlite3/dbstatvtab (3.47.1):
|
- sqlite3/dbstatvtab (3.50.4):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3/fts5 (3.47.1):
|
- sqlite3/fts5 (3.50.4):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3/perf-threadsafe (3.47.1):
|
- sqlite3/math (3.50.4):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3/rtree (3.47.1):
|
- sqlite3/perf-threadsafe (3.50.4):
|
||||||
|
- sqlite3/common
|
||||||
|
- sqlite3/rtree (3.50.4):
|
||||||
|
- sqlite3/common
|
||||||
|
- sqlite3/session (3.50.4):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3_flutter_libs (0.0.1):
|
- sqlite3_flutter_libs (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- sqlite3 (~> 3.47.1)
|
- sqlite3 (~> 3.50.4)
|
||||||
- sqlite3/dbstatvtab
|
- sqlite3/dbstatvtab
|
||||||
- sqlite3/fts5
|
- sqlite3/fts5
|
||||||
|
- sqlite3/math
|
||||||
- sqlite3/perf-threadsafe
|
- sqlite3/perf-threadsafe
|
||||||
- sqlite3/rtree
|
- sqlite3/rtree
|
||||||
|
- sqlite3/session
|
||||||
|
- super_native_extensions (0.0.1):
|
||||||
|
- Flutter
|
||||||
- SwiftyGif (5.4.4)
|
- SwiftyGif (5.4.4)
|
||||||
- system_theme (0.0.1):
|
- system_theme (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
@ -122,12 +137,14 @@ PODS:
|
|||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- app_links (from `.symlinks/plugins/app_links/ios`)
|
- app_links (from `.symlinks/plugins/app_links/ios`)
|
||||||
- audio_service (from `.symlinks/plugins/audio_service/ios`)
|
- audio_service (from `.symlinks/plugins/audio_service/darwin`)
|
||||||
- audio_session (from `.symlinks/plugins/audio_session/ios`)
|
- audio_session (from `.symlinks/plugins/audio_session/ios`)
|
||||||
- bonsoir_darwin (from `.symlinks/plugins/bonsoir_darwin/darwin`)
|
- bonsoir_darwin (from `.symlinks/plugins/bonsoir_darwin/darwin`)
|
||||||
|
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
|
||||||
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
||||||
- file_picker (from `.symlinks/plugins/file_picker/ios`)
|
- file_picker (from `.symlinks/plugins/file_picker/ios`)
|
||||||
- file_selector_ios (from `.symlinks/plugins/file_selector_ios/ios`)
|
- file_selector_ios (from `.symlinks/plugins/file_selector_ios/ios`)
|
||||||
|
- fk_user_agent (from `.symlinks/plugins/fk_user_agent/ios`)
|
||||||
- Flutter (from `Flutter`)
|
- Flutter (from `Flutter`)
|
||||||
- flutter_broadcasts (from `.symlinks/plugins/flutter_broadcasts/ios`)
|
- flutter_broadcasts (from `.symlinks/plugins/flutter_broadcasts/ios`)
|
||||||
- flutter_discord_rpc (from `.symlinks/plugins/flutter_discord_rpc/ios`)
|
- flutter_discord_rpc (from `.symlinks/plugins/flutter_discord_rpc/ios`)
|
||||||
@ -135,11 +152,12 @@ DEPENDENCIES:
|
|||||||
- flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
|
- flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
|
||||||
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
|
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
|
||||||
- flutter_sharing_intent (from `.symlinks/plugins/flutter_sharing_intent/ios`)
|
- flutter_sharing_intent (from `.symlinks/plugins/flutter_sharing_intent/ios`)
|
||||||
|
- flutter_timezone (from `.symlinks/plugins/flutter_timezone/ios`)
|
||||||
- home_widget (from `.symlinks/plugins/home_widget/ios`)
|
- home_widget (from `.symlinks/plugins/home_widget/ios`)
|
||||||
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
|
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
|
||||||
- integration_test (from `.symlinks/plugins/integration_test/ios`)
|
- integration_test (from `.symlinks/plugins/integration_test/ios`)
|
||||||
|
- irondash_engine_context (from `.symlinks/plugins/irondash_engine_context/ios`)
|
||||||
- media_kit_libs_ios_audio (from `.symlinks/plugins/media_kit_libs_ios_audio/ios`)
|
- media_kit_libs_ios_audio (from `.symlinks/plugins/media_kit_libs_ios_audio/ios`)
|
||||||
- media_kit_native_event_loop (from `.symlinks/plugins/media_kit_native_event_loop/ios`)
|
|
||||||
- metadata_god (from `.symlinks/plugins/metadata_god/ios`)
|
- metadata_god (from `.symlinks/plugins/metadata_god/ios`)
|
||||||
- open_file_ios (from `.symlinks/plugins/open_file_ios/ios`)
|
- open_file_ios (from `.symlinks/plugins/open_file_ios/ios`)
|
||||||
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
||||||
@ -148,6 +166,7 @@ DEPENDENCIES:
|
|||||||
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
|
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
|
||||||
- sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`)
|
- sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`)
|
||||||
- sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`)
|
- sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`)
|
||||||
|
- super_native_extensions (from `.symlinks/plugins/super_native_extensions/ios`)
|
||||||
- system_theme (from `.symlinks/plugins/system_theme/ios`)
|
- system_theme (from `.symlinks/plugins/system_theme/ios`)
|
||||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||||
|
|
||||||
@ -164,17 +183,21 @@ EXTERNAL SOURCES:
|
|||||||
app_links:
|
app_links:
|
||||||
:path: ".symlinks/plugins/app_links/ios"
|
:path: ".symlinks/plugins/app_links/ios"
|
||||||
audio_service:
|
audio_service:
|
||||||
:path: ".symlinks/plugins/audio_service/ios"
|
:path: ".symlinks/plugins/audio_service/darwin"
|
||||||
audio_session:
|
audio_session:
|
||||||
:path: ".symlinks/plugins/audio_session/ios"
|
:path: ".symlinks/plugins/audio_session/ios"
|
||||||
bonsoir_darwin:
|
bonsoir_darwin:
|
||||||
:path: ".symlinks/plugins/bonsoir_darwin/darwin"
|
:path: ".symlinks/plugins/bonsoir_darwin/darwin"
|
||||||
|
connectivity_plus:
|
||||||
|
:path: ".symlinks/plugins/connectivity_plus/ios"
|
||||||
device_info_plus:
|
device_info_plus:
|
||||||
:path: ".symlinks/plugins/device_info_plus/ios"
|
:path: ".symlinks/plugins/device_info_plus/ios"
|
||||||
file_picker:
|
file_picker:
|
||||||
:path: ".symlinks/plugins/file_picker/ios"
|
:path: ".symlinks/plugins/file_picker/ios"
|
||||||
file_selector_ios:
|
file_selector_ios:
|
||||||
:path: ".symlinks/plugins/file_selector_ios/ios"
|
:path: ".symlinks/plugins/file_selector_ios/ios"
|
||||||
|
fk_user_agent:
|
||||||
|
:path: ".symlinks/plugins/fk_user_agent/ios"
|
||||||
Flutter:
|
Flutter:
|
||||||
:path: Flutter
|
:path: Flutter
|
||||||
flutter_broadcasts:
|
flutter_broadcasts:
|
||||||
@ -189,16 +212,18 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/flutter_secure_storage/ios"
|
:path: ".symlinks/plugins/flutter_secure_storage/ios"
|
||||||
flutter_sharing_intent:
|
flutter_sharing_intent:
|
||||||
:path: ".symlinks/plugins/flutter_sharing_intent/ios"
|
:path: ".symlinks/plugins/flutter_sharing_intent/ios"
|
||||||
|
flutter_timezone:
|
||||||
|
:path: ".symlinks/plugins/flutter_timezone/ios"
|
||||||
home_widget:
|
home_widget:
|
||||||
:path: ".symlinks/plugins/home_widget/ios"
|
:path: ".symlinks/plugins/home_widget/ios"
|
||||||
image_picker_ios:
|
image_picker_ios:
|
||||||
:path: ".symlinks/plugins/image_picker_ios/ios"
|
:path: ".symlinks/plugins/image_picker_ios/ios"
|
||||||
integration_test:
|
integration_test:
|
||||||
:path: ".symlinks/plugins/integration_test/ios"
|
:path: ".symlinks/plugins/integration_test/ios"
|
||||||
|
irondash_engine_context:
|
||||||
|
:path: ".symlinks/plugins/irondash_engine_context/ios"
|
||||||
media_kit_libs_ios_audio:
|
media_kit_libs_ios_audio:
|
||||||
:path: ".symlinks/plugins/media_kit_libs_ios_audio/ios"
|
:path: ".symlinks/plugins/media_kit_libs_ios_audio/ios"
|
||||||
media_kit_native_event_loop:
|
|
||||||
:path: ".symlinks/plugins/media_kit_native_event_loop/ios"
|
|
||||||
metadata_god:
|
metadata_god:
|
||||||
:path: ".symlinks/plugins/metadata_god/ios"
|
:path: ".symlinks/plugins/metadata_god/ios"
|
||||||
open_file_ios:
|
open_file_ios:
|
||||||
@ -215,47 +240,53 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/sqflite_darwin/darwin"
|
:path: ".symlinks/plugins/sqflite_darwin/darwin"
|
||||||
sqlite3_flutter_libs:
|
sqlite3_flutter_libs:
|
||||||
:path: ".symlinks/plugins/sqlite3_flutter_libs/darwin"
|
:path: ".symlinks/plugins/sqlite3_flutter_libs/darwin"
|
||||||
|
super_native_extensions:
|
||||||
|
:path: ".symlinks/plugins/super_native_extensions/ios"
|
||||||
system_theme:
|
system_theme:
|
||||||
:path: ".symlinks/plugins/system_theme/ios"
|
:path: ".symlinks/plugins/system_theme/ios"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
app_links: e7a6750a915a9e161c58d91bc610e8cd1d4d0ad0
|
app_links: 3dbc685f76b1693c66a6d9dd1e9ab6f73d97dc0a
|
||||||
audio_service: f509d65da41b9521a61f1c404dd58651f265a567
|
audio_service: aa99a6ba2ae7565996015322b0bb024e1d25c6fd
|
||||||
audio_session: 088d2483ebd1dc43f51d253d4a1c517d9a2e7207
|
audio_session: 9bb7f6c970f21241b19f5a3658097ae459681ba0
|
||||||
bonsoir_darwin: e3b8526c42ca46a885142df84229131dfabea842
|
bonsoir_darwin: 29c7ccf356646118844721f36e1de4b61f6cbd0e
|
||||||
device_info_plus: bf2e3232933866d73fe290f2942f2156cdd10342
|
connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd
|
||||||
|
device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe
|
||||||
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
|
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
|
||||||
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
|
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
|
||||||
file_picker: 09aa5ec1ab24135ccd7a1621c46c84134bfd6655
|
file_picker: 9b3292d7c8bc68c8a7bf8eb78f730e49c8efc517
|
||||||
file_selector_ios: f0670c1064a8c8450e38145d8043160105d0b97c
|
file_selector_ios: f92e583d43608aebc2e4a18daac30b8902845502
|
||||||
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
|
fk_user_agent: 137145b086229251761678fe034da53753f4ce59
|
||||||
flutter_broadcasts: 3ece15b27d8ccbe2132c3df303e7c3401feab882
|
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
|
||||||
flutter_discord_rpc: e1c342f29ceb9dd76cdc01db59a70c93bb4d9ec5
|
flutter_broadcasts: 7bb7cc1024900a7f85e98b6faab795290b7c2339
|
||||||
flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4
|
flutter_discord_rpc: 0572e8227ea730c5afe5876a37c08c728ce95f3a
|
||||||
flutter_native_splash: e8a1e01082d97a8099d973f919f57904c925008a
|
flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99
|
||||||
flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12
|
flutter_native_splash: c32d145d68aeda5502d5f543ee38c192065986cf
|
||||||
flutter_sharing_intent: e35380d0e1501d7111dbb7e46d5ac6339da6da98
|
flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
|
||||||
home_widget: 0434835a4c9a75704264feff6be17ea40e0f0d57
|
flutter_sharing_intent: afdc98985814d2c01d8c0956a177d6b6dfbdc373
|
||||||
image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1
|
flutter_timezone: 7c838e17ffd4645d261e87037e5bebf6d38fe544
|
||||||
integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573
|
home_widget: f169fc41fd807b4d46ab6615dc44d62adbf9f64f
|
||||||
media_kit_libs_ios_audio: 8f39d96a9c630685dfb844c289bd1d114c486fb3
|
image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
|
||||||
media_kit_native_event_loop: 99111eded5acbdc9c2738021ea6550dd36ca8837
|
integration_test: 4a889634ef21a45d28d50d622cf412dc6d9f586e
|
||||||
metadata_god: 4bbd8523cdb5d42c5e59d2fabad01ff8f4bc53f9
|
irondash_engine_context: 8e58ca8e0212ee9d1c7dc6a42121849986c88486
|
||||||
open_file_ios: 461db5853723763573e140de3193656f91990d9e
|
media_kit_libs_ios_audio: 905e6323b72e65c63ab9262b2e473f52c024a3a8
|
||||||
|
metadata_god: 018b59c2f3617569928550dcbd17481591557c1d
|
||||||
|
open_file_ios: 5ff7526df64e4394b4fe207636b67a95e83078bb
|
||||||
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
|
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
|
||||||
package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c
|
package_info_plus: 580e9a5f1b6ca5594e7c9ed5f92d1dfb2a66b5e1
|
||||||
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
|
||||||
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
|
permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d
|
||||||
SDWebImage: a81bbb3ba4ea5f810f4069c68727cb118467a04a
|
SDWebImage: a81bbb3ba4ea5f810f4069c68727cb118467a04a
|
||||||
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
|
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
|
||||||
sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d
|
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
|
||||||
sqlite3: 1e522f0938463e44b7faf50393b40bdc1e1e456d
|
sqlite3: 73513155ec6979715d3904ef53a8d68892d4032b
|
||||||
sqlite3_flutter_libs: 1b4e98da20ebd4e9b1240269b78cdcf492dbe9f3
|
sqlite3_flutter_libs: 83f8e9f5b6554077f1d93119fe20ebaa5f3a9ef1
|
||||||
|
super_native_extensions: b763c02dc3a8fd078389f410bf15149179020cb4
|
||||||
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
|
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
|
||||||
system_theme: bfc1b0913d08f38d8c6bbe94b202a58df599d9f7
|
system_theme: a94f91f49eeb97cfa768c7d5a9b2f6aa51b00494
|
||||||
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
|
url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
|
||||||
|
|
||||||
PODFILE CHECKSUM: 0659b64ac6e9e96b61d8550decffa8bff51a957e
|
PODFILE CHECKSUM: 0659b64ac6e9e96b61d8550decffa8bff51a957e
|
||||||
|
|
||||||
|
@ -2,4 +2,3 @@ arb-dir: lib/l10n
|
|||||||
template-arb-file: app_en.arb
|
template-arb-file: app_en.arb
|
||||||
output-dir: lib/l10n/generated
|
output-dir: lib/l10n/generated
|
||||||
untranslated-messages-file: untranslated_messages.json
|
untranslated-messages-file: untranslated_messages.json
|
||||||
synthetic-package: false
|
|
||||||
|
@ -9,220 +9,89 @@
|
|||||||
|
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
|
|
||||||
class $AssetsBackgroundsGen {
|
class $AssetsBrandingGen {
|
||||||
const $AssetsBackgroundsGen();
|
const $AssetsBrandingGen();
|
||||||
|
|
||||||
/// File path: assets/backgrounds/xmas-effect.png
|
/// File path: assets/branding/spotube-logo-light.png
|
||||||
AssetGenImage get xmasEffect =>
|
AssetGenImage get spotubeLogoLight =>
|
||||||
const AssetGenImage('assets/backgrounds/xmas-effect.png');
|
const AssetGenImage('assets/branding/spotube-logo-light.png');
|
||||||
|
|
||||||
|
/// File path: assets/branding/spotube-logo.ico
|
||||||
|
String get spotubeLogoIco => 'assets/branding/spotube-logo.ico';
|
||||||
|
|
||||||
|
/// File path: assets/branding/spotube-logo.png
|
||||||
|
AssetGenImage get spotubeLogoPng =>
|
||||||
|
const AssetGenImage('assets/branding/spotube-logo.png');
|
||||||
|
|
||||||
/// List of all assets
|
/// List of all assets
|
||||||
List<AssetGenImage> get values => [xmasEffect];
|
List<dynamic> get values =>
|
||||||
|
[spotubeLogoLight, spotubeLogoIco, spotubeLogoPng];
|
||||||
}
|
}
|
||||||
|
|
||||||
class $AssetsLogosGen {
|
class $AssetsImagesGen {
|
||||||
const $AssetsLogosGen();
|
const $AssetsImagesGen();
|
||||||
|
|
||||||
/// File path: assets/logos/songlink-transparent.png
|
/// File path: assets/images/album-placeholder.png
|
||||||
AssetGenImage get songlinkTransparent =>
|
AssetGenImage get albumPlaceholder =>
|
||||||
const AssetGenImage('assets/logos/songlink-transparent.png');
|
const AssetGenImage('assets/images/album-placeholder.png');
|
||||||
|
|
||||||
/// File path: assets/logos/songlink.png
|
/// File path: assets/images/bengali-patterns-bg.jpg
|
||||||
AssetGenImage get songlink =>
|
AssetGenImage get bengaliPatternsBg =>
|
||||||
const AssetGenImage('assets/logos/songlink.png');
|
const AssetGenImage('assets/images/bengali-patterns-bg.jpg');
|
||||||
|
|
||||||
/// List of all assets
|
/// File path: assets/images/liked-tracks.jpg
|
||||||
List<AssetGenImage> get values => [songlinkTransparent, songlink];
|
AssetGenImage get likedTracks =>
|
||||||
}
|
const AssetGenImage('assets/images/liked-tracks.jpg');
|
||||||
|
|
||||||
class $AssetsPatternsGen {
|
/// Directory path: assets/images/logos
|
||||||
const $AssetsPatternsGen();
|
$AssetsImagesLogosGen get logos => const $AssetsImagesLogosGen();
|
||||||
|
|
||||||
/// File path: assets/patterns/black_white_visualized.jpg
|
/// File path: assets/images/placeholder.png
|
||||||
AssetGenImage get blackWhiteVisualized =>
|
AssetGenImage get placeholder =>
|
||||||
const AssetGenImage('assets/patterns/black_white_visualized.jpg');
|
const AssetGenImage('assets/images/placeholder.png');
|
||||||
|
|
||||||
/// File path: assets/patterns/brazil_carnival.jpg
|
/// File path: assets/images/user-placeholder.png
|
||||||
AssetGenImage get brazilCarnival =>
|
AssetGenImage get userPlaceholder =>
|
||||||
const AssetGenImage('assets/patterns/brazil_carnival.jpg');
|
const AssetGenImage('assets/images/user-placeholder.png');
|
||||||
|
|
||||||
/// File path: assets/patterns/cotton_balls.jpg
|
|
||||||
AssetGenImage get cottonBalls =>
|
|
||||||
const AssetGenImage('assets/patterns/cotton_balls.jpg');
|
|
||||||
|
|
||||||
/// File path: assets/patterns/cute_worms.jpg
|
|
||||||
AssetGenImage get cuteWorms =>
|
|
||||||
const AssetGenImage('assets/patterns/cute_worms.jpg');
|
|
||||||
|
|
||||||
/// File path: assets/patterns/flash_cross_axis.jpg
|
|
||||||
AssetGenImage get flashCrossAxis =>
|
|
||||||
const AssetGenImage('assets/patterns/flash_cross_axis.jpg');
|
|
||||||
|
|
||||||
/// File path: assets/patterns/memphis_shapes.jpg
|
|
||||||
AssetGenImage get memphisShapes =>
|
|
||||||
const AssetGenImage('assets/patterns/memphis_shapes.jpg');
|
|
||||||
|
|
||||||
/// File path: assets/patterns/oval_gloomy.jpg
|
|
||||||
AssetGenImage get ovalGloomy =>
|
|
||||||
const AssetGenImage('assets/patterns/oval_gloomy.jpg');
|
|
||||||
|
|
||||||
/// File path: assets/patterns/oval_sunny.jpg
|
|
||||||
AssetGenImage get ovalSunny =>
|
|
||||||
const AssetGenImage('assets/patterns/oval_sunny.jpg');
|
|
||||||
|
|
||||||
/// File path: assets/patterns/red_nimbuses.jpg
|
|
||||||
AssetGenImage get redNimbuses =>
|
|
||||||
const AssetGenImage('assets/patterns/red_nimbuses.jpg');
|
|
||||||
|
|
||||||
/// File path: assets/patterns/tree_bark.jpg
|
|
||||||
AssetGenImage get treeBark =>
|
|
||||||
const AssetGenImage('assets/patterns/tree_bark.jpg');
|
|
||||||
|
|
||||||
/// File path: assets/patterns/vibrant_pentagons.jpg
|
|
||||||
AssetGenImage get vibrantPentagons =>
|
|
||||||
const AssetGenImage('assets/patterns/vibrant_pentagons.jpg');
|
|
||||||
|
|
||||||
/// File path: assets/patterns/wiring_pattern.jpg
|
|
||||||
AssetGenImage get wiringPattern =>
|
|
||||||
const AssetGenImage('assets/patterns/wiring_pattern.jpg');
|
|
||||||
|
|
||||||
/// File path: assets/patterns/zigzags_gloomy.jpg
|
|
||||||
AssetGenImage get zigzagsGloomy =>
|
|
||||||
const AssetGenImage('assets/patterns/zigzags_gloomy.jpg');
|
|
||||||
|
|
||||||
/// File path: assets/patterns/zigzags_sunny.jpg
|
|
||||||
AssetGenImage get zigzagsSunny =>
|
|
||||||
const AssetGenImage('assets/patterns/zigzags_sunny.jpg');
|
|
||||||
|
|
||||||
/// List of all assets
|
/// List of all assets
|
||||||
List<AssetGenImage> get values => [
|
List<AssetGenImage> get values => [
|
||||||
blackWhiteVisualized,
|
albumPlaceholder,
|
||||||
brazilCarnival,
|
bengaliPatternsBg,
|
||||||
cottonBalls,
|
likedTracks,
|
||||||
cuteWorms,
|
placeholder,
|
||||||
flashCrossAxis,
|
userPlaceholder
|
||||||
memphisShapes,
|
|
||||||
ovalGloomy,
|
|
||||||
ovalSunny,
|
|
||||||
redNimbuses,
|
|
||||||
treeBark,
|
|
||||||
vibrantPentagons,
|
|
||||||
wiringPattern,
|
|
||||||
zigzagsGloomy,
|
|
||||||
zigzagsSunny
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
class $AssetsTutorialGen {
|
class $AssetsImagesLogosGen {
|
||||||
const $AssetsTutorialGen();
|
const $AssetsImagesLogosGen();
|
||||||
|
|
||||||
/// File path: assets/tutorial/step-1.png
|
/// File path: assets/images/logos/invidious.jpg
|
||||||
AssetGenImage get step1 => const AssetGenImage('assets/tutorial/step-1.png');
|
AssetGenImage get invidious =>
|
||||||
|
const AssetGenImage('assets/images/logos/invidious.jpg');
|
||||||
|
|
||||||
/// File path: assets/tutorial/step-2.png
|
/// File path: assets/images/logos/jiosaavn.png
|
||||||
AssetGenImage get step2 => const AssetGenImage('assets/tutorial/step-2.png');
|
AssetGenImage get jiosaavn =>
|
||||||
|
const AssetGenImage('assets/images/logos/jiosaavn.png');
|
||||||
|
|
||||||
/// File path: assets/tutorial/step-3.png
|
/// File path: assets/images/logos/songlink-transparent.png
|
||||||
AssetGenImage get step3 => const AssetGenImage('assets/tutorial/step-3.png');
|
AssetGenImage get songlinkTransparent =>
|
||||||
|
const AssetGenImage('assets/images/logos/songlink-transparent.png');
|
||||||
|
|
||||||
/// List of all assets
|
/// List of all assets
|
||||||
List<AssetGenImage> get values => [step1, step2, step3];
|
List<AssetGenImage> get values => [invidious, jiosaavn, songlinkTransparent];
|
||||||
}
|
}
|
||||||
|
|
||||||
class Assets {
|
class Assets {
|
||||||
Assets._();
|
Assets._();
|
||||||
|
|
||||||
static const String license = 'LICENSE';
|
static const String license = 'LICENSE';
|
||||||
static const AssetGenImage albumPlaceholder =
|
static const $AssetsBrandingGen branding = $AssetsBrandingGen();
|
||||||
AssetGenImage('assets/album-placeholder.png');
|
static const $AssetsImagesGen images = $AssetsImagesGen();
|
||||||
static const $AssetsBackgroundsGen backgrounds = $AssetsBackgroundsGen();
|
|
||||||
static const AssetGenImage bengaliPatternsBg =
|
|
||||||
AssetGenImage('assets/bengali-patterns-bg.jpg');
|
|
||||||
static const AssetGenImage branding = AssetGenImage('assets/branding.png');
|
|
||||||
static const AssetGenImage emptyBox = AssetGenImage('assets/empty_box.png');
|
|
||||||
static const AssetGenImage invidious = AssetGenImage('assets/invidious.jpg');
|
|
||||||
static const AssetGenImage jiosaavn = AssetGenImage('assets/jiosaavn.png');
|
|
||||||
static const AssetGenImage likedTracks =
|
|
||||||
AssetGenImage('assets/liked-tracks.jpg');
|
|
||||||
static const $AssetsLogosGen logos = $AssetsLogosGen();
|
|
||||||
static const $AssetsPatternsGen patterns = $AssetsPatternsGen();
|
|
||||||
static const AssetGenImage placeholder =
|
|
||||||
AssetGenImage('assets/placeholder.png');
|
|
||||||
static const AssetGenImage spotubeHeroBanner =
|
|
||||||
AssetGenImage('assets/spotube-hero-banner.png');
|
|
||||||
static const AssetGenImage spotubeLogoForeground =
|
|
||||||
AssetGenImage('assets/spotube-logo-foreground.png');
|
|
||||||
static const AssetGenImage spotubeLogoItem =
|
|
||||||
AssetGenImage('assets/spotube-logo-item.png');
|
|
||||||
static const AssetGenImage spotubeLogoLight =
|
|
||||||
AssetGenImage('assets/spotube-logo-light.png');
|
|
||||||
static const AssetGenImage spotubeLogoMacos =
|
|
||||||
AssetGenImage('assets/spotube-logo-macos.png');
|
|
||||||
static const AssetGenImage spotubeLogoBmp =
|
|
||||||
AssetGenImage('assets/spotube-logo.bmp');
|
|
||||||
static const String spotubeLogoIco = 'assets/spotube-logo.ico';
|
|
||||||
static const AssetGenImage spotubeLogoPng =
|
|
||||||
AssetGenImage('assets/spotube-logo.png');
|
|
||||||
static const AssetGenImage spotubeLogoAndroid12 =
|
|
||||||
AssetGenImage('assets/spotube-logo_android12.png');
|
|
||||||
static const AssetGenImage spotubeNightlyItem =
|
|
||||||
AssetGenImage('assets/spotube-nightly-item.png');
|
|
||||||
static const AssetGenImage spotubeNightlyLogoForegroundPng =
|
|
||||||
AssetGenImage('assets/spotube-nightly-logo-foreground.png');
|
|
||||||
static const String spotubeNightlyLogoForegroundSvg =
|
|
||||||
'assets/spotube-nightly-logo-foreground.svg';
|
|
||||||
static const AssetGenImage spotubeNightlyLogo =
|
|
||||||
AssetGenImage('assets/spotube-nightly-logo.png');
|
|
||||||
static const AssetGenImage spotubeNightlyLogoAndroid12 =
|
|
||||||
AssetGenImage('assets/spotube-nightly-logo_android12.png');
|
|
||||||
static const AssetGenImage spotubeScreenshot =
|
|
||||||
AssetGenImage('assets/spotube-screenshot.png');
|
|
||||||
static const AssetGenImage spotubeTallCapsule =
|
|
||||||
AssetGenImage('assets/spotube-tall-capsule.png');
|
|
||||||
static const AssetGenImage spotubeWideCapsuleLarge =
|
|
||||||
AssetGenImage('assets/spotube-wide-capsule-large.png');
|
|
||||||
static const AssetGenImage spotubeWideCapsuleSmall =
|
|
||||||
AssetGenImage('assets/spotube-wide-capsule-small.png');
|
|
||||||
static const AssetGenImage spotubeBanner =
|
|
||||||
AssetGenImage('assets/spotube_banner.png');
|
|
||||||
static const AssetGenImage success = AssetGenImage('assets/success.png');
|
|
||||||
static const $AssetsTutorialGen tutorial = $AssetsTutorialGen();
|
|
||||||
static const AssetGenImage userPlaceholder =
|
|
||||||
AssetGenImage('assets/user-placeholder.png');
|
|
||||||
|
|
||||||
/// List of all assets
|
/// List of all assets
|
||||||
static List<dynamic> get values => [
|
static List<String> get values => [license];
|
||||||
license,
|
|
||||||
albumPlaceholder,
|
|
||||||
bengaliPatternsBg,
|
|
||||||
branding,
|
|
||||||
emptyBox,
|
|
||||||
invidious,
|
|
||||||
jiosaavn,
|
|
||||||
likedTracks,
|
|
||||||
placeholder,
|
|
||||||
spotubeHeroBanner,
|
|
||||||
spotubeLogoForeground,
|
|
||||||
spotubeLogoItem,
|
|
||||||
spotubeLogoLight,
|
|
||||||
spotubeLogoMacos,
|
|
||||||
spotubeLogoBmp,
|
|
||||||
spotubeLogoIco,
|
|
||||||
spotubeLogoPng,
|
|
||||||
spotubeLogoAndroid12,
|
|
||||||
spotubeNightlyItem,
|
|
||||||
spotubeNightlyLogoForegroundPng,
|
|
||||||
spotubeNightlyLogoForegroundSvg,
|
|
||||||
spotubeNightlyLogo,
|
|
||||||
spotubeNightlyLogoAndroid12,
|
|
||||||
spotubeScreenshot,
|
|
||||||
spotubeTallCapsule,
|
|
||||||
spotubeWideCapsuleLarge,
|
|
||||||
spotubeWideCapsuleSmall,
|
|
||||||
spotubeBanner,
|
|
||||||
success,
|
|
||||||
userPlaceholder
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class AssetGenImage {
|
class AssetGenImage {
|
||||||
|
@ -10,9 +10,6 @@ enum ReleaseChannel {
|
|||||||
|
|
||||||
@Envied(obfuscate: true, requireEnvFile: true, path: ".env")
|
@Envied(obfuscate: true, requireEnvFile: true, path: ".env")
|
||||||
abstract class Env {
|
abstract class Env {
|
||||||
@EnviedField(varName: 'SPOTIFY_SECRETS')
|
|
||||||
static final String rawSpotifySecrets = _Env.rawSpotifySecrets;
|
|
||||||
|
|
||||||
@EnviedField(varName: 'LASTFM_API_KEY')
|
@EnviedField(varName: 'LASTFM_API_KEY')
|
||||||
static final String lastFmApiKey = _Env.lastFmApiKey;
|
static final String lastFmApiKey = _Env.lastFmApiKey;
|
||||||
|
|
||||||
@ -24,25 +21,12 @@ abstract class Env {
|
|||||||
|
|
||||||
static bool get hideDonations => _hideDonations == 1;
|
static bool get hideDonations => _hideDonations == 1;
|
||||||
|
|
||||||
static final spotifySecrets = rawSpotifySecrets.split(',').map((e) {
|
|
||||||
final secrets = e.trim().split(":").map((e) => e.trim());
|
|
||||||
return {
|
|
||||||
"clientId": secrets.first,
|
|
||||||
"clientSecret": secrets.last,
|
|
||||||
};
|
|
||||||
}).toList();
|
|
||||||
|
|
||||||
@EnviedField(varName: 'ENABLE_UPDATE_CHECK', defaultValue: "1")
|
@EnviedField(varName: 'ENABLE_UPDATE_CHECK', defaultValue: "1")
|
||||||
static final String _enableUpdateChecker = _Env._enableUpdateChecker;
|
static final String _enableUpdateChecker = _Env._enableUpdateChecker;
|
||||||
|
|
||||||
@EnviedField(varName: "RELEASE_CHANNEL", defaultValue: "nightly")
|
@EnviedField(varName: "RELEASE_CHANNEL", defaultValue: "nightly")
|
||||||
static final String _releaseChannel = _Env._releaseChannel;
|
static final String _releaseChannel = _Env._releaseChannel;
|
||||||
|
|
||||||
@EnviedField(varName: "DISABLE_SPOTIFY_IMAGES", defaultValue: "0")
|
|
||||||
static final String _disableSpotifyImages = _Env._disableSpotifyImages;
|
|
||||||
|
|
||||||
static bool get disableSpotifyImages => _disableSpotifyImages == "1";
|
|
||||||
|
|
||||||
static ReleaseChannel get releaseChannel => _releaseChannel == "stable"
|
static ReleaseChannel get releaseChannel => _releaseChannel == "stable"
|
||||||
? ReleaseChannel.stable
|
? ReleaseChannel.stable
|
||||||
: ReleaseChannel.nightly;
|
: ReleaseChannel.nightly;
|
||||||
|