diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml
index 5d15080a..becf00bf 100644
--- a/.github/workflows/release-build.yml
+++ b/.github/workflows/release-build.yml
@@ -47,14 +47,15 @@ jobs:
Set-Variable -Name HASH -Value (Get-FileHash dist\Spotube-windows-x86_64-setup.exe).Hash
sed -i "s/%{{WIN_SHA256}}%/$HASH/" choco-struct/tools/VERIFICATION.txt
make choco
+
+ - run: mv dist/spotube.*.nupkg dist/Spotube-windows-x86_64.nupkg
# Publish to Chocolatey Repository
- run: |
choco apikey -k ${{ secrets.CHOCO_API_KEY }} -s https://push.chocolatey.org/
+ choco push dist/Spotube-windows-x86_64.nupkg
echo 'published to community.chocolatey.org'
- # choco push dist/${{ steps.tag.outputs.tag }}/Spotube-windows-x86_64.nupkg
-
# Upload artifacts
- uses: actions/upload-artifact@v3
with:
@@ -191,6 +192,10 @@ jobs:
with:
name: Spotube-Linux-Bundle
path: ./Spotube-Linux-Bundle
+ - uses: actions/download-artifact@v3
+ with:
+ name: Spotube-Android-Bundle
+ path: ./Spotube-Android-Bundle
- name: Get latest tag
id: tag
uses: dawidd6/action-get-tag@v1
@@ -200,14 +205,14 @@ jobs:
# generating checksums for all the binary
- run: |
tree .
- md5sum ./Spotube-Windows-Bundle/*.{exe,nupkg} > RELEASE.md5sum
- md5sum ./Spotube-Macos-Bundle/*.dmg > RELEASE.md5sum
- md5sum ./Spotube-Linux-Bundle/*.{AppImage,tar.xz,deb} > RELEASE.md5sum
- md5sum ./Spotube-Android-Bundle/*.apk > RELEASE.md5sum
- sha256sum ./Spotube-Macos-Bundle/*.dmg > RELEASE.sha256sum
- sha256sum ./Spotube-Windows-Bundle/*.{exe,nupkg} > RELEASE.sha256sum
- sha256sum ./Spotube-Linux-Bundle/*.{AppImage,tar.xz,deb} > RELEASE.sha256sum
- sha256sum ./Spotube-Android-Bundle/*.apk > RELEASE.sha256sum
+ md5sum ./Spotube-Windows-Bundle/*.{exe,nupkg} >> RELEASE.md5sum
+ md5sum ./Spotube-Macos-Bundle/*.dmg >> RELEASE.md5sum
+ md5sum ./Spotube-Linux-Bundle/*.{AppImage,tar.xz,deb} >> RELEASE.md5sum
+ md5sum ./Spotube-Android-Bundle/*.apk >> RELEASE.md5sum
+ sha256sum ./Spotube-Macos-Bundle/*.dmg >> RELEASE.sha256sum
+ sha256sum ./Spotube-Windows-Bundle/*.{exe,nupkg} >> RELEASE.sha256sum
+ sha256sum ./Spotube-Linux-Bundle/*.{AppImage,tar.xz,deb} >> RELEASE.sha256sum
+ sha256sum ./Spotube-Android-Bundle/*.apk >> RELEASE.sha256sum
sed -i 's|Spotube-.*-Bundle/||' RELEASE.sha256sum RELEASE.md5sum
# Upload release binary
- uses: ncipollo/release-action@v1
@@ -252,11 +257,11 @@ jobs:
strip_v: true
- run: |
python3 spotube/scripts/update_flathub_version.py ${{ steps.tag.outputs.tag }}
+ rm -rf spotube
- uses: EndBug/add-and-commit@v9
with:
message: v${{ steps.tag.outputs.tag }} Update
- # push: origin master
- push: false
+ push: origin master
publish_aur:
needs: update_release
@@ -276,11 +281,11 @@ jobs:
sed -i "s/%{{SPOTUBE_VERSION}}%/${{ steps.tag.outputs.tag }}/" aur-struct/PKGBUILD
sed -i "s/%{{PKGREL}}%/1/" aur-struct/PKGBUILD
sed -i "s/%{{LINUX_MD5}}%/`md5sum Spotube-Linux-Bundle/Spotube-linux-x86_64.tar.xz | awk '{print $1}'`/" aur-struct/PKGBUILD
- # - uses: KSXGitHub/github-actions-deploy-aur@v2.2.5
- # with:
- # pkgname: spotube-bin
- # pkgbuild: aur-struct/PKGBUILD
- # commit_username: ${{ secrets.AUR_USERNAME }}
- # commit_email: ${{ secrets.AUR_EMAIL }}
- # ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
- # commit_message: Updated to v${{ steps.tag.outputs.tag }}
+ - uses: KSXGitHub/github-actions-deploy-aur@v2.2.5
+ with:
+ pkgname: spotube-bin
+ pkgbuild: aur-struct/PKGBUILD
+ commit_username: ${{ secrets.AUR_USERNAME }}
+ commit_email: ${{ secrets.AUR_EMAIL }}
+ ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
+ commit_message: Updated to v${{ steps.tag.outputs.tag }}
diff --git a/.metadata b/.metadata
index fd70cabc..b80e7b3e 100644
--- a/.metadata
+++ b/.metadata
@@ -1,10 +1,30 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
-# This file should be version controlled and should not be manually edited.
+# This file should be version controlled.
version:
- revision: 77d935af4db863f6abd0b9c31c7e6df2a13de57b
+ revision: ee4e09cce01d6f2d7f4baebd247fde02e5008851
channel: stable
project_type: app
+
+# Tracks metadata for the flutter migrate command
+migration:
+ platforms:
+ - platform: root
+ create_revision: ee4e09cce01d6f2d7f4baebd247fde02e5008851
+ base_revision: ee4e09cce01d6f2d7f4baebd247fde02e5008851
+ - platform: macos
+ create_revision: ee4e09cce01d6f2d7f4baebd247fde02e5008851
+ base_revision: ee4e09cce01d6f2d7f4baebd247fde02e5008851
+
+ # User provided section
+
+ # List of Local paths (relative to this file) that should be
+ # ignored by the migrate tool.
+ #
+ # Files that are not part of the templates will be ignored by default.
+ unmanaged_files:
+ - 'lib/main.dart'
+ - 'ios/Runner.xcodeproj/project.pbxproj'
diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json
index 2248d357..6d27ad30 100644
--- a/.vscode/c_cpp_properties.json
+++ b/.vscode/c_cpp_properties.json
@@ -14,7 +14,8 @@
"compilerPath": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30133\\bin\\Hostx64\\x64\\cl.exe",
"cStandard": "c17",
"cppStandard": "c++17",
- "intelliSenseMode": "windows-msvc-x64"
+ "intelliSenseMode": "windows-msvc-x64",
+ "configurationProvider": "ms-vscode.makefile-tools"
}
],
"version": 4
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fc3ce8dc..c030ca2d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,26 @@
+# v2.1.0
+
+### New
+- Synced Lyrics (with fallback genius lyrics)
+- Playlist create/delete
+- Add/Remove tracks to own playlists
+- Custom YouTube track search term template
+- Downloading lyrics along with a track (can be toggled)
+- Customize Marketplace location
+
+### Improved
+- Spotify track to youtube track algorithm
+- Genius lyrics matching algorithm
+- Download track. Checks if already exists & replaces on user command
+- Wide screen responsiveness & adaptation
+- Bigger Title display (replaced word-break with Marquee Text for better visibility) (https://github.com/KRTirtho/spotube/pull/47)
+
+### Bug fixes
+- Sequential playlist playback not working with latest webkit2gtk (https://github.com/KRTirtho/spotube/issues/46)
+- Theme modification state doesn't persist (https://github.com/KRTirtho/spotube/issues/54)
+- Wrong URI path for "Login with Spotify" tutorial (https://github.com/KRTirtho/spotube/issues/69)
+- Card shadow showing in the background of TitleBar & Searchbar
+
# v2.0.0
### New
diff --git a/Makefile b/Makefile
index 08f45a28..b7e8029d 100644
--- a/Makefile
+++ b/Makefile
@@ -47,7 +47,7 @@ inno:
powershell .\build\iscc\iscc.exe scripts\windows-setup-creator.iss
choco:
- powershell cp dist\**\spotube-*-windows-setup.exe choco-struct\tools
+ powershell cp dist\Spotube-windows-x86_64-setup.exe choco-struct\tools
powershell choco pack .\choco-struct\spotube.nuspec --outputdirectory dist
apk:
diff --git a/README.md b/README.md
index 89aa4a3b..abdd72d8 100644
--- a/README.md
+++ b/README.md
@@ -41,7 +41,7 @@ Following are the features that currently spotube offers:
- Playback control is on user's machine instead of server based
- Small size & less data hungry
- No spotify or youtube ads since it uses all public & free APIs (But it's recommended to support the creators by watching/liking/subscribing to the artists youtube channel or add as favourite track in spotify. Mostly buying spotify premium is the best way to support their valuable creations)
-- Lyrics
+- Synced Lyrics
- Downloadable track
@@ -50,71 +50,26 @@ Following are the features that currently spotube offers:
I'm always releasing newer versions of binary of the software each 2-3 month with minor changes & each 6-8 month with major changes. Grab the binaries
-All the binaries are located in the [releases](https://github.com/krtirtho/spotube/releases), just download
+| Platform | Package/Installation Method |
+| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Android | [
][android-dlink] |
+| Debian/Ubuntu | [
][deb-dlink]
Then run: `sudo apt install Spotube-linux-x86_64.deb` |
+| Flatpak | `flatpak install com.github.KRTirtho.Spotube`
|
+| Arch/Manjaro | pamac: `pamac install spotube-bin`
yay: `yay -Sy spotube-bin` |
+| AppImage | [
][appimage-dlink]
**Note**: AppImages require [appimage-launcher](https://github.com/TheAssassin/AppImageLauncher) to be installed |
+| Linux (tarball) | [
][linux-dlink] |
+| Windows | [
][win32-dlink] |
+| Windows (Chocolatey) | `choco install spotube` |
+| Windows (WinGet) | `winget install --id KRTirtho.Spotube` |
+| MacOS | [
][mac-dlink] |
-## Android
-
-Download the [Android app](https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-android-all-arch.apk) & then install it on your Android smartphone/tablet
-
-## Windows
-
-Download the [setup file](https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-windows-x86_64-setup.exe) & follow along the installer
-
-### Chocolatey
-
-Run the following command to install Spotube with windows chocolatey package manager
-```powershell
-choco install spotube
-```
-
-### Winget
-Run the following command to install Spotube with new Windows Package Manager:
-```powershell
-winget install --id KRTirtho.Spotube
-```
-
-## Linux
-
-### Flatpak
-Run in terminal:
-```shell
-$ flatpak install flathub com.github.KRTirtho.Spotube
-```
-
-
-### Ubuntu/Debian/Linux Mint/Pop_!OS:
- Download the [Spotube-linux-x86_64.deb](https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-linux-x86_64.deb) then double click it or run
- ```bash
- $ sudo apt install Spotube-linux-x86_64.deb
- # or
- $ sudo dpkg -i Spotube-linux-x86_64.deb
- ```
- in the directory where it was downloaded
-
-
-### Arch/Manjaro/Endeavour:
- Run following terminal
- ```bash
- # for `yay` users
- $ yay -S spotube-bin
- # for `pamac` users
- $ pamac install spotube-bin
- ```
-
-
-### AppImage:
- Download the [Spotube-linux-x86_64.AppImage](https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-linux-x86_64.AppImage) file & double click to run it. AppImages require [appimage-launcher](https://github.com/TheAssassin/AppImageLauncher) to be installed
-
-## Mac OS
-Download the [Mac OS Disk Image (.dmg) file](https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-macos-x86_64.dmg) from the release & follow along the setup wizard
+> **Note!:** If you don't understand this download table. You can read [installation instructions][wiki-installation-instructions] from the wiki
## Nightly Builds
Get the latest nightly builds of Spotube [here](https://nightly.link/KRTirtho/spotube/workflows/flutter-build/build)
## Optional Configurations
-
- Login with Spotify
-
+### Login with Spotify
You need a spotify account & a developer app for
- clientId
@@ -123,31 +78,28 @@ Get the latest nightly builds of Spotube [here](https://nightly.link/KRTirtho/sp
**Grab credentials:**
- Go to https://developer.spotify.com/dashboard/login & login with your spotify account (Skip if you're logged in)
- 
+
- - Create an web app for Spotify Public API
- 
+ - Create an web app for Spotify Public API
+
- - Give the app a name & description. Then Edit settings & add **http://localhost:4304/auth/spotify/callback** as **Redirect URI** for the app. Its important for authenticating
- 
+ - **MOST IMPORTANT:** Give the app a name & description. Then Edit settings & add `http://localhost:4304/auth/spotify/callback` as **Redirect URI** for the app. Its important for authenticating
+
- - Click on **SHOW CLIENT SECRET** to reveal the **clientSecret**. Then copy the **clientID**, **clientSecret** & paste in the **Spotube's** respective fields
- 
-
+ - Click on **SHOW CLIENT SECRET** to reveal the **clientSecret**. Then copy the **clientID**, **clientSecret** & paste in the **Spotube's** respective fields
+
-
-Setup Genius Lyrics
+### Setup Genius Lyrics
- Signup/Login into [genius](https://genius.com/signup) for **lyrics**
-- Go To [Genius Developer Portal](https://genius.com/api-clients/new) for creating an API client
- 
-- Generate & copy access token
- 
-- Paste the copied access token in Spotube's Settings
- 
+- Go To [Genius Developer Portal](https://genius.com/api-clients/new) for creating an API client
+
+- Generate & copy access token
+
+- Paste the copied access token in Spotube's Settings
+
> **Note!**: No personal data or any kind of sensitive information won't be collected from spotify. Don't believe? See the code for yourself
-
# TODO:
@@ -173,7 +125,7 @@ You can find the details [here](CONTRIBUTION.md#your-first-code-contribution)
Bu why? You can learn about it [here](https://dev.to/krtirtho/choosing-open-source-license-wisely-1m3p)
-# Relevant Project/Tools Links
+# Library/Plugin/Framework Credits
- [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
- [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
@@ -197,6 +149,9 @@ Bu why? You can learn about it [here](https://dev.to/krtirtho/choosing-open-sour
- [logger](https://github.com/leisim/logger) - Small, easy to use and extensible logger which prints beautiful logs
- [flutter_launcher_icons](https://github.com/fluttercommunity/flutter_launcher_icons) - A package which simplifies the task of updating your Flutter app's launcher icon.
- [permission_handler](https://github.com/baseflow/flutter-permission-handler) - Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.
+- [marquee](https://github.com/MarcelGarus/marquee) - ⏩ A Flutter widget that scrolls text infinitely. Provides many customizations including custom scroll directions, durations, curves as well as pauses after every round
+- [scroll_to_index](https://github.com/quire-io/scroll-to-index) - scroll to index with fixed/variable row height inside Flutter scrollable widget
+- [package_info_plus](https://github.com/fluttercommunity/plus_plugins/tree/main/packages/) - This Flutter plugin provides an API for querying information about an application package.
# Social handlers
@@ -205,3 +160,14 @@ Follow me on [Twitter](https://twitter.com/@krtirtho) for newer updates about th
© 2022 Spotube
+
+
+
+[win32-dlink]: https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-windows-x86_64-setup.exe
+[deb-dlink]: https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-linux-x86_64.deb
+[linux-dlink]: https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-linux-x86_64.tar.xz
+[appimage-dlink]: https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-linux-x86_64.AppImage
+[mac-dlink]: https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-macos-x86_64.dmg
+[android-dlink]: https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-android-all-arch.apk
+
+[wiki-installation-instructions]: https://github.com/KRTirtho/spotube/wiki/Installation-Instrcutions
\ No newline at end of file
diff --git a/bin/create-secrets.dart b/bin/create-secrets.dart
index feb0d7fe..e59c5668 100644
--- a/bin/create-secrets.dart
+++ b/bin/create-secrets.dart
@@ -3,6 +3,139 @@ import 'dart:io';
import 'package:path/path.dart' as path;
+// blob metadata for de-stringifying
+const randHash = [
+ 49,
+ 111,
+ 98,
+ 72,
+ 78,
+ 122,
+ 98,
+ 48,
+ 112,
+ 73,
+ 81,
+ 50,
+ 112,
+ 89,
+ 90,
+ 50,
+ 116,
+ 83,
+ 84,
+ 110,
+ 99,
+ 105,
+ 76,
+ 67,
+ 74,
+ 67,
+ 89,
+ 121,
+ 48,
+ 119,
+ 77,
+ 106,
+ 69,
+ 50,
+ 86,
+ 69,
+ 53,
+ 107,
+ 77,
+ 69,
+ 86,
+ 71,
+ 101,
+ 68,
+ 66,
+ 113,
+ 78,
+ 110,
+ 66,
+ 119
+];
+const sugarCarbonator = [
+ 81,
+ 119,
+ 79,
+ 71,
+ 85,
+ 53,
+ 78,
+ 50,
+ 69,
+ 52,
+ 90,
+ 68,
+ 107,
+ 120,
+ 77,
+ 87,
+ 89,
+ 52,
+ 89,
+ 84,
+ 73
+];
+const randomSalt = [
+ 70,
+ 117,
+ 67,
+ 75,
+ 117,
+ 116,
+ 72,
+ 101,
+ 105,
+ 102,
+ 65,
+ 110,
+ 68,
+ 87,
+ 72,
+ 97,
+ 84,
+ 85,
+ 82,
+ 100,
+ 79,
+ 73,
+ 110,
+ 103,
+ 83,
+ 117,
+ 75,
+ 115
+];
+const algorithmicSugar = [
+ 70,
+ 117,
+ 67,
+ 75,
+ 117,
+ 116,
+ 72,
+ 101,
+ 105,
+ 102,
+ 65,
+ 78,
+ 100,
+ 102,
+ 68,
+ 114,
+ 79,
+ 105,
+ 100,
+ 115,
+ 85,
+ 99,
+ 107,
+ 83
+];
+
void main(List args) async {
List val;
List