diff --git a/.fvm/fvm_config.json b/.fvm/fvm_config.json index 1bcebbd2..83ef36f5 100644 --- a/.fvm/fvm_config.json +++ b/.fvm/fvm_config.json @@ -1,3 +1,3 @@ { - "flutterSdkVersion": "3.32.5" + "flutterSdkVersion": "3.32.7" } \ No newline at end of file diff --git a/.fvmrc b/.fvmrc index 4b100f8e..cb8a5fa5 100644 --- a/.fvmrc +++ b/.fvmrc @@ -1,4 +1,4 @@ { - "flutter": "3.32.5", + "flutter": "3.32.7", "flavors": {} } \ No newline at end of file diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml index ad162669..891d6a5a 100644 --- a/.github/workflows/pr-lint.yml +++ b/.github/workflows/pr-lint.yml @@ -4,7 +4,7 @@ on: pull_request: env: - FLUTTER_VERSION: 3.32.5 + FLUTTER_VERSION: 3.32.7 jobs: lint: diff --git a/.github/workflows/spotube-release-binary.yml b/.github/workflows/spotube-release-binary.yml index bebd8505..4ecf642e 100644 --- a/.github/workflows/spotube-release-binary.yml +++ b/.github/workflows/spotube-release-binary.yml @@ -20,7 +20,7 @@ on: description: Dry run without uploading to release env: - FLUTTER_VERSION: 3.32.5 + FLUTTER_VERSION: 3.32.7 FLUTTER_CHANNEL: master permissions: diff --git a/.vscode/settings.json b/.vscode/settings.json index a0829869..ba3f905e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -30,5 +30,5 @@ "README.md": "LICENSE,CODE_OF_CONDUCT.md,CONTRIBUTING.md,SECURITY.md,CONTRIBUTION.md,CHANGELOG.md,PRIVACY_POLICY.md", "*.dart": "${capture}.g.dart,${capture}.freezed.dart" }, - "dart.flutterSdkPath": ".fvm/versions/3.32.5" + "dart.flutterSdkPath": ".fvm/versions/3.32.7" } \ No newline at end of file diff --git a/drift_schemas/app_db/drift_schema_v7.json b/drift_schemas/app_db/drift_schema_v7.json index 97d1fa7e..d6644857 100644 --- a/drift_schemas/app_db/drift_schema_v7.json +++ b/drift_schemas/app_db/drift_schema_v7.json @@ -1 +1 @@ -{"_meta":{"description":"This file contains a serialized version of schema entities for drift.","version":"1.2.0"},"options":{"store_date_time_values_as_text":false},"entities":[{"id":0,"references":[],"type":"table","data":{"name":"authentication_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"cookie","getter_name":"cookie","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"EncryptedTextConverter()","dart_type_name":"DecryptedText"}},{"name":"access_token","getter_name":"accessToken","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"EncryptedTextConverter()","dart_type_name":"DecryptedText"}},{"name":"expiration","getter_name":"expiration","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":1,"references":[],"type":"table","data":{"name":"blacklist_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"name","getter_name":"name","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"element_type","getter_name":"elementType","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(BlacklistedType.values)","dart_type_name":"BlacklistedType"}},{"name":"element_id","getter_name":"elementId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":2,"references":[],"type":"table","data":{"name":"preferences_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"audio_quality","getter_name":"audioQuality","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(SourceQualities.high.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(SourceQualities.values)","dart_type_name":"SourceQualities"}},{"name":"album_color_sync","getter_name":"albumColorSync","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"album_color_sync\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"album_color_sync\" IN (0, 1))"},"default_dart":"const Constant(true)","default_client_dart":null,"dsl_features":[]},{"name":"amoled_dark_theme","getter_name":"amoledDarkTheme","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"amoled_dark_theme\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"amoled_dark_theme\" IN (0, 1))"},"default_dart":"const Constant(false)","default_client_dart":null,"dsl_features":[]},{"name":"check_update","getter_name":"checkUpdate","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"check_update\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"check_update\" IN (0, 1))"},"default_dart":"const Constant(true)","default_client_dart":null,"dsl_features":[]},{"name":"normalize_audio","getter_name":"normalizeAudio","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"normalize_audio\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"normalize_audio\" IN (0, 1))"},"default_dart":"const Constant(false)","default_client_dart":null,"dsl_features":[]},{"name":"show_system_tray_icon","getter_name":"showSystemTrayIcon","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"show_system_tray_icon\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"show_system_tray_icon\" IN (0, 1))"},"default_dart":"const Constant(false)","default_client_dart":null,"dsl_features":[]},{"name":"system_title_bar","getter_name":"systemTitleBar","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"system_title_bar\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"system_title_bar\" IN (0, 1))"},"default_dart":"const Constant(false)","default_client_dart":null,"dsl_features":[]},{"name":"skip_non_music","getter_name":"skipNonMusic","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"skip_non_music\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"skip_non_music\" IN (0, 1))"},"default_dart":"const Constant(false)","default_client_dart":null,"dsl_features":[]},{"name":"close_behavior","getter_name":"closeBehavior","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(CloseBehavior.close.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(CloseBehavior.values)","dart_type_name":"CloseBehavior"}},{"name":"accent_color_scheme","getter_name":"accentColorScheme","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const Constant(\"Orange:0xFFf97315\")","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const SpotubeColorConverter()","dart_type_name":"SpotubeColor"}},{"name":"layout_mode","getter_name":"layoutMode","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(LayoutMode.adaptive.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(LayoutMode.values)","dart_type_name":"LayoutMode"}},{"name":"locale","getter_name":"locale","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const Constant('{\"languageCode\":\"system\",\"countryCode\":\"system\"}')","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const LocaleConverter()","dart_type_name":"Locale"}},{"name":"market","getter_name":"market","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(Market.US.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(Market.values)","dart_type_name":"Market"}},{"name":"search_mode","getter_name":"searchMode","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(SearchMode.youtube.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(SearchMode.values)","dart_type_name":"SearchMode"}},{"name":"download_location","getter_name":"downloadLocation","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const Constant(\"\")","default_client_dart":null,"dsl_features":[]},{"name":"local_library_location","getter_name":"localLibraryLocation","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const Constant(\"\")","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const StringListConverter()","dart_type_name":"List"}},{"name":"piped_instance","getter_name":"pipedInstance","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const Constant(\"https://pipedapi.kavin.rocks\")","default_client_dart":null,"dsl_features":[]},{"name":"invidious_instance","getter_name":"invidiousInstance","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const Constant(\"https://inv.nadeko.net\")","default_client_dart":null,"dsl_features":[]},{"name":"theme_mode","getter_name":"themeMode","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(ThemeMode.system.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(ThemeMode.values)","dart_type_name":"ThemeMode"}},{"name":"audio_source","getter_name":"audioSource","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(AudioSource.youtube.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(AudioSource.values)","dart_type_name":"AudioSource"}},{"name":"youtube_client_engine","getter_name":"youtubeClientEngine","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(YoutubeClientEngine.youtubeExplode.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(YoutubeClientEngine.values)","dart_type_name":"YoutubeClientEngine"}},{"name":"stream_music_codec","getter_name":"streamMusicCodec","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(SourceCodecs.weba.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(SourceCodecs.values)","dart_type_name":"SourceCodecs"}},{"name":"download_music_codec","getter_name":"downloadMusicCodec","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(SourceCodecs.m4a.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(SourceCodecs.values)","dart_type_name":"SourceCodecs"}},{"name":"discord_presence","getter_name":"discordPresence","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"discord_presence\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"discord_presence\" IN (0, 1))"},"default_dart":"const Constant(true)","default_client_dart":null,"dsl_features":[]},{"name":"endless_playback","getter_name":"endlessPlayback","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"endless_playback\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"endless_playback\" IN (0, 1))"},"default_dart":"const Constant(true)","default_client_dart":null,"dsl_features":[]},{"name":"enable_connect","getter_name":"enableConnect","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"enable_connect\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"enable_connect\" IN (0, 1))"},"default_dart":"const Constant(false)","default_client_dart":null,"dsl_features":[]},{"name":"connect_port","getter_name":"connectPort","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":"const Constant(-1)","default_client_dart":null,"dsl_features":[]},{"name":"cache_music","getter_name":"cacheMusic","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"cache_music\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"cache_music\" IN (0, 1))"},"default_dart":"const Constant(true)","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":3,"references":[],"type":"table","data":{"name":"scrobbler_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"currentDateAndTime","default_client_dart":null,"dsl_features":[]},{"name":"username","getter_name":"username","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"password_hash","getter_name":"passwordHash","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"EncryptedTextConverter()","dart_type_name":"DecryptedText"}}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":4,"references":[],"type":"table","data":{"name":"skip_segment_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"start","getter_name":"start","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"end","getter_name":"end","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"track_id","getter_name":"trackId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"currentDateAndTime","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":5,"references":[],"type":"table","data":{"name":"source_match_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"track_id","getter_name":"trackId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"source_id","getter_name":"sourceId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"source_type","getter_name":"sourceType","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(SourceType.youtube.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(SourceType.values)","dart_type_name":"SourceType"}},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"currentDateAndTime","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":6,"references":[],"type":"table","data":{"name":"audio_player_state_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"playing","getter_name":"playing","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"playing\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"playing\" IN (0, 1))"},"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"loop_mode","getter_name":"loopMode","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(PlaylistMode.values)","dart_type_name":"PlaylistMode"}},{"name":"shuffled","getter_name":"shuffled","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"shuffled\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"shuffled\" IN (0, 1))"},"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"collections","getter_name":"collections","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const StringListConverter()","dart_type_name":"List"}},{"name":"tracks","getter_name":"tracks","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const Constant(\"[]\")","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const SpotubeTrackObjectListConverter()","dart_type_name":"List"}},{"name":"current_index","getter_name":"currentIndex","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":"const Constant(0)","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":7,"references":[],"type":"table","data":{"name":"history_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"currentDateAndTime","default_client_dart":null,"dsl_features":[]},{"name":"type","getter_name":"type","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(HistoryEntryType.values)","dart_type_name":"HistoryEntryType"}},{"name":"item_id","getter_name":"itemId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"data","getter_name":"data","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const MapTypeConverter()","dart_type_name":"Map"}}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":8,"references":[],"type":"table","data":{"name":"lyrics_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"track_id","getter_name":"trackId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"data","getter_name":"data","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"SubtitleTypeConverter()","dart_type_name":"SubtitleSimple"}}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":9,"references":[],"type":"table","data":{"name":"metadata_plugins_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"name","getter_name":"name","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[{"allowed-lengths":{"min":1,"max":50}}]},{"name":"description","getter_name":"description","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"version","getter_name":"version","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"author","getter_name":"author","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"entry_point","getter_name":"entryPoint","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"apis","getter_name":"apis","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const StringListConverter()","dart_type_name":"List"}},{"name":"abilities","getter_name":"abilities","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const StringListConverter()","dart_type_name":"List"}},{"name":"selected","getter_name":"selected","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"selected\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"selected\" IN (0, 1))"},"default_dart":"const Constant(false)","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":10,"references":[1],"type":"index","data":{"on":1,"name":"unique_blacklist","sql":null,"unique":true,"columns":["element_type","element_id"]}},{"id":11,"references":[5],"type":"index","data":{"on":5,"name":"uniq_track_match","sql":null,"unique":true,"columns":["track_id","source_id","source_type"]}}]} \ No newline at end of file +{"_meta":{"description":"This file contains a serialized version of schema entities for drift.","version":"1.2.0"},"options":{"store_date_time_values_as_text":false},"entities":[{"id":0,"references":[],"type":"table","data":{"name":"authentication_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"cookie","getter_name":"cookie","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"EncryptedTextConverter()","dart_type_name":"DecryptedText"}},{"name":"access_token","getter_name":"accessToken","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"EncryptedTextConverter()","dart_type_name":"DecryptedText"}},{"name":"expiration","getter_name":"expiration","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":1,"references":[],"type":"table","data":{"name":"blacklist_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"name","getter_name":"name","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"element_type","getter_name":"elementType","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(BlacklistedType.values)","dart_type_name":"BlacklistedType"}},{"name":"element_id","getter_name":"elementId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":2,"references":[],"type":"table","data":{"name":"preferences_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"audio_quality","getter_name":"audioQuality","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(SourceQualities.high.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(SourceQualities.values)","dart_type_name":"SourceQualities"}},{"name":"album_color_sync","getter_name":"albumColorSync","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"album_color_sync\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"album_color_sync\" IN (0, 1))"},"default_dart":"const Constant(true)","default_client_dart":null,"dsl_features":[]},{"name":"amoled_dark_theme","getter_name":"amoledDarkTheme","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"amoled_dark_theme\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"amoled_dark_theme\" IN (0, 1))"},"default_dart":"const Constant(false)","default_client_dart":null,"dsl_features":[]},{"name":"check_update","getter_name":"checkUpdate","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"check_update\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"check_update\" IN (0, 1))"},"default_dart":"const Constant(true)","default_client_dart":null,"dsl_features":[]},{"name":"normalize_audio","getter_name":"normalizeAudio","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"normalize_audio\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"normalize_audio\" IN (0, 1))"},"default_dart":"const Constant(false)","default_client_dart":null,"dsl_features":[]},{"name":"show_system_tray_icon","getter_name":"showSystemTrayIcon","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"show_system_tray_icon\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"show_system_tray_icon\" IN (0, 1))"},"default_dart":"const Constant(false)","default_client_dart":null,"dsl_features":[]},{"name":"system_title_bar","getter_name":"systemTitleBar","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"system_title_bar\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"system_title_bar\" IN (0, 1))"},"default_dart":"const Constant(false)","default_client_dart":null,"dsl_features":[]},{"name":"skip_non_music","getter_name":"skipNonMusic","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"skip_non_music\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"skip_non_music\" IN (0, 1))"},"default_dart":"const Constant(false)","default_client_dart":null,"dsl_features":[]},{"name":"close_behavior","getter_name":"closeBehavior","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(CloseBehavior.close.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(CloseBehavior.values)","dart_type_name":"CloseBehavior"}},{"name":"accent_color_scheme","getter_name":"accentColorScheme","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const Constant(\"Orange:0xFFf97315\")","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const SpotubeColorConverter()","dart_type_name":"SpotubeColor"}},{"name":"layout_mode","getter_name":"layoutMode","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(LayoutMode.adaptive.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(LayoutMode.values)","dart_type_name":"LayoutMode"}},{"name":"locale","getter_name":"locale","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const Constant('{\"languageCode\":\"system\",\"countryCode\":\"system\"}')","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const LocaleConverter()","dart_type_name":"Locale"}},{"name":"market","getter_name":"market","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(Market.US.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(Market.values)","dart_type_name":"Market"}},{"name":"search_mode","getter_name":"searchMode","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(SearchMode.youtube.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(SearchMode.values)","dart_type_name":"SearchMode"}},{"name":"download_location","getter_name":"downloadLocation","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const Constant(\"\")","default_client_dart":null,"dsl_features":[]},{"name":"local_library_location","getter_name":"localLibraryLocation","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const Constant(\"\")","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const StringListConverter()","dart_type_name":"List"}},{"name":"piped_instance","getter_name":"pipedInstance","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const Constant(\"https://pipedapi.kavin.rocks\")","default_client_dart":null,"dsl_features":[]},{"name":"invidious_instance","getter_name":"invidiousInstance","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const Constant(\"https://inv.nadeko.net\")","default_client_dart":null,"dsl_features":[]},{"name":"theme_mode","getter_name":"themeMode","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(ThemeMode.system.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(ThemeMode.values)","dart_type_name":"ThemeMode"}},{"name":"audio_source","getter_name":"audioSource","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(AudioSource.youtube.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(AudioSource.values)","dart_type_name":"AudioSource"}},{"name":"youtube_client_engine","getter_name":"youtubeClientEngine","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(YoutubeClientEngine.youtubeExplode.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(YoutubeClientEngine.values)","dart_type_name":"YoutubeClientEngine"}},{"name":"stream_music_codec","getter_name":"streamMusicCodec","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(SourceCodecs.weba.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(SourceCodecs.values)","dart_type_name":"SourceCodecs"}},{"name":"download_music_codec","getter_name":"downloadMusicCodec","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(SourceCodecs.m4a.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(SourceCodecs.values)","dart_type_name":"SourceCodecs"}},{"name":"discord_presence","getter_name":"discordPresence","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"discord_presence\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"discord_presence\" IN (0, 1))"},"default_dart":"const Constant(true)","default_client_dart":null,"dsl_features":[]},{"name":"endless_playback","getter_name":"endlessPlayback","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"endless_playback\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"endless_playback\" IN (0, 1))"},"default_dart":"const Constant(true)","default_client_dart":null,"dsl_features":[]},{"name":"enable_connect","getter_name":"enableConnect","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"enable_connect\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"enable_connect\" IN (0, 1))"},"default_dart":"const Constant(false)","default_client_dart":null,"dsl_features":[]},{"name":"connect_port","getter_name":"connectPort","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":"const Constant(-1)","default_client_dart":null,"dsl_features":[]},{"name":"cache_music","getter_name":"cacheMusic","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"cache_music\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"cache_music\" IN (0, 1))"},"default_dart":"const Constant(true)","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":3,"references":[],"type":"table","data":{"name":"scrobbler_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"currentDateAndTime","default_client_dart":null,"dsl_features":[]},{"name":"username","getter_name":"username","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"password_hash","getter_name":"passwordHash","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"EncryptedTextConverter()","dart_type_name":"DecryptedText"}}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":4,"references":[],"type":"table","data":{"name":"skip_segment_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"start","getter_name":"start","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"end","getter_name":"end","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"track_id","getter_name":"trackId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"currentDateAndTime","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":5,"references":[],"type":"table","data":{"name":"source_match_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"track_id","getter_name":"trackId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"source_id","getter_name":"sourceId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"source_type","getter_name":"sourceType","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"Constant(SourceType.youtube.name)","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(SourceType.values)","dart_type_name":"SourceType"}},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"currentDateAndTime","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":6,"references":[],"type":"table","data":{"name":"audio_player_state_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"playing","getter_name":"playing","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"playing\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"playing\" IN (0, 1))"},"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"loop_mode","getter_name":"loopMode","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(PlaylistMode.values)","dart_type_name":"PlaylistMode"}},{"name":"shuffled","getter_name":"shuffled","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"shuffled\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"shuffled\" IN (0, 1))"},"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"collections","getter_name":"collections","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const StringListConverter()","dart_type_name":"List"}},{"name":"tracks","getter_name":"tracks","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const Constant(\"[]\")","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const SpotubeTrackObjectListConverter()","dart_type_name":"List"}},{"name":"current_index","getter_name":"currentIndex","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":"const Constant(0)","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":7,"references":[],"type":"table","data":{"name":"history_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"currentDateAndTime","default_client_dart":null,"dsl_features":[]},{"name":"type","getter_name":"type","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(HistoryEntryType.values)","dart_type_name":"HistoryEntryType"}},{"name":"item_id","getter_name":"itemId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"data","getter_name":"data","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const MapTypeConverter()","dart_type_name":"Map"}}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":8,"references":[],"type":"table","data":{"name":"lyrics_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"track_id","getter_name":"trackId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"data","getter_name":"data","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"SubtitleTypeConverter()","dart_type_name":"SubtitleSimple"}}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":9,"references":[],"type":"table","data":{"name":"metadata_plugins_table","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"name","getter_name":"name","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[{"allowed-lengths":{"min":1,"max":50}}]},{"name":"description","getter_name":"description","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"version","getter_name":"version","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"author","getter_name":"author","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"entry_point","getter_name":"entryPoint","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"apis","getter_name":"apis","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const StringListConverter()","dart_type_name":"List"}},{"name":"abilities","getter_name":"abilities","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const StringListConverter()","dart_type_name":"List"}},{"name":"selected","getter_name":"selected","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"selected\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"selected\" IN (0, 1))"},"default_dart":"const Constant(false)","default_client_dart":null,"dsl_features":[]},{"name":"repository","getter_name":"repository","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"plugin_api_version","getter_name":"pluginApiVersion","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":10,"references":[1],"type":"index","data":{"on":1,"name":"unique_blacklist","sql":null,"unique":true,"columns":["element_type","element_id"]}},{"id":11,"references":[5],"type":"index","data":{"on":5,"name":"uniq_track_match","sql":null,"unique":true,"columns":["track_id","source_id","source_type"]}}]} \ No newline at end of file diff --git a/lib/models/database/database.g.dart b/lib/models/database/database.g.dart index 23b2e648..c96666b6 100644 --- a/lib/models/database/database.g.dart +++ b/lib/models/database/database.g.dart @@ -3878,6 +3878,18 @@ class $MetadataPluginsTableTable extends MetadataPluginsTable defaultConstraints: GeneratedColumn.constraintIsAlways('CHECK ("selected" IN (0, 1))'), defaultValue: const Constant(false)); + static const VerificationMeta _repositoryMeta = + const VerificationMeta('repository'); + @override + late final GeneratedColumn repository = GeneratedColumn( + 'repository', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _pluginApiVersionMeta = + const VerificationMeta('pluginApiVersion'); + @override + late final GeneratedColumn pluginApiVersion = GeneratedColumn( + 'plugin_api_version', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); @override List get $columns => [ id, @@ -3888,7 +3900,9 @@ class $MetadataPluginsTableTable extends MetadataPluginsTable entryPoint, apis, abilities, - selected + selected, + repository, + pluginApiVersion ]; @override String get aliasedName => _alias ?? actualTableName; @@ -3944,6 +3958,20 @@ class $MetadataPluginsTableTable extends MetadataPluginsTable context.handle(_selectedMeta, selected.isAcceptableOrUnknown(data['selected']!, _selectedMeta)); } + if (data.containsKey('repository')) { + context.handle( + _repositoryMeta, + repository.isAcceptableOrUnknown( + data['repository']!, _repositoryMeta)); + } + if (data.containsKey('plugin_api_version')) { + context.handle( + _pluginApiVersionMeta, + pluginApiVersion.isAcceptableOrUnknown( + data['plugin_api_version']!, _pluginApiVersionMeta)); + } else if (isInserting) { + context.missing(_pluginApiVersionMeta); + } return context; } @@ -3974,6 +4002,10 @@ class $MetadataPluginsTableTable extends MetadataPluginsTable .read(DriftSqlType.string, data['${effectivePrefix}abilities'])!), selected: attachedDatabase.typeMapping .read(DriftSqlType.bool, data['${effectivePrefix}selected'])!, + repository: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}repository']), + pluginApiVersion: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}plugin_api_version'])!, ); } @@ -3999,6 +4031,8 @@ class MetadataPluginsTableData extends DataClass final List apis; final List abilities; final bool selected; + final String? repository; + final String pluginApiVersion; const MetadataPluginsTableData( {required this.id, required this.name, @@ -4008,7 +4042,9 @@ class MetadataPluginsTableData extends DataClass required this.entryPoint, required this.apis, required this.abilities, - required this.selected}); + required this.selected, + this.repository, + required this.pluginApiVersion}); @override Map toColumns(bool nullToAbsent) { final map = {}; @@ -4027,6 +4063,10 @@ class MetadataPluginsTableData extends DataClass $MetadataPluginsTableTable.$converterabilities.toSql(abilities)); } map['selected'] = Variable(selected); + if (!nullToAbsent || repository != null) { + map['repository'] = Variable(repository); + } + map['plugin_api_version'] = Variable(pluginApiVersion); return map; } @@ -4041,6 +4081,10 @@ class MetadataPluginsTableData extends DataClass apis: Value(apis), abilities: Value(abilities), selected: Value(selected), + repository: repository == null && nullToAbsent + ? const Value.absent() + : Value(repository), + pluginApiVersion: Value(pluginApiVersion), ); } @@ -4057,6 +4101,8 @@ class MetadataPluginsTableData extends DataClass apis: serializer.fromJson>(json['apis']), abilities: serializer.fromJson>(json['abilities']), selected: serializer.fromJson(json['selected']), + repository: serializer.fromJson(json['repository']), + pluginApiVersion: serializer.fromJson(json['pluginApiVersion']), ); } @override @@ -4072,6 +4118,8 @@ class MetadataPluginsTableData extends DataClass 'apis': serializer.toJson>(apis), 'abilities': serializer.toJson>(abilities), 'selected': serializer.toJson(selected), + 'repository': serializer.toJson(repository), + 'pluginApiVersion': serializer.toJson(pluginApiVersion), }; } @@ -4084,7 +4132,9 @@ class MetadataPluginsTableData extends DataClass String? entryPoint, List? apis, List? abilities, - bool? selected}) => + bool? selected, + Value repository = const Value.absent(), + String? pluginApiVersion}) => MetadataPluginsTableData( id: id ?? this.id, name: name ?? this.name, @@ -4095,6 +4145,8 @@ class MetadataPluginsTableData extends DataClass apis: apis ?? this.apis, abilities: abilities ?? this.abilities, selected: selected ?? this.selected, + repository: repository.present ? repository.value : this.repository, + pluginApiVersion: pluginApiVersion ?? this.pluginApiVersion, ); MetadataPluginsTableData copyWithCompanion( MetadataPluginsTableCompanion data) { @@ -4110,6 +4162,11 @@ class MetadataPluginsTableData extends DataClass apis: data.apis.present ? data.apis.value : this.apis, abilities: data.abilities.present ? data.abilities.value : this.abilities, selected: data.selected.present ? data.selected.value : this.selected, + repository: + data.repository.present ? data.repository.value : this.repository, + pluginApiVersion: data.pluginApiVersion.present + ? data.pluginApiVersion.value + : this.pluginApiVersion, ); } @@ -4124,14 +4181,16 @@ class MetadataPluginsTableData extends DataClass ..write('entryPoint: $entryPoint, ') ..write('apis: $apis, ') ..write('abilities: $abilities, ') - ..write('selected: $selected') + ..write('selected: $selected, ') + ..write('repository: $repository, ') + ..write('pluginApiVersion: $pluginApiVersion') ..write(')')) .toString(); } @override int get hashCode => Object.hash(id, name, description, version, author, - entryPoint, apis, abilities, selected); + entryPoint, apis, abilities, selected, repository, pluginApiVersion); @override bool operator ==(Object other) => identical(this, other) || @@ -4144,7 +4203,9 @@ class MetadataPluginsTableData extends DataClass other.entryPoint == this.entryPoint && other.apis == this.apis && other.abilities == this.abilities && - other.selected == this.selected); + other.selected == this.selected && + other.repository == this.repository && + other.pluginApiVersion == this.pluginApiVersion); } class MetadataPluginsTableCompanion @@ -4158,6 +4219,8 @@ class MetadataPluginsTableCompanion final Value> apis; final Value> abilities; final Value selected; + final Value repository; + final Value pluginApiVersion; const MetadataPluginsTableCompanion({ this.id = const Value.absent(), this.name = const Value.absent(), @@ -4168,6 +4231,8 @@ class MetadataPluginsTableCompanion this.apis = const Value.absent(), this.abilities = const Value.absent(), this.selected = const Value.absent(), + this.repository = const Value.absent(), + this.pluginApiVersion = const Value.absent(), }); MetadataPluginsTableCompanion.insert({ this.id = const Value.absent(), @@ -4179,13 +4244,16 @@ class MetadataPluginsTableCompanion required List apis, required List abilities, this.selected = const Value.absent(), + this.repository = const Value.absent(), + required String pluginApiVersion, }) : name = Value(name), description = Value(description), version = Value(version), author = Value(author), entryPoint = Value(entryPoint), apis = Value(apis), - abilities = Value(abilities); + abilities = Value(abilities), + pluginApiVersion = Value(pluginApiVersion); static Insertable custom({ Expression? id, Expression? name, @@ -4196,6 +4264,8 @@ class MetadataPluginsTableCompanion Expression? apis, Expression? abilities, Expression? selected, + Expression? repository, + Expression? pluginApiVersion, }) { return RawValuesInsertable({ if (id != null) 'id': id, @@ -4207,6 +4277,8 @@ class MetadataPluginsTableCompanion if (apis != null) 'apis': apis, if (abilities != null) 'abilities': abilities, if (selected != null) 'selected': selected, + if (repository != null) 'repository': repository, + if (pluginApiVersion != null) 'plugin_api_version': pluginApiVersion, }); } @@ -4219,7 +4291,9 @@ class MetadataPluginsTableCompanion Value? entryPoint, Value>? apis, Value>? abilities, - Value? selected}) { + Value? selected, + Value? repository, + Value? pluginApiVersion}) { return MetadataPluginsTableCompanion( id: id ?? this.id, name: name ?? this.name, @@ -4230,6 +4304,8 @@ class MetadataPluginsTableCompanion apis: apis ?? this.apis, abilities: abilities ?? this.abilities, selected: selected ?? this.selected, + repository: repository ?? this.repository, + pluginApiVersion: pluginApiVersion ?? this.pluginApiVersion, ); } @@ -4266,6 +4342,12 @@ class MetadataPluginsTableCompanion if (selected.present) { map['selected'] = Variable(selected.value); } + if (repository.present) { + map['repository'] = Variable(repository.value); + } + if (pluginApiVersion.present) { + map['plugin_api_version'] = Variable(pluginApiVersion.value); + } return map; } @@ -4280,7 +4362,9 @@ class MetadataPluginsTableCompanion ..write('entryPoint: $entryPoint, ') ..write('apis: $apis, ') ..write('abilities: $abilities, ') - ..write('selected: $selected') + ..write('selected: $selected, ') + ..write('repository: $repository, ') + ..write('pluginApiVersion: $pluginApiVersion') ..write(')')) .toString(); } @@ -6280,6 +6364,8 @@ typedef $$MetadataPluginsTableTableCreateCompanionBuilder required List apis, required List abilities, Value selected, + Value repository, + required String pluginApiVersion, }); typedef $$MetadataPluginsTableTableUpdateCompanionBuilder = MetadataPluginsTableCompanion Function({ @@ -6292,6 +6378,8 @@ typedef $$MetadataPluginsTableTableUpdateCompanionBuilder Value> apis, Value> abilities, Value selected, + Value repository, + Value pluginApiVersion, }); class $$MetadataPluginsTableTableFilterComposer @@ -6333,6 +6421,13 @@ class $$MetadataPluginsTableTableFilterComposer ColumnFilters get selected => $composableBuilder( column: $table.selected, builder: (column) => ColumnFilters(column)); + + ColumnFilters get repository => $composableBuilder( + column: $table.repository, builder: (column) => ColumnFilters(column)); + + ColumnFilters get pluginApiVersion => $composableBuilder( + column: $table.pluginApiVersion, + builder: (column) => ColumnFilters(column)); } class $$MetadataPluginsTableTableOrderingComposer @@ -6370,6 +6465,13 @@ class $$MetadataPluginsTableTableOrderingComposer ColumnOrderings get selected => $composableBuilder( column: $table.selected, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get repository => $composableBuilder( + column: $table.repository, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get pluginApiVersion => $composableBuilder( + column: $table.pluginApiVersion, + builder: (column) => ColumnOrderings(column)); } class $$MetadataPluginsTableTableAnnotationComposer @@ -6407,6 +6509,12 @@ class $$MetadataPluginsTableTableAnnotationComposer GeneratedColumn get selected => $composableBuilder(column: $table.selected, builder: (column) => column); + + GeneratedColumn get repository => $composableBuilder( + column: $table.repository, builder: (column) => column); + + GeneratedColumn get pluginApiVersion => $composableBuilder( + column: $table.pluginApiVersion, builder: (column) => column); } class $$MetadataPluginsTableTableTableManager extends RootTableManager< @@ -6448,6 +6556,8 @@ class $$MetadataPluginsTableTableTableManager extends RootTableManager< Value> apis = const Value.absent(), Value> abilities = const Value.absent(), Value selected = const Value.absent(), + Value repository = const Value.absent(), + Value pluginApiVersion = const Value.absent(), }) => MetadataPluginsTableCompanion( id: id, @@ -6459,6 +6569,8 @@ class $$MetadataPluginsTableTableTableManager extends RootTableManager< apis: apis, abilities: abilities, selected: selected, + repository: repository, + pluginApiVersion: pluginApiVersion, ), createCompanionCallback: ({ Value id = const Value.absent(), @@ -6470,6 +6582,8 @@ class $$MetadataPluginsTableTableTableManager extends RootTableManager< required List apis, required List abilities, Value selected = const Value.absent(), + Value repository = const Value.absent(), + required String pluginApiVersion, }) => MetadataPluginsTableCompanion.insert( id: id, @@ -6481,6 +6595,8 @@ class $$MetadataPluginsTableTableTableManager extends RootTableManager< apis: apis, abilities: abilities, selected: selected, + repository: repository, + pluginApiVersion: pluginApiVersion, ), withReferenceMapper: (p0) => p0 .map((e) => (e.readTable(table), BaseReferences(db, table, e))) diff --git a/lib/models/database/database.steps.dart b/lib/models/database/database.steps.dart index 93765c5c..60efd63d 100644 --- a/lib/models/database/database.steps.dart +++ b/lib/models/database/database.steps.dart @@ -1891,6 +1891,8 @@ final class Schema7 extends i0.VersionedSchema { _column_64, _column_65, _column_66, + _column_67, + _column_68, ], attachedDatabase: database, ), @@ -1946,6 +1948,10 @@ class Shape15 extends i0.VersionedTable { columnsByName['abilities']! as i1.GeneratedColumn; i1.GeneratedColumn get selected => columnsByName['selected']! as i1.GeneratedColumn; + i1.GeneratedColumn get repository => + columnsByName['repository']! as i1.GeneratedColumn; + i1.GeneratedColumn get pluginApiVersion => + columnsByName['plugin_api_version']! as i1.GeneratedColumn; } i1.GeneratedColumn _column_59(String aliasedName) => @@ -1977,6 +1983,12 @@ i1.GeneratedColumn _column_66(String aliasedName) => defaultConstraints: i1.GeneratedColumn.constraintIsAlways( 'CHECK ("selected" IN (0, 1))'), defaultValue: const Constant(false)); +i1.GeneratedColumn _column_67(String aliasedName) => + i1.GeneratedColumn('repository', aliasedName, true, + type: i1.DriftSqlType.string); +i1.GeneratedColumn _column_68(String aliasedName) => + i1.GeneratedColumn('plugin_api_version', aliasedName, false, + type: i1.DriftSqlType.string); i0.MigrationStepWithVersion migrationSteps({ required Future Function(i1.Migrator m, Schema2 schema) from1To2, required Future Function(i1.Migrator m, Schema3 schema) from2To3, diff --git a/lib/models/database/tables/metadata_plugins.dart b/lib/models/database/tables/metadata_plugins.dart index 2f243fc1..ef7a2fb1 100644 --- a/lib/models/database/tables/metadata_plugins.dart +++ b/lib/models/database/tables/metadata_plugins.dart @@ -10,4 +10,6 @@ class MetadataPluginsTable extends Table { TextColumn get apis => text().map(const StringListConverter())(); TextColumn get abilities => text().map(const StringListConverter())(); BoolColumn get selected => boolean().withDefault(const Constant(false))(); + TextColumn get repository => text().nullable()(); + TextColumn get pluginApiVersion => text()(); } diff --git a/lib/models/metadata/metadata.freezed.dart b/lib/models/metadata/metadata.freezed.dart index c6a3609a..1923150b 100644 --- a/lib/models/metadata/metadata.freezed.dart +++ b/lib/models/metadata/metadata.freezed.dart @@ -4505,8 +4505,10 @@ mixin _$PluginConfiguration { String get version => throw _privateConstructorUsedError; String get author => throw _privateConstructorUsedError; String get entryPoint => throw _privateConstructorUsedError; + String get pluginApiVersion => throw _privateConstructorUsedError; List get apis => throw _privateConstructorUsedError; List get abilities => throw _privateConstructorUsedError; + String? get repository => throw _privateConstructorUsedError; /// Serializes this PluginConfiguration to a JSON map. Map toJson() => throw _privateConstructorUsedError; @@ -4531,8 +4533,10 @@ abstract class $PluginConfigurationCopyWith<$Res> { String version, String author, String entryPoint, + String pluginApiVersion, List apis, - List abilities}); + List abilities, + String? repository}); } /// @nodoc @@ -4556,8 +4560,10 @@ class _$PluginConfigurationCopyWithImpl<$Res, $Val extends PluginConfiguration> Object? version = null, Object? author = null, Object? entryPoint = null, + Object? pluginApiVersion = null, Object? apis = null, Object? abilities = null, + Object? repository = freezed, }) { return _then(_value.copyWith( type: null == type @@ -4584,6 +4590,10 @@ class _$PluginConfigurationCopyWithImpl<$Res, $Val extends PluginConfiguration> ? _value.entryPoint : entryPoint // ignore: cast_nullable_to_non_nullable as String, + pluginApiVersion: null == pluginApiVersion + ? _value.pluginApiVersion + : pluginApiVersion // ignore: cast_nullable_to_non_nullable + as String, apis: null == apis ? _value.apis : apis // ignore: cast_nullable_to_non_nullable @@ -4592,6 +4602,10 @@ class _$PluginConfigurationCopyWithImpl<$Res, $Val extends PluginConfiguration> ? _value.abilities : abilities // ignore: cast_nullable_to_non_nullable as List, + repository: freezed == repository + ? _value.repository + : repository // ignore: cast_nullable_to_non_nullable + as String?, ) as $Val); } } @@ -4611,8 +4625,10 @@ abstract class _$$PluginConfigurationImplCopyWith<$Res> String version, String author, String entryPoint, + String pluginApiVersion, List apis, - List abilities}); + List abilities, + String? repository}); } /// @nodoc @@ -4634,8 +4650,10 @@ class __$$PluginConfigurationImplCopyWithImpl<$Res> Object? version = null, Object? author = null, Object? entryPoint = null, + Object? pluginApiVersion = null, Object? apis = null, Object? abilities = null, + Object? repository = freezed, }) { return _then(_$PluginConfigurationImpl( type: null == type @@ -4662,6 +4680,10 @@ class __$$PluginConfigurationImplCopyWithImpl<$Res> ? _value.entryPoint : entryPoint // ignore: cast_nullable_to_non_nullable as String, + pluginApiVersion: null == pluginApiVersion + ? _value.pluginApiVersion + : pluginApiVersion // ignore: cast_nullable_to_non_nullable + as String, apis: null == apis ? _value._apis : apis // ignore: cast_nullable_to_non_nullable @@ -4670,6 +4692,10 @@ class __$$PluginConfigurationImplCopyWithImpl<$Res> ? _value._abilities : abilities // ignore: cast_nullable_to_non_nullable as List, + repository: freezed == repository + ? _value.repository + : repository // ignore: cast_nullable_to_non_nullable + as String?, )); } } @@ -4684,8 +4710,10 @@ class _$PluginConfigurationImpl extends _PluginConfiguration { required this.version, required this.author, required this.entryPoint, + required this.pluginApiVersion, final List apis = const [], - final List abilities = const []}) + final List abilities = const [], + this.repository}) : _apis = apis, _abilities = abilities, super._(); @@ -4705,6 +4733,8 @@ class _$PluginConfigurationImpl extends _PluginConfiguration { final String author; @override final String entryPoint; + @override + final String pluginApiVersion; final List _apis; @override @JsonKey() @@ -4723,9 +4753,12 @@ class _$PluginConfigurationImpl extends _PluginConfiguration { return EqualUnmodifiableListView(_abilities); } + @override + final String? repository; + @override String toString() { - return 'PluginConfiguration(type: $type, name: $name, description: $description, version: $version, author: $author, entryPoint: $entryPoint, apis: $apis, abilities: $abilities)'; + return 'PluginConfiguration(type: $type, name: $name, description: $description, version: $version, author: $author, entryPoint: $entryPoint, pluginApiVersion: $pluginApiVersion, apis: $apis, abilities: $abilities, repository: $repository)'; } @override @@ -4741,9 +4774,13 @@ class _$PluginConfigurationImpl extends _PluginConfiguration { (identical(other.author, author) || other.author == author) && (identical(other.entryPoint, entryPoint) || other.entryPoint == entryPoint) && + (identical(other.pluginApiVersion, pluginApiVersion) || + other.pluginApiVersion == pluginApiVersion) && const DeepCollectionEquality().equals(other._apis, _apis) && const DeepCollectionEquality() - .equals(other._abilities, _abilities)); + .equals(other._abilities, _abilities) && + (identical(other.repository, repository) || + other.repository == repository)); } @JsonKey(includeFromJson: false, includeToJson: false) @@ -4756,8 +4793,10 @@ class _$PluginConfigurationImpl extends _PluginConfiguration { version, author, entryPoint, + pluginApiVersion, const DeepCollectionEquality().hash(_apis), - const DeepCollectionEquality().hash(_abilities)); + const DeepCollectionEquality().hash(_abilities), + repository); /// Create a copy of PluginConfiguration /// with the given fields replaced by the non-null parameter values. @@ -4784,8 +4823,10 @@ abstract class _PluginConfiguration extends PluginConfiguration { required final String version, required final String author, required final String entryPoint, + required final String pluginApiVersion, final List apis, - final List abilities}) = _$PluginConfigurationImpl; + final List abilities, + final String? repository}) = _$PluginConfigurationImpl; _PluginConfiguration._() : super._(); factory _PluginConfiguration.fromJson(Map json) = @@ -4804,9 +4845,13 @@ abstract class _PluginConfiguration extends PluginConfiguration { @override String get entryPoint; @override + String get pluginApiVersion; + @override List get apis; @override List get abilities; + @override + String? get repository; /// Create a copy of PluginConfiguration /// with the given fields replaced by the non-null parameter values. diff --git a/lib/models/metadata/metadata.g.dart b/lib/models/metadata/metadata.g.dart index 73d42247..96f2833a 100644 --- a/lib/models/metadata/metadata.g.dart +++ b/lib/models/metadata/metadata.g.dart @@ -425,6 +425,7 @@ _$PluginConfigurationImpl _$$PluginConfigurationImplFromJson(Map json) => version: json['version'] as String, author: json['author'] as String, entryPoint: json['entryPoint'] as String, + pluginApiVersion: json['pluginApiVersion'] as String, apis: (json['apis'] as List?) ?.map((e) => $enumDecode(_$PluginApisEnumMap, e)) .toList() ?? @@ -433,6 +434,7 @@ _$PluginConfigurationImpl _$$PluginConfigurationImplFromJson(Map json) => ?.map((e) => $enumDecode(_$PluginAbilitiesEnumMap, e)) .toList() ?? const [], + repository: json['repository'] as String?, ); Map _$$PluginConfigurationImplToJson( @@ -444,9 +446,11 @@ Map _$$PluginConfigurationImplToJson( 'version': instance.version, 'author': instance.author, 'entryPoint': instance.entryPoint, + 'pluginApiVersion': instance.pluginApiVersion, 'apis': instance.apis.map((e) => _$PluginApisEnumMap[e]!).toList(), 'abilities': instance.abilities.map((e) => _$PluginAbilitiesEnumMap[e]!).toList(), + 'repository': instance.repository, }; const _$PluginTypeEnumMap = { diff --git a/lib/models/metadata/plugin.dart b/lib/models/metadata/plugin.dart index fba14c08..287bb2c6 100644 --- a/lib/models/metadata/plugin.dart +++ b/lib/models/metadata/plugin.dart @@ -17,8 +17,10 @@ class PluginConfiguration with _$PluginConfiguration { required String version, required String author, required String entryPoint, + required String pluginApiVersion, @Default([]) List apis, @Default([]) List abilities, + String? repository, }) = _PluginConfiguration; factory PluginConfiguration.fromJson(Map json) => diff --git a/lib/models/playback/track_sources.dart b/lib/models/playback/track_sources.dart index e957cc17..6900e323 100644 --- a/lib/models/playback/track_sources.dart +++ b/lib/models/playback/track_sources.dart @@ -93,7 +93,6 @@ class BasicSourcedTrack { final AudioSource source; final TrackSourceInfo info; final List sources; - @JsonKey(defaultValue: []) final List siblings; BasicSourcedTrack({ required this.query, diff --git a/lib/models/playback/track_sources.g.dart b/lib/models/playback/track_sources.g.dart index e1a62ea6..4676490d 100644 --- a/lib/models/playback/track_sources.g.dart +++ b/lib/models/playback/track_sources.g.dart @@ -19,7 +19,7 @@ BasicSourcedTrack _$BasicSourcedTrackFromJson(Map json) => BasicSourcedTrack( ?.map((e) => TrackSourceInfo.fromJson(Map.from(e as Map))) .toList() ?? - [], + const [], ); Map _$BasicSourcedTrackToJson(BasicSourcedTrack instance) => diff --git a/lib/modules/metadata_plugins/installed_plugin.dart b/lib/modules/metadata_plugins/installed_plugin.dart new file mode 100644 index 00000000..7fa21306 --- /dev/null +++ b/lib/modules/metadata_plugins/installed_plugin.dart @@ -0,0 +1,162 @@ +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:shadcn_flutter/shadcn_flutter.dart'; +import 'package:shadcn_flutter/shadcn_flutter_extension.dart'; +import 'package:spotube/collections/spotube_icons.dart'; +import 'package:spotube/models/metadata/metadata.dart'; +import 'package:spotube/provider/metadata_plugin/core/auth.dart'; +import 'package:spotube/provider/metadata_plugin/metadata_plugin_provider.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class MetadataInstalledPluginItem extends HookConsumerWidget { + final PluginConfiguration plugin; + final bool isDefault; + const MetadataInstalledPluginItem({ + super.key, + required this.plugin, + required this.isDefault, + }); + + @override + Widget build(BuildContext context, ref) { + final metadataPlugin = ref.watch(metadataPluginProvider); + final isAuthenticated = ref.watch(metadataPluginAuthenticatedProvider); + final pluginsNotifier = ref.watch(metadataPluginsProvider.notifier); + final requiresAuth = + isDefault && plugin.abilities.contains(PluginAbilities.authentication); + + return Card( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + mainAxisSize: MainAxisSize.min, + spacing: 12, + children: [ + FutureBuilder( + future: pluginsNotifier.getLogoPath(plugin), + builder: (context, snapshot) { + final repoUrl = plugin.repository != null + ? Uri.tryParse(plugin.repository!) + : null; + final repoOwner = repoUrl?.pathSegments.firstOrNull; + + final isOfficial = + repoUrl?.host == "github.com" && repoOwner == "KRTirtho"; + + return Basic( + leading: snapshot.hasData + ? Image.file( + snapshot.data!, + width: 36, + height: 36, + ) + : Container( + height: 36, + width: 36, + alignment: Alignment.center, + decoration: BoxDecoration( + color: context.theme.colorScheme.secondary, + borderRadius: BorderRadius.circular(8), + ), + child: const Icon(SpotubeIcons.plugin), + ), + title: Text(plugin.name), + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + spacing: 8, + children: [ + Text(plugin.description), + if (repoUrl != null) + Row( + spacing: 8, + children: [ + if (isOfficial) + const PrimaryBadge( + leading: Icon(SpotubeIcons.done), + child: Text("Official"), + ) + else ...[ + Text("Author: ${plugin.author}"), + const DestructiveBadge( + leading: Icon(SpotubeIcons.warning), + child: Text("Third-party"), + ) + ], + SecondaryBadge( + leading: repoUrl.host == "github.com" + ? const Icon(SpotubeIcons.github) + : null, + child: Text(repoUrl.host), + onPressed: () { + launchUrl(repoUrl); + }, + ), + ], + ) + ], + ), + trailing: IconButton.ghost( + onPressed: () async { + await pluginsNotifier.removePlugin(plugin); + }, + icon: const Icon( + SpotubeIcons.trash, + color: Colors.red, + ), + ), + ); + }, + ), + if (plugin.abilities.contains(PluginAbilities.authentication) && + isDefault) + Container( + decoration: BoxDecoration( + color: context.theme.colorScheme.secondary, + borderRadius: BorderRadius.circular(8), + ), + padding: const EdgeInsets.all(12), + child: const Row( + spacing: 8, + children: [ + Icon(SpotubeIcons.warning, color: Colors.yellow), + Text("Plugin requires authentication"), + ], + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Button.secondary( + enabled: !isDefault, + onPressed: () async { + await pluginsNotifier.setDefaultPlugin(plugin); + }, + child: isDefault + ? const Text("Default") + : const Text("Set default"), + ), + if (isAuthenticated.asData?.value != true && + requiresAuth && + isDefault) + Button.primary( + onPressed: () async { + await metadataPlugin.asData?.value?.auth.authenticate(); + }, + leading: const Icon(SpotubeIcons.login), + child: const Text("Login"), + ) + else if (isAuthenticated.asData?.value == true && + requiresAuth && + isDefault) + Button.destructive( + onPressed: () async { + await metadataPlugin.asData?.value?.auth.logout(); + }, + leading: const Icon(SpotubeIcons.logout), + child: const Text("Logout"), + ) + ], + ) + ], + ), + ); + } +} diff --git a/lib/modules/metadata_plugins/plugin_repository.dart b/lib/modules/metadata_plugins/plugin_repository.dart new file mode 100644 index 00000000..75c56466 --- /dev/null +++ b/lib/modules/metadata_plugins/plugin_repository.dart @@ -0,0 +1,174 @@ +import 'package:flutter_hooks/flutter_hooks.dart'; +import 'package:flutter_markdown_plus/flutter_markdown_plus.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:shadcn_flutter/shadcn_flutter.dart'; +import 'package:shadcn_flutter/shadcn_flutter_extension.dart'; +import 'package:spotube/collections/spotube_icons.dart'; +import 'package:spotube/models/metadata/metadata.dart'; +import 'package:spotube/provider/metadata_plugin/metadata_plugin_provider.dart'; +import 'package:url_launcher/url_launcher_string.dart'; + +class MetadataPluginRepositoryItem extends HookConsumerWidget { + final MetadataPluginRepository pluginRepo; + const MetadataPluginRepositoryItem({ + super.key, + required this.pluginRepo, + }); + + @override + Widget build(BuildContext context, ref) { + final pluginsNotifier = ref.watch(metadataPluginsProvider.notifier); + final host = useMemoized( + () => Uri.parse(pluginRepo.repoUrl).host, + [pluginRepo.repoUrl], + ); + final isInstalling = useState(false); + + return Card( + child: Basic( + title: Text(pluginRepo.name), + subtitle: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + spacing: 8, + children: [ + Text(pluginRepo.description), + Row( + spacing: 8, + children: [ + if (pluginRepo.owner == "KRTirtho") ...[ + const PrimaryBadge( + leading: Icon(SpotubeIcons.done), + child: Text("Official"), + ), + SecondaryBadge( + leading: host == "github.com" + ? const Icon(SpotubeIcons.github) + : null, + child: Text(host), + onPressed: () { + launchUrlString(pluginRepo.repoUrl); + }, + ), + ] else ...[ + Text("Author: ${pluginRepo.owner}"), + const DestructiveBadge( + leading: Icon(SpotubeIcons.warning), + child: Text("Third-party"), + ) + ] + ], + ), + ], + ), + trailing: Button.primary( + enabled: !isInstalling.value, + onPressed: () async { + try { + isInstalling.value = true; + final pluginConfig = await pluginsNotifier + .downloadAndCachePlugin(pluginRepo.repoUrl); + + if (!context.mounted) return; + final isOfficialPlugin = pluginRepo.owner == "KRTirtho"; + + final isAllowed = isOfficialPlugin + ? true + : await showDialog( + context: context, + builder: (context) { + final pluginAbilities = pluginConfig.apis + .map((e) => "- Can access **${e.name}** API") + .join("\n\n"); + + return AlertDialog( + title: + const Text("Do you want to install this plugin?"), + content: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text( + "This plugin is from a third-party repository. " + "Please ensure you trust the source before installing.", + ), + const Gap(8), + FutureBuilder( + future: + pluginsNotifier.getLogoPath(pluginConfig), + builder: (context, snapshot) { + return Basic( + leading: snapshot.hasData + ? Image.file( + snapshot.data!, + width: 36, + height: 36, + ) + : Container( + height: 36, + width: 36, + alignment: Alignment.center, + decoration: BoxDecoration( + color: context + .theme.colorScheme.secondary, + borderRadius: + BorderRadius.circular(8), + ), + child: + const Icon(SpotubeIcons.plugin), + ), + title: Text(pluginConfig.name), + subtitle: Text(pluginConfig.description), + ); + }, + ), + const Gap(8), + MarkdownBody( + data: "**Author**: ${pluginConfig.author}\n\n" + "**Repository**: [${pluginConfig.repository ?? 'N/A'}](${pluginConfig.repository})\n\n\n\n" + "This plugin can do following:\n\n" + "$pluginAbilities", + onTapLink: (text, href, title) { + if (href != null) { + launchUrlString(href); + } + }, + ), + ], + ), + actions: [ + Button.secondary( + onPressed: () { + Navigator.of(context).pop(false); + }, + child: const Text("Deny"), + ), + Button.primary( + onPressed: () { + Navigator.of(context).pop(true); + }, + child: const Text("Allow"), + ), + ], + ); + }, + ); + + if (isAllowed != true) return; + await pluginsNotifier.addPlugin(pluginConfig); + } finally { + if (context.mounted) { + isInstalling.value = false; + } + } + }, + leading: isInstalling.value + ? const CircularProgressIndicator() + : const Icon(SpotubeIcons.add), + child: const Text("Install"), + ), + ), + ); + } +} diff --git a/lib/pages/settings/metadata_plugins.dart b/lib/pages/settings/metadata_plugins.dart index 4db82e73..9609d8f5 100644 --- a/lib/pages/settings/metadata_plugins.dart +++ b/lib/pages/settings/metadata_plugins.dart @@ -1,23 +1,24 @@ import 'package:auto_route/auto_route.dart'; +import 'package:collection/collection.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:form_builder_validators/form_builder_validators.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:shadcn_flutter/shadcn_flutter.dart'; -import 'package:shadcn_flutter/shadcn_flutter_extension.dart'; import 'package:skeletonizer/skeletonizer.dart'; import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/components/form/text_form_field.dart'; import 'package:spotube/components/titlebar/titlebar.dart'; import 'package:spotube/models/metadata/metadata.dart'; -import 'package:spotube/provider/metadata_plugin/core/auth.dart'; +import 'package:spotube/modules/metadata_plugins/installed_plugin.dart'; +import 'package:spotube/modules/metadata_plugins/plugin_repository.dart'; import 'package:spotube/provider/metadata_plugin/core/repositories.dart'; import 'package:spotube/provider/metadata_plugin/metadata_plugin_provider.dart'; import 'package:file_picker/file_picker.dart'; import 'package:spotube/provider/metadata_plugin/utils/common.dart'; import 'package:spotube/utils/platform.dart'; -import 'package:url_launcher/url_launcher_string.dart'; import 'package:very_good_infinite_list/very_good_infinite_list.dart'; +import 'package:sliver_tools/sliver_tools.dart'; @RoutePage() class SettingsMetadataProviderPage extends HookConsumerWidget { @@ -29,13 +30,27 @@ class SettingsMetadataProviderPage extends HookConsumerWidget { final plugins = ref.watch(metadataPluginsProvider); final pluginsNotifier = ref.watch(metadataPluginsProvider.notifier); - final metadataPlugin = ref.watch(metadataPluginProvider); - final isAuthenticated = ref.watch(metadataPluginAuthenticatedProvider); final pluginReposSnapshot = ref.watch(metadataPluginRepositoriesProvider); final pluginReposNotifier = ref.watch(metadataPluginRepositoriesProvider.notifier); - final pluginRepos = pluginReposSnapshot.asData?.value.items ?? []; + + final pluginRepos = useMemoized( + () { + final installedPluginIds = plugins.asData?.value.plugins + .map((e) => e.repository) + .nonNulls + .toList() ?? + []; + + final pluginRepos = pluginReposSnapshot.asData?.value.items ?? []; + if (installedPluginIds.isEmpty) return pluginRepos; + return pluginRepos + .whereNot((repo) => installedPluginIds.contains(repo.repoUrl)) + .toList(); + }, + [plugins.asData?.value.plugins, pluginReposSnapshot.asData?.value], + ); return Scaffold( headers: const [ @@ -115,17 +130,18 @@ class SettingsMetadataProviderPage extends HookConsumerWidget { ), ), const SliverGap(12), - SliverToBoxAdapter( - child: Row( - children: [ - const Gap(8), - const Text("Installed").h4, - const Gap(8), - const Expanded(child: Divider()), - const Gap(8), - ], + if (plugins.asData?.value.plugins.isNotEmpty ?? false) + SliverToBoxAdapter( + child: Row( + children: [ + const Gap(8), + const Text("Installed").h4, + const Gap(8), + const Expanded(child: Divider()), + const Gap(8), + ], + ), ), - ), const SliverGap(20), SliverList.separated( itemCount: plugins.asData?.value.plugins.length ?? 0, @@ -133,105 +149,9 @@ class SettingsMetadataProviderPage extends HookConsumerWidget { itemBuilder: (context, index) { final plugin = plugins.asData!.value.plugins[index]; final isDefault = plugins.asData!.value.defaultPlugin == index; - final requiresAuth = isDefault && - plugin.abilities.contains(PluginAbilities.authentication); - - return Card( - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - mainAxisSize: MainAxisSize.min, - spacing: 12, - children: [ - FutureBuilder( - future: pluginsNotifier.getLogoPath(plugin), - builder: (context, snapshot) { - return Basic( - leading: snapshot.hasData - ? Image.file( - snapshot.data!, - width: 36, - height: 36, - ) - : Container( - height: 36, - width: 36, - alignment: Alignment.center, - decoration: BoxDecoration( - color: - context.theme.colorScheme.secondary, - borderRadius: BorderRadius.circular(8), - ), - child: const Icon(SpotubeIcons.plugin), - ), - title: Text(plugin.name), - subtitle: Text(plugin.description), - trailing: IconButton.ghost( - onPressed: () async { - await pluginsNotifier.removePlugin(plugin); - }, - icon: const Icon( - SpotubeIcons.trash, - color: Colors.red, - ), - ), - ); - }, - ), - if (plugin.abilities - .contains(PluginAbilities.authentication) && - isDefault) - Container( - decoration: BoxDecoration( - color: context.theme.colorScheme.secondary, - borderRadius: BorderRadius.circular(8), - ), - padding: const EdgeInsets.all(12), - child: const Row( - spacing: 8, - children: [ - Icon(SpotubeIcons.warning, color: Colors.yellow), - Text("Plugin requires authentication"), - ], - ), - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Button.secondary( - enabled: !isDefault, - onPressed: () async { - await pluginsNotifier.setDefaultPlugin(plugin); - }, - child: isDefault - ? const Text("Default") - : const Text("Set default"), - ), - if (isAuthenticated.asData?.value != true && - requiresAuth && - isDefault) - Button.primary( - onPressed: () async { - await metadataPlugin.asData?.value?.auth - .authenticate(); - }, - leading: const Icon(SpotubeIcons.login), - child: const Text("Login"), - ) - else if (isAuthenticated.asData?.value == true && - requiresAuth && - isDefault) - Button.destructive( - onPressed: () async { - await metadataPlugin.asData?.value?.auth - .logout(); - }, - leading: const Icon(SpotubeIcons.logout), - child: const Text("Logout"), - ) - ], - ) - ], - ), + return MetadataInstalledPluginItem( + plugin: plugin, + isDefault: isDefault, ); }, ), @@ -248,67 +168,70 @@ class SettingsMetadataProviderPage extends HookConsumerWidget { ), ), const SliverGap(12), - Skeletonizer.sliver( - enabled: pluginReposSnapshot.isLoading, - child: SliverInfiniteList( - isLoading: pluginReposSnapshot.isLoading && - !pluginReposSnapshot.isLoadingNextPage, - itemCount: pluginRepos.length, - onFetchData: pluginReposNotifier.fetchMore, - itemBuilder: (context, index) { - final pluginRepo = pluginRepos[index]; - final host = Uri.parse(pluginRepo.repoUrl).host; + SliverInfiniteList( + isLoading: pluginReposSnapshot.isLoading && + !pluginReposSnapshot.isLoadingNextPage, + itemCount: pluginRepos.length, + onFetchData: pluginReposNotifier.fetchMore, + loadingBuilder: (context) { + return Skeletonizer( + enabled: true, + child: MetadataPluginRepositoryItem( + pluginRepo: MetadataPluginRepository( + name: "Loading...", + description: "Loading...", + repoUrl: "", + owner: "", + ), + ), + ); + }, + itemBuilder: (context, index) { + final pluginRepo = pluginRepos[index]; - return Card( - child: Basic( - title: Text(pluginRepo.name), - subtitle: Column( + return MetadataPluginRepositoryItem( + pluginRepo: pluginRepo, + ); + }, + ), + SliverCrossAxisConstrained( + maxCrossAxisExtent: 720, + child: SliverFillRemaining( + hasScrollBody: false, + child: Container( + alignment: Alignment.bottomCenter, + margin: const EdgeInsets.only(bottom: 20), + child: SafeArea( + child: Card( + child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, - spacing: 8, + spacing: 12, children: [ - Text(pluginRepo.description), Row( spacing: 8, children: [ - if (pluginRepo.owner == "KRTirtho") ...[ - const PrimaryBadge( - leading: Icon(SpotubeIcons.done), - child: Text("Official"), - ), - SecondaryBadge( - leading: host == "github.com" - ? const Icon(SpotubeIcons.github) - : null, - child: Text(host), - onPressed: () { - launchUrlString(pluginRepo.repoUrl); - }, - ), - ] else ...[ - Text("Author: ${pluginRepo.owner}"), - const DestructiveBadge( - leading: Icon(SpotubeIcons.warning), - child: Text("Third-party"), - ) - ] + const Icon(SpotubeIcons.warning, size: 16), + const Text( + "Disclaimer", + style: TextStyle(fontWeight: FontWeight.bold), + ).bold, ], ), + const Text( + "The Spotube team does not hold any responsibility (including legal) for any \"Third-party\" plugins.\n" + "Please use them at your own risk. For any bugs/issues, please report them to the plugin repository." + "\n\n" + "If any \"Third-party\" plugin is breaking ToS/DMCA of any service/legal entity, " + "please ask the \"Third-party\" plugin author or the hosting platform .e.g GitHub/Codeberg to take action. " + "Above listed (\"Third-party\" labelled) are all public/community maintained plugins. We're not curating them, " + "so we cannot take any action on them.\n\n", + ).muted.xSmall, ], ), - trailing: Button.primary( - onPressed: () async { - final pluginConfig = await pluginsNotifier - .downloadAndCachePlugin(pluginRepo.repoUrl); - - await pluginsNotifier.addPlugin(pluginConfig); - }, - leading: const Icon(SpotubeIcons.add), - child: const Text("Install"), - ), ), - ); - }, + ), + ), ), ), ], diff --git a/lib/provider/metadata_plugin/metadata_plugin_provider.dart b/lib/provider/metadata_plugin/metadata_plugin_provider.dart index 717a81c0..a47d052b 100644 --- a/lib/provider/metadata_plugin/metadata_plugin_provider.dart +++ b/lib/provider/metadata_plugin/metadata_plugin_provider.dart @@ -101,6 +101,8 @@ class MetadataPluginNotifier extends AsyncNotifier { description: plugin.description, version: plugin.version, entryPoint: plugin.entryPoint, + pluginApiVersion: plugin.pluginApiVersion, + repository: plugin.repository, apis: plugin.apis .map( (e) => PluginApis.values.firstWhereOrNull( @@ -298,6 +300,8 @@ class MetadataPluginNotifier extends AsyncNotifier { entryPoint: plugin.entryPoint, apis: plugin.apis.map((e) => e.name).toList(), abilities: plugin.abilities.map((e) => e.name).toList(), + pluginApiVersion: plugin.pluginApiVersion, + repository: Value(plugin.repository), ), ); } diff --git a/pubspec.lock b/pubspec.lock index b93ea651..dd86f842 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -2829,10 +2829,10 @@ packages: dependency: "direct main" description: name: youtube_explode_dart - sha256: "8db47e0f947598f6aa29d2862efb98b92af0c78990d4b23c224f3475c556b47b" + sha256: "9cd131624135065a6866c1e8ad4f4703e5bcfd1da322d4fddc55c972d04b6b22" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.5.1" yt_dlp_dart: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 9c43298e..1de34389 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -129,7 +129,7 @@ dependencies: wikipedia_api: ^0.1.0 win32_registry: ^1.1.5 window_manager: ^0.4.3 - youtube_explode_dart: ^2.4.2 + youtube_explode_dart: ^2.5.1 yt_dlp_dart: git: url: https://github.com/KRTirtho/yt_dlp_dart.git diff --git a/test/drift/app_db/generated/schema.dart b/test/drift/app_db/generated/schema.dart index fb6abdf4..87de9194 100644 --- a/test/drift/app_db/generated/schema.dart +++ b/test/drift/app_db/generated/schema.dart @@ -3,32 +3,32 @@ // ignore_for_file: type=lint import 'package:drift/drift.dart'; import 'package:drift/internal/migrations.dart'; -import 'schema_v3.dart' as v3; -import 'schema_v5.dart' as v5; -import 'schema_v6.dart' as v6; import 'schema_v1.dart' as v1; import 'schema_v2.dart' as v2; -import 'schema_v7.dart' as v7; +import 'schema_v3.dart' as v3; import 'schema_v4.dart' as v4; +import 'schema_v5.dart' as v5; +import 'schema_v6.dart' as v6; +import 'schema_v7.dart' as v7; class GeneratedHelper implements SchemaInstantiationHelper { @override GeneratedDatabase databaseForVersion(QueryExecutor db, int version) { switch (version) { - case 3: - return v3.DatabaseAtV3(db); - case 5: - return v5.DatabaseAtV5(db); - case 6: - return v6.DatabaseAtV6(db); case 1: return v1.DatabaseAtV1(db); case 2: return v2.DatabaseAtV2(db); - case 7: - return v7.DatabaseAtV7(db); + case 3: + return v3.DatabaseAtV3(db); case 4: return v4.DatabaseAtV4(db); + case 5: + return v5.DatabaseAtV5(db); + case 6: + return v6.DatabaseAtV6(db); + case 7: + return v7.DatabaseAtV7(db); default: throw MissingSchemaException(version, versions); } diff --git a/test/drift/app_db/generated/schema_v7.dart b/test/drift/app_db/generated/schema_v7.dart index 661c9a18..b476efbd 100644 --- a/test/drift/app_db/generated/schema_v7.dart +++ b/test/drift/app_db/generated/schema_v7.dart @@ -3070,6 +3070,12 @@ class MetadataPluginsTable extends Table defaultConstraints: GeneratedColumn.constraintIsAlways('CHECK ("selected" IN (0, 1))'), defaultValue: const Constant(false)); + late final GeneratedColumn repository = GeneratedColumn( + 'repository', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn pluginApiVersion = GeneratedColumn( + 'plugin_api_version', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); @override List get $columns => [ id, @@ -3080,7 +3086,9 @@ class MetadataPluginsTable extends Table entryPoint, apis, abilities, - selected + selected, + repository, + pluginApiVersion ]; @override String get aliasedName => _alias ?? actualTableName; @@ -3112,6 +3120,10 @@ class MetadataPluginsTable extends Table .read(DriftSqlType.string, data['${effectivePrefix}abilities'])!, selected: attachedDatabase.typeMapping .read(DriftSqlType.bool, data['${effectivePrefix}selected'])!, + repository: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}repository']), + pluginApiVersion: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}plugin_api_version'])!, ); } @@ -3132,6 +3144,8 @@ class MetadataPluginsTableData extends DataClass final String apis; final String abilities; final bool selected; + final String? repository; + final String pluginApiVersion; const MetadataPluginsTableData( {required this.id, required this.name, @@ -3141,7 +3155,9 @@ class MetadataPluginsTableData extends DataClass required this.entryPoint, required this.apis, required this.abilities, - required this.selected}); + required this.selected, + this.repository, + required this.pluginApiVersion}); @override Map toColumns(bool nullToAbsent) { final map = {}; @@ -3154,6 +3170,10 @@ class MetadataPluginsTableData extends DataClass map['apis'] = Variable(apis); map['abilities'] = Variable(abilities); map['selected'] = Variable(selected); + if (!nullToAbsent || repository != null) { + map['repository'] = Variable(repository); + } + map['plugin_api_version'] = Variable(pluginApiVersion); return map; } @@ -3168,6 +3188,10 @@ class MetadataPluginsTableData extends DataClass apis: Value(apis), abilities: Value(abilities), selected: Value(selected), + repository: repository == null && nullToAbsent + ? const Value.absent() + : Value(repository), + pluginApiVersion: Value(pluginApiVersion), ); } @@ -3184,6 +3208,8 @@ class MetadataPluginsTableData extends DataClass apis: serializer.fromJson(json['apis']), abilities: serializer.fromJson(json['abilities']), selected: serializer.fromJson(json['selected']), + repository: serializer.fromJson(json['repository']), + pluginApiVersion: serializer.fromJson(json['pluginApiVersion']), ); } @override @@ -3199,6 +3225,8 @@ class MetadataPluginsTableData extends DataClass 'apis': serializer.toJson(apis), 'abilities': serializer.toJson(abilities), 'selected': serializer.toJson(selected), + 'repository': serializer.toJson(repository), + 'pluginApiVersion': serializer.toJson(pluginApiVersion), }; } @@ -3211,7 +3239,9 @@ class MetadataPluginsTableData extends DataClass String? entryPoint, String? apis, String? abilities, - bool? selected}) => + bool? selected, + Value repository = const Value.absent(), + String? pluginApiVersion}) => MetadataPluginsTableData( id: id ?? this.id, name: name ?? this.name, @@ -3222,6 +3252,8 @@ class MetadataPluginsTableData extends DataClass apis: apis ?? this.apis, abilities: abilities ?? this.abilities, selected: selected ?? this.selected, + repository: repository.present ? repository.value : this.repository, + pluginApiVersion: pluginApiVersion ?? this.pluginApiVersion, ); MetadataPluginsTableData copyWithCompanion( MetadataPluginsTableCompanion data) { @@ -3237,6 +3269,11 @@ class MetadataPluginsTableData extends DataClass apis: data.apis.present ? data.apis.value : this.apis, abilities: data.abilities.present ? data.abilities.value : this.abilities, selected: data.selected.present ? data.selected.value : this.selected, + repository: + data.repository.present ? data.repository.value : this.repository, + pluginApiVersion: data.pluginApiVersion.present + ? data.pluginApiVersion.value + : this.pluginApiVersion, ); } @@ -3251,14 +3288,16 @@ class MetadataPluginsTableData extends DataClass ..write('entryPoint: $entryPoint, ') ..write('apis: $apis, ') ..write('abilities: $abilities, ') - ..write('selected: $selected') + ..write('selected: $selected, ') + ..write('repository: $repository, ') + ..write('pluginApiVersion: $pluginApiVersion') ..write(')')) .toString(); } @override int get hashCode => Object.hash(id, name, description, version, author, - entryPoint, apis, abilities, selected); + entryPoint, apis, abilities, selected, repository, pluginApiVersion); @override bool operator ==(Object other) => identical(this, other) || @@ -3271,7 +3310,9 @@ class MetadataPluginsTableData extends DataClass other.entryPoint == this.entryPoint && other.apis == this.apis && other.abilities == this.abilities && - other.selected == this.selected); + other.selected == this.selected && + other.repository == this.repository && + other.pluginApiVersion == this.pluginApiVersion); } class MetadataPluginsTableCompanion @@ -3285,6 +3326,8 @@ class MetadataPluginsTableCompanion final Value apis; final Value abilities; final Value selected; + final Value repository; + final Value pluginApiVersion; const MetadataPluginsTableCompanion({ this.id = const Value.absent(), this.name = const Value.absent(), @@ -3295,6 +3338,8 @@ class MetadataPluginsTableCompanion this.apis = const Value.absent(), this.abilities = const Value.absent(), this.selected = const Value.absent(), + this.repository = const Value.absent(), + this.pluginApiVersion = const Value.absent(), }); MetadataPluginsTableCompanion.insert({ this.id = const Value.absent(), @@ -3306,13 +3351,16 @@ class MetadataPluginsTableCompanion required String apis, required String abilities, this.selected = const Value.absent(), + this.repository = const Value.absent(), + required String pluginApiVersion, }) : name = Value(name), description = Value(description), version = Value(version), author = Value(author), entryPoint = Value(entryPoint), apis = Value(apis), - abilities = Value(abilities); + abilities = Value(abilities), + pluginApiVersion = Value(pluginApiVersion); static Insertable custom({ Expression? id, Expression? name, @@ -3323,6 +3371,8 @@ class MetadataPluginsTableCompanion Expression? apis, Expression? abilities, Expression? selected, + Expression? repository, + Expression? pluginApiVersion, }) { return RawValuesInsertable({ if (id != null) 'id': id, @@ -3334,6 +3384,8 @@ class MetadataPluginsTableCompanion if (apis != null) 'apis': apis, if (abilities != null) 'abilities': abilities, if (selected != null) 'selected': selected, + if (repository != null) 'repository': repository, + if (pluginApiVersion != null) 'plugin_api_version': pluginApiVersion, }); } @@ -3346,7 +3398,9 @@ class MetadataPluginsTableCompanion Value? entryPoint, Value? apis, Value? abilities, - Value? selected}) { + Value? selected, + Value? repository, + Value? pluginApiVersion}) { return MetadataPluginsTableCompanion( id: id ?? this.id, name: name ?? this.name, @@ -3357,6 +3411,8 @@ class MetadataPluginsTableCompanion apis: apis ?? this.apis, abilities: abilities ?? this.abilities, selected: selected ?? this.selected, + repository: repository ?? this.repository, + pluginApiVersion: pluginApiVersion ?? this.pluginApiVersion, ); } @@ -3390,6 +3446,12 @@ class MetadataPluginsTableCompanion if (selected.present) { map['selected'] = Variable(selected.value); } + if (repository.present) { + map['repository'] = Variable(repository.value); + } + if (pluginApiVersion.present) { + map['plugin_api_version'] = Variable(pluginApiVersion.value); + } return map; } @@ -3404,7 +3466,9 @@ class MetadataPluginsTableCompanion ..write('entryPoint: $entryPoint, ') ..write('apis: $apis, ') ..write('abilities: $abilities, ') - ..write('selected: $selected') + ..write('selected: $selected, ') + ..write('repository: $repository, ') + ..write('pluginApiVersion: $pluginApiVersion') ..write(')')) .toString(); }