Merge 69d35aa2d9 into 9d005c8c38
24
.env.example
@ -1,17 +1,15 @@
|
||||
# The format:
|
||||
# SPOTIFY_SECRETS=clintId1:clientSecret1,clientId2:clientSecret2
|
||||
SPOTIFY_SECRETS=$SPOTIFY_SECRETS
|
||||
# Structure: client,secret:client,secret
|
||||
SPOTIFY_SECRETS=
|
||||
|
||||
# 0 or 1
|
||||
# 0 = disable
|
||||
# 1 = enable
|
||||
ENABLE_UPDATE_CHECK=$ENABLE_UPDATE_CHECK
|
||||
# Choice: true (enter: 1) or false (enter: 0)
|
||||
ENABLE_UPDATE_CHECK=
|
||||
|
||||
LASTFM_API_KEY=$LASTFM_API_KEY
|
||||
LASTFM_API_SECRET=$LASTFM_API_SECRET
|
||||
LASTFM_API_KEY=
|
||||
LASTFM_API_SECRET=
|
||||
|
||||
# Release channel. Can be: nightly, stable
|
||||
RELEASE_CHANNEL=$RELEASE_CHANNEL
|
||||
# Choice: stable or nightly
|
||||
RELEASE_CHANNEL=
|
||||
|
||||
HIDE_DONATIONS=$HIDE_DONATIONS
|
||||
DISABLE_SPOTIFY_IMAGES=$DISABLE_SPOTIFY_IMAGES
|
||||
# Choice: true (enter: 1) or false (enter: 0)
|
||||
HIDE_DONATIONS=
|
||||
DISABLE_SPOTIFY_IMAGES=
|
||||
|
||||
27
.metadata
@ -4,8 +4,8 @@
|
||||
# This file should be version controlled and should not be manually edited.
|
||||
|
||||
version:
|
||||
revision: "300451adae589accbece3490f4396f10bdf15e6e"
|
||||
channel: "stable"
|
||||
revision: "ea121f8859e4b13e47a8f845e4586164519588bc"
|
||||
channel: "[user-branch]"
|
||||
|
||||
project_type: app
|
||||
|
||||
@ -13,11 +13,26 @@ project_type: app
|
||||
migration:
|
||||
platforms:
|
||||
- platform: root
|
||||
create_revision: 300451adae589accbece3490f4396f10bdf15e6e
|
||||
base_revision: 300451adae589accbece3490f4396f10bdf15e6e
|
||||
create_revision: ea121f8859e4b13e47a8f845e4586164519588bc
|
||||
base_revision: ea121f8859e4b13e47a8f845e4586164519588bc
|
||||
- platform: android
|
||||
create_revision: ea121f8859e4b13e47a8f845e4586164519588bc
|
||||
base_revision: ea121f8859e4b13e47a8f845e4586164519588bc
|
||||
- platform: ios
|
||||
create_revision: ea121f8859e4b13e47a8f845e4586164519588bc
|
||||
base_revision: ea121f8859e4b13e47a8f845e4586164519588bc
|
||||
- platform: linux
|
||||
create_revision: ea121f8859e4b13e47a8f845e4586164519588bc
|
||||
base_revision: ea121f8859e4b13e47a8f845e4586164519588bc
|
||||
- platform: macos
|
||||
create_revision: ea121f8859e4b13e47a8f845e4586164519588bc
|
||||
base_revision: ea121f8859e4b13e47a8f845e4586164519588bc
|
||||
- platform: web
|
||||
create_revision: ea121f8859e4b13e47a8f845e4586164519588bc
|
||||
base_revision: ea121f8859e4b13e47a8f845e4586164519588bc
|
||||
- platform: windows
|
||||
create_revision: 300451adae589accbece3490f4396f10bdf15e6e
|
||||
base_revision: 300451adae589accbece3490f4396f10bdf15e6e
|
||||
create_revision: ea121f8859e4b13e47a8f845e4586164519588bc
|
||||
base_revision: ea121f8859e4b13e47a8f845e4586164519588bc
|
||||
|
||||
# User provided section
|
||||
|
||||
|
||||
44
android/app/build.gradle.kts
Normal file
@ -0,0 +1,44 @@
|
||||
plugins {
|
||||
id("com.android.application")
|
||||
id("kotlin-android")
|
||||
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
|
||||
id("dev.flutter.flutter-gradle-plugin")
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "oss.krtirtho.spotube"
|
||||
compileSdk = flutter.compileSdkVersion
|
||||
ndkVersion = flutter.ndkVersion
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_11
|
||||
targetCompatibility = JavaVersion.VERSION_11
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_11.toString()
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||
applicationId = "oss.krtirtho.spotube"
|
||||
// You can update the following values to match your application needs.
|
||||
// For more information, see: https://flutter.dev/to/review-gradle-config.
|
||||
minSdk = flutter.minSdkVersion
|
||||
targetSdk = flutter.targetSdkVersion
|
||||
versionCode = flutter.versionCode
|
||||
versionName = flutter.versionName
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
// TODO: Add your own signing config for the release build.
|
||||
// Signing with the debug keys for now, so `flutter run --release` works.
|
||||
signingConfig = signingConfigs.getByName("debug")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
flutter {
|
||||
source = "../.."
|
||||
}
|
||||
21
android/build.gradle.kts
Normal file
@ -0,0 +1,21 @@
|
||||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
|
||||
val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get()
|
||||
rootProject.layout.buildDirectory.value(newBuildDir)
|
||||
|
||||
subprojects {
|
||||
val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name)
|
||||
project.layout.buildDirectory.value(newSubprojectBuildDir)
|
||||
}
|
||||
subprojects {
|
||||
project.evaluationDependsOn(":app")
|
||||
}
|
||||
|
||||
tasks.register<Delete>("clean") {
|
||||
delete(rootProject.layout.buildDirectory)
|
||||
}
|
||||
25
android/settings.gradle.kts
Normal file
@ -0,0 +1,25 @@
|
||||
pluginManagement {
|
||||
val flutterSdkPath = run {
|
||||
val properties = java.util.Properties()
|
||||
file("local.properties").inputStream().use { properties.load(it) }
|
||||
val flutterSdkPath = properties.getProperty("flutter.sdk")
|
||||
require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" }
|
||||
flutterSdkPath
|
||||
}
|
||||
|
||||
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
|
||||
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
|
||||
id("com.android.application") version "8.7.0" apply false
|
||||
id("org.jetbrains.kotlin.android") version "1.8.22" apply false
|
||||
}
|
||||
|
||||
include(":app")
|
||||
BIN
assets/spotube-icon-rounded.png
Normal file
|
After Width: | Height: | Size: 648 KiB |
BIN
assets/spotube-icon.png
Normal file
|
After Width: | Height: | Size: 486 KiB |
|
Before Width: | Height: | Size: 18 KiB |
BIN
assets/spotube-logo-notWallpaper.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 3.6 KiB |
@ -1,349 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 762 762"
|
||||
version="1.1"
|
||||
id="svg270"
|
||||
sodipodi:docname="spotube-logo.svg"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xml:space="preserve"
|
||||
inkscape:export-filename="spotube-logo.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"
|
||||
width="762"
|
||||
height="762"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:bx="https://boxy-svg.com"><sodipodi:namedview
|
||||
id="namedview272"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.76199998"
|
||||
inkscape:cx="194.22573"
|
||||
inkscape:cy="314.96064"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg270"
|
||||
inkscape:lockguides="false"><inkscape:page
|
||||
x="0"
|
||||
y="0"
|
||||
width="762"
|
||||
height="762"
|
||||
id="page3136" /><inkscape:page
|
||||
x="640.44641"
|
||||
y="132.29141"
|
||||
width="89.999939"
|
||||
height="89.999985"
|
||||
id="page3138" /></sodipodi:namedview><defs
|
||||
id="defs220"><linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5535"><stop
|
||||
style="stop-color:#00063b;stop-opacity:1;"
|
||||
offset="0.25885531"
|
||||
id="stop5531" /><stop
|
||||
style="stop-color:#004256;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop5533" /></linearGradient><linearGradient
|
||||
id="linearGradient2809"><stop
|
||||
offset="0.113"
|
||||
style="stop-color:#5668ea;stop-opacity:1;"
|
||||
id="stop2803" /><stop
|
||||
offset="0.60799998"
|
||||
style="stop-color:#0093b1;stop-opacity:1;"
|
||||
id="stop2805" /><stop
|
||||
offset="0.94400001"
|
||||
style="stop-color:#00a29f;stop-opacity:1;"
|
||||
id="stop2807" /></linearGradient><linearGradient
|
||||
id="linearGradient938"><stop
|
||||
offset="0.113"
|
||||
style="stop-color:#5869eb;stop-opacity:1;"
|
||||
id="stop932" /><stop
|
||||
offset="0.60799998"
|
||||
style="stop-color:#0093b1;stop-opacity:1;"
|
||||
id="stop934" /><stop
|
||||
offset="0.94400001"
|
||||
style="stop-color:#02a7a4;stop-opacity:1;"
|
||||
id="stop936" /></linearGradient><radialGradient
|
||||
id="gradient-2-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cx="251.179"
|
||||
cy="248.821"
|
||||
r="241.45"
|
||||
gradientTransform="translate(-1.768285,0.589104)"
|
||||
xlink:href="#gradient-2" /><linearGradient
|
||||
id="gradient-2"><stop
|
||||
offset="0.841"
|
||||
style="stop-color: rgb(255, 255, 255);"
|
||||
id="stop169" /><stop
|
||||
offset="1"
|
||||
style="stop-color: rgb(201, 201, 201);"
|
||||
id="stop171" /></linearGradient><filter
|
||||
id="drop-shadow-filter-0"
|
||||
x="-0.050892502"
|
||||
y="-0.050892502"
|
||||
width="1.1017849"
|
||||
height="1.1017849"
|
||||
bx:preset="drop-shadow 1 0 0 10 0.42 rgba(201,201,201,1)"><feGaussianBlur
|
||||
in="SourceAlpha"
|
||||
stdDeviation="10"
|
||||
id="feGaussianBlur174" /><feOffset
|
||||
dx="0"
|
||||
dy="0"
|
||||
id="feOffset176" /><feComponentTransfer
|
||||
result="offsetblur"
|
||||
id="feComponentTransfer179"><feFuncA
|
||||
id="spread-ctrl"
|
||||
type="linear"
|
||||
slope="0.84" /></feComponentTransfer><feFlood
|
||||
flood-color="rgba(201,201,201,1)"
|
||||
id="feFlood181" /><feComposite
|
||||
in2="offsetblur"
|
||||
operator="in"
|
||||
id="feComposite183" /><feMerge
|
||||
id="feMerge189"><feMergeNode
|
||||
id="feMergeNode185" /><feMergeNode
|
||||
in="SourceGraphic"
|
||||
id="feMergeNode187" /></feMerge></filter><linearGradient
|
||||
id="gradient-4-3"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="47.146"
|
||||
y1="18.044001"
|
||||
x2="47.146"
|
||||
y2="75.353996"
|
||||
xlink:href="#gradient-4" /><linearGradient
|
||||
id="gradient-4"><stop
|
||||
offset="0.113"
|
||||
style="stop-color: rgb(83, 240, 111);"
|
||||
id="stop193" /><stop
|
||||
offset="0.608"
|
||||
style="stop-color: rgb(0, 177, 86);"
|
||||
id="stop195" /><stop
|
||||
offset="0.944"
|
||||
style="stop-color: rgb(2, 167, 156);"
|
||||
id="stop197" /></linearGradient><filter
|
||||
id="inner-shadow-filter-0"
|
||||
x="-0.064836091"
|
||||
y="-0.071329232"
|
||||
width="1.1296722"
|
||||
height="1.108079"
|
||||
bx:preset="inner-shadow 1 0 0 4 0.5 rgba(0,0,0,0.7)"><feOffset
|
||||
dx="0"
|
||||
dy="0"
|
||||
id="feOffset200" /><feGaussianBlur
|
||||
stdDeviation="4"
|
||||
id="feGaussianBlur202"
|
||||
result="result1" /><feComposite
|
||||
operator="out"
|
||||
in="SourceGraphic"
|
||||
in2="result1"
|
||||
id="feComposite204" /><feComponentTransfer
|
||||
result="choke"
|
||||
id="feComponentTransfer208"><feFuncA
|
||||
type="linear"
|
||||
slope="1"
|
||||
id="feFuncA206" /></feComponentTransfer><feFlood
|
||||
flood-color="rgba(0,0,0,0.7)"
|
||||
result="color"
|
||||
id="feFlood210" /><feComposite
|
||||
operator="in"
|
||||
in="color"
|
||||
in2="choke"
|
||||
result="shadow"
|
||||
id="feComposite212" /><feComposite
|
||||
operator="over"
|
||||
in="shadow"
|
||||
in2="SourceGraphic"
|
||||
id="feComposite214" /></filter><linearGradient
|
||||
id="gradient-4-1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="82.026001"
|
||||
y1="144.832"
|
||||
x2="82.026001"
|
||||
y2="264.46201"
|
||||
xlink:href="#linearGradient2809"
|
||||
gradientTransform="translate(7.2213312)" /><linearGradient
|
||||
id="gradient-4-2"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="143.69299"
|
||||
y1="22.804001"
|
||||
x2="143.69299"
|
||||
y2="264.582"
|
||||
xlink:href="#linearGradient938" /><linearGradient
|
||||
id="gradient-4-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="205.862"
|
||||
y1="146.28"
|
||||
x2="205.862"
|
||||
y2="265.91"
|
||||
xlink:href="#gradient-4"
|
||||
gradientTransform="translate(-7.2213312)" /><filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter2000"
|
||||
x="-0.3425389"
|
||||
y="-0.3425389"
|
||||
width="1.6850778"
|
||||
height="1.6850778"><feFlood
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)"
|
||||
result="flood"
|
||||
id="feFlood1990" /><feComposite
|
||||
in="flood"
|
||||
in2="SourceGraphic"
|
||||
operator="out"
|
||||
result="composite1"
|
||||
id="feComposite1992" /><feGaussianBlur
|
||||
in="composite1"
|
||||
stdDeviation="29.980818"
|
||||
result="blur"
|
||||
id="feGaussianBlur1994" /><feOffset
|
||||
dx="0"
|
||||
dy="0"
|
||||
result="offset"
|
||||
id="feOffset1996" /><feComposite
|
||||
in="offset"
|
||||
in2="SourceGraphic"
|
||||
operator="atop"
|
||||
result="fbSourceGraphic"
|
||||
id="feComposite1998" /><feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix2062" /><feFlood
|
||||
id="feFlood2064"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)"
|
||||
result="flood"
|
||||
in="fbSourceGraphic" /><feComposite
|
||||
in2="fbSourceGraphic"
|
||||
id="feComposite2066"
|
||||
in="flood"
|
||||
operator="out"
|
||||
result="composite1" /><feGaussianBlur
|
||||
id="feGaussianBlur2068"
|
||||
in="composite1"
|
||||
stdDeviation="28.6433"
|
||||
result="blur" /><feOffset
|
||||
id="feOffset2070"
|
||||
dx="0"
|
||||
dy="0"
|
||||
result="offset" /><feComposite
|
||||
in2="fbSourceGraphic"
|
||||
id="feComposite2072"
|
||||
in="offset"
|
||||
operator="atop"
|
||||
result="fbSourceGraphic" /><feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix3393" /><feFlood
|
||||
id="feFlood3395"
|
||||
flood-opacity="0.352941"
|
||||
flood-color="rgb(0,0,0)"
|
||||
result="flood"
|
||||
in="fbSourceGraphic" /><feComposite
|
||||
in2="fbSourceGraphic"
|
||||
id="feComposite3397"
|
||||
in="flood"
|
||||
operator="in"
|
||||
result="composite1" /><feGaussianBlur
|
||||
id="feGaussianBlur3399"
|
||||
in="composite1"
|
||||
stdDeviation="6.59891"
|
||||
result="blur" /><feOffset
|
||||
id="feOffset3401"
|
||||
dx="0"
|
||||
dy="0"
|
||||
result="offset" /><feComposite
|
||||
in2="offset"
|
||||
id="feComposite3403"
|
||||
in="fbSourceGraphic"
|
||||
operator="over"
|
||||
result="composite2" /></filter><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2809"
|
||||
id="linearGradient5506"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(117.34662)"
|
||||
x1="82.026001"
|
||||
y1="144.832"
|
||||
x2="82.026001"
|
||||
y2="264.46201" /><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5535"
|
||||
id="radialGradient5537"
|
||||
cx="143.6935"
|
||||
cy="143.69299"
|
||||
fx="143.6935"
|
||||
fy="143.69299"
|
||||
r="152.72653"
|
||||
gradientTransform="matrix(1,0,0,0.8506841,0,21.45565)"
|
||||
gradientUnits="userSpaceOnUse" /></defs><circle
|
||||
style="opacity:1;fill:#242832;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-dasharray:none;stroke-opacity:0.961795;filter:url(#filter2000)"
|
||||
id="path1157"
|
||||
cx="381.48901"
|
||||
cy="381.48901"
|
||||
inkscape:label="path1157"
|
||||
r="235.79112"
|
||||
sodipodi:insensitive="true" /><g
|
||||
transform="matrix(0.319972,0,0,0.323174,379.08153,437.03375)"
|
||||
id="g228"><g
|
||||
style="opacity:1;fill:none;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none"
|
||||
transform="matrix(3.89,0,0,3.89,-175.05,-175.05)"
|
||||
id="g226" /></g><g
|
||||
id="g236"
|
||||
style="fill:none;filter:url(#inner-shadow-filter-0)"
|
||||
transform="matrix(1.107829,0,0,1.106267,221.95533,199.03714)"><path
|
||||
d="m 78.642332,155.437 v 98.42 c 0,5.867 4.741,10.605 10.605,10.605 5.854,0 10.604995,-4.738 10.604995,-10.605 v -98.42 c 0,-5.856 -4.750995,-10.605 -10.604995,-10.605 -5.864,0 -10.605,4.744 -10.605,10.605 z"
|
||||
style="fill:none;fill-opacity:1;stroke:url(#gradient-4-1);stroke-width:9.80924px;stroke-linecap:round;stroke-linejoin:round"
|
||||
id="path230" /><path
|
||||
d="m 29.456,264.582 h 23.351 v -116.85 c 0.064,-0.56 0.166,-1.119 0.166,-1.693 0,-50.412 40.69,-91.42 90.698,-91.42 50.002,0 90.692,41.008 90.692,91.42 0,0.771 0.113,1.518 0.228,2.263 v 116.28 h 23.354 c 16.254,0 29.442,-13.64 29.442,-30.469 v -60.936 c 0,-13.878 -8.989,-25.57 -21.261,-29.249 C 264.997,76.957 210.518,22.804 143.676,22.804 76.816,22.804 22.329,76.962 21.211,143.954 8.956,147.638 0,159.32 0,173.187 v 60.926 c 0,16.819 13.187,30.469 29.456,30.469 z"
|
||||
style="fill:url(#radialGradient5537);fill-opacity:1;stroke:url(#gradient-4-2);stroke-width:18.0661;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
|
||||
id="path232" /><path
|
||||
d="M 49.735541,279.35822 C 23.7214,267.48486 38.122112,248.62719 80.85964,237.45225 c 14.400662,-3.49216 25.08508,-5.12184 43.66659,-4.88901 11.61348,0.23282 24.62053,3.49216 24.62053,3.49216 0,-42.13877 -0.46471,-121.7601 -0.46471,-160.872338 4.6454,0 7.89719,-0.232827 14.40071,-0.232827 0,2.328107 0,4.190613 0,6.053093 0,2.095305 0,3.259358 0.46471,4.656212 4.6454,14.66709 11.14893,20.48736 43.66659,38.41381 41.34392,23.04827 53.42195,36.78411 53.42195,55.17616 -0.46471,17.22802 -30.65954,54.01213 -37.16306,52.61528 9.29075,-13.03741 22.2978,-27.00606 25.54958,-38.64661 4.18085,-14.20147 -7.43263,-34.2232 -26.01414,-44.69971 -14.86522,-8.8468 -50.17016,-16.52957 -59.92547,-16.52957 0,0 -0.46472,84.74317 -0.46472,116.87109 0,5.35464 -9.7553,14.89989 -15.32977,18.15925 -25.54958,15.36551 -75.25519,22.34984 -97.553043,12.33896 z"
|
||||
id="path3079"
|
||||
style="stroke-width:3.28861" /><path
|
||||
d="m 188.76763,155.437 v 98.42 c 0,5.867 4.741,10.605 10.60501,10.605 5.854,0 10.605,-4.738 10.605,-10.605 v -98.42 c 0,-5.856 -4.751,-10.605 -10.605,-10.605 -5.86401,0 -10.60501,4.744 -10.60501,10.605 z"
|
||||
style="fill:none;stroke:url(#linearGradient5506);stroke-width:9.80924px;stroke-linecap:round;stroke-linejoin:round"
|
||||
id="path5502" /></g><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g240" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g242" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g244" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g246" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g248" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g250" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g252" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g254" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g256" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g258" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g260" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g262" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g264" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g266" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g268" /></svg>
|
||||
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 128 KiB |
@ -1,359 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 762 762"
|
||||
version="1.1"
|
||||
id="svg270"
|
||||
sodipodi:docname="spotube-nightly-logo.svg"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xml:space="preserve"
|
||||
inkscape:export-filename="spotube-logo.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"
|
||||
width="762"
|
||||
height="762"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:bx="https://boxy-svg.com"><sodipodi:namedview
|
||||
id="namedview272"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.26940768"
|
||||
inkscape:cx="-413.87091"
|
||||
inkscape:cy="562.34478"
|
||||
inkscape:window-width="1518"
|
||||
inkscape:window-height="1080"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="g236"
|
||||
inkscape:lockguides="false"><inkscape:page
|
||||
x="0"
|
||||
y="0"
|
||||
width="762"
|
||||
height="762"
|
||||
id="page3136" /><inkscape:page
|
||||
x="640.44641"
|
||||
y="132.29141"
|
||||
width="89.999939"
|
||||
height="89.999985"
|
||||
id="page3138" /></sodipodi:namedview><defs
|
||||
id="defs220"><linearGradient
|
||||
id="linearGradient1211"><stop
|
||||
offset="0.113"
|
||||
style="stop-color:#ff4b4b;stop-opacity:1;"
|
||||
id="stop1205" /><stop
|
||||
offset="0.60799998"
|
||||
style="stop-color:#d6a400;stop-opacity:1;"
|
||||
id="stop1207" /><stop
|
||||
offset="0.94400001"
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
id="stop1209" /></linearGradient><linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5535"><stop
|
||||
style="stop-color:#3b2100;stop-opacity:1;"
|
||||
offset="0.25885531"
|
||||
id="stop5531" /><stop
|
||||
style="stop-color:#004256;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop5533" /></linearGradient><linearGradient
|
||||
id="linearGradient2809"><stop
|
||||
offset="0.113"
|
||||
style="stop-color:#ff4b4b;stop-opacity:1;"
|
||||
id="stop2803" /><stop
|
||||
offset="0.60799998"
|
||||
style="stop-color:#d6a400;stop-opacity:1;"
|
||||
id="stop2805" /><stop
|
||||
offset="0.94400001"
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
id="stop2807" /></linearGradient><linearGradient
|
||||
id="linearGradient938"><stop
|
||||
offset="0.113"
|
||||
style="stop-color:#ff4b4b;stop-opacity:1;"
|
||||
id="stop932" /><stop
|
||||
offset="0.60799998"
|
||||
style="stop-color:#d6a400;stop-opacity:1;"
|
||||
id="stop934" /><stop
|
||||
offset="0.94400001"
|
||||
style="stop-color:#fffcf1;stop-opacity:1;"
|
||||
id="stop936" /></linearGradient><radialGradient
|
||||
id="gradient-2-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cx="251.179"
|
||||
cy="248.821"
|
||||
r="241.45"
|
||||
gradientTransform="translate(-1.768285,0.589104)"
|
||||
xlink:href="#gradient-2" /><linearGradient
|
||||
id="gradient-2"><stop
|
||||
offset="0.841"
|
||||
style="stop-color: rgb(255, 255, 255);"
|
||||
id="stop169" /><stop
|
||||
offset="1"
|
||||
style="stop-color: rgb(201, 201, 201);"
|
||||
id="stop171" /></linearGradient><filter
|
||||
id="drop-shadow-filter-0"
|
||||
x="-0.050892502"
|
||||
y="-0.050892502"
|
||||
width="1.1017849"
|
||||
height="1.1017849"
|
||||
bx:preset="drop-shadow 1 0 0 10 0.42 rgba(201,201,201,1)"><feGaussianBlur
|
||||
in="SourceAlpha"
|
||||
stdDeviation="10"
|
||||
id="feGaussianBlur174" /><feOffset
|
||||
dx="0"
|
||||
dy="0"
|
||||
id="feOffset176" /><feComponentTransfer
|
||||
result="offsetblur"
|
||||
id="feComponentTransfer179"><feFuncA
|
||||
id="spread-ctrl"
|
||||
type="linear"
|
||||
slope="0.84" /></feComponentTransfer><feFlood
|
||||
flood-color="rgba(201,201,201,1)"
|
||||
id="feFlood181" /><feComposite
|
||||
in2="offsetblur"
|
||||
operator="in"
|
||||
id="feComposite183" /><feMerge
|
||||
id="feMerge189"><feMergeNode
|
||||
id="feMergeNode185" /><feMergeNode
|
||||
in="SourceGraphic"
|
||||
id="feMergeNode187" /></feMerge></filter><linearGradient
|
||||
id="gradient-4-3"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="47.146"
|
||||
y1="18.044001"
|
||||
x2="47.146"
|
||||
y2="75.353996"
|
||||
xlink:href="#gradient-4" /><linearGradient
|
||||
id="gradient-4"><stop
|
||||
offset="0.113"
|
||||
style="stop-color: rgb(83, 240, 111);"
|
||||
id="stop193" /><stop
|
||||
offset="0.608"
|
||||
style="stop-color: rgb(0, 177, 86);"
|
||||
id="stop195" /><stop
|
||||
offset="0.944"
|
||||
style="stop-color: rgb(2, 167, 156);"
|
||||
id="stop197" /></linearGradient><filter
|
||||
id="inner-shadow-filter-0"
|
||||
x="-0.064836091"
|
||||
y="-0.071329232"
|
||||
width="1.1296722"
|
||||
height="1.108079"
|
||||
bx:preset="inner-shadow 1 0 0 4 0.5 rgba(0,0,0,0.7)"><feOffset
|
||||
dx="0"
|
||||
dy="0"
|
||||
id="feOffset200" /><feGaussianBlur
|
||||
stdDeviation="4"
|
||||
id="feGaussianBlur202"
|
||||
result="result1" /><feComposite
|
||||
operator="out"
|
||||
in="SourceGraphic"
|
||||
in2="result1"
|
||||
id="feComposite204" /><feComponentTransfer
|
||||
result="choke"
|
||||
id="feComponentTransfer208"><feFuncA
|
||||
type="linear"
|
||||
slope="1"
|
||||
id="feFuncA206" /></feComponentTransfer><feFlood
|
||||
flood-color="rgba(0,0,0,0.7)"
|
||||
result="color"
|
||||
id="feFlood210" /><feComposite
|
||||
operator="in"
|
||||
in="color"
|
||||
in2="choke"
|
||||
result="shadow"
|
||||
id="feComposite212" /><feComposite
|
||||
operator="over"
|
||||
in="shadow"
|
||||
in2="SourceGraphic"
|
||||
id="feComposite214" /></filter><linearGradient
|
||||
id="gradient-4-1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="82.026001"
|
||||
y1="144.832"
|
||||
x2="82.026001"
|
||||
y2="264.46201"
|
||||
xlink:href="#linearGradient2809"
|
||||
gradientTransform="translate(7.2213312)" /><linearGradient
|
||||
id="gradient-4-2"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="143.69299"
|
||||
y1="22.804001"
|
||||
x2="143.69299"
|
||||
y2="264.582"
|
||||
xlink:href="#linearGradient938" /><linearGradient
|
||||
id="gradient-4-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="205.862"
|
||||
y1="146.28"
|
||||
x2="205.862"
|
||||
y2="265.91"
|
||||
xlink:href="#gradient-4"
|
||||
gradientTransform="translate(-7.2213312)" /><filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter2000"
|
||||
x="-0.3425389"
|
||||
y="-0.3425389"
|
||||
width="1.6850778"
|
||||
height="1.6850778"><feFlood
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)"
|
||||
result="flood"
|
||||
id="feFlood1990" /><feComposite
|
||||
in="flood"
|
||||
in2="SourceGraphic"
|
||||
operator="out"
|
||||
result="composite1"
|
||||
id="feComposite1992" /><feGaussianBlur
|
||||
in="composite1"
|
||||
stdDeviation="29.980818"
|
||||
result="blur"
|
||||
id="feGaussianBlur1994" /><feOffset
|
||||
dx="0"
|
||||
dy="0"
|
||||
result="offset"
|
||||
id="feOffset1996" /><feComposite
|
||||
in="offset"
|
||||
in2="SourceGraphic"
|
||||
operator="atop"
|
||||
result="fbSourceGraphic"
|
||||
id="feComposite1998" /><feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix2062" /><feFlood
|
||||
id="feFlood2064"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)"
|
||||
result="flood"
|
||||
in="fbSourceGraphic" /><feComposite
|
||||
in2="fbSourceGraphic"
|
||||
id="feComposite2066"
|
||||
in="flood"
|
||||
operator="out"
|
||||
result="composite1" /><feGaussianBlur
|
||||
id="feGaussianBlur2068"
|
||||
in="composite1"
|
||||
stdDeviation="28.6433"
|
||||
result="blur" /><feOffset
|
||||
id="feOffset2070"
|
||||
dx="0"
|
||||
dy="0"
|
||||
result="offset" /><feComposite
|
||||
in2="fbSourceGraphic"
|
||||
id="feComposite2072"
|
||||
in="offset"
|
||||
operator="atop"
|
||||
result="fbSourceGraphic" /><feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix3393" /><feFlood
|
||||
id="feFlood3395"
|
||||
flood-opacity="0.352941"
|
||||
flood-color="rgb(0,0,0)"
|
||||
result="flood"
|
||||
in="fbSourceGraphic" /><feComposite
|
||||
in2="fbSourceGraphic"
|
||||
id="feComposite3397"
|
||||
in="flood"
|
||||
operator="in"
|
||||
result="composite1" /><feGaussianBlur
|
||||
id="feGaussianBlur3399"
|
||||
in="composite1"
|
||||
stdDeviation="6.59891"
|
||||
result="blur" /><feOffset
|
||||
id="feOffset3401"
|
||||
dx="0"
|
||||
dy="0"
|
||||
result="offset" /><feComposite
|
||||
in2="offset"
|
||||
id="feComposite3403"
|
||||
in="fbSourceGraphic"
|
||||
operator="over"
|
||||
result="composite2" /></filter><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1211"
|
||||
id="linearGradient5506"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(117.34662)"
|
||||
x1="82.026001"
|
||||
y1="144.832"
|
||||
x2="82.026001"
|
||||
y2="264.46201" /><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5535"
|
||||
id="radialGradient5537"
|
||||
cx="143.6935"
|
||||
cy="143.69299"
|
||||
fx="143.6935"
|
||||
fy="143.69299"
|
||||
r="152.72653"
|
||||
gradientTransform="matrix(1,0,0,0.8506841,0,21.45565)"
|
||||
gradientUnits="userSpaceOnUse" /></defs><circle
|
||||
style="opacity:1;fill:#242832;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-dasharray:none;stroke-opacity:0.961795;filter:url(#filter2000)"
|
||||
id="path1157"
|
||||
cx="381.48901"
|
||||
cy="381.48901"
|
||||
inkscape:label="path1157"
|
||||
r="235.79112"
|
||||
sodipodi:insensitive="true" /><g
|
||||
transform="matrix(0.319972,0,0,0.323174,379.08153,437.03375)"
|
||||
id="g228"><g
|
||||
style="opacity:1;fill:none;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none"
|
||||
transform="matrix(3.89,0,0,3.89,-175.05,-175.05)"
|
||||
id="g226" /></g><g
|
||||
id="g236"
|
||||
style="fill:none;filter:url(#inner-shadow-filter-0)"
|
||||
transform="matrix(1.107829,0,0,1.106267,221.95533,199.03714)"><path
|
||||
d="m 78.642332,155.437 v 98.42 c 0,5.867 4.741,10.605 10.605,10.605 5.854,0 10.604995,-4.738 10.604995,-10.605 v -98.42 c 0,-5.856 -4.750995,-10.605 -10.604995,-10.605 -5.864,0 -10.605,4.744 -10.605,10.605 z"
|
||||
style="fill:none;fill-opacity:1;stroke:url(#gradient-4-1);stroke-width:9.80924px;stroke-linecap:round;stroke-linejoin:round"
|
||||
id="path230" /><path
|
||||
d="m 29.456,264.582 h 23.351 v -116.85 c 0.064,-0.56 0.166,-1.119 0.166,-1.693 0,-50.412 40.69,-91.42 90.698,-91.42 50.002,0 90.692,41.008 90.692,91.42 0,0.771 0.113,1.518 0.228,2.263 v 116.28 h 23.354 c 16.254,0 29.442,-13.64 29.442,-30.469 v -60.936 c 0,-13.878 -8.989,-25.57 -21.261,-29.249 C 264.997,76.957 210.518,22.804 143.676,22.804 76.816,22.804 22.329,76.962 21.211,143.954 8.956,147.638 0,159.32 0,173.187 v 60.926 c 0,16.819 13.187,30.469 29.456,30.469 z"
|
||||
style="fill:url(#radialGradient5537);fill-opacity:1;stroke:url(#gradient-4-2);stroke-width:18.0661;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
|
||||
id="path232" /><path
|
||||
d="M 49.735541,279.35822 C 23.7214,267.48486 38.122112,248.62719 80.85964,237.45225 c 14.400662,-3.49216 25.08508,-5.12184 43.66659,-4.88901 11.61348,0.23282 24.62053,3.49216 24.62053,3.49216 0,-42.13877 -0.46471,-121.7601 -0.46471,-160.872338 4.6454,0 7.89719,-0.232827 14.40071,-0.232827 0,2.328107 0,4.190613 0,6.053093 0,2.095305 0,3.259358 0.46471,4.656212 4.6454,14.66709 11.14893,20.48736 43.66659,38.41381 41.34392,23.04827 53.42195,36.78411 53.42195,55.17616 -0.46471,17.22802 -30.65954,54.01213 -37.16306,52.61528 9.29075,-13.03741 22.2978,-27.00606 25.54958,-38.64661 4.18085,-14.20147 -7.43263,-34.2232 -26.01414,-44.69971 -14.86522,-8.8468 -50.17016,-16.52957 -59.92547,-16.52957 0,0 -0.46472,84.74317 -0.46472,116.87109 0,5.35464 -9.7553,14.89989 -15.32977,18.15925 -25.54958,15.36551 -75.25519,22.34984 -97.553043,12.33896 z"
|
||||
id="path3079"
|
||||
style="stroke-width:3.28861" /><path
|
||||
d="m 188.76763,155.437 v 98.42 c 0,5.867 4.741,10.605 10.60501,10.605 5.854,0 10.605,-4.738 10.605,-10.605 v -98.42 c 0,-5.856 -4.751,-10.605 -10.605,-10.605 -5.86401,0 -10.60501,4.744 -10.60501,10.605 z"
|
||||
style="fill:none;stroke:url(#linearGradient5506);stroke-width:9.80924px;stroke-linecap:round;stroke-linejoin:round"
|
||||
id="path5502" /></g><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g240" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g242" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g244" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g246" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g248" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g250" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g252" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g254" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g256" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g258" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g260" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g262" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g264" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g266" /><g
|
||||
transform="matrix(0.972684,0,0,0.972684,193.06382,142.14148)"
|
||||
id="g268" /></svg>
|
||||
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 295 KiB |
BIN
assets/spotube-nightly-notWallpaper.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
assets/spotube-nightly-rounded.png
Normal file
|
After Width: | Height: | Size: 892 KiB |
BIN
assets/spotube-nightly.png
Normal file
|
After Width: | Height: | Size: 763 KiB |
190
assets/spotube-nightly.svg
Normal file
|
After Width: | Height: | Size: 531 KiB |
|
Before Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 298 KiB |
12
ios/RunnerTests/RunnerTests.swift
Normal file
@ -0,0 +1,12 @@
|
||||
import Flutter
|
||||
import UIKit
|
||||
import XCTest
|
||||
|
||||
class RunnerTests: XCTestCase {
|
||||
|
||||
func testExample() {
|
||||
// If you add code to the Runner application, consider adding tests here.
|
||||
// See https://developer.apple.com/documentation/xctest for more information about using XCTest.
|
||||
}
|
||||
|
||||
}
|
||||
@ -150,35 +150,27 @@ class Assets {
|
||||
AssetGenImage('assets/placeholder.png');
|
||||
static const AssetGenImage spotubeHeroBanner =
|
||||
AssetGenImage('assets/spotube-hero-banner.png');
|
||||
static const AssetGenImage spotubeLogoForeground =
|
||||
AssetGenImage('assets/spotube-logo-foreground.jpg');
|
||||
static const AssetGenImage spotubeIconRounded =
|
||||
AssetGenImage('assets/spotube-icon-rounded.png');
|
||||
static const AssetGenImage spotubeIcon =
|
||||
AssetGenImage('assets/spotube-icon.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 String spotubeLogoSvg = 'assets/spotube-logo.svg';
|
||||
static const AssetGenImage spotubeLogoNotWallpaper =
|
||||
AssetGenImage('assets/spotube-logo-notWallpaper.png');
|
||||
static const AssetGenImage spotubeLogoRounded =
|
||||
AssetGenImage('assets/spotube-logo-rounded.png');
|
||||
static const AssetGenImage spotubeLogoAndroid12 =
|
||||
AssetGenImage('assets/spotube-logo_android12.png');
|
||||
static const AssetGenImage spotubeNightlyLogoForeground =
|
||||
AssetGenImage('assets/spotube-nightly-logo-foreground.jpg');
|
||||
static const AssetGenImage spotubeNightlyLogoPng =
|
||||
AssetGenImage('assets/spotube-nightly-logo.png');
|
||||
static const String spotubeNightlyLogoSvg = 'assets/spotube-nightly-logo.svg';
|
||||
static const AssetGenImage spotubeNightlyLogoAndroid12 =
|
||||
AssetGenImage('assets/spotube-nightly-logo_android12.png');
|
||||
static const AssetGenImage spotubeNightlyNotWallpaper =
|
||||
AssetGenImage('assets/spotube-nightly-notWallpaper.png');
|
||||
static const AssetGenImage spotubeNightlyRounded =
|
||||
AssetGenImage('assets/spotube-nightly-rounded.png');
|
||||
static const AssetGenImage spotubeNightlyPng =
|
||||
AssetGenImage('assets/spotube-nightly.png');
|
||||
static const String spotubeNightlySvg = 'assets/spotube-nightly.svg';
|
||||
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 =
|
||||
@ -196,22 +188,17 @@ class Assets {
|
||||
likedTracks,
|
||||
placeholder,
|
||||
spotubeHeroBanner,
|
||||
spotubeLogoForeground,
|
||||
spotubeIconRounded,
|
||||
spotubeIcon,
|
||||
spotubeLogoMacos,
|
||||
spotubeLogoBmp,
|
||||
spotubeLogoIco,
|
||||
spotubeLogoPng,
|
||||
spotubeLogoSvg,
|
||||
spotubeLogoNotWallpaper,
|
||||
spotubeLogoRounded,
|
||||
spotubeLogoAndroid12,
|
||||
spotubeNightlyLogoForeground,
|
||||
spotubeNightlyLogoPng,
|
||||
spotubeNightlyLogoSvg,
|
||||
spotubeNightlyLogoAndroid12,
|
||||
spotubeNightlyNotWallpaper,
|
||||
spotubeNightlyRounded,
|
||||
spotubeNightlyPng,
|
||||
spotubeNightlySvg,
|
||||
spotubeScreenshot,
|
||||
spotubeTallCapsule,
|
||||
spotubeWideCapsuleLarge,
|
||||
spotubeWideCapsuleSmall,
|
||||
spotubeBanner,
|
||||
success,
|
||||
userPlaceholder
|
||||
];
|
||||
|
||||
@ -19,7 +19,7 @@ abstract class Env {
|
||||
@EnviedField(varName: 'LASTFM_API_SECRET')
|
||||
static final String lastFmApiSecret = _Env.lastFmApiSecret;
|
||||
|
||||
@EnviedField(varName: 'HIDE_DONATIONS', defaultValue: "0")
|
||||
@EnviedField(varName: 'HIDE_DONATIONS', defaultValue: 0)
|
||||
static final int _hideDonations = _Env._hideDonations;
|
||||
|
||||
static bool get hideDonations => _hideDonations == 1;
|
||||
@ -32,23 +32,23 @@ abstract class Env {
|
||||
};
|
||||
}).toList();
|
||||
|
||||
@EnviedField(varName: 'ENABLE_UPDATE_CHECK', defaultValue: "1")
|
||||
@EnviedField(varName: 'ENABLE_UPDATE_CHECK', defaultValue: 1)
|
||||
static final String _enableUpdateChecker = _Env._enableUpdateChecker;
|
||||
|
||||
@EnviedField(varName: "RELEASE_CHANNEL", defaultValue: "nightly")
|
||||
static final String _releaseChannel = _Env._releaseChannel;
|
||||
|
||||
@EnviedField(varName: "DISABLE_SPOTIFY_IMAGES", defaultValue: "0")
|
||||
@EnviedField(varName: "DISABLE_SPOTIFY_IMAGES", defaultValue: 0)
|
||||
static final String _disableSpotifyImages = _Env._disableSpotifyImages;
|
||||
|
||||
static bool get disableSpotifyImages => _disableSpotifyImages == "1";
|
||||
static bool get disableSpotifyImages => _disableSpotifyImages == 1;
|
||||
|
||||
static ReleaseChannel get releaseChannel => _releaseChannel == "stable"
|
||||
? ReleaseChannel.stable
|
||||
: ReleaseChannel.nightly;
|
||||
|
||||
static bool get enableUpdateChecker =>
|
||||
kIsFlatpak || _enableUpdateChecker == "1";
|
||||
kIsFlatpak || _enableUpdateChecker == 1;
|
||||
|
||||
static String discordAppId = "1176718791388975124";
|
||||
}
|
||||
|
||||
@ -99,13 +99,8 @@ mixin _$WebSocketLoadEventData {
|
||||
required TResult orElse(),
|
||||
}) =>
|
||||
throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this WebSocketLoadEventData to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
$WebSocketLoadEventDataCopyWith<WebSocketLoadEventData> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -132,8 +127,6 @@ class _$WebSocketLoadEventDataCopyWithImpl<$Res,
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -178,8 +171,6 @@ class __$$WebSocketLoadEventDataPlaylistImplCopyWithImpl<$Res>
|
||||
$Res Function(_$WebSocketLoadEventDataPlaylistImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -256,14 +247,12 @@ class _$WebSocketLoadEventDataPlaylistImpl
|
||||
other.initialIndex == initialIndex));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,
|
||||
const DeepCollectionEquality().hash(_tracks), collection, initialIndex);
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$WebSocketLoadEventDataPlaylistImplCopyWith<
|
||||
@ -383,11 +372,8 @@ abstract class WebSocketLoadEventDataPlaylist extends WebSocketLoadEventData {
|
||||
PlaylistSimple? get collection;
|
||||
@override
|
||||
int? get initialIndex;
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
_$$WebSocketLoadEventDataPlaylistImplCopyWith<
|
||||
_$WebSocketLoadEventDataPlaylistImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
@ -418,8 +404,6 @@ class __$$WebSocketLoadEventDataAlbumImplCopyWithImpl<$Res>
|
||||
$Res Function(_$WebSocketLoadEventDataAlbumImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -495,14 +479,12 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum {
|
||||
other.initialIndex == initialIndex));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,
|
||||
const DeepCollectionEquality().hash(_tracks), collection, initialIndex);
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$WebSocketLoadEventDataAlbumImplCopyWith<_$WebSocketLoadEventDataAlbumImpl>
|
||||
@ -621,11 +603,8 @@ abstract class WebSocketLoadEventDataAlbum extends WebSocketLoadEventData {
|
||||
AlbumSimple? get collection;
|
||||
@override
|
||||
int? get initialIndex;
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
_$$WebSocketLoadEventDataAlbumImplCopyWith<_$WebSocketLoadEventDataAlbumImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
@ -5964,7 +5964,8 @@ final class $$PlaylistTableTableReferences extends BaseReferences<_$AppDatabase,
|
||||
db.audioPlayerStateTable.createAlias($_aliasNameGenerator(
|
||||
db.playlistTable.audioPlayerStateId, db.audioPlayerStateTable.id));
|
||||
|
||||
$$AudioPlayerStateTableTableProcessedTableManager get audioPlayerStateId {
|
||||
$$AudioPlayerStateTableTableProcessedTableManager? get audioPlayerStateId {
|
||||
if ($_item.audioPlayerStateId == null) return null;
|
||||
final manager = $$AudioPlayerStateTableTableTableManager(
|
||||
$_db, $_db.audioPlayerStateTable)
|
||||
.filter((f) => f.id($_item.audioPlayerStateId!));
|
||||
@ -6290,7 +6291,8 @@ final class $$PlaylistMediaTableTableReferences extends BaseReferences<
|
||||
db.playlistTable.createAlias($_aliasNameGenerator(
|
||||
db.playlistMediaTable.playlistId, db.playlistTable.id));
|
||||
|
||||
$$PlaylistTableTableProcessedTableManager get playlistId {
|
||||
$$PlaylistTableTableProcessedTableManager? get playlistId {
|
||||
if ($_item.playlistId == null) return null;
|
||||
final manager = $$PlaylistTableTableTableManager($_db, $_db.playlistTable)
|
||||
.filter((f) => f.id($_item.playlistId!));
|
||||
final item = $_typedResult.readTableOrNull(_playlistIdTable($_db));
|
||||
|
||||
@ -29,12 +29,8 @@ mixin _$SpotifySectionPlaylist {
|
||||
String get owner => throw _privateConstructorUsedError;
|
||||
String get uri => throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this SpotifySectionPlaylist to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of SpotifySectionPlaylist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
$SpotifySectionPlaylistCopyWith<SpotifySectionPlaylist> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -65,8 +61,6 @@ class _$SpotifySectionPlaylistCopyWithImpl<$Res,
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of SpotifySectionPlaylist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -134,8 +128,6 @@ class __$$SpotifySectionPlaylistImplCopyWithImpl<$Res>
|
||||
$Res Function(_$SpotifySectionPlaylistImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of SpotifySectionPlaylist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -229,14 +221,12 @@ class _$SpotifySectionPlaylistImpl extends _SpotifySectionPlaylist {
|
||||
(identical(other.uri, uri) || other.uri == uri));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, description, format,
|
||||
const DeepCollectionEquality().hash(_images), name, owner, uri);
|
||||
|
||||
/// Create a copy of SpotifySectionPlaylist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SpotifySectionPlaylistImplCopyWith<_$SpotifySectionPlaylistImpl>
|
||||
@ -276,11 +266,8 @@ abstract class _SpotifySectionPlaylist extends SpotifySectionPlaylist {
|
||||
String get owner;
|
||||
@override
|
||||
String get uri;
|
||||
|
||||
/// Create a copy of SpotifySectionPlaylist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
_$$SpotifySectionPlaylistImplCopyWith<_$SpotifySectionPlaylistImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -296,12 +283,8 @@ mixin _$SpotifySectionArtist {
|
||||
List<SpotifySectionItemImage> get images =>
|
||||
throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this SpotifySectionArtist to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of SpotifySectionArtist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
$SpotifySectionArtistCopyWith<SpotifySectionArtist> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -326,8 +309,6 @@ class _$SpotifySectionArtistCopyWithImpl<$Res,
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of SpotifySectionArtist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -371,8 +352,6 @@ class __$$SpotifySectionArtistImplCopyWithImpl<$Res>
|
||||
$Res Function(_$SpotifySectionArtistImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of SpotifySectionArtist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -437,14 +416,12 @@ class _$SpotifySectionArtistImpl extends _SpotifySectionArtist {
|
||||
const DeepCollectionEquality().equals(other._images, _images));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType, name, uri, const DeepCollectionEquality().hash(_images));
|
||||
|
||||
/// Create a copy of SpotifySectionArtist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SpotifySectionArtistImplCopyWith<_$SpotifySectionArtistImpl>
|
||||
@ -477,11 +454,8 @@ abstract class _SpotifySectionArtist extends SpotifySectionArtist {
|
||||
String get uri;
|
||||
@override
|
||||
List<SpotifySectionItemImage> get images;
|
||||
|
||||
/// Create a copy of SpotifySectionArtist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
_$$SpotifySectionArtistImplCopyWith<_$SpotifySectionArtistImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -499,12 +473,8 @@ mixin _$SpotifySectionAlbum {
|
||||
String get name => throw _privateConstructorUsedError;
|
||||
String get uri => throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this SpotifySectionAlbum to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of SpotifySectionAlbum
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
$SpotifySectionAlbumCopyWith<SpotifySectionAlbum> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -532,8 +502,6 @@ class _$SpotifySectionAlbumCopyWithImpl<$Res, $Val extends SpotifySectionAlbum>
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of SpotifySectionAlbum
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -586,8 +554,6 @@ class __$$SpotifySectionAlbumImplCopyWithImpl<$Res>
|
||||
$Res Function(_$SpotifySectionAlbumImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of SpotifySectionAlbum
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -669,7 +635,7 @@ class _$SpotifySectionAlbumImpl extends _SpotifySectionAlbum {
|
||||
(identical(other.uri, uri) || other.uri == uri));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType,
|
||||
@ -678,9 +644,7 @@ class _$SpotifySectionAlbumImpl extends _SpotifySectionAlbum {
|
||||
name,
|
||||
uri);
|
||||
|
||||
/// Create a copy of SpotifySectionAlbum
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SpotifySectionAlbumImplCopyWith<_$SpotifySectionAlbumImpl> get copyWith =>
|
||||
@ -714,11 +678,8 @@ abstract class _SpotifySectionAlbum extends SpotifySectionAlbum {
|
||||
String get name;
|
||||
@override
|
||||
String get uri;
|
||||
|
||||
/// Create a copy of SpotifySectionAlbum
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
_$$SpotifySectionAlbumImplCopyWith<_$SpotifySectionAlbumImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -733,12 +694,8 @@ mixin _$SpotifySectionAlbumArtist {
|
||||
String get name => throw _privateConstructorUsedError;
|
||||
String get uri => throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this SpotifySectionAlbumArtist to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of SpotifySectionAlbumArtist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
$SpotifySectionAlbumArtistCopyWith<SpotifySectionAlbumArtist> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -763,8 +720,6 @@ class _$SpotifySectionAlbumArtistCopyWithImpl<$Res,
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of SpotifySectionAlbumArtist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -806,8 +761,6 @@ class __$$SpotifySectionAlbumArtistImplCopyWithImpl<$Res>
|
||||
$Res Function(_$SpotifySectionAlbumArtistImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of SpotifySectionAlbumArtist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -855,13 +808,11 @@ class _$SpotifySectionAlbumArtistImpl extends _SpotifySectionAlbumArtist {
|
||||
(identical(other.uri, uri) || other.uri == uri));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, name, uri);
|
||||
|
||||
/// Create a copy of SpotifySectionAlbumArtist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SpotifySectionAlbumArtistImplCopyWith<_$SpotifySectionAlbumArtistImpl>
|
||||
@ -889,11 +840,8 @@ abstract class _SpotifySectionAlbumArtist extends SpotifySectionAlbumArtist {
|
||||
String get name;
|
||||
@override
|
||||
String get uri;
|
||||
|
||||
/// Create a copy of SpotifySectionAlbumArtist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
_$$SpotifySectionAlbumArtistImplCopyWith<_$SpotifySectionAlbumArtistImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -909,12 +857,8 @@ mixin _$SpotifySectionItemImage {
|
||||
String get url => throw _privateConstructorUsedError;
|
||||
num? get width => throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this SpotifySectionItemImage to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of SpotifySectionItemImage
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
$SpotifySectionItemImageCopyWith<SpotifySectionItemImage> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -939,8 +883,6 @@ class _$SpotifySectionItemImageCopyWithImpl<$Res,
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of SpotifySectionItemImage
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -987,8 +929,6 @@ class __$$SpotifySectionItemImageImplCopyWithImpl<$Res>
|
||||
$Res Function(_$SpotifySectionItemImageImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of SpotifySectionItemImage
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -1045,13 +985,11 @@ class _$SpotifySectionItemImageImpl extends _SpotifySectionItemImage {
|
||||
(identical(other.width, width) || other.width == width));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, height, url, width);
|
||||
|
||||
/// Create a copy of SpotifySectionItemImage
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SpotifySectionItemImageImplCopyWith<_$SpotifySectionItemImageImpl>
|
||||
@ -1082,11 +1020,8 @@ abstract class _SpotifySectionItemImage extends SpotifySectionItemImage {
|
||||
String get url;
|
||||
@override
|
||||
num? get width;
|
||||
|
||||
/// Create a copy of SpotifySectionItemImage
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
_$$SpotifySectionItemImageImplCopyWith<_$SpotifySectionItemImageImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -1103,12 +1038,8 @@ mixin _$SpotifyHomeFeedSectionItem {
|
||||
SpotifySectionArtist? get artist => throw _privateConstructorUsedError;
|
||||
SpotifySectionAlbum? get album => throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this SpotifyHomeFeedSectionItem to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of SpotifyHomeFeedSectionItem
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
$SpotifyHomeFeedSectionItemCopyWith<SpotifyHomeFeedSectionItem>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -1142,8 +1073,6 @@ class _$SpotifyHomeFeedSectionItemCopyWithImpl<$Res,
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of SpotifyHomeFeedSectionItem
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -1172,8 +1101,6 @@ class _$SpotifyHomeFeedSectionItemCopyWithImpl<$Res,
|
||||
) as $Val);
|
||||
}
|
||||
|
||||
/// Create a copy of SpotifyHomeFeedSectionItem
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$SpotifySectionPlaylistCopyWith<$Res>? get playlist {
|
||||
@ -1186,8 +1113,6 @@ class _$SpotifyHomeFeedSectionItemCopyWithImpl<$Res,
|
||||
});
|
||||
}
|
||||
|
||||
/// Create a copy of SpotifyHomeFeedSectionItem
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$SpotifySectionArtistCopyWith<$Res>? get artist {
|
||||
@ -1200,8 +1125,6 @@ class _$SpotifyHomeFeedSectionItemCopyWithImpl<$Res,
|
||||
});
|
||||
}
|
||||
|
||||
/// Create a copy of SpotifyHomeFeedSectionItem
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$SpotifySectionAlbumCopyWith<$Res>? get album {
|
||||
@ -1248,8 +1171,6 @@ class __$$SpotifyHomeFeedSectionItemImplCopyWithImpl<$Res>
|
||||
$Res Function(_$SpotifyHomeFeedSectionItemImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of SpotifyHomeFeedSectionItem
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -1316,14 +1237,12 @@ class _$SpotifyHomeFeedSectionItemImpl implements _SpotifyHomeFeedSectionItem {
|
||||
(identical(other.album, album) || other.album == album));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
int get hashCode =>
|
||||
Object.hash(runtimeType, typename, playlist, artist, album);
|
||||
|
||||
/// Create a copy of SpotifyHomeFeedSectionItem
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SpotifyHomeFeedSectionItemImplCopyWith<_$SpotifyHomeFeedSectionItemImpl>
|
||||
@ -1357,11 +1276,8 @@ abstract class _SpotifyHomeFeedSectionItem
|
||||
SpotifySectionArtist? get artist;
|
||||
@override
|
||||
SpotifySectionAlbum? get album;
|
||||
|
||||
/// Create a copy of SpotifyHomeFeedSectionItem
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
_$$SpotifyHomeFeedSectionItemImplCopyWith<_$SpotifyHomeFeedSectionItemImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -1379,12 +1295,8 @@ mixin _$SpotifyHomeFeedSection {
|
||||
List<SpotifyHomeFeedSectionItem> get items =>
|
||||
throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this SpotifyHomeFeedSection to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of SpotifyHomeFeedSection
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
$SpotifyHomeFeedSectionCopyWith<SpotifyHomeFeedSection> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -1413,8 +1325,6 @@ class _$SpotifyHomeFeedSectionCopyWithImpl<$Res,
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of SpotifyHomeFeedSection
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -1470,8 +1380,6 @@ class __$$SpotifyHomeFeedSectionImplCopyWithImpl<$Res>
|
||||
$Res Function(_$SpotifyHomeFeedSectionImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of SpotifyHomeFeedSection
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -1545,14 +1453,12 @@ class _$SpotifyHomeFeedSectionImpl implements _SpotifyHomeFeedSection {
|
||||
const DeepCollectionEquality().equals(other._items, _items));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, typename, title, uri,
|
||||
const DeepCollectionEquality().hash(_items));
|
||||
|
||||
/// Create a copy of SpotifyHomeFeedSection
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SpotifyHomeFeedSectionImplCopyWith<_$SpotifyHomeFeedSectionImpl>
|
||||
@ -1586,11 +1492,8 @@ abstract class _SpotifyHomeFeedSection implements SpotifyHomeFeedSection {
|
||||
String get uri;
|
||||
@override
|
||||
List<SpotifyHomeFeedSectionItem> get items;
|
||||
|
||||
/// Create a copy of SpotifyHomeFeedSection
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
_$$SpotifyHomeFeedSectionImplCopyWith<_$SpotifyHomeFeedSectionImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -1605,12 +1508,8 @@ mixin _$SpotifyHomeFeed {
|
||||
List<SpotifyHomeFeedSection> get sections =>
|
||||
throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this SpotifyHomeFeed to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of SpotifyHomeFeed
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
$SpotifyHomeFeedCopyWith<SpotifyHomeFeed> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -1634,8 +1533,6 @@ class _$SpotifyHomeFeedCopyWithImpl<$Res, $Val extends SpotifyHomeFeed>
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of SpotifyHomeFeed
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -1674,8 +1571,6 @@ class __$$SpotifyHomeFeedImplCopyWithImpl<$Res>
|
||||
_$SpotifyHomeFeedImpl _value, $Res Function(_$SpotifyHomeFeedImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of SpotifyHomeFeed
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -1731,14 +1626,12 @@ class _$SpotifyHomeFeedImpl implements _SpotifyHomeFeed {
|
||||
const DeepCollectionEquality().equals(other._sections, _sections));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType, greeting, const DeepCollectionEquality().hash(_sections));
|
||||
|
||||
/// Create a copy of SpotifyHomeFeed
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SpotifyHomeFeedImplCopyWith<_$SpotifyHomeFeedImpl> get copyWith =>
|
||||
@ -1766,11 +1659,8 @@ abstract class _SpotifyHomeFeed implements SpotifyHomeFeed {
|
||||
String get greeting;
|
||||
@override
|
||||
List<SpotifyHomeFeedSection> get sections;
|
||||
|
||||
/// Create a copy of SpotifyHomeFeed
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
_$$SpotifyHomeFeedImplCopyWith<_$SpotifyHomeFeedImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
@ -24,9 +24,7 @@ mixin _$GeneratePlaylistProviderInput {
|
||||
RecommendationSeeds? get min => throw _privateConstructorUsedError;
|
||||
RecommendationSeeds? get target => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of GeneratePlaylistProviderInput
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
$GeneratePlaylistProviderInputCopyWith<GeneratePlaylistProviderInput>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -64,8 +62,6 @@ class _$GeneratePlaylistProviderInputCopyWithImpl<$Res,
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of GeneratePlaylistProviderInput
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -109,8 +105,6 @@ class _$GeneratePlaylistProviderInputCopyWithImpl<$Res,
|
||||
) as $Val);
|
||||
}
|
||||
|
||||
/// Create a copy of GeneratePlaylistProviderInput
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$RecommendationSeedsCopyWith<$Res>? get max {
|
||||
@ -123,8 +117,6 @@ class _$GeneratePlaylistProviderInputCopyWithImpl<$Res,
|
||||
});
|
||||
}
|
||||
|
||||
/// Create a copy of GeneratePlaylistProviderInput
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$RecommendationSeedsCopyWith<$Res>? get min {
|
||||
@ -137,8 +129,6 @@ class _$GeneratePlaylistProviderInputCopyWithImpl<$Res,
|
||||
});
|
||||
}
|
||||
|
||||
/// Create a copy of GeneratePlaylistProviderInput
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$RecommendationSeedsCopyWith<$Res>? get target {
|
||||
@ -188,8 +178,6 @@ class __$$GeneratePlaylistProviderInputImplCopyWithImpl<$Res>
|
||||
$Res Function(_$GeneratePlaylistProviderInputImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of GeneratePlaylistProviderInput
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -295,9 +283,7 @@ class _$GeneratePlaylistProviderInputImpl
|
||||
min,
|
||||
target);
|
||||
|
||||
/// Create a copy of GeneratePlaylistProviderInput
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$GeneratePlaylistProviderInputImplCopyWith<
|
||||
@ -331,11 +317,8 @@ abstract class _GeneratePlaylistProviderInput
|
||||
RecommendationSeeds? get min;
|
||||
@override
|
||||
RecommendationSeeds? get target;
|
||||
|
||||
/// Create a copy of GeneratePlaylistProviderInput
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
_$$GeneratePlaylistProviderInputImplCopyWith<
|
||||
_$GeneratePlaylistProviderInputImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
@ -364,12 +347,8 @@ mixin _$RecommendationSeeds {
|
||||
num? get timeSignature => throw _privateConstructorUsedError;
|
||||
num? get valence => throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this RecommendationSeeds to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of RecommendationSeeds
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
$RecommendationSeedsCopyWith<RecommendationSeeds> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -407,8 +386,6 @@ class _$RecommendationSeedsCopyWithImpl<$Res, $Val extends RecommendationSeeds>
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of RecommendationSeeds
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -521,8 +498,6 @@ class __$$RecommendationSeedsImplCopyWithImpl<$Res>
|
||||
$Res Function(_$RecommendationSeedsImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of RecommendationSeeds
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -690,7 +665,7 @@ class _$RecommendationSeedsImpl implements _RecommendationSeeds {
|
||||
(identical(other.valence, valence) || other.valence == valence));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType,
|
||||
@ -709,9 +684,7 @@ class _$RecommendationSeedsImpl implements _RecommendationSeeds {
|
||||
timeSignature,
|
||||
valence);
|
||||
|
||||
/// Create a copy of RecommendationSeeds
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$RecommendationSeedsImplCopyWith<_$RecommendationSeedsImpl> get copyWith =>
|
||||
@ -776,11 +749,8 @@ abstract class _RecommendationSeeds implements RecommendationSeeds {
|
||||
num? get timeSignature;
|
||||
@override
|
||||
num? get valence;
|
||||
|
||||
/// Create a copy of RecommendationSeeds
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
_$$RecommendationSeedsImplCopyWith<_$RecommendationSeedsImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@ class Sidebar extends HookConsumerWidget {
|
||||
color: Colors.black,
|
||||
borderRadius: BorderRadius.circular(50),
|
||||
),
|
||||
child: Assets.spotubeLogoPng.image(height: 50),
|
||||
child: Assets.spotubeLogoNotWallpaper.image(height: 50),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@ class GettingStartedPageGreetingSection extends HookConsumerWidget {
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Assets.spotubeLogoPng.image(height: 200),
|
||||
Assets.spotubeLogoNotWallpaper.image(height: 200),
|
||||
const Gap(24),
|
||||
const Text("Spotube").semiBold().h4(),
|
||||
const Gap(4),
|
||||
|
||||
@ -45,7 +45,7 @@ class HomePage extends HookConsumerWidget {
|
||||
if (mediaQuery.smAndDown || layoutMode == LayoutMode.compact)
|
||||
SliverAppBar(
|
||||
floating: true,
|
||||
title: Assets.spotubeLogoPng.image(height: 45),
|
||||
title: Assets.spotubeLogoNotWallpaper.image(height: 45),
|
||||
backgroundColor: context.theme.colorScheme.background,
|
||||
foregroundColor: context.theme.colorScheme.foreground,
|
||||
actions: [
|
||||
|
||||
@ -45,7 +45,7 @@ class AboutSpotubePage extends HookConsumerWidget {
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Assets.spotubeLogoPng.image(
|
||||
Assets.spotubeLogoNotWallpaper.image(
|
||||
height: 200,
|
||||
width: 200,
|
||||
),
|
||||
|
||||
@ -30,12 +30,8 @@ mixin _$SongLink {
|
||||
String? get nativeAppUriMobile => throw _privateConstructorUsedError;
|
||||
String? get nativeAppUriDesktop => throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this SongLink to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of SongLink
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
$SongLinkCopyWith<SongLink> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -67,8 +63,6 @@ class _$SongLinkCopyWithImpl<$Res, $Val extends SongLink>
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of SongLink
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -151,8 +145,6 @@ class __$$SongLinkImplCopyWithImpl<$Res>
|
||||
_$SongLinkImpl _value, $Res Function(_$SongLinkImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of SongLink
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -269,14 +261,12 @@ class _$SongLinkImpl implements _SongLink {
|
||||
other.nativeAppUriDesktop == nativeAppUriDesktop));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, displayName, linkId, platform,
|
||||
show, uniqueId, country, url, nativeAppUriMobile, nativeAppUriDesktop);
|
||||
|
||||
/// Create a copy of SongLink
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SongLinkImplCopyWith<_$SongLinkImpl> get copyWith =>
|
||||
@ -323,11 +313,8 @@ abstract class _SongLink implements SongLink {
|
||||
String? get nativeAppUriMobile;
|
||||
@override
|
||||
String? get nativeAppUriDesktop;
|
||||
|
||||
/// Create a copy of SongLink
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@JsonKey(ignore: true)
|
||||
_$$SongLinkImplCopyWith<_$SongLinkImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
@ -1,11 +1,19 @@
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
# Project-level configuration.
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
project(runner LANGUAGES CXX)
|
||||
|
||||
# The name of the executable created for the application. Change this to change
|
||||
# the on-disk name of your application.
|
||||
set(BINARY_NAME "spotube")
|
||||
# The unique GTK application identifier for this application. See:
|
||||
# https://wiki.gnome.org/HowDoI/ChooseApplicationID
|
||||
set(APPLICATION_ID "oss.krtirtho.spotube")
|
||||
|
||||
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
|
||||
# versions of CMake.
|
||||
cmake_policy(SET CMP0063 NEW)
|
||||
|
||||
# Load bundled libraries from the lib/ directory relative to the binary.
|
||||
set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
|
||||
|
||||
# Root filesystem for cross-building.
|
||||
@ -18,7 +26,7 @@ if(FLUTTER_TARGET_PLATFORM_SYSROOT)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
endif()
|
||||
|
||||
# Configure build options.
|
||||
# Define build configuration options.
|
||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||
set(CMAKE_BUILD_TYPE "Debug" CACHE
|
||||
STRING "Flutter build mode" FORCE)
|
||||
@ -27,35 +35,31 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||
endif()
|
||||
|
||||
# Compilation settings that should be applied to most targets.
|
||||
#
|
||||
# Be cautious about adding new options here, as plugins use this function by
|
||||
# default. In most cases, you should add new options to specific targets instead
|
||||
# of modifying this function.
|
||||
function(APPLY_STANDARD_SETTINGS TARGET)
|
||||
target_compile_features(${TARGET} PUBLIC cxx_std_14)
|
||||
target_compile_options(${TARGET} PRIVATE -Wall -Werror)
|
||||
target_compile_options(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:-O3>")
|
||||
target_compile_definitions(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:NDEBUG>")
|
||||
target_compile_options(${TARGET} PRIVATE -Wno-error=deprecated-declarations)
|
||||
endfunction()
|
||||
|
||||
set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
|
||||
|
||||
# Flutter library and tool build rules.
|
||||
set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
|
||||
add_subdirectory(${FLUTTER_MANAGED_DIR})
|
||||
|
||||
# System-level dependencies.
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
|
||||
|
||||
add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}")
|
||||
# Application build; see runner/CMakeLists.txt.
|
||||
add_subdirectory("runner")
|
||||
|
||||
# Application build
|
||||
add_executable(${BINARY_NAME}
|
||||
"main.cc"
|
||||
"my_application.cc"
|
||||
"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
|
||||
)
|
||||
apply_standard_settings(${BINARY_NAME})
|
||||
target_link_libraries(${BINARY_NAME} PRIVATE flutter)
|
||||
target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)
|
||||
# Run the Flutter tool portions of the build. This must not be removed.
|
||||
add_dependencies(${BINARY_NAME} flutter_assemble)
|
||||
|
||||
# Only the install-generated bundle's copy of the executable will launch
|
||||
# correctly, since the resources must in the right relative locations. To avoid
|
||||
# people trying to run the unbundled copy, put it in a subdirectory instead of
|
||||
@ -65,12 +69,11 @@ set_target_properties(${BINARY_NAME}
|
||||
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run"
|
||||
)
|
||||
|
||||
|
||||
# Generated plugin build rules, which manage building the plugins and adding
|
||||
# them to the application.
|
||||
include(flutter/generated_plugins.cmake)
|
||||
|
||||
target_link_libraries(${BINARY_NAME} PRIVATE ${MIMALLOC_LIB})
|
||||
|
||||
|
||||
# === Installation ===
|
||||
# By default, "installing" just makes a relocatable bundle in the build
|
||||
@ -97,11 +100,17 @@ install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}
|
||||
install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
|
||||
COMPONENT Runtime)
|
||||
|
||||
if(PLUGIN_BUNDLED_LIBRARIES)
|
||||
install(FILES "${PLUGIN_BUNDLED_LIBRARIES}"
|
||||
foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES})
|
||||
install(FILES "${bundled_library}"
|
||||
DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
|
||||
COMPONENT Runtime)
|
||||
endif()
|
||||
endforeach(bundled_library)
|
||||
|
||||
# Copy the native assets provided by the build.dart from all packages.
|
||||
set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/")
|
||||
install(DIRECTORY "${NATIVE_ASSETS_DIR}"
|
||||
DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
|
||||
COMPONENT Runtime)
|
||||
|
||||
# Fully re-copy the assets directory on each build to avoid having stale files
|
||||
# from a previous install.
|
||||
|
||||
@ -1,72 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop-application">
|
||||
<id>com.github.KRTirtho.Spotube</id>
|
||||
<name>Spotube</name>
|
||||
<summary>
|
||||
Freedom of music
|
||||
</summary>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>BSD-4-Clause</project_license>
|
||||
<recommends>
|
||||
<control>pointing</control>
|
||||
<control>keyboard</control>
|
||||
<control>touch</control>
|
||||
</recommends>
|
||||
<developer_name>Kingkor Roy Tirtho</developer_name>
|
||||
<url type="bugtracker">https://github.com/krtirtho/spotube/issues</url>
|
||||
<url type="homepage">https://spotube.krtirtho.dev</url>
|
||||
<url type="donation">https://opencollective.com/spotube</url>
|
||||
<description>
|
||||
<p>Open source Spotify client that doesn't require Premium nor uses Electron! Available for
|
||||
both desktop & mobile!</p>
|
||||
<p>Following are the features that currently spotube offers:</p>
|
||||
<ul>
|
||||
<li>🚫 No ads, thanks to the use of public & free Spotify and YT Music APIs¹</li>
|
||||
<li>⬇️ Downloadable tracks</li>
|
||||
<li>🖥️ 📱 Cross-platform support</li>
|
||||
<li>🪶 Small size & less data usage</li>
|
||||
<li>🕵️ Anonymous/guest login</li>
|
||||
<li>🕒 Time synced lyrics</li>
|
||||
<li>✋ No telemetry, diagnostics or user data collection</li>
|
||||
<li>🚀 Native performance</li>
|
||||
<li>📖 Open source/libre software</li>
|
||||
<li>🔉 Playback control is done locally, not on the server</li>
|
||||
</ul>
|
||||
</description>
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<image type="source">
|
||||
https://rawcdn.githack.com/KRTirtho/spotube/refs/heads/master/assets/spotube-screenshot.png
|
||||
</image>
|
||||
<caption>Spotube screenshot</caption>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<launchable type="desktop-id">com.github.KRTirtho.Spotube.desktop</launchable>
|
||||
<releases> %{{APPDATA_RELEASE}}% <release version="2.6.0" date="2022-12-09" />
|
||||
<release
|
||||
version="2.5.0" date="2022-10-13" />
|
||||
<release version="2.4.1" date="2022-09-13" />
|
||||
<release
|
||||
version="2.4.0" date="2022-09-09" />
|
||||
<release version="2.3.1" date="2022-07-11" />
|
||||
<release
|
||||
version="2.2.1" date="2022-06-09" />
|
||||
<release version="2.2.0" date="2022-06-05" />
|
||||
<release
|
||||
version="2.1.0" date="2022-05-10" />
|
||||
<release version="2.0.0" date="2022-03-24" />
|
||||
<release
|
||||
version="1.2.0" date="2022-02-02" />
|
||||
<release version="1.1.0" date="2022-01-27" />
|
||||
<release
|
||||
version="1.0.1" date="2022-01-15" />
|
||||
<release version="1.0.0" date="2022-01-14" />
|
||||
<release
|
||||
version="0.0.3" date="2021-05-08" />
|
||||
<release version="0.0.2" date="2021-03-31" />
|
||||
<release
|
||||
version="0.0.1" date="2021-03-20" />
|
||||
</releases>
|
||||
<content_rating type="oars-1.1" />
|
||||
<update_contact>krtirtho@gmail.com</update_contact>
|
||||
</component>
|
||||
@ -1,3 +1,4 @@
|
||||
# This file controls Flutter-level build steps. It should not be edited.
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
|
||||
set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
|
||||
|
||||
@ -1,16 +0,0 @@
|
||||
display_name: Spotube
|
||||
icon: assets/spotube-logo.png
|
||||
|
||||
keywords:
|
||||
- Music
|
||||
- Spotify
|
||||
- Media
|
||||
- Streaming
|
||||
- YouTube
|
||||
|
||||
generic_name: Music Streaming Application
|
||||
categories:
|
||||
- Music
|
||||
|
||||
supported_mime_type:
|
||||
- x-scheme-handler/spotify
|
||||
@ -1,47 +0,0 @@
|
||||
display_name: Spotube
|
||||
package_name: spotube
|
||||
|
||||
maintainer:
|
||||
name: Kingkor Roy Tirtho
|
||||
email: krtirtho@gmail.com
|
||||
|
||||
priority: optional
|
||||
section: x11
|
||||
installed_size: 24400
|
||||
|
||||
dependencies:
|
||||
- mpv
|
||||
- libappindicator3-1 | libayatana-appindicator3-1
|
||||
- gir1.2-appindicator3-0.1 | gir1.2-ayatanaappindicator3-0.1
|
||||
- libsecret-1-0
|
||||
- libnotify-bin
|
||||
- libjsoncpp25
|
||||
- libmpv1 | libmpv2
|
||||
- xdg-user-dirs
|
||||
- avahi-daemon
|
||||
- avahi-discover
|
||||
- avahi-utils
|
||||
- libnss-mdns
|
||||
- mdns-scan
|
||||
- libwebkit2gtk-4.1-0 | libwebkit2gtk-4.0-0
|
||||
- libsoup-3.0-0 | libsoup-2.4-0
|
||||
|
||||
suggested_dependencies:
|
||||
- yt-dlp
|
||||
|
||||
essential: false
|
||||
icon: assets/spotube-logo.png
|
||||
|
||||
keywords:
|
||||
- Music
|
||||
- Spotify
|
||||
- Media
|
||||
- Streaming
|
||||
- YouTube
|
||||
|
||||
generic_name: Music Streaming Application
|
||||
categories:
|
||||
- Music
|
||||
|
||||
supported_mime_type:
|
||||
- x-scheme-handler/spotify
|
||||
@ -1,38 +0,0 @@
|
||||
icon: assets/spotube-logo.png
|
||||
summary: Lightweight cross-platform Spotify desktop client
|
||||
group: Applications/Multimedia
|
||||
vendor: Kingkor Roy Tirtho
|
||||
packager: Kingkor Roy Tirtho
|
||||
packagerEmail: krtirtho@gmail.com
|
||||
license: BSD-4-Clause
|
||||
url: https://github.com/KRTirtho/spotube
|
||||
requires:
|
||||
- mpv
|
||||
- libappindicator
|
||||
- jsoncpp
|
||||
- libsecret
|
||||
- libnotify
|
||||
- xdg-user-dirs
|
||||
- avahi
|
||||
- mdns-scan
|
||||
- nss-mdns
|
||||
- webkit2gtk4.1
|
||||
- libsoup3
|
||||
|
||||
display_name: Spotube
|
||||
|
||||
keywords:
|
||||
- Music
|
||||
- Spotify
|
||||
- Media
|
||||
- Streaming
|
||||
- YouTube
|
||||
|
||||
generic_name: Music Streaming Application
|
||||
categories:
|
||||
- Music
|
||||
|
||||
startup_notify: true
|
||||
|
||||
supported_mime_type:
|
||||
- x-scheme-handler/spotify
|
||||
26
linux/runner/CMakeLists.txt
Normal file
@ -0,0 +1,26 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
project(runner LANGUAGES CXX)
|
||||
|
||||
# Define the application target. To change its name, change BINARY_NAME in the
|
||||
# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer
|
||||
# work.
|
||||
#
|
||||
# Any new source files that you add to the application should be added here.
|
||||
add_executable(${BINARY_NAME}
|
||||
"main.cc"
|
||||
"my_application.cc"
|
||||
"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
|
||||
)
|
||||
|
||||
# Apply the standard set of build settings. This can be removed for applications
|
||||
# that need different build settings.
|
||||
apply_standard_settings(${BINARY_NAME})
|
||||
|
||||
# Add preprocessor definitions for the application ID.
|
||||
add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}")
|
||||
|
||||
# Add dependency libraries. Add any application-specific dependencies here.
|
||||
target_link_libraries(${BINARY_NAME} PRIVATE flutter)
|
||||
target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)
|
||||
|
||||
target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
|
||||
@ -17,13 +17,6 @@ G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION)
|
||||
// Implements GApplication::activate.
|
||||
static void my_application_activate(GApplication* application) {
|
||||
MyApplication* self = MY_APPLICATION(application);
|
||||
|
||||
GList* windows = gtk_application_get_windows(GTK_APPLICATION(application));
|
||||
if (windows) {
|
||||
gtk_window_present(GTK_WINDOW(windows->data));
|
||||
return;
|
||||
}
|
||||
|
||||
GtkWindow* window =
|
||||
GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application)));
|
||||
|
||||
@ -58,8 +51,7 @@ static void my_application_activate(GApplication* application) {
|
||||
gtk_widget_show(GTK_WIDGET(window));
|
||||
|
||||
g_autoptr(FlDartProject) project = fl_dart_project_new();
|
||||
fl_dart_project_set_dart_entrypoint_arguments(
|
||||
project, self->dart_entrypoint_arguments);
|
||||
fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments);
|
||||
|
||||
FlView* view = fl_view_new(project);
|
||||
gtk_widget_show(GTK_WIDGET(view));
|
||||
@ -71,24 +63,40 @@ static void my_application_activate(GApplication* application) {
|
||||
}
|
||||
|
||||
// Implements GApplication::local_command_line.
|
||||
static gboolean my_application_local_command_line(GApplication* application,
|
||||
gchar*** arguments,
|
||||
int* exit_status) {
|
||||
static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) {
|
||||
MyApplication* self = MY_APPLICATION(application);
|
||||
// Strip out the first argument as it is the binary name.
|
||||
self->dart_entrypoint_arguments = g_strdupv(*arguments + 1);
|
||||
|
||||
g_autoptr(GError) error = nullptr;
|
||||
if (!g_application_register(application, nullptr, &error)) {
|
||||
g_warning("Failed to register: %s", error->message);
|
||||
*exit_status = 1;
|
||||
return TRUE;
|
||||
g_warning("Failed to register: %s", error->message);
|
||||
*exit_status = 1;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
g_application_activate(application);
|
||||
*exit_status = 0;
|
||||
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Implements GApplication::startup.
|
||||
static void my_application_startup(GApplication* application) {
|
||||
//MyApplication* self = MY_APPLICATION(object);
|
||||
|
||||
// Perform any actions required at application startup.
|
||||
|
||||
G_APPLICATION_CLASS(my_application_parent_class)->startup(application);
|
||||
}
|
||||
|
||||
// Implements GApplication::shutdown.
|
||||
static void my_application_shutdown(GApplication* application) {
|
||||
//MyApplication* self = MY_APPLICATION(object);
|
||||
|
||||
// Perform any actions required at application shutdown.
|
||||
|
||||
G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application);
|
||||
}
|
||||
|
||||
// Implements GObject::dispose.
|
||||
@ -100,31 +108,23 @@ static void my_application_dispose(GObject* object) {
|
||||
|
||||
static void my_application_class_init(MyApplicationClass* klass) {
|
||||
G_APPLICATION_CLASS(klass)->activate = my_application_activate;
|
||||
G_APPLICATION_CLASS(klass)->local_command_line =
|
||||
my_application_local_command_line;
|
||||
G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line;
|
||||
G_APPLICATION_CLASS(klass)->startup = my_application_startup;
|
||||
G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown;
|
||||
G_OBJECT_CLASS(klass)->dispose = my_application_dispose;
|
||||
}
|
||||
|
||||
static void my_application_init(MyApplication* self) {}
|
||||
|
||||
bool is_flatpak(void) {
|
||||
if (getenv("container") || getenv("FLATPAK_ID") || getenv("FLATPAK")) {
|
||||
/* flatpak */
|
||||
return true;
|
||||
}
|
||||
return false; /* No container detected */
|
||||
}
|
||||
|
||||
MyApplication* my_application_new() {
|
||||
// gchar based alternate MY_APPLICATION_ID
|
||||
const char* my_application_id = APPLICATION_ID;
|
||||
// Set the program name to the application ID, which helps various systems
|
||||
// like GTK and desktop environments map this running application to its
|
||||
// corresponding .desktop file. This ensures better integration by allowing
|
||||
// the application to be recognized beyond its binary name.
|
||||
g_set_prgname(APPLICATION_ID);
|
||||
|
||||
if (is_flatpak()) {
|
||||
my_application_id = "com.github.KRTirtho.Spotube";
|
||||
}
|
||||
|
||||
return MY_APPLICATION(g_object_new(
|
||||
my_application_get_type(), "application-id", my_application_id, "flags",
|
||||
G_APPLICATION_HANDLES_COMMAND_LINE | G_APPLICATION_HANDLES_OPEN,
|
||||
nullptr));
|
||||
return MY_APPLICATION(g_object_new(my_application_get_type(),
|
||||
"application-id", APPLICATION_ID,
|
||||
"flags", G_APPLICATION_NON_UNIQUE,
|
||||
nullptr));
|
||||
}
|
||||
@ -1,9 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=Spotube
|
||||
Exec=/usr/bin/spotube
|
||||
Icon=/usr/share/icons/spotube/spotube-logo.png
|
||||
Comment=A music streaming app combining the power of Spotify & YouTube
|
||||
Terminal=false
|
||||
Categories=Audio;Music;Player;AudioVideo;
|
||||
MimeType=x-scheme-handler/spotify;
|
||||
12
macos/RunnerTests/RunnerTests.swift
Normal file
@ -0,0 +1,12 @@
|
||||
import Cocoa
|
||||
import FlutterMacOS
|
||||
import XCTest
|
||||
|
||||
class RunnerTests: XCTestCase {
|
||||
|
||||
func testExample() {
|
||||
// If you add code to the Runner application, consider adding tests here.
|
||||
// See https://developer.apple.com/documentation/xctest for more information about using XCTest.
|
||||
}
|
||||
|
||||
}
|
||||
57
pubspec.lock
@ -5,23 +5,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: _fe_analyzer_shared
|
||||
sha256: "16e298750b6d0af7ce8a3ba7c18c69c3785d11b15ec83f6dcd0ad2a0009b3cab"
|
||||
sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "76.0.0"
|
||||
_macros:
|
||||
dependency: transitive
|
||||
description: dart
|
||||
source: sdk
|
||||
version: "0.3.3"
|
||||
version: "67.0.0"
|
||||
analyzer:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: analyzer
|
||||
sha256: "1f14db053a8c23e260789e9b0980fa27f2680dd640932cae5e1137cce0e46e1e"
|
||||
sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.11.0"
|
||||
version: "6.4.1"
|
||||
analyzer_plugin:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -483,10 +478,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dart_style
|
||||
sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab"
|
||||
sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.7"
|
||||
version: "2.3.6"
|
||||
dartx:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -582,18 +577,18 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: drift
|
||||
sha256: c2d073d35ad441730812f4ea05b5dd031fb81c5f9786a4f5fb77ecd6307b6f74
|
||||
sha256: df027d168a2985a2e9da900adeba2ab0136f0d84436592cf3cd5135f82c8579c
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.22.1"
|
||||
version: "2.21.0"
|
||||
drift_dev:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: drift_dev
|
||||
sha256: f4ab5d6976b1e31551ceb82ff597a505bda7818ff4f7be08a1da9d55eb6e730c
|
||||
sha256: "623649abe932fc17bd32e578e7e05f7ac5e7dd0b33e6c8669a0634105d1389bf"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.22.1"
|
||||
version: "2.21.2"
|
||||
duration:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -809,10 +804,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_form_builder
|
||||
sha256: "39aee5a2548df0b3979a83eea38468116a888341fbca8a92c4be18a486a7bb57"
|
||||
sha256: "375da52998c72f80dec9187bd93afa7ab202b89d5d066699368ff96d39fd4876"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "9.6.0"
|
||||
version: "9.7.0"
|
||||
flutter_gen_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1049,10 +1044,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: form_builder_validators
|
||||
sha256: "517fb884183fff7a0ef3db7d375981011da26ee452f20fb3d2e788ad527ad01d"
|
||||
sha256: cd617fa346250293ff3e2709961d0faf7b80e6e4f0ff7b500126b28d7422dd67
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "11.1.1"
|
||||
version: "11.1.2"
|
||||
form_validator:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -1065,10 +1060,10 @@ packages:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: freezed
|
||||
sha256: "44c19278dd9d89292cf46e97dc0c1e52ce03275f40a97c5a348e802a924bf40e"
|
||||
sha256: a434911f643466d78462625df76fd9eb13e57348ff43fe1f77bbe909522c67a1
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.5.7"
|
||||
version: "2.5.2"
|
||||
freezed_annotation:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -1379,10 +1374,10 @@ packages:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: json_serializable
|
||||
sha256: c2fcb3920cf2b6ae6845954186420fca40bc0a8abcc84903b7801f17d7050d7c
|
||||
sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.9.0"
|
||||
version: "6.8.0"
|
||||
leak_tracker:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1447,14 +1442,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.2"
|
||||
macros:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: macros
|
||||
sha256: "1d9e801cd66f7ea3663c45fc708450db1fa57f988142c64289142c9b7ee80656"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.3-main.0"
|
||||
matcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -2289,10 +2276,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: sqlparser
|
||||
sha256: "4cad4b2c5f63dc9ea1a8dcffb58cf762322bea5dd8836870164a65e913bdae41"
|
||||
sha256: d77749237609784e337ec36c979d41f6f38a7b279df98622ae23929c8eb954a4
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.40.0"
|
||||
version: "0.39.2"
|
||||
stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -2449,10 +2436,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: tray_manager
|
||||
sha256: c2da0f0f1ddb455e721cf68d05d1281fec75cf5df0a1d3cb67b6ca0bdfd5709d
|
||||
sha256: "80be6c508159a6f3c57983de795209ac13453e9832fd574143b06dceee188ed2"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.4.0"
|
||||
version: "0.3.2"
|
||||
type_plus:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
@ -102,7 +102,7 @@ dependencies:
|
||||
ref: dart-3-support
|
||||
url: https://github.com/KRTirtho/scrobblenaut.git
|
||||
scroll_to_index: ^3.0.1
|
||||
shadcn_flutter: ^0.0.32
|
||||
shadcn_flutter: ^0.0.26
|
||||
shared_preferences: ^2.2.3
|
||||
shelf: ^1.4.1
|
||||
shelf_router: ^1.1.4
|
||||
@ -120,7 +120,7 @@ dependencies:
|
||||
test: ^1.25.7
|
||||
timezone: ^0.10.0
|
||||
titlebar_buttons: ^1.0.0
|
||||
tray_manager: ^0.4.0
|
||||
tray_manager: ^0.3.0
|
||||
url_launcher: ^6.2.6
|
||||
uuid: ^4.4.0
|
||||
version: ^3.0.2
|
||||
|
||||