mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-12-08 16:27:31 +00:00
Compare commits
No commits in common. "69d35aa2d9436cd42dc572744f58bc15912b0a8e" and "a9ae5a5b8ae1f367196a25aad7c505f3faf75a8b" have entirely different histories.
69d35aa2d9
...
a9ae5a5b8a
27
.metadata
27
.metadata
@ -4,8 +4,8 @@
|
||||
# This file should be version controlled and should not be manually edited.
|
||||
|
||||
version:
|
||||
revision: "ea121f8859e4b13e47a8f845e4586164519588bc"
|
||||
channel: "[user-branch]"
|
||||
revision: "300451adae589accbece3490f4396f10bdf15e6e"
|
||||
channel: "stable"
|
||||
|
||||
project_type: app
|
||||
|
||||
@ -13,26 +13,11 @@ project_type: app
|
||||
migration:
|
||||
platforms:
|
||||
- platform: root
|
||||
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
|
||||
create_revision: 300451adae589accbece3490f4396f10bdf15e6e
|
||||
base_revision: 300451adae589accbece3490f4396f10bdf15e6e
|
||||
- platform: windows
|
||||
create_revision: ea121f8859e4b13e47a8f845e4586164519588bc
|
||||
base_revision: ea121f8859e4b13e47a8f845e4586164519588bc
|
||||
create_revision: 300451adae589accbece3490f4396f10bdf15e6e
|
||||
base_revision: 300451adae589accbece3490f4396f10bdf15e6e
|
||||
|
||||
# User provided section
|
||||
|
||||
|
||||
@ -1,44 +0,0 @@
|
||||
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 = "../.."
|
||||
}
|
||||
@ -1,21 +0,0 @@
|
||||
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)
|
||||
}
|
||||
@ -1,25 +0,0 @@
|
||||
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")
|
||||
@ -1,12 +0,0 @@
|
||||
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,27 +150,35 @@ class Assets {
|
||||
AssetGenImage('assets/placeholder.png');
|
||||
static const AssetGenImage spotubeHeroBanner =
|
||||
AssetGenImage('assets/spotube-hero-banner.png');
|
||||
static const AssetGenImage spotubeIconRounded =
|
||||
AssetGenImage('assets/spotube-icon-rounded.png');
|
||||
static const AssetGenImage spotubeIcon =
|
||||
AssetGenImage('assets/spotube-icon.png');
|
||||
static const AssetGenImage spotubeLogoForeground =
|
||||
AssetGenImage('assets/spotube-logo-foreground.jpg');
|
||||
static const AssetGenImage spotubeLogoMacos =
|
||||
AssetGenImage('assets/spotube-logo-macos.png');
|
||||
static const AssetGenImage spotubeLogoNotWallpaper =
|
||||
AssetGenImage('assets/spotube-logo-notWallpaper.png');
|
||||
static const AssetGenImage spotubeLogoRounded =
|
||||
AssetGenImage('assets/spotube-logo-rounded.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 spotubeLogoAndroid12 =
|
||||
AssetGenImage('assets/spotube-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 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 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 =
|
||||
@ -188,17 +196,22 @@ class Assets {
|
||||
likedTracks,
|
||||
placeholder,
|
||||
spotubeHeroBanner,
|
||||
spotubeIconRounded,
|
||||
spotubeIcon,
|
||||
spotubeLogoForeground,
|
||||
spotubeLogoMacos,
|
||||
spotubeLogoNotWallpaper,
|
||||
spotubeLogoRounded,
|
||||
spotubeLogoBmp,
|
||||
spotubeLogoIco,
|
||||
spotubeLogoPng,
|
||||
spotubeLogoSvg,
|
||||
spotubeLogoAndroid12,
|
||||
spotubeNightlyNotWallpaper,
|
||||
spotubeNightlyRounded,
|
||||
spotubeNightlyPng,
|
||||
spotubeNightlySvg,
|
||||
spotubeNightlyLogoForeground,
|
||||
spotubeNightlyLogoPng,
|
||||
spotubeNightlyLogoSvg,
|
||||
spotubeNightlyLogoAndroid12,
|
||||
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,8 +99,13 @@ mixin _$WebSocketLoadEventData {
|
||||
required TResult orElse(),
|
||||
}) =>
|
||||
throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this WebSocketLoadEventData to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$WebSocketLoadEventDataCopyWith<WebSocketLoadEventData> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -127,6 +132,8 @@ 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({
|
||||
@ -171,6 +178,8 @@ 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({
|
||||
@ -247,12 +256,14 @@ class _$WebSocketLoadEventDataPlaylistImpl
|
||||
other.initialIndex == initialIndex));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,
|
||||
const DeepCollectionEquality().hash(_tracks), collection, initialIndex);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$WebSocketLoadEventDataPlaylistImplCopyWith<
|
||||
@ -372,8 +383,11 @@ 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(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$WebSocketLoadEventDataPlaylistImplCopyWith<
|
||||
_$WebSocketLoadEventDataPlaylistImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
@ -404,6 +418,8 @@ 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({
|
||||
@ -479,12 +495,14 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum {
|
||||
other.initialIndex == initialIndex));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,
|
||||
const DeepCollectionEquality().hash(_tracks), collection, initialIndex);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$WebSocketLoadEventDataAlbumImplCopyWith<_$WebSocketLoadEventDataAlbumImpl>
|
||||
@ -603,8 +621,11 @@ 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(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$WebSocketLoadEventDataAlbumImplCopyWith<_$WebSocketLoadEventDataAlbumImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
@ -5964,8 +5964,7 @@ final class $$PlaylistTableTableReferences extends BaseReferences<_$AppDatabase,
|
||||
db.audioPlayerStateTable.createAlias($_aliasNameGenerator(
|
||||
db.playlistTable.audioPlayerStateId, db.audioPlayerStateTable.id));
|
||||
|
||||
$$AudioPlayerStateTableTableProcessedTableManager? get audioPlayerStateId {
|
||||
if ($_item.audioPlayerStateId == null) return null;
|
||||
$$AudioPlayerStateTableTableProcessedTableManager get audioPlayerStateId {
|
||||
final manager = $$AudioPlayerStateTableTableTableManager(
|
||||
$_db, $_db.audioPlayerStateTable)
|
||||
.filter((f) => f.id($_item.audioPlayerStateId!));
|
||||
@ -6291,8 +6290,7 @@ final class $$PlaylistMediaTableTableReferences extends BaseReferences<
|
||||
db.playlistTable.createAlias($_aliasNameGenerator(
|
||||
db.playlistMediaTable.playlistId, db.playlistTable.id));
|
||||
|
||||
$$PlaylistTableTableProcessedTableManager? get playlistId {
|
||||
if ($_item.playlistId == null) return null;
|
||||
$$PlaylistTableTableProcessedTableManager get playlistId {
|
||||
final manager = $$PlaylistTableTableTableManager($_db, $_db.playlistTable)
|
||||
.filter((f) => f.id($_item.playlistId!));
|
||||
final item = $_typedResult.readTableOrNull(_playlistIdTable($_db));
|
||||
|
||||
@ -29,8 +29,12 @@ 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;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of SpotifySectionPlaylist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$SpotifySectionPlaylistCopyWith<SpotifySectionPlaylist> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -61,6 +65,8 @@ 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({
|
||||
@ -128,6 +134,8 @@ 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({
|
||||
@ -221,12 +229,14 @@ class _$SpotifySectionPlaylistImpl extends _SpotifySectionPlaylist {
|
||||
(identical(other.uri, uri) || other.uri == uri));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, description, format,
|
||||
const DeepCollectionEquality().hash(_images), name, owner, uri);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of SpotifySectionPlaylist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SpotifySectionPlaylistImplCopyWith<_$SpotifySectionPlaylistImpl>
|
||||
@ -266,8 +276,11 @@ 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(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$SpotifySectionPlaylistImplCopyWith<_$SpotifySectionPlaylistImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -283,8 +296,12 @@ mixin _$SpotifySectionArtist {
|
||||
List<SpotifySectionItemImage> get images =>
|
||||
throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this SpotifySectionArtist to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of SpotifySectionArtist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$SpotifySectionArtistCopyWith<SpotifySectionArtist> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -309,6 +326,8 @@ 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({
|
||||
@ -352,6 +371,8 @@ 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({
|
||||
@ -416,12 +437,14 @@ class _$SpotifySectionArtistImpl extends _SpotifySectionArtist {
|
||||
const DeepCollectionEquality().equals(other._images, _images));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType, name, uri, const DeepCollectionEquality().hash(_images));
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of SpotifySectionArtist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SpotifySectionArtistImplCopyWith<_$SpotifySectionArtistImpl>
|
||||
@ -454,8 +477,11 @@ 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(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$SpotifySectionArtistImplCopyWith<_$SpotifySectionArtistImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -473,8 +499,12 @@ 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;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of SpotifySectionAlbum
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$SpotifySectionAlbumCopyWith<SpotifySectionAlbum> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -502,6 +532,8 @@ 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({
|
||||
@ -554,6 +586,8 @@ 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({
|
||||
@ -635,7 +669,7 @@ class _$SpotifySectionAlbumImpl extends _SpotifySectionAlbum {
|
||||
(identical(other.uri, uri) || other.uri == uri));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType,
|
||||
@ -644,7 +678,9 @@ class _$SpotifySectionAlbumImpl extends _SpotifySectionAlbum {
|
||||
name,
|
||||
uri);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of SpotifySectionAlbum
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SpotifySectionAlbumImplCopyWith<_$SpotifySectionAlbumImpl> get copyWith =>
|
||||
@ -678,8 +714,11 @@ 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(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$SpotifySectionAlbumImplCopyWith<_$SpotifySectionAlbumImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -694,8 +733,12 @@ 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;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of SpotifySectionAlbumArtist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$SpotifySectionAlbumArtistCopyWith<SpotifySectionAlbumArtist> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -720,6 +763,8 @@ 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({
|
||||
@ -761,6 +806,8 @@ 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({
|
||||
@ -808,11 +855,13 @@ class _$SpotifySectionAlbumArtistImpl extends _SpotifySectionAlbumArtist {
|
||||
(identical(other.uri, uri) || other.uri == uri));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, name, uri);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of SpotifySectionAlbumArtist
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SpotifySectionAlbumArtistImplCopyWith<_$SpotifySectionAlbumArtistImpl>
|
||||
@ -840,8 +889,11 @@ 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(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$SpotifySectionAlbumArtistImplCopyWith<_$SpotifySectionAlbumArtistImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -857,8 +909,12 @@ 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;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of SpotifySectionItemImage
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$SpotifySectionItemImageCopyWith<SpotifySectionItemImage> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -883,6 +939,8 @@ 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({
|
||||
@ -929,6 +987,8 @@ 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({
|
||||
@ -985,11 +1045,13 @@ class _$SpotifySectionItemImageImpl extends _SpotifySectionItemImage {
|
||||
(identical(other.width, width) || other.width == width));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, height, url, width);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of SpotifySectionItemImage
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SpotifySectionItemImageImplCopyWith<_$SpotifySectionItemImageImpl>
|
||||
@ -1020,8 +1082,11 @@ 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(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$SpotifySectionItemImageImplCopyWith<_$SpotifySectionItemImageImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -1038,8 +1103,12 @@ 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;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of SpotifyHomeFeedSectionItem
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$SpotifyHomeFeedSectionItemCopyWith<SpotifyHomeFeedSectionItem>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -1073,6 +1142,8 @@ 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({
|
||||
@ -1101,6 +1172,8 @@ 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 {
|
||||
@ -1113,6 +1186,8 @@ 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 {
|
||||
@ -1125,6 +1200,8 @@ 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 {
|
||||
@ -1171,6 +1248,8 @@ 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({
|
||||
@ -1237,12 +1316,14 @@ class _$SpotifyHomeFeedSectionItemImpl implements _SpotifyHomeFeedSectionItem {
|
||||
(identical(other.album, album) || other.album == album));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode =>
|
||||
Object.hash(runtimeType, typename, playlist, artist, album);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of SpotifyHomeFeedSectionItem
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SpotifyHomeFeedSectionItemImplCopyWith<_$SpotifyHomeFeedSectionItemImpl>
|
||||
@ -1276,8 +1357,11 @@ 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(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$SpotifyHomeFeedSectionItemImplCopyWith<_$SpotifyHomeFeedSectionItemImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -1295,8 +1379,12 @@ mixin _$SpotifyHomeFeedSection {
|
||||
List<SpotifyHomeFeedSectionItem> get items =>
|
||||
throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this SpotifyHomeFeedSection to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of SpotifyHomeFeedSection
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$SpotifyHomeFeedSectionCopyWith<SpotifyHomeFeedSection> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -1325,6 +1413,8 @@ 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({
|
||||
@ -1380,6 +1470,8 @@ 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({
|
||||
@ -1453,12 +1545,14 @@ class _$SpotifyHomeFeedSectionImpl implements _SpotifyHomeFeedSection {
|
||||
const DeepCollectionEquality().equals(other._items, _items));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, typename, title, uri,
|
||||
const DeepCollectionEquality().hash(_items));
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of SpotifyHomeFeedSection
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SpotifyHomeFeedSectionImplCopyWith<_$SpotifyHomeFeedSectionImpl>
|
||||
@ -1492,8 +1586,11 @@ 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(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$SpotifyHomeFeedSectionImplCopyWith<_$SpotifyHomeFeedSectionImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -1508,8 +1605,12 @@ mixin _$SpotifyHomeFeed {
|
||||
List<SpotifyHomeFeedSection> get sections =>
|
||||
throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this SpotifyHomeFeed to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of SpotifyHomeFeed
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$SpotifyHomeFeedCopyWith<SpotifyHomeFeed> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -1533,6 +1634,8 @@ 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({
|
||||
@ -1571,6 +1674,8 @@ 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({
|
||||
@ -1626,12 +1731,14 @@ class _$SpotifyHomeFeedImpl implements _SpotifyHomeFeed {
|
||||
const DeepCollectionEquality().equals(other._sections, _sections));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType, greeting, const DeepCollectionEquality().hash(_sections));
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of SpotifyHomeFeed
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SpotifyHomeFeedImplCopyWith<_$SpotifyHomeFeedImpl> get copyWith =>
|
||||
@ -1659,8 +1766,11 @@ 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(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$SpotifyHomeFeedImplCopyWith<_$SpotifyHomeFeedImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
@ -24,7 +24,9 @@ mixin _$GeneratePlaylistProviderInput {
|
||||
RecommendationSeeds? get min => throw _privateConstructorUsedError;
|
||||
RecommendationSeeds? get target => throw _privateConstructorUsedError;
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of GeneratePlaylistProviderInput
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$GeneratePlaylistProviderInputCopyWith<GeneratePlaylistProviderInput>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -62,6 +64,8 @@ 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({
|
||||
@ -105,6 +109,8 @@ 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 {
|
||||
@ -117,6 +123,8 @@ 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 {
|
||||
@ -129,6 +137,8 @@ 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 {
|
||||
@ -178,6 +188,8 @@ 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({
|
||||
@ -283,7 +295,9 @@ class _$GeneratePlaylistProviderInputImpl
|
||||
min,
|
||||
target);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of GeneratePlaylistProviderInput
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$GeneratePlaylistProviderInputImplCopyWith<
|
||||
@ -317,8 +331,11 @@ 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(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$GeneratePlaylistProviderInputImplCopyWith<
|
||||
_$GeneratePlaylistProviderInputImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
@ -347,8 +364,12 @@ 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;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of RecommendationSeeds
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$RecommendationSeedsCopyWith<RecommendationSeeds> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -386,6 +407,8 @@ 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({
|
||||
@ -498,6 +521,8 @@ 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({
|
||||
@ -665,7 +690,7 @@ class _$RecommendationSeedsImpl implements _RecommendationSeeds {
|
||||
(identical(other.valence, valence) || other.valence == valence));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType,
|
||||
@ -684,7 +709,9 @@ class _$RecommendationSeedsImpl implements _RecommendationSeeds {
|
||||
timeSignature,
|
||||
valence);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of RecommendationSeeds
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$RecommendationSeedsImplCopyWith<_$RecommendationSeedsImpl> get copyWith =>
|
||||
@ -749,8 +776,11 @@ 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(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$RecommendationSeedsImplCopyWith<_$RecommendationSeedsImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@ class Sidebar extends HookConsumerWidget {
|
||||
color: Colors.black,
|
||||
borderRadius: BorderRadius.circular(50),
|
||||
),
|
||||
child: Assets.spotubeLogoNotWallpaper.image(height: 50),
|
||||
child: Assets.spotubeLogoPng.image(height: 50),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@ class GettingStartedPageGreetingSection extends HookConsumerWidget {
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Assets.spotubeLogoNotWallpaper.image(height: 200),
|
||||
Assets.spotubeLogoPng.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.spotubeLogoNotWallpaper.image(height: 45),
|
||||
title: Assets.spotubeLogoPng.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.spotubeLogoNotWallpaper.image(
|
||||
Assets.spotubeLogoPng.image(
|
||||
height: 200,
|
||||
width: 200,
|
||||
),
|
||||
|
||||
@ -30,8 +30,12 @@ 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;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of SongLink
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$SongLinkCopyWith<SongLink> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -63,6 +67,8 @@ 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({
|
||||
@ -145,6 +151,8 @@ 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({
|
||||
@ -261,12 +269,14 @@ class _$SongLinkImpl implements _SongLink {
|
||||
other.nativeAppUriDesktop == nativeAppUriDesktop));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, displayName, linkId, platform,
|
||||
show, uniqueId, country, url, nativeAppUriMobile, nativeAppUriDesktop);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of SongLink
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SongLinkImplCopyWith<_$SongLinkImpl> get copyWith =>
|
||||
@ -313,8 +323,11 @@ 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(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$SongLinkImplCopyWith<_$SongLinkImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
@ -1,19 +1,11 @@
|
||||
# Project-level configuration.
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
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.
|
||||
@ -26,7 +18,7 @@ if(FLUTTER_TARGET_PLATFORM_SYSROOT)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
endif()
|
||||
|
||||
# Define build configuration options.
|
||||
# Configure build options.
|
||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||
set(CMAKE_BUILD_TYPE "Debug" CACHE
|
||||
STRING "Flutter build mode" FORCE)
|
||||
@ -35,31 +27,35 @@ 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()
|
||||
|
||||
# Flutter library and tool build rules.
|
||||
set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
|
||||
|
||||
# Flutter library and tool build rules.
|
||||
add_subdirectory(${FLUTTER_MANAGED_DIR})
|
||||
|
||||
# System-level dependencies.
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
|
||||
|
||||
# Application build; see runner/CMakeLists.txt.
|
||||
add_subdirectory("runner")
|
||||
add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}")
|
||||
|
||||
# Run the Flutter tool portions of the build. This must not be removed.
|
||||
# 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)
|
||||
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
|
||||
@ -69,11 +65,12 @@ 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
|
||||
@ -100,17 +97,11 @@ install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}
|
||||
install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
|
||||
COMPONENT Runtime)
|
||||
|
||||
foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES})
|
||||
install(FILES "${bundled_library}"
|
||||
if(PLUGIN_BUNDLED_LIBRARIES)
|
||||
install(FILES "${PLUGIN_BUNDLED_LIBRARIES}"
|
||||
DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
|
||||
COMPONENT Runtime)
|
||||
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)
|
||||
endif()
|
||||
|
||||
# Fully re-copy the assets directory on each build to avoid having stale files
|
||||
# from a previous install.
|
||||
|
||||
72
linux/com.github.KRTirtho.Spotube.appdata.xml
Normal file
72
linux/com.github.KRTirtho.Spotube.appdata.xml
Normal file
@ -0,0 +1,72 @@
|
||||
<?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,4 +1,3 @@
|
||||
# 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")
|
||||
|
||||
@ -17,6 +17,13 @@ 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)));
|
||||
|
||||
@ -51,7 +58,8 @@ 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));
|
||||
@ -63,40 +71,24 @@ 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 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);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Implements GObject::dispose.
|
||||
@ -108,23 +100,31 @@ 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)->startup = my_application_startup;
|
||||
G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown;
|
||||
G_APPLICATION_CLASS(klass)->local_command_line =
|
||||
my_application_local_command_line;
|
||||
G_OBJECT_CLASS(klass)->dispose = my_application_dispose;
|
||||
}
|
||||
|
||||
static void my_application_init(MyApplication* self) {}
|
||||
|
||||
MyApplication* my_application_new() {
|
||||
// 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);
|
||||
|
||||
return MY_APPLICATION(g_object_new(my_application_get_type(),
|
||||
"application-id", APPLICATION_ID,
|
||||
"flags", G_APPLICATION_NON_UNIQUE,
|
||||
nullptr));
|
||||
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;
|
||||
|
||||
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));
|
||||
}
|
||||
16
linux/packaging/appimage/make_config.yaml
Normal file
16
linux/packaging/appimage/make_config.yaml
Normal file
@ -0,0 +1,16 @@
|
||||
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
|
||||
47
linux/packaging/deb/make_config.yaml
Normal file
47
linux/packaging/deb/make_config.yaml
Normal file
@ -0,0 +1,47 @@
|
||||
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
|
||||
38
linux/packaging/rpm/make_config.yaml
Normal file
38
linux/packaging/rpm/make_config.yaml
Normal file
@ -0,0 +1,38 @@
|
||||
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
|
||||
@ -1,26 +0,0 @@
|
||||
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}")
|
||||
9
linux/spotube.desktop
Normal file
9
linux/spotube.desktop
Normal file
@ -0,0 +1,9 @@
|
||||
[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;
|
||||
@ -1,12 +0,0 @@
|
||||
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
57
pubspec.lock
@ -5,18 +5,23 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: _fe_analyzer_shared
|
||||
sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7"
|
||||
sha256: "16e298750b6d0af7ce8a3ba7c18c69c3785d11b15ec83f6dcd0ad2a0009b3cab"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "67.0.0"
|
||||
version: "76.0.0"
|
||||
_macros:
|
||||
dependency: transitive
|
||||
description: dart
|
||||
source: sdk
|
||||
version: "0.3.3"
|
||||
analyzer:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: analyzer
|
||||
sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d"
|
||||
sha256: "1f14db053a8c23e260789e9b0980fa27f2680dd640932cae5e1137cce0e46e1e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.4.1"
|
||||
version: "6.11.0"
|
||||
analyzer_plugin:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -478,10 +483,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dart_style
|
||||
sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9"
|
||||
sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.6"
|
||||
version: "2.3.7"
|
||||
dartx:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -577,18 +582,18 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: drift
|
||||
sha256: df027d168a2985a2e9da900adeba2ab0136f0d84436592cf3cd5135f82c8579c
|
||||
sha256: c2d073d35ad441730812f4ea05b5dd031fb81c5f9786a4f5fb77ecd6307b6f74
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.21.0"
|
||||
version: "2.22.1"
|
||||
drift_dev:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: drift_dev
|
||||
sha256: "623649abe932fc17bd32e578e7e05f7ac5e7dd0b33e6c8669a0634105d1389bf"
|
||||
sha256: f4ab5d6976b1e31551ceb82ff597a505bda7818ff4f7be08a1da9d55eb6e730c
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.21.2"
|
||||
version: "2.22.1"
|
||||
duration:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -804,10 +809,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_form_builder
|
||||
sha256: "375da52998c72f80dec9187bd93afa7ab202b89d5d066699368ff96d39fd4876"
|
||||
sha256: "39aee5a2548df0b3979a83eea38468116a888341fbca8a92c4be18a486a7bb57"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "9.7.0"
|
||||
version: "9.6.0"
|
||||
flutter_gen_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1044,10 +1049,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: form_builder_validators
|
||||
sha256: cd617fa346250293ff3e2709961d0faf7b80e6e4f0ff7b500126b28d7422dd67
|
||||
sha256: "517fb884183fff7a0ef3db7d375981011da26ee452f20fb3d2e788ad527ad01d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "11.1.2"
|
||||
version: "11.1.1"
|
||||
form_validator:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -1060,10 +1065,10 @@ packages:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: freezed
|
||||
sha256: a434911f643466d78462625df76fd9eb13e57348ff43fe1f77bbe909522c67a1
|
||||
sha256: "44c19278dd9d89292cf46e97dc0c1e52ce03275f40a97c5a348e802a924bf40e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.5.2"
|
||||
version: "2.5.7"
|
||||
freezed_annotation:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -1374,10 +1379,10 @@ packages:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: json_serializable
|
||||
sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b
|
||||
sha256: c2fcb3920cf2b6ae6845954186420fca40bc0a8abcc84903b7801f17d7050d7c
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.8.0"
|
||||
version: "6.9.0"
|
||||
leak_tracker:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1442,6 +1447,14 @@ 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:
|
||||
@ -2276,10 +2289,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: sqlparser
|
||||
sha256: d77749237609784e337ec36c979d41f6f38a7b279df98622ae23929c8eb954a4
|
||||
sha256: "4cad4b2c5f63dc9ea1a8dcffb58cf762322bea5dd8836870164a65e913bdae41"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.39.2"
|
||||
version: "0.40.0"
|
||||
stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -2436,10 +2449,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: tray_manager
|
||||
sha256: "80be6c508159a6f3c57983de795209ac13453e9832fd574143b06dceee188ed2"
|
||||
sha256: c2da0f0f1ddb455e721cf68d05d1281fec75cf5df0a1d3cb67b6ca0bdfd5709d
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.3.2"
|
||||
version: "0.4.0"
|
||||
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.26
|
||||
shadcn_flutter: ^0.0.32
|
||||
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.3.0
|
||||
tray_manager: ^0.4.0
|
||||
url_launcher: ^6.2.6
|
||||
uuid: ^4.4.0
|
||||
version: ^3.0.2
|
||||
@ -212,4 +212,4 @@ flutter_native_splash:
|
||||
image: assets/spotube-logo_android12.png
|
||||
branding: assets/branding.png
|
||||
color: "#000000"
|
||||
icon_background_color: "#000000"
|
||||
icon_background_color: "#000000"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user