commit d205277cdd33d38f144fa72c85ef2653ca5064db Author: Forrest Date: Wed Jul 29 14:14:18 2026 -0400 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3820a95 --- /dev/null +++ b/.gitignore @@ -0,0 +1,45 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ +/coverage/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/.metadata b/.metadata new file mode 100644 index 0000000..90c6632 --- /dev/null +++ b/.metadata @@ -0,0 +1,36 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "058e0af2c2b57e369d905a03ac9748b0ebf543c6" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 058e0af2c2b57e369d905a03ac9748b0ebf543c6 + base_revision: 058e0af2c2b57e369d905a03ac9748b0ebf543c6 + - platform: android + create_revision: 058e0af2c2b57e369d905a03ac9748b0ebf543c6 + base_revision: 058e0af2c2b57e369d905a03ac9748b0ebf543c6 + - platform: ios + create_revision: 058e0af2c2b57e369d905a03ac9748b0ebf543c6 + base_revision: 058e0af2c2b57e369d905a03ac9748b0ebf543c6 + - platform: linux + create_revision: 058e0af2c2b57e369d905a03ac9748b0ebf543c6 + base_revision: 058e0af2c2b57e369d905a03ac9748b0ebf543c6 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/README.md b/README.md new file mode 100644 index 0000000..6bfb9b4 --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# ratune_mobile + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Learn Flutter](https://docs.flutter.dev/get-started/learn-flutter) +- [Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Flutter learning resources](https://docs.flutter.dev/reference/learning-resources) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..0d29021 --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..be3943c --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,14 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts new file mode 100644 index 0000000..3bf4a0f --- /dev/null +++ b/android/app/build.gradle.kts @@ -0,0 +1,45 @@ +plugins { + id("com.android.application") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.conversionpath.ratune_mobile" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.conversionpath.ratune_mobile" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + +flutter { + source = "../.." +} diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..95d4f0d --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/kotlin/com/conversionpath/ratune_mobile/MainActivity.kt b/android/app/src/main/kotlin/com/conversionpath/ratune_mobile/MainActivity.kt new file mode 100644 index 0000000..4812ca2 --- /dev/null +++ b/android/app/src/main/kotlin/com/conversionpath/ratune_mobile/MainActivity.kt @@ -0,0 +1,8 @@ +package com.conversionpath.ratune_mobile + +import com.ryanheise.audioservice.AudioServiceActivity + +// just_audio_background / audio_service require the host Activity to extend +// AudioServiceActivity (which provides the correct FlutterEngine to the media +// session plugin) instead of the default FlutterActivity. +class MainActivity : AudioServiceActivity() diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..db77bb4 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..17987b7 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..09d4391 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..d5f1c8d Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..4d6372e Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/build.gradle.kts b/android/build.gradle.kts new file mode 100644 index 0000000..dbee657 --- /dev/null +++ b/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..e96108c --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,6 @@ +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +# This newDsl flag was added by the Flutter template +android.newDsl=false +# This builtInKotlin flag was added by the Flutter template +android.builtInKotlin=false diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..2d428bf --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts new file mode 100644 index 0000000..c21f0c5 --- /dev/null +++ b/android/settings.gradle.kts @@ -0,0 +1,26 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "9.0.1" apply false + id("org.jetbrains.kotlin.android") version "2.3.20" apply false +} + +include(":app") diff --git a/graphify-out/.graphify_labels.json b/graphify-out/.graphify_labels.json new file mode 100644 index 0000000..96e415a --- /dev/null +++ b/graphify-out/.graphify_labels.json @@ -0,0 +1 @@ +{"0": "Playback Engine & App Entry", "1": "Play History & Rediscovery", "2": "Browser Screen & UI Widgets", "3": "Subsonic API Client", "4": "Subsonic Data Models", "5": "Connection & State Providers", "6": "Accent Theming & Palette", "7": "Linux Desktop Runner", "8": "Favorites State", "9": "iOS App Runner", "10": "Credentials & Secure Storage", "11": "Design Tokens", "12": "Connect / Login Sheet", "13": "Build Config & Dependencies", "14": "iOS App Icons", "15": "Now Playing Screen", "16": "Screen Providers & Consumers", "17": "App Shell & Navigation", "18": "JSON Parsing Helpers", "19": "Search Screen", "20": "Favorites Screen", "21": "Home Screen", "22": "Stateful Screen Widgets", "23": "Android Launcher Icons", "24": "Widget Tests", "25": "Favorite Rating Controls", "26": "Android Main Activity", "27": "iOS Launch Images", "28": "Android App Gradle", "29": "Android Root Gradle", "30": "Android Gradle Settings", "31": "Launch Screen Readme", "32": "iOS Bridging Header"} \ No newline at end of file diff --git a/graphify-out/.graphify_python b/graphify-out/.graphify_python new file mode 100644 index 0000000..e9b5483 --- /dev/null +++ b/graphify-out/.graphify_python @@ -0,0 +1 @@ +/home/troglodyte/.local/share/uv/tools/graphifyy/bin/python \ No newline at end of file diff --git a/graphify-out/.graphify_root b/graphify-out/.graphify_root new file mode 100644 index 0000000..5dc55de --- /dev/null +++ b/graphify-out/.graphify_root @@ -0,0 +1 @@ +/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md new file mode 100644 index 0000000..857d843 --- /dev/null +++ b/graphify-out/GRAPH_REPORT.md @@ -0,0 +1,207 @@ +# Graph Report - . (2026-07-29) + +## Corpus Check +- Corpus is ~12,356 words - fits in a single context window. You may not need a graph. + +## Summary +- 522 nodes · 678 edges · 33 communities (31 shown, 2 thin omitted) +- Extraction: 95% EXTRACTED · 5% INFERRED · 0% AMBIGUOUS · INFERRED: 35 edges (avg confidence: 0.92) +- Token cost: 75,479 input · 0 output + +## Community Hubs (Navigation) +- Playback Engine & App Entry +- Play History & Rediscovery +- Browser Screen & UI Widgets +- Subsonic API Client +- Subsonic Data Models +- Connection & State Providers +- Accent Theming & Palette +- Linux Desktop Runner +- Favorites State +- iOS App Runner +- Credentials & Secure Storage +- Design Tokens +- Connect / Login Sheet +- Build Config & Dependencies +- iOS App Icons +- Now Playing Screen +- Screen Providers & Consumers +- App Shell & Navigation +- JSON Parsing Helpers +- Search Screen +- Favorites Screen +- Home Screen +- Stateful Screen Widgets +- Android Launcher Icons +- Widget Tests +- Favorite Rating Controls +- Android Main Activity +- iOS Launch Images +- Launch Screen Readme + +## God Nodes (most connected - your core abstractions) +1. `App Icon 1024x1024 (Flutter logo master)` - 14 edges +2. `ratune_mobile (Flutter package)` - 13 edges +3. `subsonicClientProvider` - 8 edges +4. `build` - 7 edges +5. `HomeScreen` - 7 edges +6. `build` - 7 edges +7. `connectionProvider` - 7 edges +8. `playbackProvider` - 7 edges +9. `_MyApplication` - 7 edges +10. `AppDelegate` - 5 edges + +## Surprising Connections (you probably didn't know these) +- `Dart Analyzer Configuration` --conceptually_related_to--> `ratune_mobile (Flutter package)` [INFERRED] + analysis_options.yaml → pubspec.yaml +- `ratune_mobile README` --references--> `ratune_mobile (Flutter package)` [INFERRED] + README.md → pubspec.yaml +- `Linux Top-Level CMake Build` --conceptually_related_to--> `ratune_mobile (Flutter package)` [INFERRED] + linux/CMakeLists.txt → pubspec.yaml +- `App Icon 20x20 @1x` --semantically_similar_to--> `App Icon 1024x1024 (Flutter logo master)` [INFERRED] [semantically similar] + ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png → ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png +- `App Icon 20x20 @2x` --semantically_similar_to--> `App Icon 1024x1024 (Flutter logo master)` [INFERRED] [semantically similar] + ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png → ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png + +## Import Cycles +- None detected. + +## Hyperedges (group relationships) +- **Linux Flutter CMake Build Pipeline** — linux_cmakelists_runner, linux_flutter_cmakelists_flutter, linux_runner_cmakelists_runner [EXTRACTED 1.00] +- **Audio Playback and Theming Stack** — pubspec_just_audio, pubspec_just_audio_background, pubspec_palette_generator [INFERRED 0.65] +- **Android Launcher Icon Set (Flutter logo)** — android_app_src_main_res_mipmap_hdpi_ic_launcher_icon, android_app_src_main_res_mipmap_mdpi_ic_launcher_icon, android_app_src_main_res_mipmap_xhdpi_ic_launcher_icon, android_app_src_main_res_mipmap_xxhdpi_ic_launcher_icon, android_app_src_main_res_mipmap_xxxhdpi_ic_launcher_icon [INFERRED 0.85] +- **iOS AppIcon Set (Flutter logo)** — ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon, ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_1x_icon, ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_2x_icon, ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_3x_icon, ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_1x_icon, ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_2x_icon, ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_3x_icon, ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_1x_icon, ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_2x_icon, ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_3x_icon, ios_runner_assets_xcassets_appicon_appiconset_icon_app_60x60_2x_icon, ios_runner_assets_xcassets_appicon_appiconset_icon_app_60x60_3x_icon, ios_runner_assets_xcassets_appicon_appiconset_icon_app_76x76_1x_icon, ios_runner_assets_xcassets_appicon_appiconset_icon_app_76x76_2x_icon, ios_runner_assets_xcassets_appicon_appiconset_icon_app_83_5x83_5_2x_icon [INFERRED 0.85] +- **iOS Launch Image Set** — ios_runner_assets_xcassets_launchimage_imageset_launchimage_image, ios_runner_assets_xcassets_launchimage_imageset_launchimage_2x_image, ios_runner_assets_xcassets_launchimage_imageset_launchimage_3x_image [INFERRED 0.85] + +## Communities (33 total, 2 thin omitted) + +### Community 0 - "Playback Engine & App Entry" +Cohesion: 0.05 +Nodes (41): AudioPlayer?, dart:io, Duration, int?, build, main, RatuneApp, _audioSupported (+33 more) + +### Community 1 - "Play History & Rediscovery" +Cohesion: 0.05 +Nodes (41): dart:async, DateTime, File?, album, albumId, artist, artistId, byArtist (+33 more) + +### Community 2 - "Browser Screen & UI Widgets" +Cohesion: 0.06 +Nodes (40): EdgeInsetsGeometry, favorites_screen.dart, IconData, _Action, BrowseRow, _Centered, child, _DetailScaffold (+32 more) + +### Community 3 - "Subsonic API Client" +Cohesion: 0.05 +Nodes (40): dart:convert, dart:math, Dio, Exception, apiVersion, authErrorCode, _authParams, baseUrl (+32 more) + +### Community 4 - "Subsonic Data Models" +Cohesion: 0.06 +Nodes (33): json_helpers.dart, Album, albumCount, albumId, albums, all, Artist, artistId (+25 more) + +### Community 5 - "Connection & State Providers" +Cohesion: 0.07 +Nodes (28): bool get, favorites.dart, ../history/play_history.dart, client, connect, ConnectionController, ConnectionState, ConnStatus (+20 more) + +### Community 6 - "Accent Theming & Palette" +Cohesion: 0.07 +Nodes (25): Color, AccentNotifier, _ensureReadable, extractAccent, hsl, lightness, palette, picked (+17 more) + +### Community 7 - "Linux Desktop Runner" +Cohesion: 0.09 +Nodes (22): FlPluginRegistry, FlView, GApplication, gboolean, gchar, GObject, GtkApplication, fl_register_plugins() (+14 more) + +### Community 8 - "Favorites State" +Cohesion: 0.10 +Nodes (20): HistoryController, albumIds, artistIds, clear, copyWith, FavoritesController, FavoritesState, hydrate (+12 more) + +### Community 9 - "iOS App Runner" +Cohesion: 0.11 +Nodes (14): Any, Bool, Flutter, FlutterAppDelegate, FlutterImplicitEngineBridge, FlutterImplicitEngineDelegate, FlutterSceneDelegate, AppDelegate (+6 more) + +### Community 10 - "Credentials & Secure Storage" +Cohesion: 0.11 +Nodes (18): FlutterSecureStorage, alias, clear, CredentialStore, display, _kAlias, _kPass, _kUrl (+10 more) + +### Community 11 - "Design Tokens" +Cohesion: 0.11 +Nodes (17): _, accentDefault, background, border, borderActive, dimmed, foreground, lg (+9 more) + +### Community 12 - "Connect / Login Sheet" +Cohesion: 0.15 +Nodes (16): build, _busy, _connect, _ConnectSheet, _ConnectSheetState, createState, dispose, _field (+8 more) + +### Community 13 - "Build Config & Dependencies" +Cohesion: 0.16 +Nodes (16): Dart Analyzer Configuration, Linux Top-Level CMake Build, Linux Flutter Library CMake Build, Linux Runner Executable CMake Build, crypto (hashing/crypto), dio (HTTP client dependency), flutter_lints (dev lint rules), flutter_riverpod (state management) (+8 more) + +### Community 14 - "iOS App Icons" +Cohesion: 0.13 +Nodes (15): App Icon 1024x1024 (Flutter logo master), App Icon 20x20 @1x, App Icon 20x20 @2x, App Icon 20x20 @3x, App Icon 29x29 @1x, App Icon 29x29 @2x, App Icon 29x29 @3x, App Icon 40x40 @1x (+7 more) + +### Community 15 - "Now Playing Screen" +Cohesion: 0.13 +Nodes (14): accent, _btn, _fmt, _fmtDur, m, ref, s, song (+6 more) + +### Community 16 - "Screen Providers & Consumers" +Cohesion: 0.22 +Nodes (14): ConsumerWidget, AlbumScreen, ArtistScreen, BrowserScreen, build, _AlbumArtPanel, NowPlayingScreen, _Transport (+6 more) + +### Community 17 - "App Shell & Navigation" +Cohesion: 0.17 +Nodes (11): createState, _index, onSelect, _TabBar, _tabs, ../screens/browser_screen.dart, ../screens/connect_sheet.dart, ../screens/home_screen.dart (+3 more) + +### Community 18 - "JSON Parsing Helpers" +Cohesion: 0.20 +Nodes (9): asBool, asDouble, asInt, asString, null, orElse, toString, return (+1 more) + +### Community 19 - "Search Screen" +Cohesion: 0.25 +Nodes (8): browser_screen.dart, build, _controller, createState, dispose, _query, _Results, searchProvider + +### Community 20 - "Favorites Screen" +Cohesion: 0.25 +Nodes (8): build, FavoritesScreen, _SectionLabel, text, starredProvider, MaterialPageRoute, ../state/providers.dart, ../theme/tokens.dart + +### Community 21 - "Home Screen" +Cohesion: 0.33 +Nodes (8): build, HomeScreen, message, recentAlbumsProvider, recentSongsProvider, rediscoverProvider, rediscoverSeedProvider, ../widgets/hairline_panel.dart + +### Community 22 - "Stateful Screen Widgets" +Cohesion: 0.40 +Nodes (6): ConsumerState, ConsumerStatefulWidget, SearchScreen, _SearchScreenState, AppShell, _AppShellState + +### Community 23 - "Android Launcher Icons" +Cohesion: 1.00 +Nodes (5): App Launcher Icon (hdpi), App Launcher Icon (mdpi), App Launcher Icon (xhdpi), App Launcher Icon (xxhdpi), App Launcher Icon (xxxhdpi) + +### Community 24 - "Widget Tests" +Cohesion: 0.40 +Nodes (4): package:flutter_riverpod/flutter_riverpod.dart, package:flutter_test/flutter_test.dart, package:ratune_mobile/main.dart, main + +### Community 25 - "Favorite Rating Controls" +Cohesion: 0.50 +Nodes (4): build, _FavRating, build, favoritesProvider + +### Community 27 - "iOS Launch Images" +Cohesion: 1.00 +Nodes (3): Launch Image (2x), Launch Image (3x), Launch Image (1x) + +## Knowledge Gaps +- **280 isolated node(s):** `XCTest`, `PlayRecord`, `RediscoverArtist`, `songId`, `title` (+275 more) + These have ≤1 connection - possible missing edges or undocumented components. +- **2 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. + +## Suggested Questions +_Questions this graph is uniquely positioned to answer:_ + +- **Why does `SubsonicClient` connect `Subsonic API Client` to `Connection & State Providers`?** + _High betweenness centrality (0.025) - this node is a cross-community bridge._ +- **Why does `Starred2` connect `Subsonic Data Models` to `Connection & State Providers`?** + _High betweenness centrality (0.011) - this node is a cross-community bridge._ +- **Why does `Song` connect `Now Playing Screen` to `Subsonic Data Models`?** + _High betweenness centrality (0.010) - this node is a cross-community bridge._ +- **Are the 14 inferred relationships involving `App Icon 1024x1024 (Flutter logo master)` (e.g. with `App Icon 20x20 @1x` and `App Icon 20x20 @2x`) actually correct?** + _`App Icon 1024x1024 (Flutter logo master)` has 14 INFERRED edges - model-reasoned connections that need verification._ +- **Are the 3 inferred relationships involving `ratune_mobile (Flutter package)` (e.g. with `Dart Analyzer Configuration` and `Linux Top-Level CMake Build`) actually correct?** + _`ratune_mobile (Flutter package)` has 3 INFERRED edges - model-reasoned connections that need verification._ +- **What connects `XCTest`, `PlayRecord`, `RediscoverArtist` to the rest of the system?** + _280 weakly-connected nodes found - possible documentation gaps or missing edges._ +- **Should `Playback Engine & App Entry` be split into smaller, more focused modules?** + _Cohesion score 0.05094130675526024 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/009d02e50fbd6085f1e3afa7663e4711d003cfd93ca88d12357b4ebae6c07a46.json b/graphify-out/cache/ast/v0.9.26/009d02e50fbd6085f1e3afa7663e4711d003cfd93ca88d12357b4ebae6c07a46.json new file mode 100644 index 0000000..08eb0a6 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/009d02e50fbd6085f1e3afa7663e4711d003cfd93ca88d12357b4ebae6c07a46.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "label": "connect_sheet.dart", "file_type": "code", "source_file": "lib/screens/connect_sheet.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_connectsheet", "label": "_ConnectSheet", "file_type": "code", "source_file": "lib/screens/connect_sheet.dart", "source_location": null}, {"id": "consumerstatefulwidget", "label": "ConsumerStatefulWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_connectsheetstate", "label": "_ConnectSheetState", "file_type": "code", "source_file": "lib/screens/connect_sheet.dart", "source_location": null}, {"id": "consumerstate", "label": "ConsumerState", "file_type": "code", "source_file": null, "source_location": null}, {"id": "connectsheet", "label": "_ConnectSheet", "file_type": "code", "source_file": null, "source_location": null}, {"id": "connectionprovider", "label": "connectionProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_url", "label": "_url", "file_type": "code", "source_file": "lib/screens/connect_sheet.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_user", "label": "_user", "file_type": "code", "source_file": "lib/screens/connect_sheet.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_pass", "label": "_pass", "file_type": "code", "source_file": "lib/screens/connect_sheet.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_busy", "label": "_busy", "file_type": "code", "source_file": "lib/screens/connect_sheet.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_showconnectsheet", "label": "showConnectSheet", "file_type": "code", "source_file": "lib/screens/connect_sheet.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_createstate", "label": "createState", "file_type": "code", "source_file": "lib/screens/connect_sheet.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_initstate", "label": "initState", "file_type": "code", "source_file": "lib/screens/connect_sheet.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dispose", "label": "dispose", "file_type": "code", "source_file": "lib/screens/connect_sheet.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_connect", "label": "_connect", "file_type": "code", "source_file": "lib/screens/connect_sheet.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_build", "label": "build", "file_type": "code", "source_file": "lib/screens/connect_sheet.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_field", "label": "_field", "file_type": "code", "source_file": "lib/screens/connect_sheet.dart", "source_location": null}, {"id": "package_flutter_material_dart", "label": "package:flutter/material.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_riverpod_flutter_riverpod_dart", "label": "package:flutter_riverpod/flutter_riverpod.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "state_providers_dart", "label": "../state/providers.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "subsonic_credentials_dart", "label": "../subsonic/credentials.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "theme_tokens_dart", "label": "../theme/tokens.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_connectsheet", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_connectsheet", "target": "consumerstatefulwidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_connectsheetstate", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_connectsheetstate", "target": "consumerstate", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_connectsheetstate", "target": "connectsheet", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_connectsheetstate", "target": "connectionprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_connectsheetstate", "target": "connectionprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_connectsheetstate", "target": "connectionprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_url", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_user", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_pass", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_busy", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_showconnectsheet", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_connectsheet", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_createstate", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_initstate", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_initstate", "target": "connectionprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dispose", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_connect", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_connect", "target": "connectionprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_build", "target": "connectionprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_field", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "package_flutter_material_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "package_flutter_riverpod_flutter_riverpod_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "state_providers_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "subsonic_credentials_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_connect_sheet_dart", "target": "theme_tokens_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/connect_sheet.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/0161b3a6c59f8a03a65a3f4b987712106d7f5191c5cc550df3aea1c37a00d5b6.json b/graphify-out/cache/ast/v0.9.26/0161b3a6c59f8a03a65a3f4b987712106d7f5191c5cc550df3aea1c37a00d5b6.json new file mode 100644 index 0000000..d8e89e0 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/0161b3a6c59f8a03a65a3f4b987712106d7f5191c5cc550df3aea1c37a00d5b6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "label": "subsonic_client.dart", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_subsonicerror", "label": "SubsonicError", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "exception", "label": "Exception", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_subsonicclient", "label": "SubsonicClient", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_code", "label": "code", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_message", "label": "message", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_autherrorcode", "label": "authErrorCode", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "static_const_int", "label": "static const int", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_isauthfailure", "label": "isAuthFailure", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "bool_get", "label": "bool get", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_baseurl", "label": "baseUrl", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_username", "label": "username", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_password", "label": "_password", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dio", "label": "_dio", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "dio", "label": "Dio", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_apiversion", "label": "apiVersion", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "static_const_string", "label": "static const String", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_clientname", "label": "clientName", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_saltalphabet", "label": "_saltAlphabet", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_tostring", "label": "toString", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_trimtrailingslash", "label": "_trimTrailingSlash", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_makesalt", "label": "_makeSalt", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_maketoken", "label": "_makeToken", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_authparams", "label": "_authParams", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_uri", "label": "_uri", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_get", "label": "_get", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_ping", "label": "ping", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_getartists", "label": "getArtists", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_getartist", "label": "getArtist", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_getalbum", "label": "getAlbum", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_search3", "label": "search3", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_getstarred2", "label": "getStarred2", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_setstarred", "label": "setStarred", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_setrating", "label": "setRating", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_scrobble", "label": "scrobble", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_streamuri", "label": "streamUri", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_coverarturi", "label": "coverArtUri", "file_type": "code", "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null}, {"id": "dart_convert", "label": "dart:convert", "file_type": "code", "source_file": null, "source_location": null}, {"id": "dart_math", "label": "dart:math", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_crypto_crypto_dart", "label": "package:crypto/crypto.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_dio_dio_dart", "label": "package:dio/dio.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "json_helpers_dart", "label": "json_helpers.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "models_dart", "label": "models.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_subsonicerror", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_subsonicerror", "target": "exception", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_subsonicclient", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_code", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_message", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_autherrorcode", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "static_const_int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_isauthfailure", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "bool_get", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_baseurl", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_username", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_password", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dio", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "dio", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_apiversion", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "static_const_string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_clientname", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "static_const_string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_saltalphabet", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "static_const_string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_tostring", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_trimtrailingslash", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_makesalt", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_maketoken", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_authparams", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_uri", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_get", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_ping", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_getartists", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_getartist", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_getalbum", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_search3", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_getstarred2", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_setstarred", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_setrating", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_scrobble", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_streamuri", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_coverarturi", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "dart_convert", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "dart_math", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "package_crypto_crypto_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "package_dio_dio_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "json_helpers_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_subsonic_client_dart", "target": "models_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/subsonic_client.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/0390825f346bed0f14ae2b127d1516dd1a12c2e2ef7d77dacffd40265b676481.json b/graphify-out/cache/ast/v0.9.26/0390825f346bed0f14ae2b127d1516dd1a12c2e2ef7d77dacffd40265b676481.json new file mode 100644 index 0000000..5ba887f --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/0390825f346bed0f14ae2b127d1516dd1a12c2e2ef7d77dacffd40265b676481.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_runner_bridging_header_h", "label": "Runner-Bridging-Header.h", "file_type": "code", "source_file": "ios/Runner/Runner-Bridging-Header.h", "source_location": "L1"}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_runner_bridging_header_h", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_generatedpluginregistrant_h", "relation": "imports", "confidence": "EXTRACTED", "source_file": "ios/Runner/Runner-Bridging-Header.h", "source_location": "L1", "weight": 1.0, "context": "import"}], "raw_calls": [], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/07fc6fef9c1169f9aeec8a31c93a0564c677cd48f4bb801881c0b87b4eec7465.json b/graphify-out/cache/ast/v0.9.26/07fc6fef9c1169f9aeec8a31c93a0564c677cd48f4bb801881c0b87b4eec7465.json new file mode 100644 index 0000000..29ddb38 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/07fc6fef9c1169f9aeec8a31c93a0564c677cd48f4bb801881c0b87b4eec7465.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "label": "browser_screen.dart", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_browserscreen", "label": "BrowserScreen", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "consumerwidget", "label": "ConsumerWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "subsonicclientprovider", "label": "subsonicClientProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "artistsprovider", "label": "artistsProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_action", "label": "_Action", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "statelesswidget", "label": "StatelessWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_artistscreen", "label": "ArtistScreen", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "artistprovider", "label": "artistProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_albumscreen", "label": "AlbumScreen", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "albumprovider", "label": "albumProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "playbackprovider", "label": "playbackProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_browserow", "label": "BrowseRow", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_detailscaffold", "label": "_DetailScaffold", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_notconnected", "label": "_NotConnected", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_centered", "label": "_Centered", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_loading", "label": "_Loading", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_errortext", "label": "_ErrorText", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_icon", "label": "icon", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "icondata", "label": "IconData", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_label", "label": "label", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_ontap", "label": "onTap", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "voidcallback", "label": "VoidCallback", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_id", "label": "id", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_title", "label": "title", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_leading", "label": "leading", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "string", "label": "String?", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_trailing", "label": "trailing", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_child", "label": "child", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "widget", "label": "Widget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_message", "label": "message", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_m", "label": "m", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_s", "label": "s", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "label": "build", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "materialpageroute", "label": "MaterialPageRoute", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_fmtduration", "label": "_fmtDuration", "file_type": "code", "source_file": "lib/screens/browser_screen.dart", "source_location": null}, {"id": "package_flutter_material_dart", "label": "package:flutter/material.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_riverpod_flutter_riverpod_dart", "label": "package:flutter_riverpod/flutter_riverpod.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "state_providers_dart", "label": "../state/providers.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "theme_tokens_dart", "label": "../theme/tokens.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "widgets_hairline_panel_dart", "label": "../widgets/hairline_panel.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "favorites_screen_dart", "label": "favorites_screen.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "search_screen_dart", "label": "search_screen.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_browserscreen", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_browserscreen", "target": "consumerwidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_browserscreen", "target": "subsonicclientprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_browserscreen", "target": "artistsprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_action", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_action", "target": "statelesswidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_artistscreen", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_artistscreen", "target": "consumerwidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_artistscreen", "target": "artistprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_albumscreen", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_albumscreen", "target": "consumerwidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_albumscreen", "target": "albumprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_albumscreen", "target": "playbackprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_browserow", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_browserow", "target": "statelesswidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_detailscaffold", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_detailscaffold", "target": "statelesswidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_notconnected", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_notconnected", "target": "statelesswidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_centered", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_centered", "target": "statelesswidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_loading", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_loading", "target": "statelesswidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_errortext", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_errortext", "target": "statelesswidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_icon", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "icondata", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_label", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_ontap", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "voidcallback", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_id", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_id", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_title", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_leading", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_trailing", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_ontap", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "voidcallback", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_title", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_child", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "widget", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_child", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "widget", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_message", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_m", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_s", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "target": "subsonicclientprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "target": "artistsprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "target": "materialpageroute", "relation": "navigates", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "route_object"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "target": "materialpageroute", "relation": "navigates", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "route_object"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "target": "materialpageroute", "relation": "navigates", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "route_object"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_action", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "target": "artistprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "target": "materialpageroute", "relation": "navigates", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "route_object"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "target": "albumprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "target": "playbackprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_detailscaffold", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_notconnected", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_centered", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_loading", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_errortext", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_fmtduration", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "package_flutter_material_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "package_flutter_riverpod_flutter_riverpod_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "state_providers_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "theme_tokens_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "widgets_hairline_panel_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "favorites_screen_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_browser_screen_dart", "target": "search_screen_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/browser_screen.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/1770c9d29552e6d419d2219dd704377f65ee108f8ec7f049ec2635736ffdf9bf.json b/graphify-out/cache/ast/v0.9.26/1770c9d29552e6d419d2219dd704377f65ee108f8ec7f049ec2635736ffdf9bf.json new file mode 100644 index 0000000..0b5ea60 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/1770c9d29552e6d419d2219dd704377f65ee108f8ec7f049ec2635736ffdf9bf.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_cc", "label": "my_application.cc", "file_type": "code", "source_file": "linux/runner/my_application.cc", "source_location": "L1"}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_myapplication", "label": "_MyApplication", "file_type": "code", "source_file": "linux/runner/my_application.cc", "source_location": "L10", "_callable": true, "_callable_class": true}, {"id": "gtkapplication", "label": "GtkApplication", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/runner/my_application.cc"}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_myapplication_parent_instance", "label": "parent_instance", "file_type": "code", "source_file": "linux/runner/my_application.cc", "source_location": "L11"}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_myapplication_dart_entrypoint_arguments", "label": "dart_entrypoint_arguments", "file_type": "code", "source_file": "linux/runner/my_application.cc", "source_location": "L12"}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_first_frame_cb", "label": "first_frame_cb()", "file_type": "code", "source_file": "linux/runner/my_application.cc", "source_location": "L18", "_callable": true}, {"id": "flview", "label": "FlView", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/runner/my_application.cc"}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "label": "my_application_activate()", "file_type": "code", "source_file": "linux/runner/my_application.cc", "source_location": "L23", "_callable": true}, {"id": "gapplication", "label": "GApplication", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/runner/my_application.cc"}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_local_command_line", "label": "my_application_local_command_line()", "file_type": "code", "source_file": "linux/runner/my_application.cc", "source_location": "L82", "_callable": true}, {"id": "gboolean", "label": "gboolean", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/runner/my_application.cc"}, {"id": "gchar", "label": "gchar", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/runner/my_application.cc"}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_startup", "label": "my_application_startup()", "file_type": "code", "source_file": "linux/runner/my_application.cc", "source_location": "L103", "_callable": true}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_shutdown", "label": "my_application_shutdown()", "file_type": "code", "source_file": "linux/runner/my_application.cc", "source_location": "L112", "_callable": true}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_dispose", "label": "my_application_dispose()", "file_type": "code", "source_file": "linux/runner/my_application.cc", "source_location": "L121", "_callable": true}, {"id": "gobject", "label": "GObject", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/runner/my_application.cc"}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_class_init", "label": "my_application_class_init()", "file_type": "code", "source_file": "linux/runner/my_application.cc", "source_location": "L127", "_callable": true}, {"id": "myapplicationclass", "label": "MyApplicationClass", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/runner/my_application.cc"}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_init", "label": "my_application_init()", "file_type": "code", "source_file": "linux/runner/my_application.cc", "source_location": "L136", "_callable": true}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_new", "label": "my_application_new()", "file_type": "code", "source_file": "linux/runner/my_application.cc", "source_location": "L138", "_callable": true}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_cc", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_h", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L1", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_cc", "target": "flutter_linux", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L3", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_cc", "target": "gdkx", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L5", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_cc", "target": "generated_plugin_registrant", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L8", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_cc", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_myapplication", "relation": "contains", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L10", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_myapplication", "target": "gtkapplication", "relation": "references", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L11", "weight": 1.0, "context": "field"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_myapplication", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_myapplication_parent_instance", "relation": "defines", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L11", "weight": 1.0, "context": "field"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_myapplication", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_myapplication_dart_entrypoint_arguments", "relation": "defines", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L12", "weight": 1.0, "context": "field"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_cc", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_first_frame_cb", "relation": "contains", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L18", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_first_frame_cb", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_myapplication", "relation": "references", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L18", "weight": 1.0, "context": "parameter_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_first_frame_cb", "target": "flview", "relation": "references", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L18", "weight": 1.0, "context": "parameter_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_cc", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L23", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "target": "gapplication", "relation": "references", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L23", "weight": 1.0, "context": "parameter_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_cc", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_local_command_line", "relation": "contains", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L82", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_local_command_line", "target": "gboolean", "relation": "references", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L82", "weight": 1.0, "context": "return_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_local_command_line", "target": "gapplication", "relation": "references", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L82", "weight": 1.0, "context": "parameter_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_local_command_line", "target": "gchar", "relation": "references", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L82", "weight": 1.0, "context": "parameter_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_cc", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_startup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L103", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_startup", "target": "gapplication", "relation": "references", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L103", "weight": 1.0, "context": "parameter_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_cc", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_shutdown", "relation": "contains", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L112", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_shutdown", "target": "gapplication", "relation": "references", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L112", "weight": 1.0, "context": "parameter_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_cc", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_dispose", "relation": "contains", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L121", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_dispose", "target": "gobject", "relation": "references", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L121", "weight": 1.0, "context": "parameter_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_cc", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_class_init", "relation": "contains", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L127", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_class_init", "target": "myapplicationclass", "relation": "references", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L127", "weight": 1.0, "context": "parameter_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_cc", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_init", "relation": "contains", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L136", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_init", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_myapplication", "relation": "references", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L136", "weight": 1.0, "context": "parameter_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_cc", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_new", "relation": "contains", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L138", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_new", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_myapplication", "relation": "references", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.cc", "source_location": "L138", "weight": 1.0, "context": "return_type"}], "raw_calls": [{"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_first_frame_cb", "callee": "gtk_widget_show", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L19", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_first_frame_cb", "callee": "gtk_widget_get_toplevel", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L19", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_first_frame_cb", "callee": "GTK_WIDGET", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L19", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "MY_APPLICATION", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L24", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "GTK_WINDOW", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L26", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "gtk_application_window_new", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L26", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "GTK_APPLICATION", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L26", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "gtk_window_get_screen", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L37", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "GDK_IS_X11_SCREEN", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L38", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "gdk_x11_screen_get_window_manager_name", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L39", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "g_strcmp0", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L40", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "GTK_HEADER_BAR", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L46", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "gtk_header_bar_new", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L46", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "gtk_widget_show", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L47", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "GTK_WIDGET", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L47", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "gtk_header_bar_set_title", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L48", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "gtk_header_bar_set_show_close_button", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L49", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "gtk_window_set_titlebar", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L50", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "GTK_WIDGET", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L50", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "gtk_window_set_title", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L52", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "gtk_window_set_default_size", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L55", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "g_autoptr", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L57", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "fl_dart_project_new", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L57", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "fl_dart_project_set_dart_entrypoint_arguments", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L58", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "fl_view_new", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L61", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "gdk_rgba_parse", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L65", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "fl_view_set_background_color", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L66", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "gtk_widget_show", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L67", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "GTK_WIDGET", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L67", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "gtk_container_add", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L68", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "GTK_CONTAINER", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L68", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "GTK_WIDGET", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L68", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "g_signal_connect_swapped", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L72", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "G_CALLBACK", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L72", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "gtk_widget_realize", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L74", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "GTK_WIDGET", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L74", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "fl_register_plugins", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L76", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "FL_PLUGIN_REGISTRY", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L76", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "gtk_widget_grab_focus", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L78", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_activate", "callee": "GTK_WIDGET", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L78", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_local_command_line", "callee": "MY_APPLICATION", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L85", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_local_command_line", "callee": "g_strdupv", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L87", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_local_command_line", "callee": "g_autoptr", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L89", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_local_command_line", "callee": "g_application_register", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L90", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_local_command_line", "callee": "g_warning", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L91", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_local_command_line", "callee": "g_application_activate", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L96", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_startup", "callee": "startup", "is_member_call": true, "source_file": "linux/runner/my_application.cc", "source_location": "L108", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_startup", "callee": "G_APPLICATION_CLASS", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L108", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_shutdown", "callee": "shutdown", "is_member_call": true, "source_file": "linux/runner/my_application.cc", "source_location": "L117", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_shutdown", "callee": "G_APPLICATION_CLASS", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L117", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_dispose", "callee": "MY_APPLICATION", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L122", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_dispose", "callee": "g_clear_pointer", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L123", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_dispose", "callee": "dispose", "is_member_call": true, "source_file": "linux/runner/my_application.cc", "source_location": "L124", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_dispose", "callee": "G_OBJECT_CLASS", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L124", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_class_init", "callee": "G_APPLICATION_CLASS", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L128", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_class_init", "callee": "G_APPLICATION_CLASS", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L129", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_class_init", "callee": "G_APPLICATION_CLASS", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L131", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_class_init", "callee": "G_APPLICATION_CLASS", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L132", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_class_init", "callee": "G_OBJECT_CLASS", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L133", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_new", "callee": "g_set_prgname", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L143", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_new", "callee": "MY_APPLICATION", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L145", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_new", "callee": "g_object_new", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L145", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_my_application_new", "callee": "my_application_get_type", "is_member_call": false, "source_file": "linux/runner/my_application.cc", "source_location": "L145", "receiver": null, "lang": "cpp"}], "cpp_type_table": {"path": "/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/runner/my_application.cc", "table": {"background_color": "GdkRGBA", "view": "FlView", "header_bar": "GtkHeaderBar", "screen": "GdkScreen", "window": "GtkWindow", "self": "MyApplication"}}} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/177ce67aa2de78f757a34e837ba53b39725dd54903f15881b61c680fede827cd.json b/graphify-out/cache/ast/v0.9.26/177ce67aa2de78f757a34e837ba53b39725dd54903f15881b61c680fede827cd.json new file mode 100644 index 0000000..d51f5bb --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/177ce67aa2de78f757a34e837ba53b39725dd54903f15881b61c680fede827cd.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_main_cc", "label": "main.cc", "file_type": "code", "source_file": "linux/runner/main.cc", "source_location": "L1"}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_main_main", "label": "main()", "file_type": "code", "source_file": "linux/runner/main.cc", "source_location": "L3", "_callable": true}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_main_cc", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_h", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "linux/runner/main.cc", "source_location": "L1", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_main_cc", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_main_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "linux/runner/main.cc", "source_location": "L3", "weight": 1.0}], "raw_calls": [{"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_main_main", "callee": "g_autoptr", "is_member_call": false, "source_file": "linux/runner/main.cc", "source_location": "L4", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_main_main", "callee": "my_application_new", "is_member_call": false, "source_file": "linux/runner/main.cc", "source_location": "L4", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_main_main", "callee": "g_application_run", "is_member_call": false, "source_file": "linux/runner/main.cc", "source_location": "L5", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_main_main", "callee": "G_APPLICATION", "is_member_call": false, "source_file": "linux/runner/main.cc", "source_location": "L5", "receiver": null, "lang": "cpp"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/28836244f262d2c0fa10f6089b672474b47cfcb3f8f1a86ce3ef764fc66f2917.json b/graphify-out/cache/ast/v0.9.26/28836244f262d2c0fa10f6089b672474b47cfcb3f8f1a86ce3ef764fc66f2917.json new file mode 100644 index 0000000..1718283 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/28836244f262d2c0fa10f6089b672474b47cfcb3f8f1a86ce3ef764fc66f2917.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "label": "search_screen.dart", "file_type": "code", "source_file": "lib/screens/search_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_searchscreen", "label": "SearchScreen", "file_type": "code", "source_file": "lib/screens/search_screen.dart", "source_location": null}, {"id": "consumerstatefulwidget", "label": "ConsumerStatefulWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_searchscreenstate", "label": "_SearchScreenState", "file_type": "code", "source_file": "lib/screens/search_screen.dart", "source_location": null}, {"id": "consumerstate", "label": "ConsumerState", "file_type": "code", "source_file": null, "source_location": null}, {"id": "searchscreen", "label": "SearchScreen", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_results", "label": "_Results", "file_type": "code", "source_file": "lib/screens/search_screen.dart", "source_location": null}, {"id": "consumerwidget", "label": "ConsumerWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "searchprovider", "label": "searchProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_controller", "label": "_controller", "file_type": "code", "source_file": "lib/screens/search_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_query", "label": "_query", "file_type": "code", "source_file": "lib/screens/search_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_createstate", "label": "createState", "file_type": "code", "source_file": "lib/screens/search_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dispose", "label": "dispose", "file_type": "code", "source_file": "lib/screens/search_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_build", "label": "build", "file_type": "code", "source_file": "lib/screens/search_screen.dart", "source_location": null}, {"id": "materialpageroute", "label": "MaterialPageRoute", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_material_dart", "label": "package:flutter/material.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_riverpod_flutter_riverpod_dart", "label": "package:flutter_riverpod/flutter_riverpod.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "state_providers_dart", "label": "../state/providers.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "theme_tokens_dart", "label": "../theme/tokens.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "browser_screen_dart", "label": "browser_screen.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_searchscreen", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_searchscreen", "target": "consumerstatefulwidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_searchscreenstate", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_searchscreenstate", "target": "consumerstate", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_searchscreenstate", "target": "searchscreen", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_results", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_results", "target": "consumerwidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_results", "target": "searchprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_controller", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_query", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_query", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_createstate", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dispose", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_results", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_build", "target": "searchprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_build", "target": "materialpageroute", "relation": "navigates", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0, "context": "route_object"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_build", "target": "materialpageroute", "relation": "navigates", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0, "context": "route_object"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "target": "package_flutter_material_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "target": "package_flutter_riverpod_flutter_riverpod_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "target": "state_providers_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "target": "theme_tokens_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_search_screen_dart", "target": "browser_screen_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/search_screen.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/296f463a71ef948f73c34cee5ab9bea3bf111b75ae649a285d886ac32c8dc5f4.json b/graphify-out/cache/ast/v0.9.26/296f463a71ef948f73c34cee5ab9bea3bf111b75ae649a285d886ac32c8dc5f4.json new file mode 100644 index 0000000..fc9a7ab --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/296f463a71ef948f73c34cee5ab9bea3bf111b75ae649a285d886ac32c8dc5f4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_app_theme_dart", "label": "app_theme.dart", "file_type": "code", "source_file": "lib/theme/app_theme.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_app_theme_mono", "label": "mono", "file_type": "code", "source_file": "lib/theme/app_theme.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_app_theme_scheme", "label": "scheme", "file_type": "code", "source_file": "lib/theme/app_theme.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_app_theme_buildratunetheme", "label": "buildRatuneTheme", "file_type": "code", "source_file": "lib/theme/app_theme.dart", "source_location": null}, {"id": "package_flutter_material_dart", "label": "package:flutter/material.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_google_fonts_google_fonts_dart", "label": "package:google_fonts/google_fonts.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "tokens_dart", "label": "tokens.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_app_theme_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_app_theme_mono", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/app_theme.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_app_theme_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_app_theme_scheme", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/app_theme.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_app_theme_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_app_theme_buildratunetheme", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/app_theme.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_app_theme_dart", "target": "package_flutter_material_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/app_theme.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_app_theme_dart", "target": "package_google_fonts_google_fonts_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/app_theme.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_app_theme_dart", "target": "tokens_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/app_theme.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/3108512779c4feb4ab813f0416d23186952d73aaf0a086b4fe47215d83deedbc.json b/graphify-out/cache/ast/v0.9.26/3108512779c4feb4ab813f0416d23186952d73aaf0a086b4fe47215d83deedbc.json new file mode 100644 index 0000000..0d09f80 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/3108512779c4feb4ab813f0416d23186952d73aaf0a086b4fe47215d83deedbc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_dart", "label": "home_screen.dart", "file_type": "code", "source_file": "lib/screens/home_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_homescreen", "label": "HomeScreen", "file_type": "code", "source_file": "lib/screens/home_screen.dart", "source_location": null}, {"id": "consumerwidget", "label": "ConsumerWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "subsonicclientprovider", "label": "subsonicClientProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "recentalbumsprovider", "label": "recentAlbumsProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "recentsongsprovider", "label": "recentSongsProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "rediscoverprovider", "label": "rediscoverProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "rediscoverseedprovider", "label": "rediscoverSeedProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_empty", "label": "_Empty", "file_type": "code", "source_file": "lib/screens/home_screen.dart", "source_location": null}, {"id": "statelesswidget", "label": "StatelessWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_message", "label": "message", "file_type": "code", "source_file": "lib/screens/home_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_build", "label": "build", "file_type": "code", "source_file": "lib/screens/home_screen.dart", "source_location": null}, {"id": "materialpageroute", "label": "MaterialPageRoute", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_material_dart", "label": "package:flutter/material.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_riverpod_flutter_riverpod_dart", "label": "package:flutter_riverpod/flutter_riverpod.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "state_providers_dart", "label": "../state/providers.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "theme_tokens_dart", "label": "../theme/tokens.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "widgets_hairline_panel_dart", "label": "../widgets/hairline_panel.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "browser_screen_dart", "label": "browser_screen.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_homescreen", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_homescreen", "target": "consumerwidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_homescreen", "target": "subsonicclientprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_homescreen", "target": "recentalbumsprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_homescreen", "target": "recentsongsprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_homescreen", "target": "rediscoverprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_homescreen", "target": "rediscoverseedprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_empty", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_empty", "target": "statelesswidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_message", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_build", "target": "subsonicclientprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_build", "target": "recentalbumsprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_build", "target": "recentsongsprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_build", "target": "rediscoverprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_build", "target": "rediscoverseedprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_build", "target": "materialpageroute", "relation": "navigates", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0, "context": "route_object"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_build", "target": "materialpageroute", "relation": "navigates", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0, "context": "route_object"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_empty", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_dart", "target": "package_flutter_material_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_dart", "target": "package_flutter_riverpod_flutter_riverpod_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_dart", "target": "state_providers_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_dart", "target": "theme_tokens_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_dart", "target": "widgets_hairline_panel_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_home_screen_dart", "target": "browser_screen_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/home_screen.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/370bc3be25df5ff5daa46329da2e968fbfeaf113ff3190b2fa630949d9bc8bfa.json b/graphify-out/cache/ast/v0.9.26/370bc3be25df5ff5daa46329da2e968fbfeaf113ff3190b2fa630949d9bc8bfa.json new file mode 100644 index 0000000..552692d --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/370bc3be25df5ff5daa46329da2e968fbfeaf113ff3190b2fa630949d9bc8bfa.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "label": "play_history.dart", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_playrecord", "label": "PlayRecord", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_rediscoverartist", "label": "RediscoverArtist", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_historycontroller", "label": "HistoryController", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "statenotifier", "label": "StateNotifier", "file_type": "code", "source_file": null, "source_location": null}, {"id": "list", "label": "List", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_songid", "label": "songId", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_title", "label": "title", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_playedat", "label": "playedAt", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "datetime", "label": "DateTime", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_album", "label": "album", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "string", "label": "String?", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_albumid", "label": "albumId", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_artist", "label": "artist", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_artistid", "label": "artistId", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_coverart", "label": "coverArt", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_duration", "label": "duration", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "int", "label": "int?", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_name", "label": "name", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_lastplayed", "label": "lastPlayed", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_playcount", "label": "playCount", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_maxrecords", "label": "_maxRecords", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "static_const_int", "label": "static const int", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_file", "label": "_file", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "file", "label": "File?", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_seen", "label": "seen", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_out", "label": "out", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "return", "label": "return", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_count", "label": "count", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_mindays", "label": "minDays", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_seed", "label": "seed", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_ref", "label": "ref", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_cutoff", "label": "cutoff", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_byartist", "label": "byArtist", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_candidates", "label": "candidates", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_pool", "label": "pool", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_tojson", "label": "toJson", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_fromjson", "label": "fromJson", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_tosong", "label": "toSong", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_fromsong", "label": "fromSong", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_load", "label": "_load", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_record", "label": "record", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_persist", "label": "_persist", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_recentsongs", "label": "recentSongs", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_recentalbums", "label": "recentAlbums", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_rediscover", "label": "rediscover", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_take", "label": "take", "file_type": "code", "source_file": "lib/history/play_history.dart", "source_location": null}, {"id": "dart_async", "label": "dart:async", "file_type": "code", "source_file": null, "source_location": null}, {"id": "dart_convert", "label": "dart:convert", "file_type": "code", "source_file": null, "source_location": null}, {"id": "dart_io", "label": "dart:io", "file_type": "code", "source_file": null, "source_location": null}, {"id": "dart_math", "label": "dart:math", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_riverpod_flutter_riverpod_dart", "label": "package:flutter_riverpod/flutter_riverpod.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_path_provider_path_provider_dart", "label": "package:path_provider/path_provider.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "subsonic_models_dart", "label": "../subsonic/models.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_playrecord", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_rediscoverartist", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_historycontroller", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_historycontroller", "target": "statenotifier", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_historycontroller", "target": "list", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_songid", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_title", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_playedat", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "datetime", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_album", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_albumid", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_artist", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_artistid", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_coverart", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_duration", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_artistid", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_name", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_lastplayed", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "datetime", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_playcount", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_maxrecords", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "static_const_int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_file", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "file", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_seen", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_out", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_out", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "return", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_seen", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_out", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_out", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "return", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_count", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_mindays", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_seed", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_ref", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_cutoff", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_byartist", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_candidates", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_pool", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_tojson", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_fromjson", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_tosong", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_fromsong", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_load", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_record", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_persist", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_recentsongs", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_recentalbums", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_rediscover", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_take", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "dart_async", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "dart_convert", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "dart_io", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "dart_math", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "package_flutter_riverpod_flutter_riverpod_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "package_path_provider_path_provider_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_history_play_history_dart", "target": "subsonic_models_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/history/play_history.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/3b9e7b227eec565a3816e9153043e9a7021c0a79fc245c2b454bb50f5694b58c.json b/graphify-out/cache/ast/v0.9.26/3b9e7b227eec565a3816e9153043e9a7021c0a79fc245c2b454bb50f5694b58c.json new file mode 100644 index 0000000..59912fc --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/3b9e7b227eec565a3816e9153043e9a7021c0a79fc245c2b454bb50f5694b58c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_h", "label": "my_application.h", "file_type": "code", "source_file": "linux/runner/my_application.h", "source_location": "L1"}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_runner_my_application_h", "target": "gtk", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "linux/runner/my_application.h", "source_location": "L4", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/477954c2aa133fa44c1c58373205d62a160b3f3784d2790fb9e6e5bd55cf59b1.json b/graphify-out/cache/ast/v0.9.26/477954c2aa133fa44c1c58373205d62a160b3f3784d2790fb9e6e5bd55cf59b1.json new file mode 100644 index 0000000..075b654 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/477954c2aa133fa44c1c58373205d62a160b3f3784d2790fb9e6e5bd55cf59b1.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_android_settings_gradle_kts", "label": "settings.gradle.kts", "file_type": "code", "source_file": "android/settings.gradle.kts", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/4873c830ea6900d07f48c9ffef3ab08e33d42126a1cb564175775170412915f9.json b/graphify-out/cache/ast/v0.9.26/4873c830ea6900d07f48c9ffef3ab08e33d42126a1cb564175775170412915f9.json new file mode 100644 index 0000000..399d016 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/4873c830ea6900d07f48c9ffef3ab08e33d42126a1cb564175775170412915f9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_dart", "label": "accent_extract.dart", "file_type": "code", "source_file": "lib/theme/accent_extract.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_palette", "label": "palette", "file_type": "code", "source_file": "lib/theme/accent_extract.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_picked", "label": "picked", "file_type": "code", "source_file": "lib/theme/accent_extract.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_hsl", "label": "hsl", "file_type": "code", "source_file": "lib/theme/accent_extract.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_lightness", "label": "lightness", "file_type": "code", "source_file": "lib/theme/accent_extract.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_saturation", "label": "saturation", "file_type": "code", "source_file": "lib/theme/accent_extract.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_extractaccent", "label": "extractAccent", "file_type": "code", "source_file": "lib/theme/accent_extract.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_ensurereadable", "label": "_ensureReadable", "file_type": "code", "source_file": "lib/theme/accent_extract.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_withlightness", "label": "withLightness", "file_type": "code", "source_file": "lib/theme/accent_extract.dart", "source_location": null}, {"id": "package_flutter_material_dart", "label": "package:flutter/material.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_palette_generator_palette_generator_dart", "label": "package:palette_generator/palette_generator.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_palette", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent_extract.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_picked", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent_extract.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_picked", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent_extract.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_hsl", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent_extract.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_lightness", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent_extract.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_saturation", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent_extract.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_extractaccent", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent_extract.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_ensurereadable", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent_extract.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_ensurereadable", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent_extract.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_withlightness", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent_extract.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_dart", "target": "package_flutter_material_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent_extract.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_extract_dart", "target": "package_palette_generator_palette_generator_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent_extract.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/5a11dd31b699a7691881a4e41a6f43e9e905ee4308a995e797508224beb2c108.json b/graphify-out/cache/ast/v0.9.26/5a11dd31b699a7691881a4e41a6f43e9e905ee4308a995e797508224beb2c108.json new file mode 100644 index 0000000..bb195b9 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/5a11dd31b699a7691881a4e41a6f43e9e905ee4308a995e797508224beb2c108.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_swift", "label": "AppDelegate.swift", "file_type": "code", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L1"}, {"id": "flutter", "label": "Flutter", "file_type": "code", "type": "module", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L1"}, {"id": "uikit", "label": "UIKit", "file_type": "code", "type": "module", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L2"}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_appdelegate", "label": "AppDelegate", "file_type": "code", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L4", "_callable": true, "_callable_class": true}, {"id": "flutterappdelegate", "label": "FlutterAppDelegate", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "flutterimplicitenginedelegate", "label": "FlutterImplicitEngineDelegate", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_appdelegate_application", "label": ".application()", "file_type": "code", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L6", "_callable": true}, {"id": "uiapplication", "label": "UIApplication", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/AppDelegate.swift"}, {"id": "any", "label": "Any", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/AppDelegate.swift"}, {"id": "bool", "label": "Bool", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/AppDelegate.swift"}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_appdelegate_didinitializeimplicitflutterengine", "label": ".didInitializeImplicitFlutterEngine()", "file_type": "code", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L13", "_callable": true}, {"id": "flutterimplicitenginebridge", "label": "FlutterImplicitEngineBridge", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/AppDelegate.swift"}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_swift", "target": "flutter", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L1", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_swift", "target": "uikit", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L2", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_swift", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_appdelegate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L4", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_appdelegate", "target": "flutterappdelegate", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L4", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_appdelegate", "target": "flutterimplicitenginedelegate", "relation": "implements", "confidence": "EXTRACTED", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L4", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_appdelegate", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_appdelegate_application", "relation": "method", "confidence": "EXTRACTED", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L6", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_appdelegate_application", "target": "uiapplication", "relation": "references", "confidence": "EXTRACTED", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L6", "weight": 1.0, "context": "parameter_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_appdelegate_application", "target": "uiapplication", "relation": "references", "confidence": "EXTRACTED", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L6", "weight": 1.0, "context": "parameter_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_appdelegate_application", "target": "any", "relation": "references", "confidence": "EXTRACTED", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L6", "weight": 1.0, "context": "parameter_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_appdelegate_application", "target": "bool", "relation": "references", "confidence": "EXTRACTED", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L6", "weight": 1.0, "context": "return_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_appdelegate", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_appdelegate_didinitializeimplicitflutterengine", "relation": "method", "confidence": "EXTRACTED", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L13", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_appdelegate_didinitializeimplicitflutterengine", "target": "flutterimplicitenginebridge", "relation": "references", "confidence": "EXTRACTED", "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L13", "weight": 1.0, "context": "parameter_type"}], "raw_calls": [{"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_appdelegate_appdelegate_didinitializeimplicitflutterengine", "callee": "register", "is_member_call": true, "source_file": "ios/Runner/AppDelegate.swift", "source_location": "L14", "receiver": "GeneratedPluginRegistrant"}], "swift_type_table": {"path": "/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/AppDelegate.swift", "table": {"application": "UIApplication", "launchOptions": "UIApplication", "engineBridge": "FlutterImplicitEngineBridge"}}} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/8d0c7d37d038ca16fd47e2067d94f18325398a5dc5c1f3c7b164645f35e487cd.json b/graphify-out/cache/ast/v0.9.26/8d0c7d37d038ca16fd47e2067d94f18325398a5dc5c1f3c7b164645f35e487cd.json new file mode 100644 index 0000000..2ad66af --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/8d0c7d37d038ca16fd47e2067d94f18325398a5dc5c1f3c7b164645f35e487cd.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "label": "playback_engine.dart", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_playbackstate", "label": "PlaybackState", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_playbackcontroller", "label": "PlaybackController", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "statenotifier", "label": "StateNotifier", "file_type": "code", "source_file": null, "source_location": null}, {"id": "playbackstate", "label": "PlaybackState", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_queue", "label": "queue", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "list", "label": "List", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_currentindex", "label": "currentIndex", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "int", "label": "int?", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_playing", "label": "playing", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_position", "label": "position", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "duration", "label": "Duration", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_duration", "label": "duration", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_shuffle", "label": "shuffle", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_loop", "label": "loop", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "loopmode", "label": "LoopMode", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_supported", "label": "supported", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_current", "label": "current", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "song_get", "label": "Song? get", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_player", "label": "_player", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "audioplayer", "label": "AudioPlayer?", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_audiosupported", "label": "_audioSupported", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "static_bool_get", "label": "static bool get", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_copywith", "label": "copyWith", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_wirestreams", "label": "_wireStreams", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_notifycurrent", "label": "_notifyCurrent", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_sourcefor", "label": "_sourceFor", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_playsongs", "label": "playSongs", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_toggleplaypause", "label": "togglePlayPause", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_next", "label": "next", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_previous", "label": "previous", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_seek", "label": "seek", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_toggleshuffle", "label": "toggleShuffle", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_cycleloop", "label": "cycleLoop", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dispose", "label": "dispose", "file_type": "code", "source_file": "lib/playback/playback_engine.dart", "source_location": null}, {"id": "dart_io", "label": "dart:io", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_foundation_dart", "label": "package:flutter/foundation.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_riverpod_flutter_riverpod_dart", "label": "package:flutter_riverpod/flutter_riverpod.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_just_audio_just_audio_dart", "label": "package:just_audio/just_audio.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_just_audio_background_just_audio_background_dart", "label": "package:just_audio_background/just_audio_background.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "subsonic_models_dart", "label": "../subsonic/models.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_playbackstate", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_playbackcontroller", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_playbackcontroller", "target": "statenotifier", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_playbackcontroller", "target": "playbackstate", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_queue", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "list", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_currentindex", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_playing", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_position", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "duration", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_duration", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "duration", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_shuffle", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_loop", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "loopmode", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_supported", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_current", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "song_get", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_player", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "audioplayer", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_audiosupported", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "static_bool_get", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_copywith", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_wirestreams", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_notifycurrent", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_sourcefor", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_playsongs", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_toggleplaypause", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_next", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_previous", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_seek", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_toggleshuffle", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_cycleloop", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dispose", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "dart_io", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "package_flutter_foundation_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "package_flutter_riverpod_flutter_riverpod_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "package_just_audio_just_audio_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "package_just_audio_background_just_audio_background_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_playback_playback_engine_dart", "target": "subsonic_models_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/playback/playback_engine.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/8e28958ffbbeeda9da40d41a32d72972f2b28a015102cbb49ddca4399f548b8e.json b/graphify-out/cache/ast/v0.9.26/8e28958ffbbeeda9da40d41a32d72972f2b28a015102cbb49ddca4399f548b8e.json new file mode 100644 index 0000000..932b7bf --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/8e28958ffbbeeda9da40d41a32d72972f2b28a015102cbb49ddca4399f548b8e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "label": "now_playing_screen.dart", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_nowplayingscreen", "label": "NowPlayingScreen", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "consumerwidget", "label": "ConsumerWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "playbackprovider", "label": "playbackProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_albumartpanel", "label": "_AlbumArtPanel", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "subsonicclientprovider", "label": "subsonicClientProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_favrating", "label": "_FavRating", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "favoritesprovider", "label": "favoritesProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_infostrip", "label": "_InfoStrip", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "statelesswidget", "label": "StatelessWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_transport", "label": "_Transport", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_artfallback", "label": "_ArtFallback", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_song", "label": "song", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "song", "label": "Song", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_state", "label": "state", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "playbackstate", "label": "PlaybackState", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_accent", "label": "accent", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "color", "label": "Color", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_ref", "label": "ref", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "widgetref", "label": "WidgetRef", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_m", "label": "m", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_s", "label": "s", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_build", "label": "build", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_btn", "label": "_btn", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_fmt", "label": "_fmt", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_fmtdur", "label": "_fmtDur", "file_type": "code", "source_file": "lib/screens/now_playing_screen.dart", "source_location": null}, {"id": "package_flutter_material_dart", "label": "package:flutter/material.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_riverpod_flutter_riverpod_dart", "label": "package:flutter_riverpod/flutter_riverpod.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_just_audio_just_audio_dart", "label": "package:just_audio/just_audio.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "playback_playback_engine_dart", "label": "../playback/playback_engine.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "state_providers_dart", "label": "../state/providers.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "subsonic_models_dart", "label": "../subsonic/models.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "theme_tokens_dart", "label": "../theme/tokens.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "widgets_block_progress_bar_dart", "label": "../widgets/block_progress_bar.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "widgets_hairline_panel_dart", "label": "../widgets/hairline_panel.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_nowplayingscreen", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_nowplayingscreen", "target": "consumerwidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_nowplayingscreen", "target": "playbackprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_albumartpanel", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_albumartpanel", "target": "consumerwidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_albumartpanel", "target": "playbackprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_albumartpanel", "target": "subsonicclientprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_favrating", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_favrating", "target": "consumerwidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_favrating", "target": "favoritesprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_favrating", "target": "favoritesprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_infostrip", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_infostrip", "target": "statelesswidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_transport", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_transport", "target": "statelesswidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_transport", "target": "playbackprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_artfallback", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_artfallback", "target": "statelesswidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_song", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "song", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_song", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "song", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_state", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "playbackstate", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_accent", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "color", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_state", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "playbackstate", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_ref", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "widgetref", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_accent", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "color", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_m", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_s", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_m", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_s", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_build", "target": "playbackprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_albumartpanel", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_build", "target": "playbackprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_build", "target": "subsonicclientprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_favrating", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_build", "target": "favoritesprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_build", "target": "favoritesprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_infostrip", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_transport", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_build", "target": "playbackprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_btn", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_artfallback", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_fmt", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_fmtdur", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "package_flutter_material_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "package_flutter_riverpod_flutter_riverpod_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "package_just_audio_just_audio_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "playback_playback_engine_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "state_providers_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "subsonic_models_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "theme_tokens_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "widgets_block_progress_bar_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_now_playing_screen_dart", "target": "widgets_hairline_panel_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/now_playing_screen.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/9e87fd51dc7757d4a15c46877579c1beb7a71df3a18fca32c4773275afb83303.json b/graphify-out/cache/ast/v0.9.26/9e87fd51dc7757d4a15c46877579c1beb7a71df3a18fca32c4773275afb83303.json new file mode 100644 index 0000000..ceea60a --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/9e87fd51dc7757d4a15c46877579c1beb7a71df3a18fca32c4773275afb83303.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "label": "providers.dart", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_connstatus", "label": "ConnStatus", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_connectionstate", "label": "ConnectionState", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_connectioncontroller", "label": "ConnectionController", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "statenotifier", "label": "StateNotifier", "file_type": "code", "source_file": null, "source_location": null}, {"id": "connectionstate", "label": "ConnectionState", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_status", "label": "status", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "connstatus", "label": "ConnStatus", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_client", "label": "client", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "subsonicclient", "label": "SubsonicClient?", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_credentials", "label": "credentials", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "subsoniccredentials", "label": "SubsonicCredentials?", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_error", "label": "error", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "string", "label": "String?", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_isonline", "label": "isOnline", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "bool_get", "label": "bool get", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_credentialstoreprovider", "label": "credentialStoreProvider", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_store", "label": "_store", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "credentialstore", "label": "CredentialStore", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_connectionprovider", "label": "connectionProvider", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_subsonicclientprovider", "label": "subsonicClientProvider", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_artistsprovider", "label": "artistsProvider", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_result", "label": "result", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_artistprovider", "label": "artistProvider", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_albumprovider", "label": "albumProvider", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_searchprovider", "label": "searchProvider", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_playhistoryprovider", "label": "playHistoryProvider", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_recentsongsprovider", "label": "recentSongsProvider", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_recentalbumsprovider", "label": "recentAlbumsProvider", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_rediscoverseedprovider", "label": "rediscoverSeedProvider", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_rediscoverprovider", "label": "rediscoverProvider", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_history", "label": "history", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_seed", "label": "seed", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_favoritesprovider", "label": "favoritesProvider", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_controller", "label": "controller", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "return", "label": "return", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_starredprovider", "label": "starredProvider", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_playbackprovider", "label": "playbackProvider", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_restore", "label": "_restore", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_connect", "label": "connect", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_disconnect", "label": "disconnect", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_getartist", "label": "getArtist", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_getalbum", "label": "getAlbum", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_search3", "label": "search3", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_rediscover", "label": "rediscover", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_getstarred2", "label": "getStarred2", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_streamurifor", "label": "streamUriFor", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_coverarturifor", "label": "coverArtUriFor", "file_type": "code", "source_file": "lib/state/providers.dart", "source_location": null}, {"id": "subsonicclientprovider", "label": "subsonicClientProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_widgets_dart", "label": "package:flutter/widgets.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_riverpod_flutter_riverpod_dart", "label": "package:flutter_riverpod/flutter_riverpod.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "history_play_history_dart", "label": "../history/play_history.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "playback_playback_engine_dart", "label": "../playback/playback_engine.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "subsonic_credentials_dart", "label": "../subsonic/credentials.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "subsonic_models_dart", "label": "../subsonic/models.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "subsonic_subsonic_client_dart", "label": "../subsonic/subsonic_client.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "theme_accent_dart", "label": "../theme/accent.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "theme_accent_extract_dart", "label": "../theme/accent_extract.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "favorites_dart", "label": "favorites.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "starred2", "label": "Starred2", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_connstatus", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_connectionstate", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_connectioncontroller", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_connectioncontroller", "target": "statenotifier", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_connectioncontroller", "target": "connectionstate", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_status", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "connstatus", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_client", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "subsonicclient", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_credentials", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "subsoniccredentials", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_error", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_isonline", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "bool_get", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_credentialstoreprovider", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_store", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "credentialstore", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_connectionprovider", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_subsonicclientprovider", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_artistsprovider", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_client", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_result", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_artistprovider", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_client", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_albumprovider", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_client", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_searchprovider", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_client", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_playhistoryprovider", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_recentsongsprovider", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_recentalbumsprovider", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_rediscoverseedprovider", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_rediscoverprovider", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_history", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_seed", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_history", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_seed", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_favoritesprovider", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_controller", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_controller", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "return", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_starredprovider", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_client", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_playbackprovider", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_restore", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_connect", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_disconnect", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_getartist", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_getalbum", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_search3", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_rediscover", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_getstarred2", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_streamurifor", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_coverarturifor", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_coverarturifor", "target": "subsonicclientprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "package_flutter_widgets_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "package_flutter_riverpod_flutter_riverpod_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "history_play_history_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "playback_playback_engine_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "subsonic_credentials_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "subsonic_models_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "subsonic_subsonic_client_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "theme_accent_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "theme_accent_extract_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "favorites_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "credentialstore", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0, "context": "type_lookup"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "connectionstate", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0, "context": "type_lookup"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_providers_dart", "target": "starred2", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/providers.dart", "source_location": null, "weight": 1.0, "context": "type_lookup"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/9fad88d9e18c1f3dc6e95849430670b4f7047dcba1a10a809cfecbb2b7d50dd1.json b/graphify-out/cache/ast/v0.9.26/9fad88d9e18c1f3dc6e95849430670b4f7047dcba1a10a809cfecbb2b7d50dd1.json new file mode 100644 index 0000000..b366add --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/9fad88d9e18c1f3dc6e95849430670b4f7047dcba1a10a809cfecbb2b7d50dd1.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "label": "models.dart", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_song", "label": "Song", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_album", "label": "Album", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_artist", "label": "Artist", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_artistindex", "label": "ArtistIndex", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_artistsresult", "label": "ArtistsResult", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_starred2", "label": "Starred2", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_searchresult3", "label": "SearchResult3", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_id", "label": "id", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_title", "label": "title", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "string", "label": "String?", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_albumid", "label": "albumId", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_artistid", "label": "artistId", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_track", "label": "track", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "int", "label": "int?", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_discnumber", "label": "discNumber", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_year", "label": "year", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_genre", "label": "genre", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_coverart", "label": "coverArt", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_duration", "label": "duration", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_bitrate", "label": "bitRate", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_contenttype", "label": "contentType", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_suffix", "label": "suffix", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_size", "label": "size", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_path", "label": "path", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_starred", "label": "starred", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_userrating", "label": "userRating", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_name", "label": "name", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_songcount", "label": "songCount", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_songs", "label": "songs", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "list", "label": "List", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_albumcount", "label": "albumCount", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_albums", "label": "albums", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_artists", "label": "artists", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_indexes", "label": "indexes", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_all", "label": "all", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_fromjson", "label": "fromJson", "file_type": "code", "source_file": "lib/subsonic/models.dart", "source_location": null}, {"id": "json_helpers_dart", "label": "json_helpers.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_song", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_album", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_artist", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_artistindex", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_artistsresult", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_starred2", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_searchresult3", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_id", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_title", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_album", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_artist", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_albumid", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_artistid", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_track", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_discnumber", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_year", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_genre", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_coverart", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_duration", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_bitrate", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_contenttype", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_suffix", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_size", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_path", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_starred", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_userrating", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_id", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_name", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_artist", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_artistid", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_coverart", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_songcount", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_duration", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_year", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_genre", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_starred", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_userrating", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_songs", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "list", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_id", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_name", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_albumcount", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_coverart", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_starred", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_userrating", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "int", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_albums", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "list", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_name", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_artists", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "list", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_indexes", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "list", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_all", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "list", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_artists", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "list", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_albums", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "list", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_songs", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "list", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_artists", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "list", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_albums", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "list", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_songs", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "list", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_fromjson", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_fromjson", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_fromjson", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_fromjson", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_fromjson", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_fromjson", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_fromjson", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_models_dart", "target": "json_helpers_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/models.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/a4535ff7cd97eee6f82de8eddac2ca001b02917f7af5f86d031064ccd0707ce6.json b/graphify-out/cache/ast/v0.9.26/a4535ff7cd97eee6f82de8eddac2ca001b02917f7af5f86d031064ccd0707ce6.json new file mode 100644 index 0000000..e38d34f --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/a4535ff7cd97eee6f82de8eddac2ca001b02917f7af5f86d031064ccd0707ce6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "label": "credentials.dart", "file_type": "code", "source_file": "lib/subsonic/credentials.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_subsoniccredentials", "label": "SubsonicCredentials", "file_type": "code", "source_file": "lib/subsonic/credentials.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_credentialstore", "label": "CredentialStore", "file_type": "code", "source_file": "lib/subsonic/credentials.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_url", "label": "url", "file_type": "code", "source_file": "lib/subsonic/credentials.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_username", "label": "username", "file_type": "code", "source_file": "lib/subsonic/credentials.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_password", "label": "password", "file_type": "code", "source_file": "lib/subsonic/credentials.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_alias", "label": "alias", "file_type": "code", "source_file": "lib/subsonic/credentials.dart", "source_location": null}, {"id": "string", "label": "String?", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_display", "label": "display", "file_type": "code", "source_file": "lib/subsonic/credentials.dart", "source_location": null}, {"id": "string_get", "label": "String get", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_storage", "label": "_storage", "file_type": "code", "source_file": "lib/subsonic/credentials.dart", "source_location": null}, {"id": "fluttersecurestorage", "label": "FlutterSecureStorage", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_kurl", "label": "_kUrl", "file_type": "code", "source_file": "lib/subsonic/credentials.dart", "source_location": null}, {"id": "static_const", "label": "static const", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_kuser", "label": "_kUser", "file_type": "code", "source_file": "lib/subsonic/credentials.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_kpass", "label": "_kPass", "file_type": "code", "source_file": "lib/subsonic/credentials.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_kalias", "label": "_kAlias", "file_type": "code", "source_file": "lib/subsonic/credentials.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_save", "label": "save", "file_type": "code", "source_file": "lib/subsonic/credentials.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_load", "label": "load", "file_type": "code", "source_file": "lib/subsonic/credentials.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_clear", "label": "clear", "file_type": "code", "source_file": "lib/subsonic/credentials.dart", "source_location": null}, {"id": "package_flutter_secure_storage_flutter_secure_storage_dart", "label": "package:flutter_secure_storage/flutter_secure_storage.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_subsoniccredentials", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_credentialstore", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_url", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_username", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_password", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_alias", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_display", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "string_get", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_storage", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "fluttersecurestorage", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_kurl", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "static_const", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_kuser", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "static_const", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_kpass", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "static_const", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_kalias", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "static_const", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_save", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_load", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_clear", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_credentials_dart", "target": "package_flutter_secure_storage_flutter_secure_storage_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/credentials.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/a92662549ca44bee7d2a9ced44f8cb74ed2b2b8a6eef74a95192d379ef63a7ee.json b/graphify-out/cache/ast/v0.9.26/a92662549ca44bee7d2a9ced44f8cb74ed2b2b8a6eef74a95192d379ef63a7ee.json new file mode 100644 index 0000000..5980fef --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/a92662549ca44bee7d2a9ced44f8cb74ed2b2b8a6eef74a95192d379ef63a7ee.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_test_widget_test_dart", "label": "widget_test.dart", "file_type": "code", "source_file": "test/widget_test.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_test_widget_test_main", "label": "main", "file_type": "code", "source_file": "test/widget_test.dart", "source_location": null}, {"id": "package_flutter_riverpod_flutter_riverpod_dart", "label": "package:flutter_riverpod/flutter_riverpod.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_test_flutter_test_dart", "label": "package:flutter_test/flutter_test.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_ratune_mobile_main_dart", "label": "package:ratune_mobile/main.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_test_widget_test_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_test_widget_test_main", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "test/widget_test.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_test_widget_test_dart", "target": "package_flutter_riverpod_flutter_riverpod_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "test/widget_test.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_test_widget_test_dart", "target": "package_flutter_test_flutter_test_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "test/widget_test.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_test_widget_test_dart", "target": "package_ratune_mobile_main_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "test/widget_test.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/afd34f4a9ae4e18dc5d7d4e20e97abff3da52b69e11a355ec291e43d69f676b6.json b/graphify-out/cache/ast/v0.9.26/afd34f4a9ae4e18dc5d7d4e20e97abff3da52b69e11a355ec291e43d69f676b6.json new file mode 100644 index 0000000..a46507a --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/afd34f4a9ae4e18dc5d7d4e20e97abff3da52b69e11a355ec291e43d69f676b6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_dart", "label": "accent.dart", "file_type": "code", "source_file": "lib/theme/accent.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_accentnotifier", "label": "AccentNotifier", "file_type": "code", "source_file": "lib/theme/accent.dart", "source_location": null}, {"id": "statenotifier", "label": "StateNotifier", "file_type": "code", "source_file": null, "source_location": null}, {"id": "color", "label": "Color", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_accentprovider", "label": "accentProvider", "file_type": "code", "source_file": "lib/theme/accent.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_reset", "label": "reset", "file_type": "code", "source_file": "lib/theme/accent.dart", "source_location": null}, {"id": "package_flutter_widgets_dart", "label": "package:flutter/widgets.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_riverpod_flutter_riverpod_dart", "label": "package:flutter_riverpod/flutter_riverpod.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "tokens_dart", "label": "tokens.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_accentnotifier", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_accentnotifier", "target": "statenotifier", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_accentnotifier", "target": "color", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_accentprovider", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_reset", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_dart", "target": "package_flutter_widgets_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_dart", "target": "package_flutter_riverpod_flutter_riverpod_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_accent_dart", "target": "tokens_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/accent.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/b17d5745f858190eca2c5aad736d67db02429a5e0fc969190142326791bb1611.json b/graphify-out/cache/ast/v0.9.26/b17d5745f858190eca2c5aad736d67db02429a5e0fc969190142326791bb1611.json new file mode 100644 index 0000000..83a9e27 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/b17d5745f858190eca2c5aad736d67db02429a5e0fc969190142326791bb1611.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_scenedelegate_swift", "label": "SceneDelegate.swift", "file_type": "code", "source_file": "ios/Runner/SceneDelegate.swift", "source_location": "L1"}, {"id": "flutter", "label": "Flutter", "file_type": "code", "type": "module", "source_file": "ios/Runner/SceneDelegate.swift", "source_location": "L1"}, {"id": "uikit", "label": "UIKit", "file_type": "code", "type": "module", "source_file": "ios/Runner/SceneDelegate.swift", "source_location": "L2"}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_scenedelegate_scenedelegate", "label": "SceneDelegate", "file_type": "code", "source_file": "ios/Runner/SceneDelegate.swift", "source_location": "L4", "_callable": true, "_callable_class": true}, {"id": "flutterscenedelegate", "label": "FlutterSceneDelegate", "file_type": "code", "source_file": "", "source_location": ""}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_scenedelegate_swift", "target": "flutter", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "ios/Runner/SceneDelegate.swift", "source_location": "L1", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_scenedelegate_swift", "target": "uikit", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "ios/Runner/SceneDelegate.swift", "source_location": "L2", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_scenedelegate_swift", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_scenedelegate_scenedelegate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ios/Runner/SceneDelegate.swift", "source_location": "L4", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runner_scenedelegate_scenedelegate", "target": "flutterscenedelegate", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "ios/Runner/SceneDelegate.swift", "source_location": "L4", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/b40e3a3fe87a93c3649a7631b6da47e9c1fffc342366f27de23c8070272cdad3.json b/graphify-out/cache/ast/v0.9.26/b40e3a3fe87a93c3649a7631b6da47e9c1fffc342366f27de23c8070272cdad3.json new file mode 100644 index 0000000..ac03185 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/b40e3a3fe87a93c3649a7631b6da47e9c1fffc342366f27de23c8070272cdad3.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_dart", "label": "block_progress_bar.dart", "file_type": "code", "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_blockprogressbar", "label": "BlockProgressBar", "file_type": "code", "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null}, {"id": "statelesswidget", "label": "StatelessWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_progress", "label": "progress", "file_type": "code", "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_cells", "label": "cells", "file_type": "code", "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_height", "label": "height", "file_type": "code", "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_color", "label": "color", "file_type": "code", "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null}, {"id": "color", "label": "Color?", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_build", "label": "build", "file_type": "code", "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null}, {"id": "package_flutter_material_dart", "label": "package:flutter/material.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "theme_tokens_dart", "label": "../theme/tokens.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_blockprogressbar", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_blockprogressbar", "target": "statelesswidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_progress", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_cells", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_height", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_color", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_dart", "target": "color", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_dart", "target": "package_flutter_material_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_block_progress_bar_dart", "target": "theme_tokens_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/block_progress_bar.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/c15d847d87bf2cfff8476c23b103246e15d795e9480ec6ec26d21d2581d21299.json b/graphify-out/cache/ast/v0.9.26/c15d847d87bf2cfff8476c23b103246e15d795e9480ec6ec26d21d2581d21299.json new file mode 100644 index 0000000..c3725fb --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/c15d847d87bf2cfff8476c23b103246e15d795e9480ec6ec26d21d2581d21299.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "label": "favorites.dart", "file_type": "code", "source_file": "lib/state/favorites.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_favoritesstate", "label": "FavoritesState", "file_type": "code", "source_file": "lib/state/favorites.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_favoritescontroller", "label": "FavoritesController", "file_type": "code", "source_file": "lib/state/favorites.dart", "source_location": null}, {"id": "statenotifier", "label": "StateNotifier", "file_type": "code", "source_file": null, "source_location": null}, {"id": "favoritesstate", "label": "FavoritesState", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_songids", "label": "songIds", "file_type": "code", "source_file": "lib/state/favorites.dart", "source_location": null}, {"id": "set", "label": "Set", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_albumids", "label": "albumIds", "file_type": "code", "source_file": "lib/state/favorites.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_artistids", "label": "artistIds", "file_type": "code", "source_file": "lib/state/favorites.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_ratings", "label": "ratings", "file_type": "code", "source_file": "lib/state/favorites.dart", "source_location": null}, {"id": "map", "label": "Map", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_issongstarred", "label": "isSongStarred", "file_type": "code", "source_file": "lib/state/favorites.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_ratingfor", "label": "ratingFor", "file_type": "code", "source_file": "lib/state/favorites.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_copywith", "label": "copyWith", "file_type": "code", "source_file": "lib/state/favorites.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_hydrate", "label": "hydrate", "file_type": "code", "source_file": "lib/state/favorites.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_clear", "label": "clear", "file_type": "code", "source_file": "lib/state/favorites.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_togglesong", "label": "toggleSong", "file_type": "code", "source_file": "lib/state/favorites.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_ratesong", "label": "rateSong", "file_type": "code", "source_file": "lib/state/favorites.dart", "source_location": null}, {"id": "package_flutter_riverpod_flutter_riverpod_dart", "label": "package:flutter_riverpod/flutter_riverpod.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "subsonic_models_dart", "label": "../subsonic/models.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "subsonic_subsonic_client_dart", "label": "../subsonic/subsonic_client.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_favoritesstate", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_favoritescontroller", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_favoritescontroller", "target": "statenotifier", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_favoritescontroller", "target": "favoritesstate", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_songids", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "set", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_albumids", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "set", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_artistids", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "set", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_ratings", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "map", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_issongstarred", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_ratingfor", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_copywith", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_hydrate", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_clear", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_togglesong", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_ratesong", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "package_flutter_riverpod_flutter_riverpod_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "subsonic_models_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_state_favorites_dart", "target": "subsonic_subsonic_client_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/state/favorites.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/c99a531e156c1d0618b31483fb278f0d8f2bc7d4082aafd7229f630d5adf5834.json b/graphify-out/cache/ast/v0.9.26/c99a531e156c1d0618b31483fb278f0d8f2bc7d4082aafd7229f630d5adf5834.json new file mode 100644 index 0000000..4e36c6f --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/c99a531e156c1d0618b31483fb278f0d8f2bc7d4082aafd7229f630d5adf5834.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "label": "hairline_panel.dart", "file_type": "code", "source_file": "lib/widgets/hairline_panel.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_hairlinepanel", "label": "HairlinePanel", "file_type": "code", "source_file": "lib/widgets/hairline_panel.dart", "source_location": null}, {"id": "statelesswidget", "label": "StatelessWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_title", "label": "title", "file_type": "code", "source_file": "lib/widgets/hairline_panel.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_trailing", "label": "trailing", "file_type": "code", "source_file": "lib/widgets/hairline_panel.dart", "source_location": null}, {"id": "string", "label": "String?", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_child", "label": "child", "file_type": "code", "source_file": "lib/widgets/hairline_panel.dart", "source_location": null}, {"id": "widget", "label": "Widget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_active", "label": "active", "file_type": "code", "source_file": "lib/widgets/hairline_panel.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_padding", "label": "padding", "file_type": "code", "source_file": "lib/widgets/hairline_panel.dart", "source_location": null}, {"id": "edgeinsetsgeometry", "label": "EdgeInsetsGeometry", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_backgroundcolor", "label": "backgroundColor", "file_type": "code", "source_file": "lib/widgets/hairline_panel.dart", "source_location": null}, {"id": "color", "label": "Color", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_titlestraddle", "label": "_titleStraddle", "file_type": "code", "source_file": "lib/widgets/hairline_panel.dart", "source_location": null}, {"id": "static_const_double", "label": "static const double", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_build", "label": "build", "file_type": "code", "source_file": "lib/widgets/hairline_panel.dart", "source_location": null}, {"id": "package_flutter_material_dart", "label": "package:flutter/material.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "theme_tokens_dart", "label": "../theme/tokens.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_hairlinepanel", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_hairlinepanel", "target": "statelesswidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_title", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_trailing", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "target": "string", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_child", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "target": "widget", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_active", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_padding", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "target": "edgeinsetsgeometry", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_backgroundcolor", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "target": "color", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_titlestraddle", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "target": "static_const_double", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "target": "package_flutter_material_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_widgets_hairline_panel_dart", "target": "theme_tokens_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/widgets/hairline_panel.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/d4c152ddfc092b303c2685bc3eaae465d44b8edbf11dd73b4460c392913fcfd2.json b/graphify-out/cache/ast/v0.9.26/d4c152ddfc092b303c2685bc3eaae465d44b8edbf11dd73b4460c392913fcfd2.json new file mode 100644 index 0000000..b8ed9a2 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/d4c152ddfc092b303c2685bc3eaae465d44b8edbf11dd73b4460c392913fcfd2.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_flutter_generated_plugin_registrant_h", "label": "generated_plugin_registrant.h", "file_type": "code", "source_file": "linux/flutter/generated_plugin_registrant.h", "source_location": "L1"}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_flutter_generated_plugin_registrant_h", "target": "flutter_linux", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "linux/flutter/generated_plugin_registrant.h", "source_location": "L10", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/d729b6283291f95e494dba0df19a17602bbc708348e785673ac9fba0f9fdbea9.json b/graphify-out/cache/ast/v0.9.26/d729b6283291f95e494dba0df19a17602bbc708348e785673ac9fba0f9fdbea9.json new file mode 100644 index 0000000..8ef9435 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/d729b6283291f95e494dba0df19a17602bbc708348e785673ac9fba0f9fdbea9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_android_app_build_gradle_kts", "label": "build.gradle.kts", "file_type": "code", "source_file": "android/app/build.gradle.kts", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/dfa76b6404cb561747bf788a00f0303379f34e29c1138560966eb33a3710b538.json b/graphify-out/cache/ast/v0.9.26/dfa76b6404cb561747bf788a00f0303379f34e29c1138560966eb33a3710b538.json new file mode 100644 index 0000000..695c974 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/dfa76b6404cb561747bf788a00f0303379f34e29c1138560966eb33a3710b538.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_android_app_src_main_kotlin_com_conversionpath_ratune_mobile_mainactivity_kt", "label": "MainActivity.kt", "file_type": "code", "source_file": "android/app/src/main/kotlin/com/conversionpath/ratune_mobile/MainActivity.kt", "source_location": "L1"}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_android_app_src_main_kotlin_com_conversionpath_ratune_mobile_mainactivity_mainactivity", "label": "MainActivity", "file_type": "code", "source_file": "android/app/src/main/kotlin/com/conversionpath/ratune_mobile/MainActivity.kt", "source_location": "L8", "_callable": true, "_callable_class": true}, {"id": "audioserviceactivity", "label": "AudioServiceActivity", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/android/app/src/main/kotlin/com/conversionpath/ratune_mobile/MainActivity.kt"}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_android_app_src_main_kotlin_com_conversionpath_ratune_mobile_mainactivity_kt", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_android_app_src_main_kotlin_com_conversionpath_ratune_mobile_mainactivity_mainactivity", "relation": "contains", "confidence": "EXTRACTED", "source_file": "android/app/src/main/kotlin/com/conversionpath/ratune_mobile/MainActivity.kt", "source_location": "L8", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_android_app_src_main_kotlin_com_conversionpath_ratune_mobile_mainactivity_mainactivity", "target": "audioserviceactivity", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "android/app/src/main/kotlin/com/conversionpath/ratune_mobile/MainActivity.kt", "source_location": "L8", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/e03baa387d7ef6e507539177424c3312647ddbe6e3b953f041a8cfa73f6fb2b4.json b/graphify-out/cache/ast/v0.9.26/e03baa387d7ef6e507539177424c3312647ddbe6e3b953f041a8cfa73f6fb2b4.json new file mode 100644 index 0000000..2235ed2 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/e03baa387d7ef6e507539177424c3312647ddbe6e3b953f041a8cfa73f6fb2b4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_dart", "label": "favorites_screen.dart", "file_type": "code", "source_file": "lib/screens/favorites_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_favoritesscreen", "label": "FavoritesScreen", "file_type": "code", "source_file": "lib/screens/favorites_screen.dart", "source_location": null}, {"id": "consumerwidget", "label": "ConsumerWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "starredprovider", "label": "starredProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_sectionlabel", "label": "_SectionLabel", "file_type": "code", "source_file": "lib/screens/favorites_screen.dart", "source_location": null}, {"id": "statelesswidget", "label": "StatelessWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_text", "label": "text", "file_type": "code", "source_file": "lib/screens/favorites_screen.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_build", "label": "build", "file_type": "code", "source_file": "lib/screens/favorites_screen.dart", "source_location": null}, {"id": "materialpageroute", "label": "MaterialPageRoute", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_material_dart", "label": "package:flutter/material.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_riverpod_flutter_riverpod_dart", "label": "package:flutter_riverpod/flutter_riverpod.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "state_providers_dart", "label": "../state/providers.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "theme_tokens_dart", "label": "../theme/tokens.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "browser_screen_dart", "label": "browser_screen.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_favoritesscreen", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_favoritesscreen", "target": "consumerwidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_favoritesscreen", "target": "starredprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_sectionlabel", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_sectionlabel", "target": "statelesswidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_text", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_build", "target": "starredprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_build", "target": "materialpageroute", "relation": "navigates", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0, "context": "route_object"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_build", "target": "materialpageroute", "relation": "navigates", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0, "context": "route_object"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_sectionlabel", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_dart", "target": "package_flutter_material_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_dart", "target": "package_flutter_riverpod_flutter_riverpod_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_dart", "target": "state_providers_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_dart", "target": "theme_tokens_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_screens_favorites_screen_dart", "target": "browser_screen_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/screens/favorites_screen.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/e7cc6f8fc83f160d7debf7f2da1c7d92a75223943cf84474b51d89b1ce53100f.json b/graphify-out/cache/ast/v0.9.26/e7cc6f8fc83f160d7debf7f2da1c7d92a75223943cf84474b51d89b1ce53100f.json new file mode 100644 index 0000000..4e46cef --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/e7cc6f8fc83f160d7debf7f2da1c7d92a75223943cf84474b51d89b1ce53100f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "label": "tokens.dart", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_ratunecolors", "label": "RatuneColors", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_ratunespacing", "label": "RatuneSpacing", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_background", "label": "background", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "static_const_color", "label": "static const Color", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_surface", "label": "surface", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_foreground", "label": "foreground", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dimmed", "label": "dimmed", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_border", "label": "border", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_borderactive", "label": "borderActive", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_accentdefault", "label": "accentDefault", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_xs", "label": "xs", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "static_const_double", "label": "static const double", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_sm", "label": "sm", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_md", "label": "md", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_lg", "label": "lg", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_xl", "label": "xl", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_mintouchtarget", "label": "minTouchTarget", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens", "label": "_", "file_type": "code", "source_file": "lib/theme/tokens.dart", "source_location": null}, {"id": "package_flutter_widgets_dart", "label": "package:flutter/widgets.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_ratunecolors", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_ratunespacing", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_background", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "static_const_color", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_surface", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "static_const_color", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_foreground", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "static_const_color", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dimmed", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "static_const_color", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_border", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "static_const_color", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_borderactive", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "static_const_color", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_accentdefault", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "static_const_color", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_xs", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "static_const_double", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_sm", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "static_const_double", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_md", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "static_const_double", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_lg", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "static_const_double", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_xl", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "static_const_double", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_mintouchtarget", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "static_const_double", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens_dart", "target": "package_flutter_widgets_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/theme/tokens.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/eb95572faf920913e57f4b41b1f12d48170a94364002809e58260afe063d1b7b.json b/graphify-out/cache/ast/v0.9.26/eb95572faf920913e57f4b41b1f12d48170a94364002809e58260afe063d1b7b.json new file mode 100644 index 0000000..03fe136 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/eb95572faf920913e57f4b41b1f12d48170a94364002809e58260afe063d1b7b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runnertests_runnertests_swift", "label": "RunnerTests.swift", "file_type": "code", "source_file": "ios/RunnerTests/RunnerTests.swift", "source_location": "L1"}, {"id": "flutter", "label": "Flutter", "file_type": "code", "type": "module", "source_file": "ios/RunnerTests/RunnerTests.swift", "source_location": "L1"}, {"id": "uikit", "label": "UIKit", "file_type": "code", "type": "module", "source_file": "ios/RunnerTests/RunnerTests.swift", "source_location": "L2"}, {"id": "xctest", "label": "XCTest", "file_type": "code", "type": "module", "source_file": "ios/RunnerTests/RunnerTests.swift", "source_location": "L3"}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runnertests_runnertests_runnertests", "label": "RunnerTests", "file_type": "code", "source_file": "ios/RunnerTests/RunnerTests.swift", "source_location": "L5", "_callable": true, "_callable_class": true}, {"id": "xctestcase", "label": "XCTestCase", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runnertests_runnertests_runnertests_testexample", "label": ".testExample()", "file_type": "code", "source_file": "ios/RunnerTests/RunnerTests.swift", "source_location": "L7", "_callable": true}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runnertests_runnertests_swift", "target": "flutter", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "ios/RunnerTests/RunnerTests.swift", "source_location": "L1", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runnertests_runnertests_swift", "target": "uikit", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "ios/RunnerTests/RunnerTests.swift", "source_location": "L2", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runnertests_runnertests_swift", "target": "xctest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "ios/RunnerTests/RunnerTests.swift", "source_location": "L3", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runnertests_runnertests_swift", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runnertests_runnertests_runnertests", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ios/RunnerTests/RunnerTests.swift", "source_location": "L5", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runnertests_runnertests_runnertests", "target": "xctestcase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "ios/RunnerTests/RunnerTests.swift", "source_location": "L5", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runnertests_runnertests_runnertests", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_ios_runnertests_runnertests_runnertests_testexample", "relation": "method", "confidence": "EXTRACTED", "source_file": "ios/RunnerTests/RunnerTests.swift", "source_location": "L7", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/ef48b58ee9ad2b1dddce51d21eeb2a27569e6d6a3a99e8260e9d5feaa10beb0c.json b/graphify-out/cache/ast/v0.9.26/ef48b58ee9ad2b1dddce51d21eeb2a27569e6d6a3a99e8260e9d5feaa10beb0c.json new file mode 100644 index 0000000..e492327 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/ef48b58ee9ad2b1dddce51d21eeb2a27569e6d6a3a99e8260e9d5feaa10beb0c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_android_build_gradle_kts", "label": "build.gradle.kts", "file_type": "code", "source_file": "android/build.gradle.kts", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/f0838fc12b93404267550e638c01b0f2950ecd5f3b2a5559e29891151b3e04fb.json b/graphify-out/cache/ast/v0.9.26/f0838fc12b93404267550e638c01b0f2950ecd5f3b2a5559e29891151b3e04fb.json new file mode 100644 index 0000000..f634b0b --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/f0838fc12b93404267550e638c01b0f2950ecd5f3b2a5559e29891151b3e04fb.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_dart", "label": "json_helpers.dart", "file_type": "code", "source_file": "lib/subsonic/json_helpers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_null", "label": "null", "file_type": "code", "source_file": "lib/subsonic/json_helpers.dart", "source_location": null}, {"id": "return", "label": "return", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_orelse", "label": "orElse", "file_type": "code", "source_file": "lib/subsonic/json_helpers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_asstring", "label": "asString", "file_type": "code", "source_file": "lib/subsonic/json_helpers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_tostring", "label": "toString", "file_type": "code", "source_file": "lib/subsonic/json_helpers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_asint", "label": "asInt", "file_type": "code", "source_file": "lib/subsonic/json_helpers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_asdouble", "label": "asDouble", "file_type": "code", "source_file": "lib/subsonic/json_helpers.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_asbool", "label": "asBool", "file_type": "code", "source_file": "lib/subsonic/json_helpers.dart", "source_location": null}, {"id": "t", "label": "T", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_null", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/json_helpers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_dart", "target": "return", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/json_helpers.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_null", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/json_helpers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_dart", "target": "return", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/json_helpers.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_orelse", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/json_helpers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_dart", "target": "return", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/json_helpers.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_asstring", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/json_helpers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_tostring", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/json_helpers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_asint", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/json_helpers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_asdouble", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/json_helpers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_asbool", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/json_helpers.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_subsonic_json_helpers_dart", "target": "t", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/subsonic/json_helpers.dart", "source_location": null, "weight": 1.0, "context": "type_lookup"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/f631d208052672d68c98566f41a05db8b989dc7c1553a864d2b9b1de4b9dbf68.json b/graphify-out/cache/ast/v0.9.26/f631d208052672d68c98566f41a05db8b989dc7c1553a864d2b9b1de4b9dbf68.json new file mode 100644 index 0000000..5b000a5 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/f631d208052672d68c98566f41a05db8b989dc7c1553a864d2b9b1de4b9dbf68.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_dart", "label": "main.dart", "file_type": "code", "source_file": "lib/main.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_ratuneapp", "label": "RatuneApp", "file_type": "code", "source_file": "lib/main.dart", "source_location": null}, {"id": "consumerwidget", "label": "ConsumerWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "accentprovider", "label": "accentProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_main", "label": "main", "file_type": "code", "source_file": "lib/main.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_build", "label": "build", "file_type": "code", "source_file": "lib/main.dart", "source_location": null}, {"id": "dart_io", "label": "dart:io", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_foundation_dart", "label": "package:flutter/foundation.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_material_dart", "label": "package:flutter/material.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_riverpod_flutter_riverpod_dart", "label": "package:flutter_riverpod/flutter_riverpod.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_just_audio_background_just_audio_background_dart", "label": "package:just_audio_background/just_audio_background.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "shell_app_shell_dart", "label": "shell/app_shell.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "theme_accent_dart", "label": "theme/accent.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "theme_app_theme_dart", "label": "theme/app_theme.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_ratuneapp", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/main.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_ratuneapp", "target": "consumerwidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/main.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_ratuneapp", "target": "accentprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/main.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_main", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/main.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/main.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_build", "target": "accentprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/main.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_dart", "target": "dart_io", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/main.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_dart", "target": "package_flutter_foundation_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/main.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_dart", "target": "package_flutter_material_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/main.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_dart", "target": "package_flutter_riverpod_flutter_riverpod_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/main.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_dart", "target": "package_just_audio_background_just_audio_background_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/main.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_dart", "target": "shell_app_shell_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/main.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_dart", "target": "theme_accent_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/main.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_main_dart", "target": "theme_app_theme_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/main.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/f8914373ed1fd22de34f6b9dad8e81a035dfd238e8740e981b1c2e6f40147aae.json b/graphify-out/cache/ast/v0.9.26/f8914373ed1fd22de34f6b9dad8e81a035dfd238e8740e981b1c2e6f40147aae.json new file mode 100644 index 0000000..b5f7e60 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/f8914373ed1fd22de34f6b9dad8e81a035dfd238e8740e981b1c2e6f40147aae.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_flutter_generated_plugin_registrant_cc", "label": "generated_plugin_registrant.cc", "file_type": "code", "source_file": "linux/flutter/generated_plugin_registrant.cc", "source_location": "L1"}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_flutter_generated_plugin_registrant_fl_register_plugins", "label": "fl_register_plugins()", "file_type": "code", "source_file": "linux/flutter/generated_plugin_registrant.cc", "source_location": "L11", "_callable": true}, {"id": "flpluginregistry", "label": "FlPluginRegistry", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/flutter/generated_plugin_registrant.cc"}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_flutter_generated_plugin_registrant_cc", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_flutter_generated_plugin_registrant_h", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "linux/flutter/generated_plugin_registrant.cc", "source_location": "L7", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_flutter_generated_plugin_registrant_cc", "target": "flutter_secure_storage_linux_plugin", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "linux/flutter/generated_plugin_registrant.cc", "source_location": "L9", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_flutter_generated_plugin_registrant_cc", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_flutter_generated_plugin_registrant_fl_register_plugins", "relation": "contains", "confidence": "EXTRACTED", "source_file": "linux/flutter/generated_plugin_registrant.cc", "source_location": "L11", "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_flutter_generated_plugin_registrant_fl_register_plugins", "target": "flpluginregistry", "relation": "references", "confidence": "EXTRACTED", "source_file": "linux/flutter/generated_plugin_registrant.cc", "source_location": "L11", "weight": 1.0, "context": "parameter_type"}], "raw_calls": [{"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_flutter_generated_plugin_registrant_fl_register_plugins", "callee": "g_autoptr", "is_member_call": false, "source_file": "linux/flutter/generated_plugin_registrant.cc", "source_location": "L12", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_flutter_generated_plugin_registrant_fl_register_plugins", "callee": "fl_plugin_registry_get_registrar_for_plugin", "is_member_call": false, "source_file": "linux/flutter/generated_plugin_registrant.cc", "source_location": "L13", "receiver": null, "lang": "cpp"}, {"caller_nid": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_linux_flutter_generated_plugin_registrant_fl_register_plugins", "callee": "flutter_secure_storage_linux_plugin_register_with_registrar", "is_member_call": false, "source_file": "linux/flutter/generated_plugin_registrant.cc", "source_location": "L14", "receiver": null, "lang": "cpp"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.26/f9847e86af96f21520c5699e4ee1d5072c1f229e2bef696abc79b946d5a26b51.json b/graphify-out/cache/ast/v0.9.26/f9847e86af96f21520c5699e4ee1d5072c1f229e2bef696abc79b946d5a26b51.json new file mode 100644 index 0000000..4a3e2ee --- /dev/null +++ b/graphify-out/cache/ast/v0.9.26/f9847e86af96f21520c5699e4ee1d5072c1f229e2bef696abc79b946d5a26b51.json @@ -0,0 +1 @@ +{"nodes": [{"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "label": "app_shell.dart", "file_type": "code", "source_file": "lib/shell/app_shell.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_appshell", "label": "AppShell", "file_type": "code", "source_file": "lib/shell/app_shell.dart", "source_location": null}, {"id": "consumerstatefulwidget", "label": "ConsumerStatefulWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_appshellstate", "label": "_AppShellState", "file_type": "code", "source_file": "lib/shell/app_shell.dart", "source_location": null}, {"id": "consumerstate", "label": "ConsumerState", "file_type": "code", "source_file": null, "source_location": null}, {"id": "appshell", "label": "AppShell", "file_type": "code", "source_file": null, "source_location": null}, {"id": "favoritesprovider", "label": "favoritesProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_tabbar", "label": "_TabBar", "file_type": "code", "source_file": "lib/shell/app_shell.dart", "source_location": null}, {"id": "statelesswidget", "label": "StatelessWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_statusbar", "label": "_StatusBar", "file_type": "code", "source_file": "lib/shell/app_shell.dart", "source_location": null}, {"id": "consumerwidget", "label": "ConsumerWidget", "file_type": "code", "source_file": null, "source_location": null}, {"id": "connectionprovider", "label": "connectionProvider", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_index", "label": "_index", "file_type": "code", "source_file": "lib/shell/app_shell.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_tabs", "label": "_tabs", "file_type": "code", "source_file": "lib/shell/app_shell.dart", "source_location": null}, {"id": "static_const", "label": "static const", "file_type": "code", "source_file": null, "source_location": null}, {"id": "list", "label": "List", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_onselect", "label": "onSelect", "file_type": "code", "source_file": "lib/shell/app_shell.dart", "source_location": null}, {"id": "valuechanged", "label": "ValueChanged", "file_type": "code", "source_file": null, "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_createstate", "label": "createState", "file_type": "code", "source_file": "lib/shell/app_shell.dart", "source_location": null}, {"id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_build", "label": "build", "file_type": "code", "source_file": "lib/shell/app_shell.dart", "source_location": null}, {"id": "package_flutter_material_dart", "label": "package:flutter/material.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "package_flutter_riverpod_flutter_riverpod_dart", "label": "package:flutter_riverpod/flutter_riverpod.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "screens_browser_screen_dart", "label": "../screens/browser_screen.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "screens_connect_sheet_dart", "label": "../screens/connect_sheet.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "screens_home_screen_dart", "label": "../screens/home_screen.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "screens_now_playing_screen_dart", "label": "../screens/now_playing_screen.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "state_providers_dart", "label": "../state/providers.dart", "file_type": "code", "source_file": null, "source_location": null}, {"id": "theme_tokens_dart", "label": "../theme/tokens.dart", "file_type": "code", "source_file": null, "source_location": null}], "edges": [{"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_appshell", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_appshell", "target": "consumerstatefulwidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_appshellstate", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_appshellstate", "target": "consumerstate", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_appshellstate", "target": "appshell", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_appshellstate", "target": "favoritesprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_tabbar", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_tabbar", "target": "statelesswidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_statusbar", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_statusbar", "target": "consumerwidget", "relation": "inherits", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_statusbar", "target": "connectionprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_index", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_tabs", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "static_const", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_tabs", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "list", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_index", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_onselect", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "valuechanged", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0, "context": "variable_type"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_createstate", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_build", "target": "favoritesprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_tabbar", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_statusbar", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_build", "relation": "defines", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_build", "target": "connectionprovider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0, "context": "riverpod_reference"}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "package_flutter_material_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "package_flutter_riverpod_flutter_riverpod_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "screens_browser_screen_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "screens_connect_sheet_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "screens_home_screen_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "screens_now_playing_screen_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "state_providers_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}, {"source": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_shell_app_shell_dart", "target": "theme_tokens_dart", "relation": "imports", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "lib/shell/app_shell.dart", "source_location": null, "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/06b16c947d0c1147017c374e02c119d09d21d6cf10f485fc8d52b60ae5287317.json b/graphify-out/cache/semantic/pd5fd89c46bb5/06b16c947d0c1147017c374e02c119d09d21d6cf10f485fc8d52b60ae5287317.json new file mode 100644 index 0000000..42911bb --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/06b16c947d0c1147017c374e02c119d09d21d6cf10f485fc8d52b60ae5287317.json @@ -0,0 +1 @@ +{"nodes": [{"id": "linux_cmakelists_runner", "label": "Linux Top-Level CMake Build", "file_type": "code", "source_file": "linux/CMakeLists.txt", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "linux_cmakelists_runner", "target": "linux_flutter_cmakelists_flutter", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "linux/CMakeLists.txt", "source_location": null, "weight": 1.0}, {"source": "linux_cmakelists_runner", "target": "linux_runner_cmakelists_runner", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "linux/CMakeLists.txt", "source_location": null, "weight": 1.0}, {"source": "linux_cmakelists_runner", "target": "pubspec_ratune_mobile", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.75, "source_file": "linux/CMakeLists.txt", "source_location": null, "weight": 1.0}], "hyperedges": [{"id": "linux_flutter_build_pipeline", "label": "Linux Flutter CMake Build Pipeline", "nodes": ["linux_cmakelists_runner", "linux_flutter_cmakelists_flutter", "linux_runner_cmakelists_runner"], "relation": "participate_in", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "linux/CMakeLists.txt"}]} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/078fb6ead2ea3af2fa5ec83471a7880d79086b797e6eea9e7bfc270b9d6c56e7.json b/graphify-out/cache/semantic/pd5fd89c46bb5/078fb6ead2ea3af2fa5ec83471a7880d79086b797e6eea9e7bfc270b9d6c56e7.json new file mode 100644 index 0000000..ffa3c37 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/078fb6ead2ea3af2fa5ec83471a7880d79086b797e6eea9e7bfc270b9d6c56e7.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", "label": "App Icon 1024x1024 (Flutter logo master)", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [], "hyperedges": [{"id": "ios_appicon_appiconset_set", "label": "iOS AppIcon Set (Flutter logo)", "nodes": ["ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_1x_icon", "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_2x_icon", "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_3x_icon", "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_1x_icon", "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_2x_icon", "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_3x_icon", "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_1x_icon", "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_2x_icon", "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_3x_icon", "ios_runner_assets_xcassets_appicon_appiconset_icon_app_60x60_2x_icon", "ios_runner_assets_xcassets_appicon_appiconset_icon_app_60x60_3x_icon", "ios_runner_assets_xcassets_appicon_appiconset_icon_app_76x76_1x_icon", "ios_runner_assets_xcassets_appicon_appiconset_icon_app_76x76_2x_icon", "ios_runner_assets_xcassets_appicon_appiconset_icon_app_83_5x83_5_2x_icon"], "relation": "form", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png"}]} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/21b53e8be66ff61259ea18ac62056f17081c9964946da5a40f8c28decca64a2e.json b/graphify-out/cache/semantic/pd5fd89c46bb5/21b53e8be66ff61259ea18ac62056f17081c9964946da5a40f8c28decca64a2e.json new file mode 100644 index 0000000..7cb3e87 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/21b53e8be66ff61259ea18ac62056f17081c9964946da5a40f8c28decca64a2e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "android_app_src_main_res_mipmap_mdpi_ic_launcher_icon", "label": "App Launcher Icon (mdpi)", "file_type": "image", "source_file": "android/app/src/main/res/mipmap-mdpi/ic_launcher.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "android_app_src_main_res_mipmap_mdpi_ic_launcher_icon", "target": "android_app_src_main_res_mipmap_xhdpi_ic_launcher_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "android/app/src/main/res/mipmap-mdpi/ic_launcher.png", "source_location": null, "weight": 1.0}, {"source": "android_app_src_main_res_mipmap_mdpi_ic_launcher_icon", "target": "android_app_src_main_res_mipmap_xxhdpi_ic_launcher_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "android/app/src/main/res/mipmap-mdpi/ic_launcher.png", "source_location": null, "weight": 1.0}, {"source": "android_app_src_main_res_mipmap_mdpi_ic_launcher_icon", "target": "android_app_src_main_res_mipmap_xxxhdpi_ic_launcher_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "android/app/src/main/res/mipmap-mdpi/ic_launcher.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/23c870fd0d490869d949581110b1548043bd042df10781d6c5c586a0de3e2f73.json b/graphify-out/cache/semantic/pd5fd89c46bb5/23c870fd0d490869d949581110b1548043bd042df10781d6c5c586a0de3e2f73.json new file mode 100644 index 0000000..9a1280c --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/23c870fd0d490869d949581110b1548043bd042df10781d6c5c586a0de3e2f73.json @@ -0,0 +1 @@ +{"nodes": [{"id": "pubspec_ratune_mobile", "label": "ratune_mobile (Flutter package)", "file_type": "code", "source_file": "pubspec.yaml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "pubspec_dio", "label": "dio (HTTP client dependency)", "file_type": "code", "source_file": "pubspec.yaml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "pubspec_flutter_riverpod", "label": "flutter_riverpod (state management)", "file_type": "code", "source_file": "pubspec.yaml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "pubspec_flutter_secure_storage", "label": "flutter_secure_storage (secure storage)", "file_type": "code", "source_file": "pubspec.yaml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "pubspec_crypto", "label": "crypto (hashing/crypto)", "file_type": "code", "source_file": "pubspec.yaml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "pubspec_google_fonts", "label": "google_fonts (fonts)", "file_type": "code", "source_file": "pubspec.yaml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "pubspec_path_provider", "label": "path_provider (filesystem paths)", "file_type": "code", "source_file": "pubspec.yaml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "pubspec_just_audio", "label": "just_audio (audio playback)", "file_type": "code", "source_file": "pubspec.yaml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "pubspec_just_audio_background", "label": "just_audio_background (background audio)", "file_type": "code", "source_file": "pubspec.yaml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "pubspec_palette_generator", "label": "palette_generator (color extraction)", "file_type": "code", "source_file": "pubspec.yaml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "pubspec_flutter_lints", "label": "flutter_lints (dev lint rules)", "file_type": "code", "source_file": "pubspec.yaml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "pubspec_ratune_mobile", "target": "pubspec_dio", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "pubspec.yaml", "source_location": null, "weight": 1.0}, {"source": "pubspec_ratune_mobile", "target": "pubspec_flutter_riverpod", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "pubspec.yaml", "source_location": null, "weight": 1.0}, {"source": "pubspec_ratune_mobile", "target": "pubspec_flutter_secure_storage", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "pubspec.yaml", "source_location": null, "weight": 1.0}, {"source": "pubspec_ratune_mobile", "target": "pubspec_crypto", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "pubspec.yaml", "source_location": null, "weight": 1.0}, {"source": "pubspec_ratune_mobile", "target": "pubspec_google_fonts", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "pubspec.yaml", "source_location": null, "weight": 1.0}, {"source": "pubspec_ratune_mobile", "target": "pubspec_path_provider", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "pubspec.yaml", "source_location": null, "weight": 1.0}, {"source": "pubspec_ratune_mobile", "target": "pubspec_just_audio", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "pubspec.yaml", "source_location": null, "weight": 1.0}, {"source": "pubspec_ratune_mobile", "target": "pubspec_just_audio_background", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "pubspec.yaml", "source_location": null, "weight": 1.0}, {"source": "pubspec_ratune_mobile", "target": "pubspec_palette_generator", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "pubspec.yaml", "source_location": null, "weight": 1.0}, {"source": "pubspec_ratune_mobile", "target": "pubspec_flutter_lints", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "pubspec.yaml", "source_location": null, "weight": 1.0}, {"source": "pubspec_just_audio_background", "target": "pubspec_just_audio", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "pubspec.yaml", "source_location": null, "weight": 1.0}, {"source": "pubspec_palette_generator", "target": "pubspec_just_audio", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.65, "source_file": "pubspec.yaml", "source_location": null, "weight": 1.0}], "hyperedges": [{"id": "audio_playback_stack", "label": "Audio Playback and Theming Stack", "nodes": ["pubspec_just_audio", "pubspec_just_audio_background", "pubspec_palette_generator"], "relation": "form", "confidence": "INFERRED", "confidence_score": 0.65, "source_file": "pubspec.yaml"}]} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/2b19e45e05742cba94dec131c524ae55a5ac111fd148e49c2a1a88e81751ed9f.json b/graphify-out/cache/semantic/pd5fd89c46bb5/2b19e45e05742cba94dec131c524ae55a5ac111fd148e49c2a1a88e81751ed9f.json new file mode 100644 index 0000000..3177f3f --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/2b19e45e05742cba94dec131c524ae55a5ac111fd148e49c2a1a88e81751ed9f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_83_5x83_5_2x_icon", "label": "App Icon 83.5x83.5 @2x", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_83_5x83_5_2x_icon", "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/3b769ba5096a0c25dacd1ab76dda95ccbc4793fbf20fe661518ace2e0f62c793.json b/graphify-out/cache/semantic/pd5fd89c46bb5/3b769ba5096a0c25dacd1ab76dda95ccbc4793fbf20fe661518ace2e0f62c793.json new file mode 100644 index 0000000..0c3e333 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/3b769ba5096a0c25dacd1ab76dda95ccbc4793fbf20fe661518ace2e0f62c793.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_2x_image", "label": "Launch Image (2x)", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_2x_image", "target": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_3x_image", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/424d0358df6a3200968b266c025dbfe6da5c85e259789e09bca7a699a3ea6283.json b/graphify-out/cache/semantic/pd5fd89c46bb5/424d0358df6a3200968b266c025dbfe6da5c85e259789e09bca7a699a3ea6283.json new file mode 100644 index 0000000..9c2f026 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/424d0358df6a3200968b266c025dbfe6da5c85e259789e09bca7a699a3ea6283.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_3x_image", "label": "Launch Image (3x)", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/52f8a878e632aba90c431b8c88cb19395878070ec73f84a5d67803db42d4d530.json b/graphify-out/cache/semantic/pd5fd89c46bb5/52f8a878e632aba90c431b8c88cb19395878070ec73f84a5d67803db42d4d530.json new file mode 100644 index 0000000..9db0d0a --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/52f8a878e632aba90c431b8c88cb19395878070ec73f84a5d67803db42d4d530.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_2x_icon", "label": "App Icon 29x29 @2x", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_2x_icon", "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/54f7d2a2c2b9d85bcbe4c88fc6d537a64eeaa3b85be5208b64cad128fbe125e0.json b/graphify-out/cache/semantic/pd5fd89c46bb5/54f7d2a2c2b9d85bcbe4c88fc6d537a64eeaa3b85be5208b64cad128fbe125e0.json new file mode 100644 index 0000000..36a33ac --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/54f7d2a2c2b9d85bcbe4c88fc6d537a64eeaa3b85be5208b64cad128fbe125e0.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_image", "label": "Launch Image (1x)", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_image", "target": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_2x_image", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png", "source_location": null, "weight": 1.0}, {"source": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_image", "target": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_3x_image", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png", "source_location": null, "weight": 1.0}], "hyperedges": [{"id": "ios_launch_image_set", "label": "iOS Launch Image Set", "nodes": ["ios_runner_assets_xcassets_launchimage_imageset_launchimage_image", "ios_runner_assets_xcassets_launchimage_imageset_launchimage_2x_image", "ios_runner_assets_xcassets_launchimage_imageset_launchimage_3x_image"], "relation": "form", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png"}]} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/55eccb3bb04e4d59726019a1a4daf11304209be1eed147b019d71e6cbd051cce.json b/graphify-out/cache/semantic/pd5fd89c46bb5/55eccb3bb04e4d59726019a1a4daf11304209be1eed147b019d71e6cbd051cce.json new file mode 100644 index 0000000..30b5d73 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/55eccb3bb04e4d59726019a1a4daf11304209be1eed147b019d71e6cbd051cce.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_60x60_3x_icon", "label": "App Icon 60x60 @3x", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_60x60_3x_icon", "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/684702063210b96f3f86c6af7550aa15a35afa05d7ddb3ba1659d643936ba545.json b/graphify-out/cache/semantic/pd5fd89c46bb5/684702063210b96f3f86c6af7550aa15a35afa05d7ddb3ba1659d643936ba545.json new file mode 100644 index 0000000..661af53 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/684702063210b96f3f86c6af7550aa15a35afa05d7ddb3ba1659d643936ba545.json @@ -0,0 +1 @@ +{"nodes": [{"id": "linux_flutter_cmakelists_flutter", "label": "Linux Flutter Library CMake Build", "file_type": "code", "source_file": "linux/flutter/CMakeLists.txt", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/746d52418e85b6ed7c9dfde4c6ae089eeb5fe758beb6c64e2fccf30c445dc124.json b/graphify-out/cache/semantic/pd5fd89c46bb5/746d52418e85b6ed7c9dfde4c6ae089eeb5fe758beb6c64e2fccf30c445dc124.json new file mode 100644 index 0000000..d8fd68b --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/746d52418e85b6ed7c9dfde4c6ae089eeb5fe758beb6c64e2fccf30c445dc124.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_launchimage_imageset_readme_launch_screen", "label": "iOS Launch Screen Assets README", "file_type": "document", "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/7d455ba4bf09470d0e7aa7f3a9e0d281f4dd22e9a689a188ab344e08b8102eda.json b/graphify-out/cache/semantic/pd5fd89c46bb5/7d455ba4bf09470d0e7aa7f3a9e0d281f4dd22e9a689a188ab344e08b8102eda.json new file mode 100644 index 0000000..d36fe0e --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/7d455ba4bf09470d0e7aa7f3a9e0d281f4dd22e9a689a188ab344e08b8102eda.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_76x76_2x_icon", "label": "App Icon 76x76 @2x", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_76x76_2x_icon", "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/83209a2bc0d05e6781d2c76843120cad79a429cb94a33901aef65244003802d7.json b/graphify-out/cache/semantic/pd5fd89c46bb5/83209a2bc0d05e6781d2c76843120cad79a429cb94a33901aef65244003802d7.json new file mode 100644 index 0000000..df46d17 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/83209a2bc0d05e6781d2c76843120cad79a429cb94a33901aef65244003802d7.json @@ -0,0 +1 @@ +{"nodes": [{"id": "android_app_src_main_res_mipmap_xxxhdpi_ic_launcher_icon", "label": "App Launcher Icon (xxxhdpi)", "file_type": "image", "source_file": "android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/8695ca3286d400bdeff7f5d97096508627b878a8c37e80762f7ac92b5cecb8e3.json b/graphify-out/cache/semantic/pd5fd89c46bb5/8695ca3286d400bdeff7f5d97096508627b878a8c37e80762f7ac92b5cecb8e3.json new file mode 100644 index 0000000..3e9fc34 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/8695ca3286d400bdeff7f5d97096508627b878a8c37e80762f7ac92b5cecb8e3.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_3x_icon", "label": "App Icon 29x29 @3x", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_3x_icon", "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/8a8499a2a4dc334995796f6b696cedc345d15f89db273a3c1c43a22bc21123e6.json b/graphify-out/cache/semantic/pd5fd89c46bb5/8a8499a2a4dc334995796f6b696cedc345d15f89db273a3c1c43a22bc21123e6.json new file mode 100644 index 0000000..a1452fe --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/8a8499a2a4dc334995796f6b696cedc345d15f89db273a3c1c43a22bc21123e6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "android_app_src_main_res_mipmap_hdpi_ic_launcher_icon", "label": "App Launcher Icon (hdpi)", "file_type": "image", "source_file": "android/app/src/main/res/mipmap-hdpi/ic_launcher.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "android_app_src_main_res_mipmap_hdpi_ic_launcher_icon", "target": "android_app_src_main_res_mipmap_mdpi_ic_launcher_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "android/app/src/main/res/mipmap-hdpi/ic_launcher.png", "source_location": null, "weight": 1.0}, {"source": "android_app_src_main_res_mipmap_hdpi_ic_launcher_icon", "target": "android_app_src_main_res_mipmap_xhdpi_ic_launcher_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "android/app/src/main/res/mipmap-hdpi/ic_launcher.png", "source_location": null, "weight": 1.0}, {"source": "android_app_src_main_res_mipmap_hdpi_ic_launcher_icon", "target": "android_app_src_main_res_mipmap_xxhdpi_ic_launcher_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "android/app/src/main/res/mipmap-hdpi/ic_launcher.png", "source_location": null, "weight": 1.0}, {"source": "android_app_src_main_res_mipmap_hdpi_ic_launcher_icon", "target": "android_app_src_main_res_mipmap_xxxhdpi_ic_launcher_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "android/app/src/main/res/mipmap-hdpi/ic_launcher.png", "source_location": null, "weight": 1.0}], "hyperedges": [{"id": "android_launcher_icon_set", "label": "Android Launcher Icon Set (Flutter logo)", "nodes": ["android_app_src_main_res_mipmap_hdpi_ic_launcher_icon", "android_app_src_main_res_mipmap_mdpi_ic_launcher_icon", "android_app_src_main_res_mipmap_xhdpi_ic_launcher_icon", "android_app_src_main_res_mipmap_xxhdpi_ic_launcher_icon", "android_app_src_main_res_mipmap_xxxhdpi_ic_launcher_icon"], "relation": "form", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "android/app/src/main/res/mipmap-hdpi/ic_launcher.png"}]} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/8e9bb2a1f55362a4ed85bb2118800ee14fc553dc9f3a7b3424a6d7d08b36804b.json b/graphify-out/cache/semantic/pd5fd89c46bb5/8e9bb2a1f55362a4ed85bb2118800ee14fc553dc9f3a7b3424a6d7d08b36804b.json new file mode 100644 index 0000000..15dc766 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/8e9bb2a1f55362a4ed85bb2118800ee14fc553dc9f3a7b3424a6d7d08b36804b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "linux_runner_cmakelists_runner", "label": "Linux Runner Executable CMake Build", "file_type": "code", "source_file": "linux/runner/CMakeLists.txt", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "linux_runner_cmakelists_runner", "target": "linux_flutter_cmakelists_flutter", "relation": "shares_data_with", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "linux/runner/CMakeLists.txt", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/a01aae47a5e8e5b11e875b405640aba886fadb6f2c90f6c95fbca4923e944797.json b/graphify-out/cache/semantic/pd5fd89c46bb5/a01aae47a5e8e5b11e875b405640aba886fadb6f2c90f6c95fbca4923e944797.json new file mode 100644 index 0000000..b8f71d3 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/a01aae47a5e8e5b11e875b405640aba886fadb6f2c90f6c95fbca4923e944797.json @@ -0,0 +1 @@ +{"nodes": [{"id": "readme_ratune_mobile", "label": "ratune_mobile README", "file_type": "document", "source_file": "README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "readme_ratune_mobile", "target": "pubspec_ratune_mobile", "relation": "references", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "README.md", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/a75c4e957b5684bd9bc3c44186e3f078fde56df022f247ce1fc3d7749d46f10a.json b/graphify-out/cache/semantic/pd5fd89c46bb5/a75c4e957b5684bd9bc3c44186e3f078fde56df022f247ce1fc3d7749d46f10a.json new file mode 100644 index 0000000..c93d521 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/a75c4e957b5684bd9bc3c44186e3f078fde56df022f247ce1fc3d7749d46f10a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_3x_icon", "label": "App Icon 40x40 @3x", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_3x_icon", "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/a8932f0da23453865c7845485268cbd02455c13c61d0f13efdb351a2b4a5b83e.json b/graphify-out/cache/semantic/pd5fd89c46bb5/a8932f0da23453865c7845485268cbd02455c13c61d0f13efdb351a2b4a5b83e.json new file mode 100644 index 0000000..19a3080 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/a8932f0da23453865c7845485268cbd02455c13c61d0f13efdb351a2b4a5b83e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_60x60_2x_icon", "label": "App Icon 60x60 @2x", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_60x60_2x_icon", "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/b6af5162cfa026c9bcf0052ebd60a98c9b8eca2c96dddc2d48a136fa46eb3ca3.json b/graphify-out/cache/semantic/pd5fd89c46bb5/b6af5162cfa026c9bcf0052ebd60a98c9b8eca2c96dddc2d48a136fa46eb3ca3.json new file mode 100644 index 0000000..46a6dc3 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/b6af5162cfa026c9bcf0052ebd60a98c9b8eca2c96dddc2d48a136fa46eb3ca3.json @@ -0,0 +1 @@ +{"nodes": [{"id": "android_app_src_main_res_mipmap_xhdpi_ic_launcher_icon", "label": "App Launcher Icon (xhdpi)", "file_type": "image", "source_file": "android/app/src/main/res/mipmap-xhdpi/ic_launcher.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "android_app_src_main_res_mipmap_xhdpi_ic_launcher_icon", "target": "android_app_src_main_res_mipmap_xxhdpi_ic_launcher_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "android/app/src/main/res/mipmap-xhdpi/ic_launcher.png", "source_location": null, "weight": 1.0}, {"source": "android_app_src_main_res_mipmap_xhdpi_ic_launcher_icon", "target": "android_app_src_main_res_mipmap_xxxhdpi_ic_launcher_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "android/app/src/main/res/mipmap-xhdpi/ic_launcher.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/be0f8518ccffab58ab8e1d65c53348fb108d268856d2738a9c2899ccec3a2786.json b/graphify-out/cache/semantic/pd5fd89c46bb5/be0f8518ccffab58ab8e1d65c53348fb108d268856d2738a9c2899ccec3a2786.json new file mode 100644 index 0000000..5e0ba56 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/be0f8518ccffab58ab8e1d65c53348fb108d268856d2738a9c2899ccec3a2786.json @@ -0,0 +1 @@ +{"nodes": [{"id": "android_app_src_main_res_mipmap_xxhdpi_ic_launcher_icon", "label": "App Launcher Icon (xxhdpi)", "file_type": "image", "source_file": "android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "android_app_src_main_res_mipmap_xxhdpi_ic_launcher_icon", "target": "android_app_src_main_res_mipmap_xxxhdpi_ic_launcher_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/d32a671399678d4a5ef7590706c47fd36096bdbe97d716f633cc06ff227216a1.json b/graphify-out/cache/semantic/pd5fd89c46bb5/d32a671399678d4a5ef7590706c47fd36096bdbe97d716f633cc06ff227216a1.json new file mode 100644 index 0000000..8ebebf0 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/d32a671399678d4a5ef7590706c47fd36096bdbe97d716f633cc06ff227216a1.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_1x_icon", "label": "App Icon 29x29 @1x", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_1x_icon", "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/dab3f78d1bf810c7948887a02a2fcb14ef924489630d4848592f76d904f73a33.json b/graphify-out/cache/semantic/pd5fd89c46bb5/dab3f78d1bf810c7948887a02a2fcb14ef924489630d4848592f76d904f73a33.json new file mode 100644 index 0000000..1512b94 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/dab3f78d1bf810c7948887a02a2fcb14ef924489630d4848592f76d904f73a33.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_1x_icon", "label": "App Icon 20x20 @1x", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_1x_icon", "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/e3e0dd895f61e112abd896ea0b28bb3ffa20cf3322fab14e41b048af108631fb.json b/graphify-out/cache/semantic/pd5fd89c46bb5/e3e0dd895f61e112abd896ea0b28bb3ffa20cf3322fab14e41b048af108631fb.json new file mode 100644 index 0000000..894ae2b --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/e3e0dd895f61e112abd896ea0b28bb3ffa20cf3322fab14e41b048af108631fb.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_3x_icon", "label": "App Icon 20x20 @3x", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_3x_icon", "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/edd3a5743493eb1b019af94b5bc18f73a3362c737b4864432b3dd80b0f1889fa.json b/graphify-out/cache/semantic/pd5fd89c46bb5/edd3a5743493eb1b019af94b5bc18f73a3362c737b4864432b3dd80b0f1889fa.json new file mode 100644 index 0000000..6c8bffe --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/edd3a5743493eb1b019af94b5bc18f73a3362c737b4864432b3dd80b0f1889fa.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_2x_icon", "label": "App Icon 40x40 @2x", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_2x_icon", "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/f3c60d3e62ed0a5afdd440e9e4d9b92066a0f72f5ffda426df1a032c0aa46371.json b/graphify-out/cache/semantic/pd5fd89c46bb5/f3c60d3e62ed0a5afdd440e9e4d9b92066a0f72f5ffda426df1a032c0aa46371.json new file mode 100644 index 0000000..c2b19ac --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/f3c60d3e62ed0a5afdd440e9e4d9b92066a0f72f5ffda426df1a032c0aa46371.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_2x_icon", "label": "App Icon 20x20 @2x", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_2x_icon", "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/f728db084bf1180b215c2357e30efdce41e96fa11f7235a5594d1ed7855ba825.json b/graphify-out/cache/semantic/pd5fd89c46bb5/f728db084bf1180b215c2357e30efdce41e96fa11f7235a5594d1ed7855ba825.json new file mode 100644 index 0000000..0314ebf --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/f728db084bf1180b215c2357e30efdce41e96fa11f7235a5594d1ed7855ba825.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_1x_icon", "label": "App Icon 40x40 @1x", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_1x_icon", "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/f83e06bb75eaaa3f712b982f57b656906346ac1dc673f5bb81bcb7e342f80d8c.json b/graphify-out/cache/semantic/pd5fd89c46bb5/f83e06bb75eaaa3f712b982f57b656906346ac1dc673f5bb81bcb7e342f80d8c.json new file mode 100644 index 0000000..6ad4328 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/f83e06bb75eaaa3f712b982f57b656906346ac1dc673f5bb81bcb7e342f80d8c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_76x76_1x_icon", "label": "App Icon 76x76 @1x", "file_type": "image", "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_76x76_1x_icon", "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/fbbffbdd22117749e324e9ab99225fa6f38eff236153385fd1692b2f8fc6b5fc.json b/graphify-out/cache/semantic/pd5fd89c46bb5/fbbffbdd22117749e324e9ab99225fa6f38eff236153385fd1692b2f8fc6b5fc.json new file mode 100644 index 0000000..b7ddf8d --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/fbbffbdd22117749e324e9ab99225fa6f38eff236153385fd1692b2f8fc6b5fc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "analysis_options_ratune_mobile", "label": "Dart Analyzer Configuration", "file_type": "code", "source_file": "analysis_options.yaml", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "analysis_options_ratune_mobile", "target": "pubspec_flutter_lints", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "analysis_options.yaml", "source_location": null, "weight": 1.0}, {"source": "analysis_options_ratune_mobile", "target": "pubspec_ratune_mobile", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "analysis_options.yaml", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/stat-index.json b/graphify-out/cache/stat-index.json new file mode 100644 index 0000000..f34194a --- /dev/null +++ b/graphify-out/cache/stat-index.json @@ -0,0 +1 @@ +{"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/README.md":{"size":635,"mtime_ns":1785340086807312344,"word_count":70,"hashes":{"readme.md":"a01aae47a5e8e5b11e875b405640aba886fadb6f2c90f6c95fbca4923e944797"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/analysis_options.yaml":{"size":1420,"mtime_ns":1785340086807017833,"word_count":212,"hashes":{"analysis_options.yaml":"fbbffbdd22117749e324e9ab99225fa6f38eff236153385fd1692b2f8fc6b5fc"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/android/app/build.gradle.kts":{"size":1415,"mtime_ns":1785340086805328371,"word_count":134,"hashes":{"android/app/build.gradle.kts":"d729b6283291f95e494dba0df19a17602bbc708348e785673ac9fba0f9fdbea9"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/android/app/src/main/kotlin/com/conversionpath/ratune_mobile/MainActivity.kt":{"size":357,"mtime_ns":1785342271124576294,"word_count":36,"hashes":{"android/app/src/main/kotlin/com/conversionpath/ratune_mobile/mainactivity.kt":"dfa76b6404cb561747bf788a00f0303379f34e29c1138560966eb33a3710b538"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png":{"size":544,"mtime_ns":1785340086784130153,"word_count":18,"hashes":{"android/app/src/main/res/mipmap-hdpi/ic_launcher.png":"8a8499a2a4dc334995796f6b696cedc345d15f89db273a3c1c43a22bc21123e6"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png":{"size":442,"mtime_ns":1785340086783875798,"word_count":16,"hashes":{"android/app/src/main/res/mipmap-mdpi/ic_launcher.png":"21b53e8be66ff61259ea18ac62056f17081c9964946da5a40f8c28decca64a2e"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png":{"size":721,"mtime_ns":1785340086785130290,"word_count":17,"hashes":{"android/app/src/main/res/mipmap-xhdpi/ic_launcher.png":"b6af5162cfa026c9bcf0052ebd60a98c9b8eca2c96dddc2d48a136fa46eb3ca3"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png":{"size":1031,"mtime_ns":1785340086784886245,"word_count":46,"hashes":{"android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png":"be0f8518ccffab58ab8e1d65c53348fb108d268856d2738a9c2899ccec3a2786"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png":{"size":1443,"mtime_ns":1785340086784378617,"word_count":48,"hashes":{"android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png":"83209a2bc0d05e6781d2c76843120cad79a429cb94a33901aef65244003802d7"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/android/build.gradle.kts":{"size":537,"mtime_ns":1785340086806024529,"word_count":33,"hashes":{"android/build.gradle.kts":"ef48b58ee9ad2b1dddce51d21eeb2a27569e6d6a3a99e8260e9d5feaa10beb0c"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/android/settings.gradle.kts":{"size":771,"mtime_ns":1785340086786659716,"word_count":56,"hashes":{"android/settings.gradle.kts":"477954c2aa133fa44c1c58373205d62a160b3f3784d2790fb9e6e5bd55cf59b1"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/AppDelegate.swift":{"size":539,"mtime_ns":1785340086794914245,"word_count":39,"hashes":{"ios/runner/appdelegate.swift":"5a11dd31b699a7691881a4e41a6f43e9e905ee4308a995e797508224beb2c108"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json":{"size":2519,"mtime_ns":1785340086792393809,"word_count":282,"hashes":{"ios/runner/assets.xcassets/appicon.appiconset/contents.json":"73f148703e9cec4a2bc0c7088b63a1649aec3bd1472b9b3c9ccdc681aefb20ad"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png":{"size":10932,"mtime_ns":1785340086793198393,"word_count":378,"hashes":{"ios/runner/assets.xcassets/appicon.appiconset/icon-app-1024x1024@1x.png":"078fb6ead2ea3af2fa5ec83471a7880d79086b797e6eea9e7bfc270b9d6c56e7"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png":{"size":295,"mtime_ns":1785340086793022067,"word_count":10,"hashes":{"ios/runner/assets.xcassets/appicon.appiconset/icon-app-20x20@1x.png":"dab3f78d1bf810c7948887a02a2fcb14ef924489630d4848592f76d904f73a33"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png":{"size":406,"mtime_ns":1785340086791679497,"word_count":16,"hashes":{"ios/runner/assets.xcassets/appicon.appiconset/icon-app-20x20@2x.png":"f3c60d3e62ed0a5afdd440e9e4d9b92066a0f72f5ffda426df1a032c0aa46371"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png":{"size":450,"mtime_ns":1785340086792636412,"word_count":14,"hashes":{"ios/runner/assets.xcassets/appicon.appiconset/icon-app-20x20@3x.png":"e3e0dd895f61e112abd896ea0b28bb3ffa20cf3322fab14e41b048af108631fb"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png":{"size":282,"mtime_ns":1785340086790795382,"word_count":13,"hashes":{"ios/runner/assets.xcassets/appicon.appiconset/icon-app-29x29@1x.png":"d32a671399678d4a5ef7590706c47fd36096bdbe97d716f633cc06ff227216a1"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png":{"size":462,"mtime_ns":1785340086791861043,"word_count":11,"hashes":{"ios/runner/assets.xcassets/appicon.appiconset/icon-app-29x29@2x.png":"52f8a878e632aba90c431b8c88cb19395878070ec73f84a5d67803db42d4d530"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png":{"size":704,"mtime_ns":1785340086792217233,"word_count":14,"hashes":{"ios/runner/assets.xcassets/appicon.appiconset/icon-app-29x29@3x.png":"8695ca3286d400bdeff7f5d97096508627b878a8c37e80762f7ac92b5cecb8e3"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png":{"size":406,"mtime_ns":1785340086790389879,"word_count":16,"hashes":{"ios/runner/assets.xcassets/appicon.appiconset/icon-app-40x40@1x.png":"f728db084bf1180b215c2357e30efdce41e96fa11f7235a5594d1ed7855ba825"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png":{"size":586,"mtime_ns":1785340086791012886,"word_count":21,"hashes":{"ios/runner/assets.xcassets/appicon.appiconset/icon-app-40x40@2x.png":"edd3a5743493eb1b019af94b5bc18f73a3362c737b4864432b3dd80b0f1889fa"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png":{"size":862,"mtime_ns":1785340086793381783,"word_count":24,"hashes":{"ios/runner/assets.xcassets/appicon.appiconset/icon-app-40x40@3x.png":"a75c4e957b5684bd9bc3c44186e3f078fde56df022f247ce1fc3d7749d46f10a"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png":{"size":862,"mtime_ns":1785340086792809742,"word_count":24,"hashes":{"ios/runner/assets.xcassets/appicon.appiconset/icon-app-60x60@2x.png":"a8932f0da23453865c7845485268cbd02455c13c61d0f13efdb351a2b4a5b83e"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png":{"size":1674,"mtime_ns":1785340086790574100,"word_count":41,"hashes":{"ios/runner/assets.xcassets/appicon.appiconset/icon-app-60x60@3x.png":"55eccb3bb04e4d59726019a1a4daf11304209be1eed147b019d71e6cbd051cce"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png":{"size":762,"mtime_ns":1785340086790192051,"word_count":19,"hashes":{"ios/runner/assets.xcassets/appicon.appiconset/icon-app-76x76@1x.png":"f83e06bb75eaaa3f712b982f57b656906346ac1dc673f5bb81bcb7e342f80d8c"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png":{"size":1226,"mtime_ns":1785340086791185185,"word_count":39,"hashes":{"ios/runner/assets.xcassets/appicon.appiconset/icon-app-76x76@2x.png":"7d455ba4bf09470d0e7aa7f3a9e0d281f4dd22e9a689a188ab344e08b8102eda"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png":{"size":1418,"mtime_ns":1785340086792043171,"word_count":42,"hashes":{"ios/runner/assets.xcassets/appicon.appiconset/icon-app-83.5x83.5@2x.png":"2b19e45e05742cba94dec131c524ae55a5ac111fd148e49c2a1a88e81751ed9f"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json":{"size":391,"mtime_ns":1785340086794090374,"word_count":49,"hashes":{"ios/runner/assets.xcassets/launchimage.imageset/contents.json":"5495e7d6e86d49871f8272fb7a10cf37557739f43b020ea946f8d41d5e09d191"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png":{"size":68,"mtime_ns":1785340086794481680,"word_count":7,"hashes":{"ios/runner/assets.xcassets/launchimage.imageset/launchimage.png":"54f7d2a2c2b9d85bcbe4c88fc6d537a64eeaa3b85be5208b64cad128fbe125e0"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png":{"size":68,"mtime_ns":1785340086794322296,"word_count":7,"hashes":{"ios/runner/assets.xcassets/launchimage.imageset/launchimage@2x.png":"3b769ba5096a0c25dacd1ab76dda95ccbc4793fbf20fe661518ace2e0f62c793"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png":{"size":68,"mtime_ns":1785340086793687165,"word_count":7,"hashes":{"ios/runner/assets.xcassets/launchimage.imageset/launchimage@3x.png":"424d0358df6a3200968b266c025dbfe6da5c85e259789e09bca7a699a3ea6283"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md":{"size":336,"mtime_ns":1785340086793846699,"word_count":50,"hashes":{"ios/runner/assets.xcassets/launchimage.imageset/readme.md":"746d52418e85b6ed7c9dfde4c6ae089eeb5fe758beb6c64e2fccf30c445dc124"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/Runner-Bridging-Header.h":{"size":38,"mtime_ns":1785340086789556720,"word_count":2,"hashes":{"ios/runner/runner-bridging-header.h":"0390825f346bed0f14ae2b127d1516dd1a12c2e2ef7d77dacffd40265b676481"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/Runner/SceneDelegate.swift":{"size":76,"mtime_ns":1785340086794624553,"word_count":9,"hashes":{"ios/runner/scenedelegate.swift":"b17d5745f858190eca2c5aad736d67db02429a5e0fc969190142326791bb1611"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/ios/RunnerTests/RunnerTests.swift":{"size":285,"mtime_ns":1785340086788503885,"word_count":37,"hashes":{"ios/runnertests/runnertests.swift":"eb95572faf920913e57f4b41b1f12d48170a94364002809e58260afe063d1b7b"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/history/play_history.dart":{"size":6260,"mtime_ns":1785343202449618696,"word_count":661,"hashes":{"lib/history/play_history.dart":"370bc3be25df5ff5daa46329da2e968fbfeaf113ff3190b2fa630949d9bc8bfa"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/main.dart":{"size":1667,"mtime_ns":1785342280036862254,"word_count":153,"hashes":{"lib/main.dart":"f631d208052672d68c98566f41a05db8b989dc7c1553a864d2b9b1de4b9dbf68"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/playback/playback_engine.dart":{"size":6392,"mtime_ns":1785343132636450139,"word_count":673,"hashes":{"lib/playback/playback_engine.dart":"8d0c7d37d038ca16fd47e2067d94f18325398a5dc5c1f3c7b164645f35e487cd"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/screens/browser_screen.dart":{"size":9609,"mtime_ns":1785343355275394539,"word_count":763,"hashes":{"lib/screens/browser_screen.dart":"07fc6fef9c1169f9aeec8a31c93a0564c677cd48f4bb801881c0b87b4eec7465"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/screens/connect_sheet.dart":{"size":4470,"mtime_ns":1785341046648255065,"word_count":329,"hashes":{"lib/screens/connect_sheet.dart":"009d02e50fbd6085f1e3afa7663e4711d003cfd93ca88d12357b4ebae6c07a46"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/screens/favorites_screen.dart":{"size":3493,"mtime_ns":1785343290532366968,"word_count":246,"hashes":{"lib/screens/favorites_screen.dart":"e03baa387d7ef6e507539177424c3312647ddbe6e3b953f041a8cfa73f6fb2b4"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/screens/home_screen.dart":{"size":5357,"mtime_ns":1785343390413497323,"word_count":337,"hashes":{"lib/screens/home_screen.dart":"3108512779c4feb4ab813f0416d23186952d73aaf0a086b4fe47215d83deedbc"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/screens/now_playing_screen.dart":{"size":10455,"mtime_ns":1785343266243607887,"word_count":846,"hashes":{"lib/screens/now_playing_screen.dart":"8e28958ffbbeeda9da40d41a32d72972f2b28a015102cbb49ddca4399f548b8e"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/screens/search_screen.dart":{"size":3440,"mtime_ns":1785343309316954639,"word_count":281,"hashes":{"lib/screens/search_screen.dart":"28836244f262d2c0fa10f6089b672474b47cfcb3f8f1a86ce3ef764fc66f2917"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/shell/app_shell.dart":{"size":4765,"mtime_ns":1785343479551301428,"word_count":404,"hashes":{"lib/shell/app_shell.dart":"f9847e86af96f21520c5699e4ee1d5072c1f229e2bef696abc79b946d5a26b51"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/state/favorites.dart":{"size":3148,"mtime_ns":1785343084674966015,"word_count":325,"hashes":{"lib/state/favorites.dart":"c15d847d87bf2cfff8476c23b103246e15d795e9480ec6ec26d21d2581d21299"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/state/providers.dart":{"size":7077,"mtime_ns":1785343163480407077,"word_count":659,"hashes":{"lib/state/providers.dart":"9e87fd51dc7757d4a15c46877579c1beb7a71df3a18fca32c4773275afb83303"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/subsonic/credentials.dart":{"size":2129,"mtime_ns":1785340853602267341,"word_count":240,"hashes":{"lib/subsonic/credentials.dart":"a4535ff7cd97eee6f82de8eddac2ca001b02917f7af5f86d031064ccd0707ce6"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/subsonic/json_helpers.dart":{"size":1939,"mtime_ns":1785340473991459028,"word_count":290,"hashes":{"lib/subsonic/json_helpers.dart":"f0838fc12b93404267550e638c01b0f2950ecd5f3b2a5559e29891151b3e04fb"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/subsonic/models.dart":{"size":5586,"mtime_ns":1785342992526129428,"word_count":507,"hashes":{"lib/subsonic/models.dart":"9fad88d9e18c1f3dc6e95849430670b4f7047dcba1a10a809cfecbb2b7d50dd1"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/subsonic/subsonic_client.dart":{"size":7075,"mtime_ns":1785343392089549963,"word_count":794,"hashes":{"lib/subsonic/subsonic_client.dart":"0161b3a6c59f8a03a65a3f4b987712106d7f5191c5cc550df3aea1c37a00d5b6"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/theme/accent.dart":{"size":939,"mtime_ns":1785340169759492879,"word_count":122,"hashes":{"lib/theme/accent.dart":"afd34f4a9ae4e18dc5d7d4e20e97abff3da52b69e11a355ec291e43d69f676b6"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/theme/accent_extract.dart":{"size":1186,"mtime_ns":1785340937997387031,"word_count":134,"hashes":{"lib/theme/accent_extract.dart":"4873c830ea6900d07f48c9ffef3ab08e33d42126a1cb564175775170412915f9"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/theme/app_theme.dart":{"size":1621,"mtime_ns":1785340180885893705,"word_count":147,"hashes":{"lib/theme/app_theme.dart":"296f463a71ef948f73c34cee5ab9bea3bf111b75ae649a285d886ac32c8dc5f4"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/theme/tokens.dart":{"size":1883,"mtime_ns":1785340160011141700,"word_count":268,"hashes":{"lib/theme/tokens.dart":"e7cc6f8fc83f160d7debf7f2da1c7d92a75223943cf84474b51d89b1ce53100f"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/widgets/block_progress_bar.dart":{"size":1315,"mtime_ns":1785340246126243929,"word_count":146,"hashes":{"lib/widgets/block_progress_bar.dart":"b40e3a3fe87a93c3649a7631b6da47e9c1fffc342366f27de23c8070272cdad3"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/lib/widgets/hairline_panel.dart":{"size":2824,"mtime_ns":1785340217747221602,"word_count":269,"hashes":{"lib/widgets/hairline_panel.dart":"c99a531e156c1d0618b31483fb278f0d8f2bc7d4082aafd7229f630d5adf5834"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/CMakeLists.txt":{"size":4772,"mtime_ns":1785340086801634488,"word_count":443,"hashes":{"linux/cmakelists.txt":"06b16c947d0c1147017c374e02c119d09d21d6cf10f485fc8d52b60ae5287317"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/flutter/CMakeLists.txt":{"size":2815,"mtime_ns":1785340086801834941,"word_count":211,"hashes":{"linux/flutter/cmakelists.txt":"684702063210b96f3f86c6af7550aa15a35afa05d7ddb3ba1659d643936ba545"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/flutter/generated_plugin_registrant.cc":{"size":510,"mtime_ns":1785340136352289400,"word_count":26,"hashes":{"linux/flutter/generated_plugin_registrant.cc":"f8914373ed1fd22de34f6b9dad8e81a035dfd238e8740e981b1c2e6f40147aae"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/flutter/generated_plugin_registrant.h":{"size":303,"mtime_ns":1785340087425964831,"word_count":27,"hashes":{"linux/flutter/generated_plugin_registrant.h":"d4c152ddfc092b303c2685bc3eaae465d44b8edbf11dd73b4460c392913fcfd2"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/runner/CMakeLists.txt":{"size":974,"mtime_ns":1785340086800686952,"word_count":102,"hashes":{"linux/runner/cmakelists.txt":"8e9bb2a1f55362a4ed85bb2118800ee14fc553dc9f3a7b3424a6d7d08b36804b"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/runner/main.cc":{"size":180,"mtime_ns":1785340086800892794,"word_count":17,"hashes":{"linux/runner/main.cc":"177ce67aa2de78f757a34e837ba53b39725dd54903f15881b61c680fede827cd"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/runner/my_application.cc":{"size":5465,"mtime_ns":1785340086800521045,"word_count":454,"hashes":{"linux/runner/my_application.cc":"1770c9d29552e6d419d2219dd704377f65ee108f8ec7f049ec2635736ffdf9bf"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/linux/runner/my_application.h":{"size":451,"mtime_ns":1785340086801090291,"word_count":33,"hashes":{"linux/runner/my_application.h":"3b9e7b227eec565a3816e9153043e9a7021c0a79fc245c2b454bb50f5694b58c"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/pubspec.yaml":{"size":4095,"mtime_ns":1785340835865835628,"word_count":558,"hashes":{"pubspec.yaml":"23c870fd0d490869d949581110b1548043bd042df10781d6c5c586a0de3e2f73"}},"/home/troglodyte/Troglodyte-Chamber/Dev/ratune_mobile/test/widget_test.dart":{"size":498,"mtime_ns":1785340509747036259,"word_count":34,"hashes":{"test/widget_test.dart":"a92662549ca44bee7d2a9ced44f8cb74ed2b2b8a6eef74a95192d379ef63a7ee"}}} \ No newline at end of file diff --git a/graphify-out/cost.json b/graphify-out/cost.json new file mode 100644 index 0000000..68cdf3b --- /dev/null +++ b/graphify-out/cost.json @@ -0,0 +1,12 @@ +{ + "runs": [ + { + "date": "2026-07-29T17:10:54.399919+00:00", + "input_tokens": 75479, + "output_tokens": 0, + "files": 68 + } + ], + "total_input_tokens": 75479, + "total_output_tokens": 0 +} \ No newline at end of file diff --git a/graphify-out/graph.html b/graphify-out/graph.html new file mode 100644 index 0000000..803391d --- /dev/null +++ b/graphify-out/graph.html @@ -0,0 +1,320 @@ + + + + +graphify - graphify-out/graph.html + + + + +
+ + + + + \ No newline at end of file diff --git a/graphify-out/graph.json b/graphify-out/graph.json new file mode 100644 index 0000000..8bc71de --- /dev/null +++ b/graphify-out/graph.json @@ -0,0 +1,13062 @@ +{ + "directed": false, + "multigraph": false, + "graph": { + "hyperedges": [ + { + "id": "linux_flutter_build_pipeline", + "label": "Linux Flutter CMake Build Pipeline", + "nodes": [ + "linux_cmakelists_runner", + "linux_flutter_cmakelists_flutter", + "linux_runner_cmakelists_runner" + ], + "relation": "participate_in", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "linux/CMakeLists.txt" + }, + { + "id": "audio_playback_stack", + "label": "Audio Playback and Theming Stack", + "nodes": [ + "pubspec_just_audio", + "pubspec_just_audio_background", + "pubspec_palette_generator" + ], + "relation": "form", + "confidence": "INFERRED", + "confidence_score": 0.65, + "source_file": "pubspec.yaml" + }, + { + "id": "android_launcher_icon_set", + "label": "Android Launcher Icon Set (Flutter logo)", + "nodes": [ + "android_app_src_main_res_mipmap_hdpi_ic_launcher_icon", + "android_app_src_main_res_mipmap_mdpi_ic_launcher_icon", + "android_app_src_main_res_mipmap_xhdpi_ic_launcher_icon", + "android_app_src_main_res_mipmap_xxhdpi_ic_launcher_icon", + "android_app_src_main_res_mipmap_xxxhdpi_ic_launcher_icon" + ], + "relation": "form", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "android/app/src/main/res/mipmap-hdpi/ic_launcher.png" + }, + { + "id": "ios_appicon_appiconset_set", + "label": "iOS AppIcon Set (Flutter logo)", + "nodes": [ + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_1x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_2x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_3x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_1x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_2x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_3x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_1x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_2x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_3x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_60x60_2x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_60x60_3x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_76x76_1x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_76x76_2x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_83_5x83_5_2x_icon" + ], + "relation": "form", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png" + }, + { + "id": "ios_launch_image_set", + "label": "iOS Launch Image Set", + "nodes": [ + "ios_runner_assets_xcassets_launchimage_imageset_launchimage_image", + "ios_runner_assets_xcassets_launchimage_imageset_launchimage_2x_image", + "ios_runner_assets_xcassets_launchimage_imageset_launchimage_3x_image" + ], + "relation": "form", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png" + } + ] + }, + "nodes": [ + { + "label": "app/build.gradle.kts", + "file_type": "code", + "source_file": "android/app/build.gradle.kts", + "source_location": "L1", + "_origin": "ast", + "id": "android_app_build_gradle", + "community": 28, + "norm_label": "app/build.gradle.kts" + }, + { + "label": "MainActivity.kt", + "file_type": "code", + "source_file": "android/app/src/main/kotlin/com/conversionpath/ratune_mobile/MainActivity.kt", + "source_location": "L1", + "_origin": "ast", + "id": "android_app_src_main_kotlin_com_conversionpath_ratune_mobile_mainactivity", + "community": 26, + "norm_label": "mainactivity.kt" + }, + { + "label": "MainActivity", + "file_type": "code", + "source_file": "android/app/src/main/kotlin/com/conversionpath/ratune_mobile/MainActivity.kt", + "source_location": "L8", + "_origin": "ast", + "id": "android_app_src_main_kotlin_com_conversionpath_ratune_mobile_mainactivity_mainactivity", + "community": 26, + "norm_label": "mainactivity" + }, + { + "label": "AudioServiceActivity", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "audioserviceactivity", + "community": 26, + "norm_label": "audioserviceactivity" + }, + { + "label": "android/build.gradle.kts", + "file_type": "code", + "source_file": "android/build.gradle.kts", + "source_location": "L1", + "_origin": "ast", + "id": "android_build_gradle", + "community": 29, + "norm_label": "android/build.gradle.kts" + }, + { + "label": "settings.gradle.kts", + "file_type": "code", + "source_file": "android/settings.gradle.kts", + "source_location": "L1", + "_origin": "ast", + "id": "android_settings_gradle", + "community": 30, + "norm_label": "settings.gradle.kts" + }, + { + "label": "AppDelegate.swift", + "file_type": "code", + "source_file": "ios/Runner/AppDelegate.swift", + "source_location": "L1", + "_origin": "ast", + "id": "ios_runner_appdelegate", + "community": 9, + "norm_label": "appdelegate.swift" + }, + { + "label": "Flutter", + "file_type": "code", + "type": "module", + "source_file": "ios/RunnerTests/RunnerTests.swift", + "source_location": "L1", + "_origin": "ast", + "id": "flutter", + "community": 9, + "norm_label": "flutter" + }, + { + "label": "UIKit", + "file_type": "code", + "type": "module", + "source_file": "ios/RunnerTests/RunnerTests.swift", + "source_location": "L2", + "_origin": "ast", + "id": "uikit", + "community": 9, + "norm_label": "uikit" + }, + { + "label": "AppDelegate", + "file_type": "code", + "source_file": "ios/Runner/AppDelegate.swift", + "source_location": "L4", + "_origin": "ast", + "id": "ios_runner_appdelegate_appdelegate", + "community": 9, + "norm_label": "appdelegate" + }, + { + "label": "FlutterAppDelegate", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "flutterappdelegate", + "community": 9, + "norm_label": "flutterappdelegate" + }, + { + "label": "FlutterImplicitEngineDelegate", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "flutterimplicitenginedelegate", + "community": 9, + "norm_label": "flutterimplicitenginedelegate" + }, + { + "label": ".application()", + "file_type": "code", + "source_file": "ios/Runner/AppDelegate.swift", + "source_location": "L6", + "_origin": "ast", + "id": "ios_runner_appdelegate_appdelegate_application", + "community": 9, + "norm_label": ".application()" + }, + { + "label": "UIApplication", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "uiapplication", + "community": 9, + "norm_label": "uiapplication" + }, + { + "label": "Any", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "any", + "community": 9, + "norm_label": "any" + }, + { + "label": "Bool", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "bool", + "community": 9, + "norm_label": "bool" + }, + { + "label": ".didInitializeImplicitFlutterEngine()", + "file_type": "code", + "source_file": "ios/Runner/AppDelegate.swift", + "source_location": "L13", + "_origin": "ast", + "id": "ios_runner_appdelegate_appdelegate_didinitializeimplicitflutterengine", + "community": 9, + "norm_label": ".didinitializeimplicitflutterengine()" + }, + { + "label": "FlutterImplicitEngineBridge", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "flutterimplicitenginebridge", + "community": 9, + "norm_label": "flutterimplicitenginebridge" + }, + { + "label": "Runner-Bridging-Header.h", + "file_type": "code", + "source_file": "ios/Runner/Runner-Bridging-Header.h", + "source_location": "L1", + "_origin": "ast", + "id": "ios_runner_runner_bridging_header", + "community": 32, + "norm_label": "runner-bridging-header.h" + }, + { + "label": "SceneDelegate.swift", + "file_type": "code", + "source_file": "ios/Runner/SceneDelegate.swift", + "source_location": "L1", + "_origin": "ast", + "id": "ios_runner_scenedelegate", + "community": 9, + "norm_label": "scenedelegate.swift" + }, + { + "label": "SceneDelegate", + "file_type": "code", + "source_file": "ios/Runner/SceneDelegate.swift", + "source_location": "L4", + "_origin": "ast", + "id": "ios_runner_scenedelegate_scenedelegate", + "community": 9, + "norm_label": "scenedelegate" + }, + { + "label": "FlutterSceneDelegate", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "flutterscenedelegate", + "community": 9, + "norm_label": "flutterscenedelegate" + }, + { + "label": "RunnerTests.swift", + "file_type": "code", + "source_file": "ios/RunnerTests/RunnerTests.swift", + "source_location": "L1", + "_origin": "ast", + "id": "ios_runnertests_runnertests", + "community": 9, + "norm_label": "runnertests.swift" + }, + { + "label": "XCTest", + "file_type": "code", + "type": "module", + "source_file": "ios/RunnerTests/RunnerTests.swift", + "source_location": "L3", + "_origin": "ast", + "id": "xctest", + "community": 9, + "norm_label": "xctest" + }, + { + "label": "RunnerTests", + "file_type": "code", + "source_file": "ios/RunnerTests/RunnerTests.swift", + "source_location": "L5", + "_origin": "ast", + "id": "ios_runnertests_runnertests_runnertests", + "community": 9, + "norm_label": "runnertests" + }, + { + "label": "XCTestCase", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "xctestcase", + "community": 9, + "norm_label": "xctestcase" + }, + { + "label": ".testExample()", + "file_type": "code", + "source_file": "ios/RunnerTests/RunnerTests.swift", + "source_location": "L7", + "_origin": "ast", + "id": "ios_runnertests_runnertests_runnertests_testexample", + "community": 9, + "norm_label": ".testexample()" + }, + { + "label": "play_history.dart", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history", + "community": 1, + "norm_label": "play_history.dart" + }, + { + "label": "PlayRecord", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_playrecord", + "community": 1, + "norm_label": "playrecord" + }, + { + "label": "RediscoverArtist", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_rediscoverartist", + "community": 1, + "norm_label": "rediscoverartist" + }, + { + "label": "HistoryController", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_historycontroller", + "community": 8, + "norm_label": "historycontroller" + }, + { + "label": "StateNotifier", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "statenotifier", + "community": 8, + "norm_label": "statenotifier" + }, + { + "label": "List", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "list", + "community": 8, + "norm_label": "list" + }, + { + "label": "songId", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_songid", + "community": 1, + "norm_label": "songid" + }, + { + "label": "title", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_title", + "community": 1, + "norm_label": "title" + }, + { + "label": "playedAt", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_playedat", + "community": 1, + "norm_label": "playedat" + }, + { + "label": "DateTime", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "datetime", + "community": 1, + "norm_label": "datetime" + }, + { + "label": "album", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_album", + "community": 1, + "norm_label": "album" + }, + { + "label": "String?", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "string", + "community": 2, + "norm_label": "string?" + }, + { + "label": "albumId", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_albumid", + "community": 1, + "norm_label": "albumid" + }, + { + "label": "artist", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_artist", + "community": 1, + "norm_label": "artist" + }, + { + "label": "artistId", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_artistid", + "community": 1, + "norm_label": "artistid" + }, + { + "label": "coverArt", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_coverart", + "community": 1, + "norm_label": "coverart" + }, + { + "label": "duration", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_duration", + "community": 1, + "norm_label": "duration" + }, + { + "label": "int?", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "int", + "community": 0, + "norm_label": "int?" + }, + { + "label": "name", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_name", + "community": 1, + "norm_label": "name" + }, + { + "label": "lastPlayed", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_lastplayed", + "community": 1, + "norm_label": "lastplayed" + }, + { + "label": "playCount", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_playcount", + "community": 1, + "norm_label": "playcount" + }, + { + "label": "_maxRecords", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_maxrecords", + "community": 1, + "norm_label": "_maxrecords" + }, + { + "label": "static const int", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "static_const_int", + "community": 3, + "norm_label": "static const int" + }, + { + "label": "_file", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_file", + "community": 1, + "norm_label": "_file" + }, + { + "label": "File?", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "file", + "community": 1, + "norm_label": "file?" + }, + { + "label": "seen", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_seen", + "community": 1, + "norm_label": "seen" + }, + { + "label": "out", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_out", + "community": 1, + "norm_label": "out" + }, + { + "label": "return", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "return", + "community": 18, + "norm_label": "return" + }, + { + "label": "count", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_count", + "community": 1, + "norm_label": "count" + }, + { + "label": "minDays", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_mindays", + "community": 1, + "norm_label": "mindays" + }, + { + "label": "seed", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_seed", + "community": 1, + "norm_label": "seed" + }, + { + "label": "ref", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_ref", + "community": 1, + "norm_label": "ref" + }, + { + "label": "cutoff", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_cutoff", + "community": 1, + "norm_label": "cutoff" + }, + { + "label": "byArtist", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_byartist", + "community": 1, + "norm_label": "byartist" + }, + { + "label": "candidates", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_candidates", + "community": 1, + "norm_label": "candidates" + }, + { + "label": "pool", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_pool", + "community": 1, + "norm_label": "pool" + }, + { + "label": "toJson", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_tojson", + "community": 1, + "norm_label": "tojson" + }, + { + "label": "fromJson", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_fromjson", + "community": 1, + "norm_label": "fromjson" + }, + { + "label": "toSong", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_tosong", + "community": 1, + "norm_label": "tosong" + }, + { + "label": "fromSong", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_fromsong", + "community": 1, + "norm_label": "fromsong" + }, + { + "label": "_load", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_load", + "community": 1, + "norm_label": "_load" + }, + { + "label": "record", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_record", + "community": 1, + "norm_label": "record" + }, + { + "label": "_persist", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_persist", + "community": 1, + "norm_label": "_persist" + }, + { + "label": "recentSongs", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_recentsongs", + "community": 1, + "norm_label": "recentsongs" + }, + { + "label": "recentAlbums", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_recentalbums", + "community": 1, + "norm_label": "recentalbums" + }, + { + "label": "rediscover", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_rediscover", + "community": 1, + "norm_label": "rediscover" + }, + { + "label": "take", + "file_type": "code", + "source_file": "lib/history/play_history.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_history_play_history_take", + "community": 1, + "norm_label": "take" + }, + { + "label": "dart:async", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "dart_async", + "community": 1, + "norm_label": "dart:async" + }, + { + "label": "dart:convert", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "dart_convert", + "community": 3, + "norm_label": "dart:convert" + }, + { + "label": "dart:io", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "dart_io", + "community": 0, + "norm_label": "dart:io" + }, + { + "label": "dart:math", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "dart_math", + "community": 3, + "norm_label": "dart:math" + }, + { + "label": "package:flutter_riverpod/flutter_riverpod.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "package_flutter_riverpod_flutter_riverpod_dart", + "community": 24, + "norm_label": "package:flutter_riverpod/flutter_riverpod.dart" + }, + { + "label": "package:path_provider/path_provider.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "package_path_provider_path_provider_dart", + "community": 1, + "norm_label": "package:path_provider/path_provider.dart" + }, + { + "label": "../subsonic/models.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "subsonic_models_dart", + "community": 8, + "norm_label": "../subsonic/models.dart" + }, + { + "label": "main.dart", + "file_type": "code", + "source_file": "lib/main.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_main", + "community": 0, + "norm_label": "main.dart" + }, + { + "label": "RatuneApp", + "file_type": "code", + "source_file": "lib/main.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_main_ratuneapp", + "community": 0, + "norm_label": "ratuneapp" + }, + { + "label": "ConsumerWidget", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "consumerwidget", + "community": 16, + "norm_label": "consumerwidget" + }, + { + "label": "main", + "file_type": "code", + "source_file": "lib/main.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_main_main", + "community": 0, + "norm_label": "main" + }, + { + "label": "build", + "file_type": "code", + "source_file": "lib/main.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_main_build", + "community": 0, + "norm_label": "build" + }, + { + "label": "package:flutter/foundation.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "package_flutter_foundation_dart", + "community": 0, + "norm_label": "package:flutter/foundation.dart" + }, + { + "label": "package:flutter/material.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "package_flutter_material_dart", + "community": 6, + "norm_label": "package:flutter/material.dart" + }, + { + "label": "package:just_audio_background/just_audio_background.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "package_just_audio_background_just_audio_background_dart", + "community": 0, + "norm_label": "package:just_audio_background/just_audio_background.dart" + }, + { + "label": "shell/app_shell.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "shell_app_shell_dart", + "community": 0, + "norm_label": "shell/app_shell.dart" + }, + { + "label": "../theme/accent.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "theme_accent_dart", + "community": 0, + "norm_label": "../theme/accent.dart" + }, + { + "label": "theme/app_theme.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "theme_app_theme_dart", + "community": 0, + "norm_label": "theme/app_theme.dart" + }, + { + "label": "playback_engine.dart", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine", + "community": 0, + "norm_label": "playback_engine.dart" + }, + { + "label": "PlaybackState", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_playbackstate", + "community": 0, + "norm_label": "playbackstate" + }, + { + "label": "PlaybackController", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_playbackcontroller", + "community": 0, + "norm_label": "playbackcontroller" + }, + { + "label": "queue", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_queue", + "community": 0, + "norm_label": "queue" + }, + { + "label": "currentIndex", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_currentindex", + "community": 0, + "norm_label": "currentindex" + }, + { + "label": "playing", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_playing", + "community": 0, + "norm_label": "playing" + }, + { + "label": "position", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_position", + "community": 0, + "norm_label": "position" + }, + { + "label": "Duration", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "duration", + "community": 0, + "norm_label": "duration" + }, + { + "label": "duration", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_duration", + "community": 0, + "norm_label": "duration" + }, + { + "label": "shuffle", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_shuffle", + "community": 0, + "norm_label": "shuffle" + }, + { + "label": "loop", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_loop", + "community": 0, + "norm_label": "loop" + }, + { + "label": "LoopMode", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "loopmode", + "community": 0, + "norm_label": "loopmode" + }, + { + "label": "supported", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_supported", + "community": 0, + "norm_label": "supported" + }, + { + "label": "current", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_current", + "community": 0, + "norm_label": "current" + }, + { + "label": "Song? get", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "song_get", + "community": 0, + "norm_label": "song? get" + }, + { + "label": "_player", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_player", + "community": 0, + "norm_label": "_player" + }, + { + "label": "AudioPlayer?", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "audioplayer", + "community": 0, + "norm_label": "audioplayer?" + }, + { + "label": "_audioSupported", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_audiosupported", + "community": 0, + "norm_label": "_audiosupported" + }, + { + "label": "static bool get", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "static_bool_get", + "community": 0, + "norm_label": "static bool get" + }, + { + "label": "copyWith", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_copywith", + "community": 0, + "norm_label": "copywith" + }, + { + "label": "_wireStreams", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_wirestreams", + "community": 0, + "norm_label": "_wirestreams" + }, + { + "label": "_notifyCurrent", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_notifycurrent", + "community": 0, + "norm_label": "_notifycurrent" + }, + { + "label": "_sourceFor", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_sourcefor", + "community": 0, + "norm_label": "_sourcefor" + }, + { + "label": "playSongs", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_playsongs", + "community": 0, + "norm_label": "playsongs" + }, + { + "label": "togglePlayPause", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_toggleplaypause", + "community": 0, + "norm_label": "toggleplaypause" + }, + { + "label": "next", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_next", + "community": 0, + "norm_label": "next" + }, + { + "label": "previous", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_previous", + "community": 0, + "norm_label": "previous" + }, + { + "label": "seek", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_seek", + "community": 0, + "norm_label": "seek" + }, + { + "label": "toggleShuffle", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_toggleshuffle", + "community": 0, + "norm_label": "toggleshuffle" + }, + { + "label": "cycleLoop", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_cycleloop", + "community": 0, + "norm_label": "cycleloop" + }, + { + "label": "dispose", + "file_type": "code", + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_playback_playback_engine_dispose", + "community": 0, + "norm_label": "dispose" + }, + { + "label": "package:just_audio/just_audio.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "package_just_audio_just_audio_dart", + "community": 15, + "norm_label": "package:just_audio/just_audio.dart" + }, + { + "label": "browser_screen.dart", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen", + "community": 2, + "norm_label": "browser_screen.dart" + }, + { + "label": "BrowserScreen", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_browserscreen", + "community": 16, + "norm_label": "browserscreen" + }, + { + "label": "_Action", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_action", + "community": 2, + "norm_label": "_action" + }, + { + "label": "StatelessWidget", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "statelesswidget", + "community": 2, + "norm_label": "statelesswidget" + }, + { + "label": "ArtistScreen", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_artistscreen", + "community": 16, + "norm_label": "artistscreen" + }, + { + "label": "AlbumScreen", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_albumscreen", + "community": 16, + "norm_label": "albumscreen" + }, + { + "label": "BrowseRow", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_browserow", + "community": 2, + "norm_label": "browserow" + }, + { + "label": "_DetailScaffold", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_detailscaffold", + "community": 2, + "norm_label": "_detailscaffold" + }, + { + "label": "_NotConnected", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_notconnected", + "community": 2, + "norm_label": "_notconnected" + }, + { + "label": "_Centered", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_centered", + "community": 2, + "norm_label": "_centered" + }, + { + "label": "_Loading", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_loading", + "community": 2, + "norm_label": "_loading" + }, + { + "label": "_ErrorText", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_errortext", + "community": 2, + "norm_label": "_errortext" + }, + { + "label": "icon", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_icon", + "community": 2, + "norm_label": "icon" + }, + { + "label": "IconData", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "icondata", + "community": 2, + "norm_label": "icondata" + }, + { + "label": "label", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_label", + "community": 2, + "norm_label": "label" + }, + { + "label": "onTap", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_ontap", + "community": 2, + "norm_label": "ontap" + }, + { + "label": "VoidCallback", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "voidcallback", + "community": 2, + "norm_label": "voidcallback" + }, + { + "label": "id", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_id", + "community": 2, + "norm_label": "id" + }, + { + "label": "title", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_title", + "community": 2, + "norm_label": "title" + }, + { + "label": "leading", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_leading", + "community": 2, + "norm_label": "leading" + }, + { + "label": "trailing", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_trailing", + "community": 2, + "norm_label": "trailing" + }, + { + "label": "child", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_child", + "community": 2, + "norm_label": "child" + }, + { + "label": "Widget", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "widget", + "community": 2, + "norm_label": "widget" + }, + { + "label": "message", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_message", + "community": 2, + "norm_label": "message" + }, + { + "label": "m", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_m", + "community": 2, + "norm_label": "m" + }, + { + "label": "s", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_s", + "community": 2, + "norm_label": "s" + }, + { + "label": "build", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_build", + "community": 16, + "norm_label": "build" + }, + { + "label": "MaterialPageRoute", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "materialpageroute", + "community": 20, + "norm_label": "materialpageroute" + }, + { + "label": "_fmtDuration", + "file_type": "code", + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_browser_screen_fmtduration", + "community": 2, + "norm_label": "_fmtduration" + }, + { + "label": "../state/providers.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "state_providers_dart", + "community": 20, + "norm_label": "../state/providers.dart" + }, + { + "label": "../theme/tokens.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "theme_tokens_dart", + "community": 20, + "norm_label": "../theme/tokens.dart" + }, + { + "label": "../widgets/hairline_panel.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "widgets_hairline_panel_dart", + "community": 21, + "norm_label": "../widgets/hairline_panel.dart" + }, + { + "label": "favorites_screen.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "favorites_screen_dart", + "community": 2, + "norm_label": "favorites_screen.dart" + }, + { + "label": "search_screen.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "search_screen_dart", + "community": 2, + "norm_label": "search_screen.dart" + }, + { + "label": "connect_sheet.dart", + "file_type": "code", + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_connect_sheet", + "community": 12, + "norm_label": "connect_sheet.dart" + }, + { + "label": "_ConnectSheet", + "file_type": "code", + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_connect_sheet_connectsheet", + "community": 12, + "norm_label": "_connectsheet" + }, + { + "label": "ConsumerStatefulWidget", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "consumerstatefulwidget", + "community": 22, + "norm_label": "consumerstatefulwidget" + }, + { + "label": "_ConnectSheetState", + "file_type": "code", + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_connect_sheet_connectsheetstate", + "community": 12, + "norm_label": "_connectsheetstate" + }, + { + "label": "ConsumerState", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "consumerstate", + "community": 22, + "norm_label": "consumerstate" + }, + { + "label": "_url", + "file_type": "code", + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_connect_sheet_url", + "community": 12, + "norm_label": "_url" + }, + { + "label": "_user", + "file_type": "code", + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_connect_sheet_user", + "community": 12, + "norm_label": "_user" + }, + { + "label": "_pass", + "file_type": "code", + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_connect_sheet_pass", + "community": 12, + "norm_label": "_pass" + }, + { + "label": "_busy", + "file_type": "code", + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_connect_sheet_busy", + "community": 12, + "norm_label": "_busy" + }, + { + "label": "showConnectSheet", + "file_type": "code", + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_connect_sheet_showconnectsheet", + "community": 12, + "norm_label": "showconnectsheet" + }, + { + "label": "createState", + "file_type": "code", + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_connect_sheet_createstate", + "community": 12, + "norm_label": "createstate" + }, + { + "label": "initState", + "file_type": "code", + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_connect_sheet_initstate", + "community": 12, + "norm_label": "initstate" + }, + { + "label": "dispose", + "file_type": "code", + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_connect_sheet_dispose", + "community": 12, + "norm_label": "dispose" + }, + { + "label": "_connect", + "file_type": "code", + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_connect_sheet_connect", + "community": 12, + "norm_label": "_connect" + }, + { + "label": "build", + "file_type": "code", + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_connect_sheet_build", + "community": 12, + "norm_label": "build" + }, + { + "label": "_field", + "file_type": "code", + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_connect_sheet_field", + "community": 12, + "norm_label": "_field" + }, + { + "label": "../subsonic/credentials.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "subsonic_credentials_dart", + "community": 12, + "norm_label": "../subsonic/credentials.dart" + }, + { + "label": "favorites_screen.dart", + "file_type": "code", + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_favorites_screen", + "community": 20, + "norm_label": "favorites_screen.dart" + }, + { + "label": "FavoritesScreen", + "file_type": "code", + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_favorites_screen_favoritesscreen", + "community": 20, + "norm_label": "favoritesscreen" + }, + { + "label": "_SectionLabel", + "file_type": "code", + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_favorites_screen_sectionlabel", + "community": 20, + "norm_label": "_sectionlabel" + }, + { + "label": "text", + "file_type": "code", + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_favorites_screen_text", + "community": 20, + "norm_label": "text" + }, + { + "label": "build", + "file_type": "code", + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_favorites_screen_build", + "community": 20, + "norm_label": "build" + }, + { + "label": "browser_screen.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "browser_screen_dart", + "community": 19, + "norm_label": "browser_screen.dart" + }, + { + "label": "home_screen.dart", + "file_type": "code", + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_home_screen", + "community": 21, + "norm_label": "home_screen.dart" + }, + { + "label": "HomeScreen", + "file_type": "code", + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_home_screen_homescreen", + "community": 21, + "norm_label": "homescreen" + }, + { + "label": "_Empty", + "file_type": "code", + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_home_screen_empty", + "community": 2, + "norm_label": "_empty" + }, + { + "label": "message", + "file_type": "code", + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_home_screen_message", + "community": 21, + "norm_label": "message" + }, + { + "label": "build", + "file_type": "code", + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_home_screen_build", + "community": 21, + "norm_label": "build" + }, + { + "label": "now_playing_screen.dart", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen", + "community": 15, + "norm_label": "now_playing_screen.dart" + }, + { + "label": "NowPlayingScreen", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen_nowplayingscreen", + "community": 16, + "norm_label": "nowplayingscreen" + }, + { + "label": "_AlbumArtPanel", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen_albumartpanel", + "community": 16, + "norm_label": "_albumartpanel" + }, + { + "label": "_FavRating", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen_favrating", + "community": 25, + "norm_label": "_favrating" + }, + { + "label": "_InfoStrip", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen_infostrip", + "community": 2, + "norm_label": "_infostrip" + }, + { + "label": "_Transport", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen_transport", + "community": 16, + "norm_label": "_transport" + }, + { + "label": "_ArtFallback", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen_artfallback", + "community": 2, + "norm_label": "_artfallback" + }, + { + "label": "song", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen_song", + "community": 15, + "norm_label": "song" + }, + { + "label": "state", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen_state", + "community": 15, + "norm_label": "state" + }, + { + "label": "accent", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen_accent", + "community": 15, + "norm_label": "accent" + }, + { + "label": "Color", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "color", + "community": 6, + "norm_label": "color" + }, + { + "label": "ref", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen_ref", + "community": 15, + "norm_label": "ref" + }, + { + "label": "WidgetRef", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "widgetref", + "community": 15, + "norm_label": "widgetref" + }, + { + "label": "m", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen_m", + "community": 15, + "norm_label": "m" + }, + { + "label": "s", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen_s", + "community": 15, + "norm_label": "s" + }, + { + "label": "build", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen_build", + "community": 25, + "norm_label": "build" + }, + { + "label": "_btn", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen_btn", + "community": 15, + "norm_label": "_btn" + }, + { + "label": "_fmt", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen_fmt", + "community": 15, + "norm_label": "_fmt" + }, + { + "label": "_fmtDur", + "file_type": "code", + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_now_playing_screen_fmtdur", + "community": 15, + "norm_label": "_fmtdur" + }, + { + "label": "../playback/playback_engine.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "playback_playback_engine_dart", + "community": 15, + "norm_label": "../playback/playback_engine.dart" + }, + { + "label": "../widgets/block_progress_bar.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "widgets_block_progress_bar_dart", + "community": 15, + "norm_label": "../widgets/block_progress_bar.dart" + }, + { + "label": "search_screen.dart", + "file_type": "code", + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_search_screen", + "community": 19, + "norm_label": "search_screen.dart" + }, + { + "label": "SearchScreen", + "file_type": "code", + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_search_screen_searchscreen", + "community": 22, + "norm_label": "searchscreen" + }, + { + "label": "_SearchScreenState", + "file_type": "code", + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_search_screen_searchscreenstate", + "community": 22, + "norm_label": "_searchscreenstate" + }, + { + "label": "_Results", + "file_type": "code", + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_search_screen_results", + "community": 19, + "norm_label": "_results" + }, + { + "label": "_controller", + "file_type": "code", + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_search_screen_controller", + "community": 19, + "norm_label": "_controller" + }, + { + "label": "_query", + "file_type": "code", + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_search_screen_query", + "community": 19, + "norm_label": "_query" + }, + { + "label": "createState", + "file_type": "code", + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_search_screen_createstate", + "community": 19, + "norm_label": "createstate" + }, + { + "label": "dispose", + "file_type": "code", + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_search_screen_dispose", + "community": 19, + "norm_label": "dispose" + }, + { + "label": "build", + "file_type": "code", + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_screens_search_screen_build", + "community": 19, + "norm_label": "build" + }, + { + "label": "app_shell.dart", + "file_type": "code", + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_shell_app_shell", + "community": 17, + "norm_label": "app_shell.dart" + }, + { + "label": "AppShell", + "file_type": "code", + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_shell_app_shell_appshell", + "community": 22, + "norm_label": "appshell" + }, + { + "label": "_AppShellState", + "file_type": "code", + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_shell_app_shell_appshellstate", + "community": 22, + "norm_label": "_appshellstate" + }, + { + "label": "_TabBar", + "file_type": "code", + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_shell_app_shell_tabbar", + "community": 17, + "norm_label": "_tabbar" + }, + { + "label": "_StatusBar", + "file_type": "code", + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_shell_app_shell_statusbar", + "community": 12, + "norm_label": "_statusbar" + }, + { + "label": "_index", + "file_type": "code", + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_shell_app_shell_index", + "community": 17, + "norm_label": "_index" + }, + { + "label": "_tabs", + "file_type": "code", + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_shell_app_shell_tabs", + "community": 17, + "norm_label": "_tabs" + }, + { + "label": "static const", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "static_const", + "community": 17, + "norm_label": "static const" + }, + { + "label": "onSelect", + "file_type": "code", + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_shell_app_shell_onselect", + "community": 17, + "norm_label": "onselect" + }, + { + "label": "ValueChanged", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "valuechanged", + "community": 17, + "norm_label": "valuechanged" + }, + { + "label": "createState", + "file_type": "code", + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_shell_app_shell_createstate", + "community": 17, + "norm_label": "createstate" + }, + { + "label": "build", + "file_type": "code", + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_shell_app_shell_build", + "community": 25, + "norm_label": "build" + }, + { + "label": "../screens/browser_screen.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "screens_browser_screen_dart", + "community": 17, + "norm_label": "../screens/browser_screen.dart" + }, + { + "label": "../screens/connect_sheet.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "screens_connect_sheet_dart", + "community": 17, + "norm_label": "../screens/connect_sheet.dart" + }, + { + "label": "../screens/home_screen.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "screens_home_screen_dart", + "community": 17, + "norm_label": "../screens/home_screen.dart" + }, + { + "label": "../screens/now_playing_screen.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "screens_now_playing_screen_dart", + "community": 17, + "norm_label": "../screens/now_playing_screen.dart" + }, + { + "label": "favorites.dart", + "file_type": "code", + "source_file": "lib/state/favorites.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_favorites", + "community": 8, + "norm_label": "favorites.dart" + }, + { + "label": "FavoritesState", + "file_type": "code", + "source_file": "lib/state/favorites.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_favorites_favoritesstate", + "community": 8, + "norm_label": "favoritesstate" + }, + { + "label": "FavoritesController", + "file_type": "code", + "source_file": "lib/state/favorites.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_favorites_favoritescontroller", + "community": 8, + "norm_label": "favoritescontroller" + }, + { + "label": "songIds", + "file_type": "code", + "source_file": "lib/state/favorites.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_favorites_songids", + "community": 8, + "norm_label": "songids" + }, + { + "label": "Set", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "set", + "community": 8, + "norm_label": "set" + }, + { + "label": "albumIds", + "file_type": "code", + "source_file": "lib/state/favorites.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_favorites_albumids", + "community": 8, + "norm_label": "albumids" + }, + { + "label": "artistIds", + "file_type": "code", + "source_file": "lib/state/favorites.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_favorites_artistids", + "community": 8, + "norm_label": "artistids" + }, + { + "label": "ratings", + "file_type": "code", + "source_file": "lib/state/favorites.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_favorites_ratings", + "community": 8, + "norm_label": "ratings" + }, + { + "label": "Map", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "map", + "community": 8, + "norm_label": "map" + }, + { + "label": "isSongStarred", + "file_type": "code", + "source_file": "lib/state/favorites.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_favorites_issongstarred", + "community": 8, + "norm_label": "issongstarred" + }, + { + "label": "ratingFor", + "file_type": "code", + "source_file": "lib/state/favorites.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_favorites_ratingfor", + "community": 8, + "norm_label": "ratingfor" + }, + { + "label": "copyWith", + "file_type": "code", + "source_file": "lib/state/favorites.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_favorites_copywith", + "community": 8, + "norm_label": "copywith" + }, + { + "label": "hydrate", + "file_type": "code", + "source_file": "lib/state/favorites.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_favorites_hydrate", + "community": 8, + "norm_label": "hydrate" + }, + { + "label": "clear", + "file_type": "code", + "source_file": "lib/state/favorites.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_favorites_clear", + "community": 8, + "norm_label": "clear" + }, + { + "label": "toggleSong", + "file_type": "code", + "source_file": "lib/state/favorites.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_favorites_togglesong", + "community": 8, + "norm_label": "togglesong" + }, + { + "label": "rateSong", + "file_type": "code", + "source_file": "lib/state/favorites.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_favorites_ratesong", + "community": 8, + "norm_label": "ratesong" + }, + { + "label": "../subsonic/subsonic_client.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "subsonic_subsonic_client_dart", + "community": 8, + "norm_label": "../subsonic/subsonic_client.dart" + }, + { + "label": "providers.dart", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers", + "community": 5, + "norm_label": "providers.dart" + }, + { + "label": "ConnStatus", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_connstatus", + "community": 5, + "norm_label": "connstatus" + }, + { + "label": "ConnectionState", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_connectionstate", + "community": 5, + "norm_label": "connectionstate" + }, + { + "label": "ConnectionController", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_connectioncontroller", + "community": 5, + "norm_label": "connectioncontroller" + }, + { + "label": "status", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_status", + "community": 5, + "norm_label": "status" + }, + { + "label": "client", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_client", + "community": 5, + "norm_label": "client" + }, + { + "label": "credentials", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_credentials", + "community": 5, + "norm_label": "credentials" + }, + { + "label": "error", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_error", + "community": 5, + "norm_label": "error" + }, + { + "label": "isOnline", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_isonline", + "community": 5, + "norm_label": "isonline" + }, + { + "label": "bool get", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "bool_get", + "community": 5, + "norm_label": "bool get" + }, + { + "label": "credentialStoreProvider", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_credentialstoreprovider", + "community": 5, + "norm_label": "credentialstoreprovider" + }, + { + "label": "_store", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_store", + "community": 5, + "norm_label": "_store" + }, + { + "label": "connectionProvider", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_connectionprovider", + "community": 12, + "norm_label": "connectionprovider" + }, + { + "label": "subsonicClientProvider", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_subsonicclientprovider", + "community": 16, + "norm_label": "subsonicclientprovider" + }, + { + "label": "artistsProvider", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_artistsprovider", + "community": 16, + "norm_label": "artistsprovider" + }, + { + "label": "result", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_result", + "community": 5, + "norm_label": "result" + }, + { + "label": "artistProvider", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_artistprovider", + "community": 16, + "norm_label": "artistprovider" + }, + { + "label": "albumProvider", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_albumprovider", + "community": 16, + "norm_label": "albumprovider" + }, + { + "label": "searchProvider", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_searchprovider", + "community": 19, + "norm_label": "searchprovider" + }, + { + "label": "playHistoryProvider", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_playhistoryprovider", + "community": 5, + "norm_label": "playhistoryprovider" + }, + { + "label": "recentSongsProvider", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_recentsongsprovider", + "community": 21, + "norm_label": "recentsongsprovider" + }, + { + "label": "recentAlbumsProvider", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_recentalbumsprovider", + "community": 21, + "norm_label": "recentalbumsprovider" + }, + { + "label": "rediscoverSeedProvider", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_rediscoverseedprovider", + "community": 21, + "norm_label": "rediscoverseedprovider" + }, + { + "label": "rediscoverProvider", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_rediscoverprovider", + "community": 21, + "norm_label": "rediscoverprovider" + }, + { + "label": "history", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_history", + "community": 5, + "norm_label": "history" + }, + { + "label": "seed", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_seed", + "community": 5, + "norm_label": "seed" + }, + { + "label": "favoritesProvider", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_favoritesprovider", + "community": 25, + "norm_label": "favoritesprovider" + }, + { + "label": "controller", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_controller", + "community": 5, + "norm_label": "controller" + }, + { + "label": "starredProvider", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_starredprovider", + "community": 20, + "norm_label": "starredprovider" + }, + { + "label": "playbackProvider", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_playbackprovider", + "community": 16, + "norm_label": "playbackprovider" + }, + { + "label": "_restore", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_restore", + "community": 5, + "norm_label": "_restore" + }, + { + "label": "connect", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_connect", + "community": 5, + "norm_label": "connect" + }, + { + "label": "disconnect", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_disconnect", + "community": 5, + "norm_label": "disconnect" + }, + { + "label": "getArtist", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_getartist", + "community": 5, + "norm_label": "getartist" + }, + { + "label": "getAlbum", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_getalbum", + "community": 5, + "norm_label": "getalbum" + }, + { + "label": "search3", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_search3", + "community": 5, + "norm_label": "search3" + }, + { + "label": "rediscover", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_rediscover", + "community": 5, + "norm_label": "rediscover" + }, + { + "label": "getStarred2", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_getstarred2", + "community": 5, + "norm_label": "getstarred2" + }, + { + "label": "streamUriFor", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_streamurifor", + "community": 5, + "norm_label": "streamurifor" + }, + { + "label": "coverArtUriFor", + "file_type": "code", + "source_file": "lib/state/providers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_state_providers_coverarturifor", + "community": 16, + "norm_label": "coverarturifor" + }, + { + "label": "package:flutter/widgets.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "package_flutter_widgets_dart", + "community": 6, + "norm_label": "package:flutter/widgets.dart" + }, + { + "label": "../history/play_history.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "history_play_history_dart", + "community": 5, + "norm_label": "../history/play_history.dart" + }, + { + "label": "../theme/accent_extract.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "theme_accent_extract_dart", + "community": 5, + "norm_label": "../theme/accent_extract.dart" + }, + { + "label": "favorites.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "favorites_dart", + "community": 5, + "norm_label": "favorites.dart" + }, + { + "label": "credentials.dart", + "file_type": "code", + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_credentials", + "community": 10, + "norm_label": "credentials.dart" + }, + { + "label": "SubsonicCredentials", + "file_type": "code", + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_credentials_subsoniccredentials", + "community": 10, + "norm_label": "subsoniccredentials" + }, + { + "label": "CredentialStore", + "file_type": "code", + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_credentials_credentialstore", + "community": 10, + "norm_label": "credentialstore" + }, + { + "label": "url", + "file_type": "code", + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_credentials_url", + "community": 10, + "norm_label": "url" + }, + { + "label": "username", + "file_type": "code", + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_credentials_username", + "community": 10, + "norm_label": "username" + }, + { + "label": "password", + "file_type": "code", + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_credentials_password", + "community": 10, + "norm_label": "password" + }, + { + "label": "alias", + "file_type": "code", + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_credentials_alias", + "community": 10, + "norm_label": "alias" + }, + { + "label": "display", + "file_type": "code", + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_credentials_display", + "community": 10, + "norm_label": "display" + }, + { + "label": "String get", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "string_get", + "community": 10, + "norm_label": "string get" + }, + { + "label": "_storage", + "file_type": "code", + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_credentials_storage", + "community": 10, + "norm_label": "_storage" + }, + { + "label": "FlutterSecureStorage", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "fluttersecurestorage", + "community": 10, + "norm_label": "fluttersecurestorage" + }, + { + "label": "_kUrl", + "file_type": "code", + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_credentials_kurl", + "community": 10, + "norm_label": "_kurl" + }, + { + "label": "_kUser", + "file_type": "code", + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_credentials_kuser", + "community": 10, + "norm_label": "_kuser" + }, + { + "label": "_kPass", + "file_type": "code", + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_credentials_kpass", + "community": 10, + "norm_label": "_kpass" + }, + { + "label": "_kAlias", + "file_type": "code", + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_credentials_kalias", + "community": 10, + "norm_label": "_kalias" + }, + { + "label": "save", + "file_type": "code", + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_credentials_save", + "community": 10, + "norm_label": "save" + }, + { + "label": "load", + "file_type": "code", + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_credentials_load", + "community": 10, + "norm_label": "load" + }, + { + "label": "clear", + "file_type": "code", + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_credentials_clear", + "community": 10, + "norm_label": "clear" + }, + { + "label": "package:flutter_secure_storage/flutter_secure_storage.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "package_flutter_secure_storage_flutter_secure_storage_dart", + "community": 10, + "norm_label": "package:flutter_secure_storage/flutter_secure_storage.dart" + }, + { + "label": "json_helpers.dart", + "file_type": "code", + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_json_helpers", + "community": 18, + "norm_label": "json_helpers.dart" + }, + { + "label": "null", + "file_type": "code", + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_json_helpers_null", + "community": 18, + "norm_label": "null" + }, + { + "label": "orElse", + "file_type": "code", + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_json_helpers_orelse", + "community": 18, + "norm_label": "orelse" + }, + { + "label": "asString", + "file_type": "code", + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_json_helpers_asstring", + "community": 18, + "norm_label": "asstring" + }, + { + "label": "toString", + "file_type": "code", + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_json_helpers_tostring", + "community": 18, + "norm_label": "tostring" + }, + { + "label": "asInt", + "file_type": "code", + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_json_helpers_asint", + "community": 18, + "norm_label": "asint" + }, + { + "label": "asDouble", + "file_type": "code", + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_json_helpers_asdouble", + "community": 18, + "norm_label": "asdouble" + }, + { + "label": "asBool", + "file_type": "code", + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_json_helpers_asbool", + "community": 18, + "norm_label": "asbool" + }, + { + "label": "T", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "t", + "community": 18, + "norm_label": "t" + }, + { + "label": "models.dart", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models", + "community": 4, + "norm_label": "models.dart" + }, + { + "label": "Song", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_song", + "community": 15, + "norm_label": "song" + }, + { + "label": "Album", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_album", + "community": 4, + "norm_label": "album" + }, + { + "label": "Artist", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_artist", + "community": 4, + "norm_label": "artist" + }, + { + "label": "ArtistIndex", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_artistindex", + "community": 4, + "norm_label": "artistindex" + }, + { + "label": "ArtistsResult", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_artistsresult", + "community": 4, + "norm_label": "artistsresult" + }, + { + "label": "Starred2", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_starred2", + "community": 4, + "norm_label": "starred2" + }, + { + "label": "SearchResult3", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_searchresult3", + "community": 4, + "norm_label": "searchresult3" + }, + { + "label": "id", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_id", + "community": 4, + "norm_label": "id" + }, + { + "label": "title", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_title", + "community": 4, + "norm_label": "title" + }, + { + "label": "albumId", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_albumid", + "community": 4, + "norm_label": "albumid" + }, + { + "label": "artistId", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_artistid", + "community": 4, + "norm_label": "artistid" + }, + { + "label": "track", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_track", + "community": 4, + "norm_label": "track" + }, + { + "label": "discNumber", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_discnumber", + "community": 4, + "norm_label": "discnumber" + }, + { + "label": "year", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_year", + "community": 4, + "norm_label": "year" + }, + { + "label": "genre", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_genre", + "community": 4, + "norm_label": "genre" + }, + { + "label": "coverArt", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_coverart", + "community": 4, + "norm_label": "coverart" + }, + { + "label": "duration", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_duration", + "community": 4, + "norm_label": "duration" + }, + { + "label": "bitRate", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_bitrate", + "community": 4, + "norm_label": "bitrate" + }, + { + "label": "contentType", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_contenttype", + "community": 4, + "norm_label": "contenttype" + }, + { + "label": "suffix", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_suffix", + "community": 4, + "norm_label": "suffix" + }, + { + "label": "size", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_size", + "community": 4, + "norm_label": "size" + }, + { + "label": "path", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_path", + "community": 4, + "norm_label": "path" + }, + { + "label": "starred", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_starred", + "community": 4, + "norm_label": "starred" + }, + { + "label": "userRating", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_userrating", + "community": 4, + "norm_label": "userrating" + }, + { + "label": "name", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_name", + "community": 4, + "norm_label": "name" + }, + { + "label": "songCount", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_songcount", + "community": 4, + "norm_label": "songcount" + }, + { + "label": "songs", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_songs", + "community": 4, + "norm_label": "songs" + }, + { + "label": "albumCount", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_albumcount", + "community": 4, + "norm_label": "albumcount" + }, + { + "label": "albums", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_albums", + "community": 4, + "norm_label": "albums" + }, + { + "label": "artists", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_artists", + "community": 4, + "norm_label": "artists" + }, + { + "label": "indexes", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_indexes", + "community": 4, + "norm_label": "indexes" + }, + { + "label": "all", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_all", + "community": 4, + "norm_label": "all" + }, + { + "label": "fromJson", + "file_type": "code", + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_models_fromjson", + "community": 4, + "norm_label": "fromjson" + }, + { + "label": "json_helpers.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "json_helpers_dart", + "community": 4, + "norm_label": "json_helpers.dart" + }, + { + "label": "subsonic_client.dart", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client", + "community": 3, + "norm_label": "subsonic_client.dart" + }, + { + "label": "SubsonicError", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_subsonicerror", + "community": 3, + "norm_label": "subsonicerror" + }, + { + "label": "Exception", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "exception", + "community": 3, + "norm_label": "exception" + }, + { + "label": "SubsonicClient", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_subsonicclient", + "community": 3, + "norm_label": "subsonicclient" + }, + { + "label": "code", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_code", + "community": 3, + "norm_label": "code" + }, + { + "label": "message", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_message", + "community": 3, + "norm_label": "message" + }, + { + "label": "authErrorCode", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_autherrorcode", + "community": 3, + "norm_label": "autherrorcode" + }, + { + "label": "isAuthFailure", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_isauthfailure", + "community": 3, + "norm_label": "isauthfailure" + }, + { + "label": "baseUrl", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_baseurl", + "community": 3, + "norm_label": "baseurl" + }, + { + "label": "username", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_username", + "community": 3, + "norm_label": "username" + }, + { + "label": "_password", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_password", + "community": 3, + "norm_label": "_password" + }, + { + "label": "_dio", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_dio", + "community": 3, + "norm_label": "_dio" + }, + { + "label": "Dio", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "dio", + "community": 3, + "norm_label": "dio" + }, + { + "label": "apiVersion", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_apiversion", + "community": 3, + "norm_label": "apiversion" + }, + { + "label": "static const String", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "static_const_string", + "community": 3, + "norm_label": "static const string" + }, + { + "label": "clientName", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_clientname", + "community": 3, + "norm_label": "clientname" + }, + { + "label": "_saltAlphabet", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_saltalphabet", + "community": 3, + "norm_label": "_saltalphabet" + }, + { + "label": "toString", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_tostring", + "community": 3, + "norm_label": "tostring" + }, + { + "label": "_trimTrailingSlash", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_trimtrailingslash", + "community": 3, + "norm_label": "_trimtrailingslash" + }, + { + "label": "_makeSalt", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_makesalt", + "community": 3, + "norm_label": "_makesalt" + }, + { + "label": "_makeToken", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_maketoken", + "community": 3, + "norm_label": "_maketoken" + }, + { + "label": "_authParams", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_authparams", + "community": 3, + "norm_label": "_authparams" + }, + { + "label": "_uri", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_uri", + "community": 3, + "norm_label": "_uri" + }, + { + "label": "_get", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_get", + "community": 3, + "norm_label": "_get" + }, + { + "label": "ping", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_ping", + "community": 3, + "norm_label": "ping" + }, + { + "label": "getArtists", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_getartists", + "community": 3, + "norm_label": "getartists" + }, + { + "label": "getArtist", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_getartist", + "community": 3, + "norm_label": "getartist" + }, + { + "label": "getAlbum", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_getalbum", + "community": 3, + "norm_label": "getalbum" + }, + { + "label": "search3", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_search3", + "community": 3, + "norm_label": "search3" + }, + { + "label": "getStarred2", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_getstarred2", + "community": 3, + "norm_label": "getstarred2" + }, + { + "label": "setStarred", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_setstarred", + "community": 3, + "norm_label": "setstarred" + }, + { + "label": "setRating", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_setrating", + "community": 3, + "norm_label": "setrating" + }, + { + "label": "scrobble", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_scrobble", + "community": 3, + "norm_label": "scrobble" + }, + { + "label": "streamUri", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_streamuri", + "community": 3, + "norm_label": "streamuri" + }, + { + "label": "coverArtUri", + "file_type": "code", + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_subsonic_subsonic_client_coverarturi", + "community": 3, + "norm_label": "coverarturi" + }, + { + "label": "package:crypto/crypto.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "package_crypto_crypto_dart", + "community": 3, + "norm_label": "package:crypto/crypto.dart" + }, + { + "label": "package:dio/dio.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "package_dio_dio_dart", + "community": 3, + "norm_label": "package:dio/dio.dart" + }, + { + "label": "models.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "models_dart", + "community": 3, + "norm_label": "models.dart" + }, + { + "label": "accent.dart", + "file_type": "code", + "source_file": "lib/theme/accent.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_accent", + "community": 6, + "norm_label": "accent.dart" + }, + { + "label": "AccentNotifier", + "file_type": "code", + "source_file": "lib/theme/accent.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_accent_accentnotifier", + "community": 6, + "norm_label": "accentnotifier" + }, + { + "label": "accentProvider", + "file_type": "code", + "source_file": "lib/theme/accent.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_accent_accentprovider", + "community": 0, + "norm_label": "accentprovider" + }, + { + "label": "reset", + "file_type": "code", + "source_file": "lib/theme/accent.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_accent_reset", + "community": 6, + "norm_label": "reset" + }, + { + "label": "tokens.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "tokens_dart", + "community": 6, + "norm_label": "tokens.dart" + }, + { + "label": "accent_extract.dart", + "file_type": "code", + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_accent_extract", + "community": 6, + "norm_label": "accent_extract.dart" + }, + { + "label": "palette", + "file_type": "code", + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_accent_extract_palette", + "community": 6, + "norm_label": "palette" + }, + { + "label": "picked", + "file_type": "code", + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_accent_extract_picked", + "community": 6, + "norm_label": "picked" + }, + { + "label": "hsl", + "file_type": "code", + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_accent_extract_hsl", + "community": 6, + "norm_label": "hsl" + }, + { + "label": "lightness", + "file_type": "code", + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_accent_extract_lightness", + "community": 6, + "norm_label": "lightness" + }, + { + "label": "saturation", + "file_type": "code", + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_accent_extract_saturation", + "community": 6, + "norm_label": "saturation" + }, + { + "label": "extractAccent", + "file_type": "code", + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_accent_extract_extractaccent", + "community": 6, + "norm_label": "extractaccent" + }, + { + "label": "_ensureReadable", + "file_type": "code", + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_accent_extract_ensurereadable", + "community": 6, + "norm_label": "_ensurereadable" + }, + { + "label": "withLightness", + "file_type": "code", + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_accent_extract_withlightness", + "community": 6, + "norm_label": "withlightness" + }, + { + "label": "package:palette_generator/palette_generator.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "package_palette_generator_palette_generator_dart", + "community": 6, + "norm_label": "package:palette_generator/palette_generator.dart" + }, + { + "label": "app_theme.dart", + "file_type": "code", + "source_file": "lib/theme/app_theme.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_app_theme", + "community": 6, + "norm_label": "app_theme.dart" + }, + { + "label": "mono", + "file_type": "code", + "source_file": "lib/theme/app_theme.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_app_theme_mono", + "community": 6, + "norm_label": "mono" + }, + { + "label": "scheme", + "file_type": "code", + "source_file": "lib/theme/app_theme.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_app_theme_scheme", + "community": 6, + "norm_label": "scheme" + }, + { + "label": "buildRatuneTheme", + "file_type": "code", + "source_file": "lib/theme/app_theme.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_app_theme_buildratunetheme", + "community": 6, + "norm_label": "buildratunetheme" + }, + { + "label": "package:google_fonts/google_fonts.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "package_google_fonts_google_fonts_dart", + "community": 6, + "norm_label": "package:google_fonts/google_fonts.dart" + }, + { + "label": "tokens.dart", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_tokens", + "community": 11, + "norm_label": "tokens.dart" + }, + { + "label": "RatuneColors", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_tokens_ratunecolors", + "community": 11, + "norm_label": "ratunecolors" + }, + { + "label": "RatuneSpacing", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_tokens_ratunespacing", + "community": 11, + "norm_label": "ratunespacing" + }, + { + "label": "background", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_tokens_background", + "community": 11, + "norm_label": "background" + }, + { + "label": "static const Color", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "static_const_color", + "community": 11, + "norm_label": "static const color" + }, + { + "label": "surface", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_tokens_surface", + "community": 11, + "norm_label": "surface" + }, + { + "label": "foreground", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_tokens_foreground", + "community": 11, + "norm_label": "foreground" + }, + { + "label": "dimmed", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_tokens_dimmed", + "community": 11, + "norm_label": "dimmed" + }, + { + "label": "border", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_tokens_border", + "community": 11, + "norm_label": "border" + }, + { + "label": "borderActive", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_tokens_borderactive", + "community": 11, + "norm_label": "borderactive" + }, + { + "label": "accentDefault", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_tokens_accentdefault", + "community": 11, + "norm_label": "accentdefault" + }, + { + "label": "xs", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_tokens_xs", + "community": 11, + "norm_label": "xs" + }, + { + "label": "static const double", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "static_const_double", + "community": 2, + "norm_label": "static const double" + }, + { + "label": "sm", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_tokens_sm", + "community": 11, + "norm_label": "sm" + }, + { + "label": "md", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_tokens_md", + "community": 11, + "norm_label": "md" + }, + { + "label": "lg", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_tokens_lg", + "community": 11, + "norm_label": "lg" + }, + { + "label": "xl", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_tokens_xl", + "community": 11, + "norm_label": "xl" + }, + { + "label": "minTouchTarget", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_theme_tokens_mintouchtarget", + "community": 11, + "norm_label": "mintouchtarget" + }, + { + "label": "_", + "file_type": "code", + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "_origin": "ast", + "id": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens", + "community": 11, + "norm_label": "_" + }, + { + "label": "block_progress_bar.dart", + "file_type": "code", + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_block_progress_bar", + "community": 6, + "norm_label": "block_progress_bar.dart" + }, + { + "label": "BlockProgressBar", + "file_type": "code", + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_block_progress_bar_blockprogressbar", + "community": 6, + "norm_label": "blockprogressbar" + }, + { + "label": "progress", + "file_type": "code", + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_block_progress_bar_progress", + "community": 6, + "norm_label": "progress" + }, + { + "label": "cells", + "file_type": "code", + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_block_progress_bar_cells", + "community": 6, + "norm_label": "cells" + }, + { + "label": "height", + "file_type": "code", + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_block_progress_bar_height", + "community": 6, + "norm_label": "height" + }, + { + "label": "color", + "file_type": "code", + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_block_progress_bar_color", + "community": 6, + "norm_label": "color" + }, + { + "label": "build", + "file_type": "code", + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_block_progress_bar_build", + "community": 6, + "norm_label": "build" + }, + { + "label": "hairline_panel.dart", + "file_type": "code", + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_hairline_panel", + "community": 2, + "norm_label": "hairline_panel.dart" + }, + { + "label": "HairlinePanel", + "file_type": "code", + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_hairline_panel_hairlinepanel", + "community": 2, + "norm_label": "hairlinepanel" + }, + { + "label": "title", + "file_type": "code", + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_hairline_panel_title", + "community": 2, + "norm_label": "title" + }, + { + "label": "trailing", + "file_type": "code", + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_hairline_panel_trailing", + "community": 2, + "norm_label": "trailing" + }, + { + "label": "child", + "file_type": "code", + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_hairline_panel_child", + "community": 2, + "norm_label": "child" + }, + { + "label": "active", + "file_type": "code", + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_hairline_panel_active", + "community": 2, + "norm_label": "active" + }, + { + "label": "padding", + "file_type": "code", + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_hairline_panel_padding", + "community": 2, + "norm_label": "padding" + }, + { + "label": "EdgeInsetsGeometry", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "edgeinsetsgeometry", + "community": 2, + "norm_label": "edgeinsetsgeometry" + }, + { + "label": "backgroundColor", + "file_type": "code", + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_hairline_panel_backgroundcolor", + "community": 2, + "norm_label": "backgroundcolor" + }, + { + "label": "_titleStraddle", + "file_type": "code", + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_hairline_panel_titlestraddle", + "community": 2, + "norm_label": "_titlestraddle" + }, + { + "label": "build", + "file_type": "code", + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "_origin": "ast", + "id": "lib_widgets_hairline_panel_build", + "community": 2, + "norm_label": "build" + }, + { + "label": "generated_plugin_registrant.cc", + "file_type": "code", + "source_file": "linux/flutter/generated_plugin_registrant.cc", + "source_location": "L1", + "_origin": "ast", + "id": "linux_flutter_generated_plugin_registrant_cc_linux_flutter_generated_plugin_registrant", + "community": 7, + "norm_label": "generated_plugin_registrant.cc" + }, + { + "label": "fl_register_plugins()", + "file_type": "code", + "source_file": "linux/flutter/generated_plugin_registrant.cc", + "source_location": "L11", + "_origin": "ast", + "id": "linux_flutter_generated_plugin_registrant_fl_register_plugins", + "community": 7, + "norm_label": "fl_register_plugins()" + }, + { + "label": "FlPluginRegistry", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "flpluginregistry", + "community": 7, + "norm_label": "flpluginregistry" + }, + { + "label": "generated_plugin_registrant.h", + "file_type": "code", + "source_file": "linux/flutter/generated_plugin_registrant.h", + "source_location": "L1", + "_origin": "ast", + "id": "linux_flutter_generated_plugin_registrant_h_linux_flutter_generated_plugin_registrant", + "community": 7, + "norm_label": "generated_plugin_registrant.h" + }, + { + "label": "main.cc", + "file_type": "code", + "source_file": "linux/runner/main.cc", + "source_location": "L1", + "_origin": "ast", + "id": "linux_runner_main", + "community": 7, + "norm_label": "main.cc" + }, + { + "label": "main()", + "file_type": "code", + "source_file": "linux/runner/main.cc", + "source_location": "L3", + "_origin": "ast", + "id": "linux_runner_main_main", + "community": 7, + "norm_label": "main()" + }, + { + "label": "my_application.cc", + "file_type": "code", + "source_file": "linux/runner/my_application.cc", + "source_location": "L1", + "_origin": "ast", + "id": "linux_runner_my_application_cc_linux_runner_my_application", + "community": 7, + "norm_label": "my_application.cc" + }, + { + "label": "_MyApplication", + "file_type": "code", + "source_file": "linux/runner/my_application.cc", + "source_location": "L10", + "_origin": "ast", + "id": "linux_runner_my_application_myapplication", + "community": 7, + "norm_label": "_myapplication" + }, + { + "label": "GtkApplication", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "gtkapplication", + "community": 7, + "norm_label": "gtkapplication" + }, + { + "label": "parent_instance", + "file_type": "code", + "source_file": "linux/runner/my_application.cc", + "source_location": "L11", + "_origin": "ast", + "id": "linux_runner_my_application_myapplication_parent_instance", + "community": 7, + "norm_label": "parent_instance" + }, + { + "label": "dart_entrypoint_arguments", + "file_type": "code", + "source_file": "linux/runner/my_application.cc", + "source_location": "L12", + "_origin": "ast", + "id": "linux_runner_my_application_myapplication_dart_entrypoint_arguments", + "community": 7, + "norm_label": "dart_entrypoint_arguments" + }, + { + "label": "first_frame_cb()", + "file_type": "code", + "source_file": "linux/runner/my_application.cc", + "source_location": "L18", + "_origin": "ast", + "id": "linux_runner_my_application_first_frame_cb", + "community": 7, + "norm_label": "first_frame_cb()" + }, + { + "label": "FlView", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "flview", + "community": 7, + "norm_label": "flview" + }, + { + "label": "my_application_activate()", + "file_type": "code", + "source_file": "linux/runner/my_application.cc", + "source_location": "L23", + "_origin": "ast", + "id": "linux_runner_my_application_my_application_activate", + "community": 7, + "norm_label": "my_application_activate()" + }, + { + "label": "GApplication", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "gapplication", + "community": 7, + "norm_label": "gapplication" + }, + { + "label": "my_application_local_command_line()", + "file_type": "code", + "source_file": "linux/runner/my_application.cc", + "source_location": "L82", + "_origin": "ast", + "id": "linux_runner_my_application_my_application_local_command_line", + "community": 7, + "norm_label": "my_application_local_command_line()" + }, + { + "label": "gboolean", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "gboolean", + "community": 7, + "norm_label": "gboolean" + }, + { + "label": "gchar", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "gchar", + "community": 7, + "norm_label": "gchar" + }, + { + "label": "my_application_startup()", + "file_type": "code", + "source_file": "linux/runner/my_application.cc", + "source_location": "L103", + "_origin": "ast", + "id": "linux_runner_my_application_my_application_startup", + "community": 7, + "norm_label": "my_application_startup()" + }, + { + "label": "my_application_shutdown()", + "file_type": "code", + "source_file": "linux/runner/my_application.cc", + "source_location": "L112", + "_origin": "ast", + "id": "linux_runner_my_application_my_application_shutdown", + "community": 7, + "norm_label": "my_application_shutdown()" + }, + { + "label": "my_application_dispose()", + "file_type": "code", + "source_file": "linux/runner/my_application.cc", + "source_location": "L121", + "_origin": "ast", + "id": "linux_runner_my_application_my_application_dispose", + "community": 7, + "norm_label": "my_application_dispose()" + }, + { + "label": "GObject", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "gobject", + "community": 7, + "norm_label": "gobject" + }, + { + "label": "my_application_class_init()", + "file_type": "code", + "source_file": "linux/runner/my_application.cc", + "source_location": "L127", + "_origin": "ast", + "id": "linux_runner_my_application_my_application_class_init", + "community": 7, + "norm_label": "my_application_class_init()" + }, + { + "label": "MyApplicationClass", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "myapplicationclass", + "community": 7, + "norm_label": "myapplicationclass" + }, + { + "label": "my_application_init()", + "file_type": "code", + "source_file": "linux/runner/my_application.cc", + "source_location": "L136", + "_origin": "ast", + "id": "linux_runner_my_application_my_application_init", + "community": 7, + "norm_label": "my_application_init()" + }, + { + "label": "my_application_new()", + "file_type": "code", + "source_file": "linux/runner/my_application.cc", + "source_location": "L138", + "_origin": "ast", + "id": "linux_runner_my_application_my_application_new", + "community": 7, + "norm_label": "my_application_new()" + }, + { + "label": "my_application.h", + "file_type": "code", + "source_file": "linux/runner/my_application.h", + "source_location": "L1", + "_origin": "ast", + "id": "linux_runner_my_application_h_linux_runner_my_application", + "community": 7, + "norm_label": "my_application.h" + }, + { + "label": "widget_test.dart", + "file_type": "code", + "source_file": "test/widget_test.dart", + "source_location": null, + "_origin": "ast", + "id": "test_widget_test", + "community": 24, + "norm_label": "widget_test.dart" + }, + { + "label": "main", + "file_type": "code", + "source_file": "test/widget_test.dart", + "source_location": null, + "_origin": "ast", + "id": "test_widget_test_main", + "community": 24, + "norm_label": "main" + }, + { + "label": "package:flutter_test/flutter_test.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "package_flutter_test_flutter_test_dart", + "community": 24, + "norm_label": "package:flutter_test/flutter_test.dart" + }, + { + "label": "package:ratune_mobile/main.dart", + "file_type": "code", + "source_file": null, + "source_location": null, + "_origin": "ast", + "id": "package_ratune_mobile_main_dart", + "community": 24, + "norm_label": "package:ratune_mobile/main.dart" + }, + { + "label": "ratune_mobile (Flutter package)", + "file_type": "code", + "source_file": "pubspec.yaml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "pubspec_ratune_mobile", + "community": 13, + "norm_label": "ratune_mobile (flutter package)" + }, + { + "label": "dio (HTTP client dependency)", + "file_type": "code", + "source_file": "pubspec.yaml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "pubspec_dio", + "community": 13, + "norm_label": "dio (http client dependency)" + }, + { + "label": "flutter_riverpod (state management)", + "file_type": "code", + "source_file": "pubspec.yaml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "pubspec_flutter_riverpod", + "community": 13, + "norm_label": "flutter_riverpod (state management)" + }, + { + "label": "flutter_secure_storage (secure storage)", + "file_type": "code", + "source_file": "pubspec.yaml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "pubspec_flutter_secure_storage", + "community": 13, + "norm_label": "flutter_secure_storage (secure storage)" + }, + { + "label": "crypto (hashing/crypto)", + "file_type": "code", + "source_file": "pubspec.yaml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "pubspec_crypto", + "community": 13, + "norm_label": "crypto (hashing/crypto)" + }, + { + "label": "google_fonts (fonts)", + "file_type": "code", + "source_file": "pubspec.yaml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "pubspec_google_fonts", + "community": 13, + "norm_label": "google_fonts (fonts)" + }, + { + "label": "path_provider (filesystem paths)", + "file_type": "code", + "source_file": "pubspec.yaml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "pubspec_path_provider", + "community": 13, + "norm_label": "path_provider (filesystem paths)" + }, + { + "label": "just_audio (audio playback)", + "file_type": "code", + "source_file": "pubspec.yaml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "pubspec_just_audio", + "community": 13, + "norm_label": "just_audio (audio playback)" + }, + { + "label": "just_audio_background (background audio)", + "file_type": "code", + "source_file": "pubspec.yaml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "pubspec_just_audio_background", + "community": 13, + "norm_label": "just_audio_background (background audio)" + }, + { + "label": "palette_generator (color extraction)", + "file_type": "code", + "source_file": "pubspec.yaml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "pubspec_palette_generator", + "community": 13, + "norm_label": "palette_generator (color extraction)" + }, + { + "label": "flutter_lints (dev lint rules)", + "file_type": "code", + "source_file": "pubspec.yaml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "pubspec_flutter_lints", + "community": 13, + "norm_label": "flutter_lints (dev lint rules)" + }, + { + "label": "Dart Analyzer Configuration", + "file_type": "code", + "source_file": "analysis_options.yaml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "analysis_options_ratune_mobile", + "community": 13, + "norm_label": "dart analyzer configuration" + }, + { + "label": "ratune_mobile README", + "file_type": "document", + "source_file": "README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_ratune_mobile", + "community": 13, + "norm_label": "ratune_mobile readme" + }, + { + "label": "Linux Top-Level CMake Build", + "file_type": "code", + "source_file": "linux/CMakeLists.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "linux_cmakelists_runner", + "community": 13, + "norm_label": "linux top-level cmake build" + }, + { + "label": "Linux Flutter Library CMake Build", + "file_type": "code", + "source_file": "linux/flutter/CMakeLists.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "linux_flutter_cmakelists_flutter", + "community": 13, + "norm_label": "linux flutter library cmake build" + }, + { + "label": "Linux Runner Executable CMake Build", + "file_type": "code", + "source_file": "linux/runner/CMakeLists.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "linux_runner_cmakelists_runner", + "community": 13, + "norm_label": "linux runner executable cmake build" + }, + { + "label": "iOS Launch Screen Assets README", + "file_type": "document", + "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_launchimage_imageset_readme_launch_screen", + "community": 31, + "norm_label": "ios launch screen assets readme" + }, + { + "label": "App Launcher Icon (hdpi)", + "file_type": "image", + "source_file": "android/app/src/main/res/mipmap-hdpi/ic_launcher.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "android_app_src_main_res_mipmap_hdpi_ic_launcher_icon", + "community": 23, + "norm_label": "app launcher icon (hdpi)" + }, + { + "label": "App Launcher Icon (mdpi)", + "file_type": "image", + "source_file": "android/app/src/main/res/mipmap-mdpi/ic_launcher.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "android_app_src_main_res_mipmap_mdpi_ic_launcher_icon", + "community": 23, + "norm_label": "app launcher icon (mdpi)" + }, + { + "label": "App Launcher Icon (xhdpi)", + "file_type": "image", + "source_file": "android/app/src/main/res/mipmap-xhdpi/ic_launcher.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "android_app_src_main_res_mipmap_xhdpi_ic_launcher_icon", + "community": 23, + "norm_label": "app launcher icon (xhdpi)" + }, + { + "label": "App Launcher Icon (xxhdpi)", + "file_type": "image", + "source_file": "android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "android_app_src_main_res_mipmap_xxhdpi_ic_launcher_icon", + "community": 23, + "norm_label": "app launcher icon (xxhdpi)" + }, + { + "label": "App Launcher Icon (xxxhdpi)", + "file_type": "image", + "source_file": "android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "android_app_src_main_res_mipmap_xxxhdpi_ic_launcher_icon", + "community": 23, + "norm_label": "app launcher icon (xxxhdpi)" + }, + { + "label": "App Icon 1024x1024 (Flutter logo master)", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", + "community": 14, + "norm_label": "app icon 1024x1024 (flutter logo master)" + }, + { + "label": "App Icon 20x20 @1x", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_1x_icon", + "community": 14, + "norm_label": "app icon 20x20 @1x" + }, + { + "label": "App Icon 20x20 @2x", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_2x_icon", + "community": 14, + "norm_label": "app icon 20x20 @2x" + }, + { + "label": "App Icon 20x20 @3x", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_3x_icon", + "community": 14, + "norm_label": "app icon 20x20 @3x" + }, + { + "label": "App Icon 29x29 @1x", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_1x_icon", + "community": 14, + "norm_label": "app icon 29x29 @1x" + }, + { + "label": "App Icon 29x29 @2x", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_2x_icon", + "community": 14, + "norm_label": "app icon 29x29 @2x" + }, + { + "label": "App Icon 29x29 @3x", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_3x_icon", + "community": 14, + "norm_label": "app icon 29x29 @3x" + }, + { + "label": "App Icon 40x40 @1x", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_1x_icon", + "community": 14, + "norm_label": "app icon 40x40 @1x" + }, + { + "label": "App Icon 40x40 @2x", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_2x_icon", + "community": 14, + "norm_label": "app icon 40x40 @2x" + }, + { + "label": "App Icon 40x40 @3x", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_3x_icon", + "community": 14, + "norm_label": "app icon 40x40 @3x" + }, + { + "label": "App Icon 60x60 @2x", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_60x60_2x_icon", + "community": 14, + "norm_label": "app icon 60x60 @2x" + }, + { + "label": "App Icon 60x60 @3x", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_60x60_3x_icon", + "community": 14, + "norm_label": "app icon 60x60 @3x" + }, + { + "label": "App Icon 76x76 @1x", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_76x76_1x_icon", + "community": 14, + "norm_label": "app icon 76x76 @1x" + }, + { + "label": "App Icon 76x76 @2x", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_76x76_2x_icon", + "community": 14, + "norm_label": "app icon 76x76 @2x" + }, + { + "label": "App Icon 83.5x83.5 @2x", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_83_5x83_5_2x_icon", + "community": 14, + "norm_label": "app icon 83.5x83.5 @2x" + }, + { + "label": "Launch Image (1x)", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_image", + "community": 27, + "norm_label": "launch image (1x)" + }, + { + "label": "Launch Image (2x)", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_2x_image", + "community": 27, + "norm_label": "launch image (2x)" + }, + { + "label": "Launch Image (3x)", + "file_type": "image", + "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_3x_image", + "community": 27, + "norm_label": "launch image (3x)" + } + ], + "links": [ + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "android/app/src/main/kotlin/com/conversionpath/ratune_mobile/MainActivity.kt", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "android_app_src_main_kotlin_com_conversionpath_ratune_mobile_mainactivity", + "target": "android_app_src_main_kotlin_com_conversionpath_ratune_mobile_mainactivity_mainactivity", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "android/app/src/main/kotlin/com/conversionpath/ratune_mobile/MainActivity.kt", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "android_app_src_main_kotlin_com_conversionpath_ratune_mobile_mainactivity_mainactivity", + "target": "audioserviceactivity", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "ios/Runner/AppDelegate.swift", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runner_appdelegate", + "target": "flutter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "ios/Runner/AppDelegate.swift", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runner_appdelegate", + "target": "ios_runner_appdelegate_appdelegate", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "ios/Runner/AppDelegate.swift", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runner_appdelegate", + "target": "uikit", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "ios/Runner/SceneDelegate.swift", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runner_scenedelegate", + "target": "flutter", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "ios/RunnerTests/RunnerTests.swift", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runnertests_runnertests", + "target": "flutter", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "ios/Runner/SceneDelegate.swift", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runner_scenedelegate", + "target": "uikit", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "ios/RunnerTests/RunnerTests.swift", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runnertests_runnertests", + "target": "uikit", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "ios/Runner/AppDelegate.swift", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runner_appdelegate_appdelegate", + "target": "flutterappdelegate", + "confidence_score": 1.0 + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "source_file": "ios/Runner/AppDelegate.swift", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runner_appdelegate_appdelegate", + "target": "flutterimplicitenginedelegate", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "ios/Runner/AppDelegate.swift", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runner_appdelegate_appdelegate", + "target": "ios_runner_appdelegate_appdelegate_application", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "ios/Runner/AppDelegate.swift", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runner_appdelegate_appdelegate", + "target": "ios_runner_appdelegate_appdelegate_didinitializeimplicitflutterengine", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "ios/Runner/AppDelegate.swift", + "source_location": "L6", + "weight": 1.0, + "context": "parameter_type", + "_origin": "ast", + "source": "ios_runner_appdelegate_appdelegate_application", + "target": "any", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "ios/Runner/AppDelegate.swift", + "source_location": "L6", + "weight": 1.0, + "context": "return_type", + "_origin": "ast", + "source": "ios_runner_appdelegate_appdelegate_application", + "target": "bool", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "ios/Runner/AppDelegate.swift", + "source_location": "L6", + "weight": 1.0, + "context": "parameter_type", + "_origin": "ast", + "source": "ios_runner_appdelegate_appdelegate_application", + "target": "uiapplication", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "ios/Runner/AppDelegate.swift", + "source_location": "L13", + "weight": 1.0, + "context": "parameter_type", + "_origin": "ast", + "source": "ios_runner_appdelegate_appdelegate_didinitializeimplicitflutterengine", + "target": "flutterimplicitenginebridge", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "ios/Runner/SceneDelegate.swift", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runner_scenedelegate", + "target": "ios_runner_scenedelegate_scenedelegate", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "ios/Runner/SceneDelegate.swift", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runner_scenedelegate_scenedelegate", + "target": "flutterscenedelegate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "ios/RunnerTests/RunnerTests.swift", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runnertests_runnertests", + "target": "ios_runnertests_runnertests_runnertests", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "ios/RunnerTests/RunnerTests.swift", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runnertests_runnertests", + "target": "xctest", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "ios/RunnerTests/RunnerTests.swift", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runnertests_runnertests_runnertests", + "target": "ios_runnertests_runnertests_runnertests_testexample", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "ios/RunnerTests/RunnerTests.swift", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast", + "source": "ios_runnertests_runnertests_runnertests", + "target": "xctestcase", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "dart_async" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "dart_convert" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "dart_io" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "dart_math" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_history_play_history", + "target": "datetime" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_history_play_history", + "target": "file" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_history_play_history", + "target": "int" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_album" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_albumid" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_artist" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_artistid" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_byartist" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_candidates" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_count" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_coverart" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_cutoff" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_duration" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_file" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_fromjson" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_fromsong" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_historycontroller" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_lastplayed" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_load" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_maxrecords" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_mindays" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_name" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_out" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_persist" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_playcount" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_playedat" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_playrecord" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_pool" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_recentalbums" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_recentsongs" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_record" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_rediscover" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_rediscoverartist" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_ref" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_seed" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_seen" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_songid" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_take" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_title" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_tojson" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "lib_history_play_history_tosong" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "package_flutter_riverpod_flutter_riverpod_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "package_path_provider_path_provider_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_history_play_history", + "target": "return" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_history_play_history", + "target": "static_const_int" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_history_play_history", + "target": "string" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history", + "target": "subsonic_models_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history_historycontroller", + "target": "list" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/history/play_history.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_history_play_history_historycontroller", + "target": "statenotifier" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine_playbackcontroller", + "target": "statenotifier" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites_favoritescontroller", + "target": "statenotifier" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers_connectioncontroller", + "target": "statenotifier" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent_accentnotifier", + "target": "statenotifier" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "list" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "list" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "list" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "string" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_state_providers", + "target": "string" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "string" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "string" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_widgets_hairline_panel", + "target": "string" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "int" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "int" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "static_const_int" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_state_providers", + "target": "return" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_subsonic_json_helpers", + "target": "return" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "dart_convert" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/main.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_main", + "target": "dart_io" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "dart_io" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "dart_math" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/main.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_main", + "target": "package_flutter_riverpod_flutter_riverpod_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "package_flutter_riverpod_flutter_riverpod_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "package_flutter_riverpod_flutter_riverpod_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "package_flutter_riverpod_flutter_riverpod_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_favorites_screen", + "target": "package_flutter_riverpod_flutter_riverpod_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_home_screen", + "target": "package_flutter_riverpod_flutter_riverpod_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "package_flutter_riverpod_flutter_riverpod_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen", + "target": "package_flutter_riverpod_flutter_riverpod_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "package_flutter_riverpod_flutter_riverpod_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites", + "target": "package_flutter_riverpod_flutter_riverpod_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "package_flutter_riverpod_flutter_riverpod_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent", + "target": "package_flutter_riverpod_flutter_riverpod_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "test/widget_test.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "test_widget_test", + "target": "package_flutter_riverpod_flutter_riverpod_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "subsonic_models_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "subsonic_models_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites", + "target": "subsonic_models_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "subsonic_models_dart" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/main.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_main", + "target": "lib_main_build" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/main.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_main", + "target": "lib_main_main" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/main.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_main", + "target": "lib_main_ratuneapp" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/main.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_main", + "target": "package_flutter_foundation_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/main.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_main", + "target": "package_flutter_material_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/main.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_main", + "target": "package_just_audio_background_just_audio_background_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/main.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_main", + "target": "shell_app_shell_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/main.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_main", + "target": "theme_accent_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/main.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_main", + "target": "theme_app_theme_dart" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/main.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_main_ratuneapp", + "target": "consumerwidget" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/main.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_main_ratuneapp", + "target": "lib_theme_accent_accentprovider" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen_albumscreen", + "target": "consumerwidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen_artistscreen", + "target": "consumerwidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen_browserscreen", + "target": "consumerwidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_favorites_screen_favoritesscreen", + "target": "consumerwidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_home_screen_homescreen", + "target": "consumerwidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen_albumartpanel", + "target": "consumerwidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen_favrating", + "target": "consumerwidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen_nowplayingscreen", + "target": "consumerwidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen_results", + "target": "consumerwidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell_statusbar", + "target": "consumerwidget" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/main.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_main_build", + "target": "lib_theme_accent_accentprovider" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "package_flutter_foundation_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "package_flutter_material_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "package_flutter_material_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_favorites_screen", + "target": "package_flutter_material_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_home_screen", + "target": "package_flutter_material_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "package_flutter_material_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen", + "target": "package_flutter_material_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "package_flutter_material_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent_extract", + "target": "package_flutter_material_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/app_theme.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_app_theme", + "target": "package_flutter_material_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_block_progress_bar", + "target": "package_flutter_material_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_hairline_panel", + "target": "package_flutter_material_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "package_just_audio_background_just_audio_background_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "theme_accent_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "audioplayer" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "duration" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_audiosupported" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_copywith" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_current" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_currentindex" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_cycleloop" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_dispose" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_duration" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_loop" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_next" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_notifycurrent" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_playbackcontroller" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_playbackstate" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_player" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_playing" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_playsongs" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_position" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_previous" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_queue" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_seek" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_shuffle" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_sourcefor" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_supported" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_toggleplaypause" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_toggleshuffle" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "lib_playback_playback_engine_wirestreams" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "loopmode" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "package_just_audio_just_audio_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "song_get" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_playback_playback_engine", + "target": "static_bool_get" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/playback/playback_engine.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_playback_playback_engine_playbackcontroller", + "target": "lib_playback_playback_engine_playbackstate" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_playback_playback_engine_playbackstate" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "package_just_audio_just_audio_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "favorites_screen_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "icondata" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_action" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_albumscreen" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_artistscreen" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_browserow" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_browserscreen" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_build" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_centered" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_child" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_detailscaffold" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_errortext" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_fmtduration" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_icon" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_id" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_label" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_leading" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_loading" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_m" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_message" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_notconnected" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_ontap" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_s" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_title" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "lib_screens_browser_screen_trailing" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "search_screen_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "state_providers_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "theme_tokens_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "voidcallback" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "widget" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen", + "target": "widgets_hairline_panel_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_browser_screen_browserscreen", + "target": "lib_state_providers_artistsprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_browser_screen_browserscreen", + "target": "lib_state_providers_subsonicclientprovider" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen_action", + "target": "statelesswidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen_browserow", + "target": "statelesswidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen_centered", + "target": "statelesswidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen_detailscaffold", + "target": "statelesswidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen_errortext", + "target": "statelesswidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen_loading", + "target": "statelesswidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_browser_screen_notconnected", + "target": "statelesswidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_favorites_screen_sectionlabel", + "target": "statelesswidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_home_screen_empty", + "target": "statelesswidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen_artfallback", + "target": "statelesswidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen_infostrip", + "target": "statelesswidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen_transport", + "target": "statelesswidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell_tabbar", + "target": "statelesswidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_block_progress_bar_blockprogressbar", + "target": "statelesswidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_hairline_panel_hairlinepanel", + "target": "statelesswidget" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_browser_screen_artistscreen", + "target": "lib_state_providers_artistprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_browser_screen_albumscreen", + "target": "lib_state_providers_albumprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_browser_screen_albumscreen", + "target": "lib_state_providers_playbackprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_widgets_hairline_panel", + "target": "widget" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_browser_screen_build", + "target": "lib_state_providers_albumprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_browser_screen_build", + "target": "lib_state_providers_artistprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_browser_screen_build", + "target": "lib_state_providers_artistsprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_browser_screen_build", + "target": "lib_state_providers_playbackprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_browser_screen_build", + "target": "lib_state_providers_subsonicclientprovider" + }, + { + "relation": "navigates", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/browser_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "route_object", + "_origin": "ast", + "source": "lib_screens_browser_screen_build", + "target": "materialpageroute" + }, + { + "relation": "navigates", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "route_object", + "_origin": "ast", + "source": "lib_screens_favorites_screen_build", + "target": "materialpageroute" + }, + { + "relation": "navigates", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "route_object", + "_origin": "ast", + "source": "lib_screens_home_screen_build", + "target": "materialpageroute" + }, + { + "relation": "navigates", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "route_object", + "_origin": "ast", + "source": "lib_screens_search_screen_build", + "target": "materialpageroute" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "state_providers_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_favorites_screen", + "target": "state_providers_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_home_screen", + "target": "state_providers_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "state_providers_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen", + "target": "state_providers_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "state_providers_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "theme_tokens_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_favorites_screen", + "target": "theme_tokens_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_home_screen", + "target": "theme_tokens_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "theme_tokens_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen", + "target": "theme_tokens_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "theme_tokens_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_block_progress_bar", + "target": "theme_tokens_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_hairline_panel", + "target": "theme_tokens_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_home_screen", + "target": "widgets_hairline_panel_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "widgets_hairline_panel_dart" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "lib_screens_connect_sheet_build" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "lib_screens_connect_sheet_busy" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "lib_screens_connect_sheet_connect" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "lib_screens_connect_sheet_connectsheet" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "lib_screens_connect_sheet_connectsheetstate" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "lib_screens_connect_sheet_createstate" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "lib_screens_connect_sheet_dispose" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "lib_screens_connect_sheet_field" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "lib_screens_connect_sheet_initstate" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "lib_screens_connect_sheet_pass" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "lib_screens_connect_sheet_showconnectsheet" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "lib_screens_connect_sheet_url" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "lib_screens_connect_sheet_user" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet", + "target": "subsonic_credentials_dart" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet_connectsheet", + "target": "consumerstatefulwidget" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet_connectsheetstate", + "target": "lib_screens_connect_sheet_connectsheet" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen_searchscreen", + "target": "consumerstatefulwidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell_appshell", + "target": "consumerstatefulwidget" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_connect_sheet_connectsheetstate", + "target": "consumerstate" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_connect_sheet_connectsheetstate", + "target": "lib_state_providers_connectionprovider" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen_searchscreenstate", + "target": "consumerstate" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell_appshellstate", + "target": "consumerstate" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_connect_sheet_initstate", + "target": "lib_state_providers_connectionprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_connect_sheet_connect", + "target": "lib_state_providers_connectionprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/connect_sheet.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_connect_sheet_build", + "target": "lib_state_providers_connectionprovider" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "subsonic_credentials_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_favorites_screen", + "target": "browser_screen_dart" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_favorites_screen", + "target": "lib_screens_favorites_screen_build" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_favorites_screen", + "target": "lib_screens_favorites_screen_favoritesscreen" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_favorites_screen", + "target": "lib_screens_favorites_screen_sectionlabel" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_favorites_screen", + "target": "lib_screens_favorites_screen_text" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_favorites_screen_favoritesscreen", + "target": "lib_state_providers_starredprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/favorites_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_favorites_screen_build", + "target": "lib_state_providers_starredprovider" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_home_screen", + "target": "browser_screen_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen", + "target": "browser_screen_dart" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_home_screen", + "target": "lib_screens_home_screen_build" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_home_screen", + "target": "lib_screens_home_screen_empty" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_home_screen", + "target": "lib_screens_home_screen_homescreen" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_home_screen", + "target": "lib_screens_home_screen_message" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_home_screen_homescreen", + "target": "lib_state_providers_recentalbumsprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_home_screen_homescreen", + "target": "lib_state_providers_recentsongsprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_home_screen_homescreen", + "target": "lib_state_providers_rediscoverprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_home_screen_homescreen", + "target": "lib_state_providers_rediscoverseedprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_home_screen_homescreen", + "target": "lib_state_providers_subsonicclientprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_home_screen_build", + "target": "lib_state_providers_recentalbumsprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_home_screen_build", + "target": "lib_state_providers_recentsongsprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_home_screen_build", + "target": "lib_state_providers_rediscoverprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_home_screen_build", + "target": "lib_state_providers_rediscoverseedprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/home_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_home_screen_build", + "target": "lib_state_providers_subsonicclientprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "color" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_screens_now_playing_screen_accent" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_screens_now_playing_screen_albumartpanel" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_screens_now_playing_screen_artfallback" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_screens_now_playing_screen_btn" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_screens_now_playing_screen_build" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_screens_now_playing_screen_favrating" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_screens_now_playing_screen_fmt" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_screens_now_playing_screen_fmtdur" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_screens_now_playing_screen_infostrip" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_screens_now_playing_screen_m" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_screens_now_playing_screen_nowplayingscreen" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_screens_now_playing_screen_ref" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_screens_now_playing_screen_s" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_screens_now_playing_screen_song" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_screens_now_playing_screen_state" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_screens_now_playing_screen_transport" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "lib_subsonic_models_song" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "playback_playback_engine_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "widgetref" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_now_playing_screen", + "target": "widgets_block_progress_bar_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_now_playing_screen_nowplayingscreen", + "target": "lib_state_providers_playbackprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_now_playing_screen_albumartpanel", + "target": "lib_state_providers_playbackprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_now_playing_screen_albumartpanel", + "target": "lib_state_providers_subsonicclientprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_now_playing_screen_favrating", + "target": "lib_state_providers_favoritesprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_now_playing_screen_transport", + "target": "lib_state_providers_playbackprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent_accentnotifier", + "target": "color" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_widgets_block_progress_bar", + "target": "color" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_widgets_hairline_panel", + "target": "color" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_now_playing_screen_build", + "target": "lib_state_providers_favoritesprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_now_playing_screen_build", + "target": "lib_state_providers_playbackprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/now_playing_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_now_playing_screen_build", + "target": "lib_state_providers_subsonicclientprovider" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "playback_playback_engine_dart" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen", + "target": "lib_screens_search_screen_build" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen", + "target": "lib_screens_search_screen_controller" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen", + "target": "lib_screens_search_screen_createstate" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen", + "target": "lib_screens_search_screen_dispose" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen", + "target": "lib_screens_search_screen_query" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen", + "target": "lib_screens_search_screen_results" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen", + "target": "lib_screens_search_screen_searchscreen" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen", + "target": "lib_screens_search_screen_searchscreenstate" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_screens_search_screen_searchscreenstate", + "target": "lib_screens_search_screen_searchscreen" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_search_screen_results", + "target": "lib_state_providers_searchprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/screens/search_screen.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_screens_search_screen_build", + "target": "lib_state_providers_searchprovider" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "lib_shell_app_shell_appshell" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "lib_shell_app_shell_appshellstate" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "lib_shell_app_shell_build" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "lib_shell_app_shell_createstate" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "lib_shell_app_shell_index" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "lib_shell_app_shell_onselect" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "lib_shell_app_shell_statusbar" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "lib_shell_app_shell_tabbar" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "lib_shell_app_shell_tabs" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "screens_browser_screen_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "screens_connect_sheet_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "screens_home_screen_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "screens_now_playing_screen_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "static_const" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_shell_app_shell", + "target": "valuechanged" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_shell_app_shell_appshellstate", + "target": "lib_shell_app_shell_appshell" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_shell_app_shell_appshellstate", + "target": "lib_state_providers_favoritesprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_shell_app_shell_statusbar", + "target": "lib_state_providers_connectionprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "static_const" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_shell_app_shell_build", + "target": "lib_state_providers_connectionprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/shell/app_shell.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_shell_app_shell_build", + "target": "lib_state_providers_favoritesprovider" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites", + "target": "lib_state_favorites_albumids" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites", + "target": "lib_state_favorites_artistids" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites", + "target": "lib_state_favorites_clear" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites", + "target": "lib_state_favorites_copywith" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites", + "target": "lib_state_favorites_favoritescontroller" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites", + "target": "lib_state_favorites_favoritesstate" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites", + "target": "lib_state_favorites_hydrate" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites", + "target": "lib_state_favorites_issongstarred" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites", + "target": "lib_state_favorites_ratesong" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites", + "target": "lib_state_favorites_ratingfor" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites", + "target": "lib_state_favorites_ratings" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites", + "target": "lib_state_favorites_songids" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites", + "target": "lib_state_favorites_togglesong" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_state_favorites", + "target": "map" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_state_favorites", + "target": "set" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites", + "target": "subsonic_subsonic_client_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/favorites.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_favorites_favoritescontroller", + "target": "lib_state_favorites_favoritesstate" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "subsonic_subsonic_client_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_state_providers", + "target": "bool_get" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "favorites_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "history_play_history_dart" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_albumprovider" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_artistprovider" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_artistsprovider" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_client" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_connect" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_connectioncontroller" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_connectionprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "context": "type_lookup", + "source": "lib_state_providers", + "target": "lib_state_providers_connectionstate" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "context": "variable_type", + "source": "lib_state_providers", + "target": "lib_state_providers_connstatus" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_controller" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_coverarturifor" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_credentials" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_credentialstoreprovider" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_disconnect" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_error" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_favoritesprovider" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_getalbum" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_getartist" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_getstarred2" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_history" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_isonline" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_playbackprovider" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_playhistoryprovider" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_recentalbumsprovider" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_recentsongsprovider" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_rediscover" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_rediscoverprovider" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_rediscoverseedprovider" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_restore" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_result" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_search3" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_searchprovider" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_seed" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_starredprovider" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_status" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_store" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_streamurifor" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_state_providers_subsonicclientprovider" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "context": "type_lookup", + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_subsonic_credentials_credentialstore" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_subsonic_credentials_subsoniccredentials" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "context": "type_lookup", + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_subsonic_models_starred2" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_state_providers", + "target": "lib_subsonic_subsonic_client_subsonicclient" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "package_flutter_widgets_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers", + "target": "theme_accent_extract_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_state_providers_connectioncontroller", + "target": "lib_state_providers_connectionstate" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "bool_get" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/state/providers.dart", + "source_location": null, + "weight": 1.0, + "context": "riverpod_reference", + "_origin": "ast", + "source": "lib_state_providers_coverarturifor", + "target": "lib_state_providers_subsonicclientprovider" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent", + "target": "package_flutter_widgets_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "package_flutter_widgets_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "fluttersecurestorage" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "lib_subsonic_credentials_alias" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "lib_subsonic_credentials_clear" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "lib_subsonic_credentials_credentialstore" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "lib_subsonic_credentials_display" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "lib_subsonic_credentials_kalias" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "lib_subsonic_credentials_kpass" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "lib_subsonic_credentials_kurl" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "lib_subsonic_credentials_kuser" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "lib_subsonic_credentials_load" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "lib_subsonic_credentials_password" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "lib_subsonic_credentials_save" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "lib_subsonic_credentials_storage" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "lib_subsonic_credentials_subsoniccredentials" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "lib_subsonic_credentials_url" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "lib_subsonic_credentials_username" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "package_flutter_secure_storage_flutter_secure_storage_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/credentials.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_subsonic_credentials", + "target": "string_get" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_json_helpers", + "target": "lib_subsonic_json_helpers_asbool" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_json_helpers", + "target": "lib_subsonic_json_helpers_asdouble" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_json_helpers", + "target": "lib_subsonic_json_helpers_asint" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_json_helpers", + "target": "lib_subsonic_json_helpers_asstring" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_json_helpers", + "target": "lib_subsonic_json_helpers_null" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_json_helpers", + "target": "lib_subsonic_json_helpers_orelse" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_json_helpers", + "target": "lib_subsonic_json_helpers_tostring" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/json_helpers.dart", + "source_location": null, + "weight": 1.0, + "context": "type_lookup", + "_origin": "ast", + "source": "lib_subsonic_json_helpers", + "target": "t" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "json_helpers_dart" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_album" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_albumcount" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_albumid" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_albums" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_all" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_artist" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_artistid" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_artistindex" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_artists" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_artistsresult" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_bitrate" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_contenttype" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_coverart" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_discnumber" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_duration" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_fromjson" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_genre" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_id" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_indexes" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_name" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_path" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_searchresult3" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_size" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_song" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_songcount" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_songs" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_starred" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_starred2" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_suffix" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_title" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_track" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_userrating" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/models.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_models", + "target": "lib_subsonic_models_year" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "json_helpers_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "dio" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_apiversion" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_autherrorcode" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_authparams" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_baseurl" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_clientname" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_code" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_coverarturi" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_dio" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_get" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_getalbum" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_getartist" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_getartists" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_getstarred2" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_isauthfailure" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_makesalt" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_maketoken" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_message" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_password" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_ping" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_saltalphabet" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_scrobble" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_search3" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_setrating" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_setstarred" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_streamuri" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_subsonicclient" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_subsonicerror" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_tostring" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_trimtrailingslash" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_uri" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "lib_subsonic_subsonic_client_username" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "models_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "package_crypto_crypto_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "package_dio_dio_dart" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_subsonic_subsonic_client", + "target": "static_const_string" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/subsonic/subsonic_client.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_subsonic_subsonic_client_subsonicerror", + "target": "exception" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent", + "target": "lib_theme_accent_accentnotifier" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent", + "target": "lib_theme_accent_accentprovider" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent", + "target": "lib_theme_accent_reset" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent", + "target": "tokens_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/app_theme.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_app_theme", + "target": "tokens_dart" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent_extract", + "target": "lib_theme_accent_extract_ensurereadable" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent_extract", + "target": "lib_theme_accent_extract_extractaccent" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent_extract", + "target": "lib_theme_accent_extract_hsl" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent_extract", + "target": "lib_theme_accent_extract_lightness" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent_extract", + "target": "lib_theme_accent_extract_palette" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent_extract", + "target": "lib_theme_accent_extract_picked" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent_extract", + "target": "lib_theme_accent_extract_saturation" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent_extract", + "target": "lib_theme_accent_extract_withlightness" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/accent_extract.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_accent_extract", + "target": "package_palette_generator_palette_generator_dart" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/app_theme.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_app_theme", + "target": "lib_theme_app_theme_buildratunetheme" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/app_theme.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_app_theme", + "target": "lib_theme_app_theme_mono" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/app_theme.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_app_theme", + "target": "lib_theme_app_theme_scheme" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/app_theme.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_app_theme", + "target": "package_google_fonts_google_fonts_dart" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "home_troglodyte_troglodyte_chamber_dev_ratune_mobile_lib_theme_tokens" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "lib_theme_tokens_accentdefault" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "lib_theme_tokens_background" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "lib_theme_tokens_border" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "lib_theme_tokens_borderactive" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "lib_theme_tokens_dimmed" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "lib_theme_tokens_foreground" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "lib_theme_tokens_lg" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "lib_theme_tokens_md" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "lib_theme_tokens_mintouchtarget" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "lib_theme_tokens_ratunecolors" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "lib_theme_tokens_ratunespacing" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "lib_theme_tokens_sm" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "lib_theme_tokens_surface" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "lib_theme_tokens_xl" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "lib_theme_tokens_xs" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "static_const_color" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/theme/tokens.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_theme_tokens", + "target": "static_const_double" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_widgets_hairline_panel", + "target": "static_const_double" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_block_progress_bar", + "target": "lib_widgets_block_progress_bar_blockprogressbar" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_block_progress_bar", + "target": "lib_widgets_block_progress_bar_build" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_block_progress_bar", + "target": "lib_widgets_block_progress_bar_cells" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_block_progress_bar", + "target": "lib_widgets_block_progress_bar_color" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_block_progress_bar", + "target": "lib_widgets_block_progress_bar_height" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/block_progress_bar.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_block_progress_bar", + "target": "lib_widgets_block_progress_bar_progress" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "context": "variable_type", + "_origin": "ast", + "source": "lib_widgets_hairline_panel", + "target": "edgeinsetsgeometry" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_hairline_panel", + "target": "lib_widgets_hairline_panel_active" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_hairline_panel", + "target": "lib_widgets_hairline_panel_backgroundcolor" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_hairline_panel", + "target": "lib_widgets_hairline_panel_build" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_hairline_panel", + "target": "lib_widgets_hairline_panel_child" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_hairline_panel", + "target": "lib_widgets_hairline_panel_hairlinepanel" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_hairline_panel", + "target": "lib_widgets_hairline_panel_padding" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_hairline_panel", + "target": "lib_widgets_hairline_panel_title" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_hairline_panel", + "target": "lib_widgets_hairline_panel_titlestraddle" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "lib/widgets/hairline_panel.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "lib_widgets_hairline_panel", + "target": "lib_widgets_hairline_panel_trailing" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "linux/flutter/generated_plugin_registrant.cc", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "linux_flutter_generated_plugin_registrant_cc_linux_flutter_generated_plugin_registrant", + "target": "linux_flutter_generated_plugin_registrant_fl_register_plugins", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "linux/flutter/generated_plugin_registrant.cc", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "source": "linux_flutter_generated_plugin_registrant_cc_linux_flutter_generated_plugin_registrant", + "target": "linux_flutter_generated_plugin_registrant_h_linux_flutter_generated_plugin_registrant", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "linux/flutter/generated_plugin_registrant.cc", + "source_location": "L11", + "weight": 1.0, + "context": "parameter_type", + "_origin": "ast", + "source": "linux_flutter_generated_plugin_registrant_fl_register_plugins", + "target": "flpluginregistry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "linux/runner/my_application.cc", + "source_location": "L76", + "weight": 1.0, + "_origin": "ast", + "source": "linux_runner_my_application_my_application_activate", + "target": "linux_flutter_generated_plugin_registrant_fl_register_plugins" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "linux/runner/main.cc", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast", + "source": "linux_runner_main", + "target": "linux_runner_main_main", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "linux/runner/main.cc", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "linux_runner_main", + "target": "linux_runner_my_application_h_linux_runner_my_application", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "linux/runner/main.cc", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "linux_runner_main_main", + "target": "linux_runner_my_application_my_application_new" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "linux_runner_my_application_cc_linux_runner_my_application", + "target": "linux_runner_my_application_first_frame_cb", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "linux_runner_my_application_cc_linux_runner_my_application", + "target": "linux_runner_my_application_h_linux_runner_my_application", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "linux_runner_my_application_cc_linux_runner_my_application", + "target": "linux_runner_my_application_my_application_activate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L127", + "weight": 1.0, + "_origin": "ast", + "source": "linux_runner_my_application_cc_linux_runner_my_application", + "target": "linux_runner_my_application_my_application_class_init", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L121", + "weight": 1.0, + "_origin": "ast", + "source": "linux_runner_my_application_cc_linux_runner_my_application", + "target": "linux_runner_my_application_my_application_dispose", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L136", + "weight": 1.0, + "_origin": "ast", + "source": "linux_runner_my_application_cc_linux_runner_my_application", + "target": "linux_runner_my_application_my_application_init", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L82", + "weight": 1.0, + "_origin": "ast", + "source": "linux_runner_my_application_cc_linux_runner_my_application", + "target": "linux_runner_my_application_my_application_local_command_line", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L138", + "weight": 1.0, + "_origin": "ast", + "source": "linux_runner_my_application_cc_linux_runner_my_application", + "target": "linux_runner_my_application_my_application_new", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L112", + "weight": 1.0, + "_origin": "ast", + "source": "linux_runner_my_application_cc_linux_runner_my_application", + "target": "linux_runner_my_application_my_application_shutdown", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L103", + "weight": 1.0, + "_origin": "ast", + "source": "linux_runner_my_application_cc_linux_runner_my_application", + "target": "linux_runner_my_application_my_application_startup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "linux_runner_my_application_cc_linux_runner_my_application", + "target": "linux_runner_my_application_myapplication", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L18", + "weight": 1.0, + "context": "parameter_type", + "_origin": "ast", + "source": "linux_runner_my_application_first_frame_cb", + "target": "linux_runner_my_application_myapplication", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L136", + "weight": 1.0, + "context": "parameter_type", + "_origin": "ast", + "source": "linux_runner_my_application_my_application_init", + "target": "linux_runner_my_application_myapplication", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L138", + "weight": 1.0, + "context": "return_type", + "_origin": "ast", + "source": "linux_runner_my_application_my_application_new", + "target": "linux_runner_my_application_myapplication", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L11", + "weight": 1.0, + "context": "field", + "_origin": "ast", + "source": "linux_runner_my_application_myapplication", + "target": "gtkapplication", + "confidence_score": 1.0 + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L12", + "weight": 1.0, + "context": "field", + "_origin": "ast", + "source": "linux_runner_my_application_myapplication", + "target": "linux_runner_my_application_myapplication_dart_entrypoint_arguments", + "confidence_score": 1.0 + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L11", + "weight": 1.0, + "context": "field", + "_origin": "ast", + "source": "linux_runner_my_application_myapplication", + "target": "linux_runner_my_application_myapplication_parent_instance", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L18", + "weight": 1.0, + "context": "parameter_type", + "_origin": "ast", + "source": "linux_runner_my_application_first_frame_cb", + "target": "flview", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L23", + "weight": 1.0, + "context": "parameter_type", + "_origin": "ast", + "source": "linux_runner_my_application_my_application_activate", + "target": "gapplication", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L82", + "weight": 1.0, + "context": "parameter_type", + "_origin": "ast", + "source": "linux_runner_my_application_my_application_local_command_line", + "target": "gapplication", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L112", + "weight": 1.0, + "context": "parameter_type", + "_origin": "ast", + "source": "linux_runner_my_application_my_application_shutdown", + "target": "gapplication", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L103", + "weight": 1.0, + "context": "parameter_type", + "_origin": "ast", + "source": "linux_runner_my_application_my_application_startup", + "target": "gapplication", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L82", + "weight": 1.0, + "context": "return_type", + "_origin": "ast", + "source": "linux_runner_my_application_my_application_local_command_line", + "target": "gboolean", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L82", + "weight": 1.0, + "context": "parameter_type", + "_origin": "ast", + "source": "linux_runner_my_application_my_application_local_command_line", + "target": "gchar", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L121", + "weight": 1.0, + "context": "parameter_type", + "_origin": "ast", + "source": "linux_runner_my_application_my_application_dispose", + "target": "gobject", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "linux/runner/my_application.cc", + "source_location": "L127", + "weight": 1.0, + "context": "parameter_type", + "_origin": "ast", + "source": "linux_runner_my_application_my_application_class_init", + "target": "myapplicationclass", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "test/widget_test.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "test_widget_test", + "target": "package_flutter_test_flutter_test_dart" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "test/widget_test.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "test_widget_test", + "target": "package_ratune_mobile_main_dart" + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "test/widget_test.dart", + "source_location": null, + "weight": 1.0, + "_origin": "ast", + "source": "test_widget_test", + "target": "test_widget_test_main" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "analysis_options.yaml", + "source_location": null, + "weight": 1.0, + "source": "analysis_options_ratune_mobile", + "target": "pubspec_ratune_mobile" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.75, + "source_file": "linux/CMakeLists.txt", + "source_location": null, + "weight": 1.0, + "source": "linux_cmakelists_runner", + "target": "pubspec_ratune_mobile" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "pubspec.yaml", + "source_location": null, + "weight": 1.0, + "source": "pubspec_ratune_mobile", + "target": "pubspec_crypto" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "pubspec.yaml", + "source_location": null, + "weight": 1.0, + "source": "pubspec_ratune_mobile", + "target": "pubspec_dio" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "pubspec.yaml", + "source_location": null, + "weight": 1.0, + "source": "pubspec_ratune_mobile", + "target": "pubspec_flutter_lints" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "pubspec.yaml", + "source_location": null, + "weight": 1.0, + "source": "pubspec_ratune_mobile", + "target": "pubspec_flutter_riverpod" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "pubspec.yaml", + "source_location": null, + "weight": 1.0, + "source": "pubspec_ratune_mobile", + "target": "pubspec_flutter_secure_storage" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "pubspec.yaml", + "source_location": null, + "weight": 1.0, + "source": "pubspec_ratune_mobile", + "target": "pubspec_google_fonts" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "pubspec.yaml", + "source_location": null, + "weight": 1.0, + "source": "pubspec_ratune_mobile", + "target": "pubspec_just_audio" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "pubspec.yaml", + "source_location": null, + "weight": 1.0, + "source": "pubspec_ratune_mobile", + "target": "pubspec_just_audio_background" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "pubspec.yaml", + "source_location": null, + "weight": 1.0, + "source": "pubspec_ratune_mobile", + "target": "pubspec_palette_generator" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "pubspec.yaml", + "source_location": null, + "weight": 1.0, + "source": "pubspec_ratune_mobile", + "target": "pubspec_path_provider" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "README.md", + "source_location": null, + "weight": 1.0, + "source": "readme_ratune_mobile", + "target": "pubspec_ratune_mobile" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "pubspec.yaml", + "source_location": null, + "weight": 1.0, + "source": "pubspec_just_audio_background", + "target": "pubspec_just_audio" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.65, + "source_file": "pubspec.yaml", + "source_location": null, + "weight": 1.0, + "source": "pubspec_palette_generator", + "target": "pubspec_just_audio" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "analysis_options.yaml", + "source_location": null, + "weight": 1.0, + "source": "analysis_options_ratune_mobile", + "target": "pubspec_flutter_lints" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "linux/CMakeLists.txt", + "source_location": null, + "weight": 1.0, + "source": "linux_cmakelists_runner", + "target": "linux_flutter_cmakelists_flutter" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "linux/CMakeLists.txt", + "source_location": null, + "weight": 1.0, + "source": "linux_cmakelists_runner", + "target": "linux_runner_cmakelists_runner" + }, + { + "relation": "shares_data_with", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "linux/runner/CMakeLists.txt", + "source_location": null, + "weight": 1.0, + "source": "linux_runner_cmakelists_runner", + "target": "linux_flutter_cmakelists_flutter" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "android/app/src/main/res/mipmap-hdpi/ic_launcher.png", + "source_location": null, + "weight": 1.0, + "source": "android_app_src_main_res_mipmap_hdpi_ic_launcher_icon", + "target": "android_app_src_main_res_mipmap_mdpi_ic_launcher_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "android/app/src/main/res/mipmap-hdpi/ic_launcher.png", + "source_location": null, + "weight": 1.0, + "source": "android_app_src_main_res_mipmap_hdpi_ic_launcher_icon", + "target": "android_app_src_main_res_mipmap_xhdpi_ic_launcher_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "android/app/src/main/res/mipmap-hdpi/ic_launcher.png", + "source_location": null, + "weight": 1.0, + "source": "android_app_src_main_res_mipmap_hdpi_ic_launcher_icon", + "target": "android_app_src_main_res_mipmap_xxhdpi_ic_launcher_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "android/app/src/main/res/mipmap-hdpi/ic_launcher.png", + "source_location": null, + "weight": 1.0, + "source": "android_app_src_main_res_mipmap_hdpi_ic_launcher_icon", + "target": "android_app_src_main_res_mipmap_xxxhdpi_ic_launcher_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "android/app/src/main/res/mipmap-mdpi/ic_launcher.png", + "source_location": null, + "weight": 1.0, + "source": "android_app_src_main_res_mipmap_mdpi_ic_launcher_icon", + "target": "android_app_src_main_res_mipmap_xhdpi_ic_launcher_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "android/app/src/main/res/mipmap-mdpi/ic_launcher.png", + "source_location": null, + "weight": 1.0, + "source": "android_app_src_main_res_mipmap_mdpi_ic_launcher_icon", + "target": "android_app_src_main_res_mipmap_xxhdpi_ic_launcher_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "android/app/src/main/res/mipmap-mdpi/ic_launcher.png", + "source_location": null, + "weight": 1.0, + "source": "android_app_src_main_res_mipmap_mdpi_ic_launcher_icon", + "target": "android_app_src_main_res_mipmap_xxxhdpi_ic_launcher_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "android/app/src/main/res/mipmap-xhdpi/ic_launcher.png", + "source_location": null, + "weight": 1.0, + "source": "android_app_src_main_res_mipmap_xhdpi_ic_launcher_icon", + "target": "android_app_src_main_res_mipmap_xxhdpi_ic_launcher_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "android/app/src/main/res/mipmap-xhdpi/ic_launcher.png", + "source_location": null, + "weight": 1.0, + "source": "android_app_src_main_res_mipmap_xhdpi_ic_launcher_icon", + "target": "android_app_src_main_res_mipmap_xxxhdpi_ic_launcher_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png", + "source_location": null, + "weight": 1.0, + "source": "android_app_src_main_res_mipmap_xxhdpi_ic_launcher_icon", + "target": "android_app_src_main_res_mipmap_xxxhdpi_ic_launcher_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_1x_icon", + "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_2x_icon", + "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_3x_icon", + "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_1x_icon", + "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_2x_icon", + "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_3x_icon", + "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_1x_icon", + "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_2x_icon", + "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_3x_icon", + "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_60x60_2x_icon", + "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_60x60_3x_icon", + "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_76x76_1x_icon", + "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_76x76_2x_icon", + "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_83_5x83_5_2x_icon", + "target": "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_image", + "target": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_2x_image" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_image", + "target": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_3x_image" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png", + "source_location": null, + "weight": 1.0, + "source": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_2x_image", + "target": "ios_runner_assets_xcassets_launchimage_imageset_launchimage_3x_image" + } + ], + "hyperedges": [ + { + "id": "linux_flutter_build_pipeline", + "label": "Linux Flutter CMake Build Pipeline", + "nodes": [ + "linux_cmakelists_runner", + "linux_flutter_cmakelists_flutter", + "linux_runner_cmakelists_runner" + ], + "relation": "participate_in", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "linux/CMakeLists.txt" + }, + { + "id": "audio_playback_stack", + "label": "Audio Playback and Theming Stack", + "nodes": [ + "pubspec_just_audio", + "pubspec_just_audio_background", + "pubspec_palette_generator" + ], + "relation": "form", + "confidence": "INFERRED", + "confidence_score": 0.65, + "source_file": "pubspec.yaml" + }, + { + "id": "android_launcher_icon_set", + "label": "Android Launcher Icon Set (Flutter logo)", + "nodes": [ + "android_app_src_main_res_mipmap_hdpi_ic_launcher_icon", + "android_app_src_main_res_mipmap_mdpi_ic_launcher_icon", + "android_app_src_main_res_mipmap_xhdpi_ic_launcher_icon", + "android_app_src_main_res_mipmap_xxhdpi_ic_launcher_icon", + "android_app_src_main_res_mipmap_xxxhdpi_ic_launcher_icon" + ], + "relation": "form", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "android/app/src/main/res/mipmap-hdpi/ic_launcher.png" + }, + { + "id": "ios_appicon_appiconset_set", + "label": "iOS AppIcon Set (Flutter logo)", + "nodes": [ + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_1024x1024_1x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_1x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_2x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_20x20_3x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_1x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_2x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_29x29_3x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_1x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_2x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_40x40_3x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_60x60_2x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_60x60_3x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_76x76_1x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_76x76_2x_icon", + "ios_runner_assets_xcassets_appicon_appiconset_icon_app_83_5x83_5_2x_icon" + ], + "relation": "form", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png" + }, + { + "id": "ios_launch_image_set", + "label": "iOS Launch Image Set", + "nodes": [ + "ios_runner_assets_xcassets_launchimage_imageset_launchimage_image", + "ios_runner_assets_xcassets_launchimage_imageset_launchimage_2x_image", + "ios_runner_assets_xcassets_launchimage_imageset_launchimage_3x_image" + ], + "relation": "form", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png" + } + ] +} \ No newline at end of file diff --git a/graphify-out/manifest.json b/graphify-out/manifest.json new file mode 100644 index 0000000..fa3782b --- /dev/null +++ b/graphify-out/manifest.json @@ -0,0 +1,342 @@ +{ + "android/app/build.gradle.kts": { + "mtime": 1785340086.8053284, + "ast_hash": "236d607e537bed4b3363317b90e9d478", + "semantic_hash": "236d607e537bed4b3363317b90e9d478" + }, + "android/app/src/main/kotlin/com/conversionpath/ratune_mobile/MainActivity.kt": { + "mtime": 1785342271.1245763, + "ast_hash": "67e26f2baa578d0a50324da7efd4333e", + "semantic_hash": "67e26f2baa578d0a50324da7efd4333e" + }, + "android/build.gradle.kts": { + "mtime": 1785340086.8060246, + "ast_hash": "f11f360aed44d4f6871b398346af14f0", + "semantic_hash": "f11f360aed44d4f6871b398346af14f0" + }, + "android/settings.gradle.kts": { + "mtime": 1785340086.7866597, + "ast_hash": "4440672748462857e9bdbbf5fd06fe1a", + "semantic_hash": "4440672748462857e9bdbbf5fd06fe1a" + }, + "ios/Runner/AppDelegate.swift": { + "mtime": 1785340086.7949142, + "ast_hash": "2bd8469f2a4b701ff582f6574e58b13c", + "semantic_hash": "2bd8469f2a4b701ff582f6574e58b13c" + }, + "ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json": { + "mtime": 1785340086.792394, + "ast_hash": "c3cdf9688b604d14f2e76a8287e16167", + "semantic_hash": "c3cdf9688b604d14f2e76a8287e16167" + }, + "ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json": { + "mtime": 1785340086.7940903, + "ast_hash": "770f4f65e02ca2fc57f46f4f4148d15d", + "semantic_hash": "770f4f65e02ca2fc57f46f4f4148d15d" + }, + "ios/Runner/Runner-Bridging-Header.h": { + "mtime": 1785340086.7895567, + "ast_hash": "e07862ac930ed4d8479185d52c6cc66d", + "semantic_hash": "e07862ac930ed4d8479185d52c6cc66d" + }, + "ios/Runner/SceneDelegate.swift": { + "mtime": 1785340086.7946246, + "ast_hash": "748d701e783e68faf618c00464257a19", + "semantic_hash": "748d701e783e68faf618c00464257a19" + }, + "ios/RunnerTests/RunnerTests.swift": { + "mtime": 1785340086.788504, + "ast_hash": "a225a382d14d7b16b6f602a5c1d49331", + "semantic_hash": "a225a382d14d7b16b6f602a5c1d49331" + }, + "lib/history/play_history.dart": { + "mtime": 1785343202.4496186, + "ast_hash": "c3843c777988f14ea907493705bdb1be", + "semantic_hash": "c3843c777988f14ea907493705bdb1be" + }, + "lib/main.dart": { + "mtime": 1785342280.0368621, + "ast_hash": "273faf5f66331da53ea424baf5595267", + "semantic_hash": "273faf5f66331da53ea424baf5595267" + }, + "lib/playback/playback_engine.dart": { + "mtime": 1785343132.63645, + "ast_hash": "8e011708f5b03041ee6b3967e409063d", + "semantic_hash": "8e011708f5b03041ee6b3967e409063d" + }, + "lib/screens/browser_screen.dart": { + "mtime": 1785343355.2753944, + "ast_hash": "bd212121162448b5e7302f654bae4c37", + "semantic_hash": "bd212121162448b5e7302f654bae4c37" + }, + "lib/screens/connect_sheet.dart": { + "mtime": 1785341046.648255, + "ast_hash": "ed2775fe631aacb42f1d86f03e4c15f4", + "semantic_hash": "ed2775fe631aacb42f1d86f03e4c15f4" + }, + "lib/screens/favorites_screen.dart": { + "mtime": 1785343290.532367, + "ast_hash": "ba7d3d54020dfbf7e96ed08b49b7e0c7", + "semantic_hash": "ba7d3d54020dfbf7e96ed08b49b7e0c7" + }, + "lib/screens/home_screen.dart": { + "mtime": 1785343390.4134972, + "ast_hash": "c2893ac6d049083aa619326c7a4c59ad", + "semantic_hash": "c2893ac6d049083aa619326c7a4c59ad" + }, + "lib/screens/now_playing_screen.dart": { + "mtime": 1785343266.243608, + "ast_hash": "d7c8ad138f9c42fb96d59bf80f9509b4", + "semantic_hash": "d7c8ad138f9c42fb96d59bf80f9509b4" + }, + "lib/screens/search_screen.dart": { + "mtime": 1785343309.3169546, + "ast_hash": "3d816a71c6f4d18babf8054ad0266acb", + "semantic_hash": "3d816a71c6f4d18babf8054ad0266acb" + }, + "lib/shell/app_shell.dart": { + "mtime": 1785343479.5513015, + "ast_hash": "dfa06e0cde79f29ba6cfcc8e577978b2", + "semantic_hash": "dfa06e0cde79f29ba6cfcc8e577978b2" + }, + "lib/state/favorites.dart": { + "mtime": 1785343084.674966, + "ast_hash": "0f53986996dc4ddd3d22a25483db6a17", + "semantic_hash": "0f53986996dc4ddd3d22a25483db6a17" + }, + "lib/state/providers.dart": { + "mtime": 1785343163.480407, + "ast_hash": "f2537d625ac798aa92c18f2458098625", + "semantic_hash": "f2537d625ac798aa92c18f2458098625" + }, + "lib/subsonic/credentials.dart": { + "mtime": 1785340853.6022673, + "ast_hash": "189d563816f1696e574ca764aeb16cd5", + "semantic_hash": "189d563816f1696e574ca764aeb16cd5" + }, + "lib/subsonic/json_helpers.dart": { + "mtime": 1785340473.9914591, + "ast_hash": "40cdcb45cbcc63f08f90e6840e341fc8", + "semantic_hash": "40cdcb45cbcc63f08f90e6840e341fc8" + }, + "lib/subsonic/models.dart": { + "mtime": 1785342992.5261295, + "ast_hash": "e973a5a7e21e890604a368a632455259", + "semantic_hash": "e973a5a7e21e890604a368a632455259" + }, + "lib/subsonic/subsonic_client.dart": { + "mtime": 1785343392.08955, + "ast_hash": "a6bf82a97a87bc7b9765baa67a25a902", + "semantic_hash": "a6bf82a97a87bc7b9765baa67a25a902" + }, + "lib/theme/accent.dart": { + "mtime": 1785340169.7594929, + "ast_hash": "d3385c21629775962699ef203105d7a3", + "semantic_hash": "d3385c21629775962699ef203105d7a3" + }, + "lib/theme/accent_extract.dart": { + "mtime": 1785340937.997387, + "ast_hash": "27a2a5c29bf117c4fea9ceba8d6bfcca", + "semantic_hash": "27a2a5c29bf117c4fea9ceba8d6bfcca" + }, + "lib/theme/app_theme.dart": { + "mtime": 1785340180.8858938, + "ast_hash": "b5a2602c0ceb8818f0bb82093fc47eb9", + "semantic_hash": "b5a2602c0ceb8818f0bb82093fc47eb9" + }, + "lib/theme/tokens.dart": { + "mtime": 1785340160.0111418, + "ast_hash": "8bf38f0276611b65f5fb466145cbf495", + "semantic_hash": "8bf38f0276611b65f5fb466145cbf495" + }, + "lib/widgets/block_progress_bar.dart": { + "mtime": 1785340246.1262438, + "ast_hash": "fa582461cef400f0de8f6c2861fb79ea", + "semantic_hash": "fa582461cef400f0de8f6c2861fb79ea" + }, + "lib/widgets/hairline_panel.dart": { + "mtime": 1785340217.7472217, + "ast_hash": "37e21eaf6dcbf74911a71afb663cfef6", + "semantic_hash": "37e21eaf6dcbf74911a71afb663cfef6" + }, + "linux/flutter/generated_plugin_registrant.cc": { + "mtime": 1785340136.3522894, + "ast_hash": "e51606128f6c2595af1393720bb05539", + "semantic_hash": "e51606128f6c2595af1393720bb05539" + }, + "linux/flutter/generated_plugin_registrant.h": { + "mtime": 1785340087.4259648, + "ast_hash": "d295462c9da9f7fef22dc86c34492318", + "semantic_hash": "d295462c9da9f7fef22dc86c34492318" + }, + "linux/runner/main.cc": { + "mtime": 1785340086.8008928, + "ast_hash": "0643b8609698e96b3abd63c210361a87", + "semantic_hash": "0643b8609698e96b3abd63c210361a87" + }, + "linux/runner/my_application.cc": { + "mtime": 1785340086.8005211, + "ast_hash": "704416b59d9c57dfd438eaf02a97d724", + "semantic_hash": "704416b59d9c57dfd438eaf02a97d724" + }, + "linux/runner/my_application.h": { + "mtime": 1785340086.8010902, + "ast_hash": "326a85d68857137fdfe8698a0c071baf", + "semantic_hash": "326a85d68857137fdfe8698a0c071baf" + }, + "test/widget_test.dart": { + "mtime": 1785340509.7470362, + "ast_hash": "e97cca239720701189402ac9409be4ae", + "semantic_hash": "e97cca239720701189402ac9409be4ae" + }, + "README.md": { + "mtime": 1785340086.8073123, + "ast_hash": "e54b6e9ef7e49b2064c4cb04b3eab269", + "semantic_hash": "e54b6e9ef7e49b2064c4cb04b3eab269" + }, + "analysis_options.yaml": { + "mtime": 1785340086.8070178, + "ast_hash": "66d03d7647c8e438164feaf5b922d44a", + "semantic_hash": "66d03d7647c8e438164feaf5b922d44a" + }, + "ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md": { + "mtime": 1785340086.7938466, + "ast_hash": "e175e436acacf76c814d83532d0b662c", + "semantic_hash": "e175e436acacf76c814d83532d0b662c" + }, + "linux/CMakeLists.txt": { + "mtime": 1785340086.8016346, + "ast_hash": "6f22b3e9eb6b57b2ee698580ed7f4ca4", + "semantic_hash": "6f22b3e9eb6b57b2ee698580ed7f4ca4" + }, + "linux/flutter/CMakeLists.txt": { + "mtime": 1785340086.801835, + "ast_hash": "46690fb8ffaf7d227d8bc4713f31140d", + "semantic_hash": "46690fb8ffaf7d227d8bc4713f31140d" + }, + "linux/runner/CMakeLists.txt": { + "mtime": 1785340086.8006868, + "ast_hash": "6d75431dc21756981b53a7494c836311", + "semantic_hash": "6d75431dc21756981b53a7494c836311" + }, + "pubspec.yaml": { + "mtime": 1785340835.8658357, + "ast_hash": "211010e80bde4eb0305d2dbaa784ef64", + "semantic_hash": "211010e80bde4eb0305d2dbaa784ef64" + }, + "android/app/src/main/res/mipmap-hdpi/ic_launcher.png": { + "mtime": 1785340086.78413, + "ast_hash": "13e9c72ec37fac220397aa819fa1ef2d", + "semantic_hash": "13e9c72ec37fac220397aa819fa1ef2d" + }, + "android/app/src/main/res/mipmap-mdpi/ic_launcher.png": { + "mtime": 1785340086.7838757, + "ast_hash": "6270344430679711b81476e29878caa7", + "semantic_hash": "6270344430679711b81476e29878caa7" + }, + "android/app/src/main/res/mipmap-xhdpi/ic_launcher.png": { + "mtime": 1785340086.7851303, + "ast_hash": "a0a8db5985280b3679d99a820ae2db79", + "semantic_hash": "a0a8db5985280b3679d99a820ae2db79" + }, + "android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png": { + "mtime": 1785340086.7848864, + "ast_hash": "afe1b655b9f32da22f9a4301bb8e6ba8", + "semantic_hash": "afe1b655b9f32da22f9a4301bb8e6ba8" + }, + "android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png": { + "mtime": 1785340086.7843785, + "ast_hash": "57838d52c318faff743130c3fcfae0c6", + "semantic_hash": "57838d52c318faff743130c3fcfae0c6" + }, + "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png": { + "mtime": 1785340086.7931983, + "ast_hash": "c785f8932297af4acd5f5ccb7630f01c", + "semantic_hash": "c785f8932297af4acd5f5ccb7630f01c" + }, + "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png": { + "mtime": 1785340086.7930222, + "ast_hash": "a2f8558fb1d42514111fbbb19fb67314", + "semantic_hash": "a2f8558fb1d42514111fbbb19fb67314" + }, + "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png": { + "mtime": 1785340086.7916794, + "ast_hash": "2247a840b6ee72b8a069208af170e5b1", + "semantic_hash": "2247a840b6ee72b8a069208af170e5b1" + }, + "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png": { + "mtime": 1785340086.7926364, + "ast_hash": "1b3b1538136316263c7092951e923e9d", + "semantic_hash": "1b3b1538136316263c7092951e923e9d" + }, + "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png": { + "mtime": 1785340086.7907953, + "ast_hash": "be8887071dd7ec39cb754d236aa9584f", + "semantic_hash": "be8887071dd7ec39cb754d236aa9584f" + }, + "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png": { + "mtime": 1785340086.791861, + "ast_hash": "043119ef4faa026ff82bd03f241e5338", + "semantic_hash": "043119ef4faa026ff82bd03f241e5338" + }, + "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png": { + "mtime": 1785340086.7922173, + "ast_hash": "2b1452c4c1bda6177b4fbbb832df217f", + "semantic_hash": "2b1452c4c1bda6177b4fbbb832df217f" + }, + "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png": { + "mtime": 1785340086.7903898, + "ast_hash": "2247a840b6ee72b8a069208af170e5b1", + "semantic_hash": "2247a840b6ee72b8a069208af170e5b1" + }, + "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png": { + "mtime": 1785340086.791013, + "ast_hash": "8245359312aea1b0d2412f79a07b0ca5", + "semantic_hash": "8245359312aea1b0d2412f79a07b0ca5" + }, + "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png": { + "mtime": 1785340086.7933817, + "ast_hash": "5b3c0902200ce596e9848f22e1f0fe0e", + "semantic_hash": "5b3c0902200ce596e9848f22e1f0fe0e" + }, + "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png": { + "mtime": 1785340086.7928097, + "ast_hash": "5b3c0902200ce596e9848f22e1f0fe0e", + "semantic_hash": "5b3c0902200ce596e9848f22e1f0fe0e" + }, + "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png": { + "mtime": 1785340086.790574, + "ast_hash": "e419d22a37bc40ba185aca1acb6d4ac6", + "semantic_hash": "e419d22a37bc40ba185aca1acb6d4ac6" + }, + "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png": { + "mtime": 1785340086.7901921, + "ast_hash": "36c0d7a7132bdde18898ffdfcfcdc4d2", + "semantic_hash": "36c0d7a7132bdde18898ffdfcfcdc4d2" + }, + "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png": { + "mtime": 1785340086.7911851, + "ast_hash": "643842917530acf4c5159ae851b0baf2", + "semantic_hash": "643842917530acf4c5159ae851b0baf2" + }, + "ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png": { + "mtime": 1785340086.7920432, + "ast_hash": "665cb5e3c5729da6d639d26eff47a503", + "semantic_hash": "665cb5e3c5729da6d639d26eff47a503" + }, + "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png": { + "mtime": 1785340086.7944818, + "ast_hash": "978c1bee49d7ad5fc1a4d81099b13e18", + "semantic_hash": "978c1bee49d7ad5fc1a4d81099b13e18" + }, + "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png": { + "mtime": 1785340086.7943223, + "ast_hash": "978c1bee49d7ad5fc1a4d81099b13e18", + "semantic_hash": "978c1bee49d7ad5fc1a4d81099b13e18" + }, + "ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png": { + "mtime": 1785340086.793687, + "ast_hash": "978c1bee49d7ad5fc1a4d81099b13e18", + "semantic_hash": "978c1bee49d7ad5fc1a4d81099b13e18" + } +} \ No newline at end of file diff --git a/ios/.gitignore b/ios/.gitignore new file mode 100644 index 0000000..7a7f987 --- /dev/null +++ b/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..391a902 --- /dev/null +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + + diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..206b28d --- /dev/null +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,644 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 7884E8682EC3CC0700C636F2 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7884E8672EC3CC0400C636F2 /* SceneDelegate.swift */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7884E8672EC3CC0400C636F2 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */, + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 7884E8672EC3CC0400C636F2 /* SceneDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + ); + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + 7884E8682EC3CC0700C636F2 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.conversionpath.ratuneMobile; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.conversionpath.ratuneMobile.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.conversionpath.ratuneMobile.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.conversionpath.ratuneMobile.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.conversionpath.ratuneMobile; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.conversionpath.ratuneMobile; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { + isa = XCSwiftPackageProductDependency; + productName = FlutterGeneratedPluginSwiftPackage; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..c3fedb2 --- /dev/null +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..c30b367 --- /dev/null +++ b/ios/Runner/AppDelegate.swift @@ -0,0 +1,16 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } + + func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) { + GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry) + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000..dc9ada4 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 0000000..7353c41 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000..797d452 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000..6ed2d93 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000..4cd7b00 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000..fe73094 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 0000000..321773c Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 0000000..797d452 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000..502f463 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000..0ec3034 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000..0ec3034 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000..e9f5fea Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000..84ac32a Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000..8953cba Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000..0467bf1 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist new file mode 100644 index 0000000..3df94db --- /dev/null +++ b/ios/Runner/Info.plist @@ -0,0 +1,74 @@ + + + + + UIBackgroundModes + + audio + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Ratune Mobile + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ratune_mobile + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneConfigurationName + flutter + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/ios/Runner/SceneDelegate.swift b/ios/Runner/SceneDelegate.swift new file mode 100644 index 0000000..b9ce8ea --- /dev/null +++ b/ios/Runner/SceneDelegate.swift @@ -0,0 +1,6 @@ +import Flutter +import UIKit + +class SceneDelegate: FlutterSceneDelegate { + +} diff --git a/ios/RunnerTests/RunnerTests.swift b/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..86a7c3b --- /dev/null +++ b/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/lib/downloads/download_manager.dart b/lib/downloads/download_manager.dart new file mode 100644 index 0000000..64874be --- /dev/null +++ b/lib/downloads/download_manager.dart @@ -0,0 +1,365 @@ +// Callback fields are assigned from named required params, which can't be +// private initializing formals. +// ignore_for_file: prefer_initializing_formals + +import 'dart:convert'; +import 'dart:io'; + +import 'package:dio/dio.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:path_provider/path_provider.dart'; + +import '../settings/settings_store.dart'; +import '../subsonic/models.dart'; +import '../subsonic/subsonic_client.dart'; + +/// Lifecycle of a single track download. +enum DownloadStatus { queued, downloading, done, failed } + +/// Per-song download record. Only [DownloadStatus.done] entries are persisted +/// to the manifest; queued/downloading/failed entries are in-memory only. +class DownloadInfo { + const DownloadInfo({ + required this.song, + required this.status, + this.path, + this.bitRate, + this.format, + this.sizeBytes, + this.progress = 0, + this.error, + }); + + final Song song; + final DownloadStatus status; + + /// Absolute path to the downloaded file (set once [status] is done). + final String? path; + final int? bitRate; + final String? format; + final int? sizeBytes; + + /// 0.0–1.0 while downloading (0 if the total size is unknown mid-flight). + final double progress; + final String? error; + + bool get isDone => status == DownloadStatus.done; + bool get isActive => + status == DownloadStatus.queued || status == DownloadStatus.downloading; + + DownloadInfo copyWith({ + DownloadStatus? status, + String? path, + int? bitRate, + String? format, + int? sizeBytes, + double? progress, + String? error, + }) => + DownloadInfo( + song: song, + status: status ?? this.status, + path: path ?? this.path, + bitRate: bitRate ?? this.bitRate, + format: format ?? this.format, + sizeBytes: sizeBytes ?? this.sizeBytes, + progress: progress ?? this.progress, + error: error, + ); + + Map toJson() => { + 'song': song.toJson(), + 'path': path, + if (bitRate != null) 'bitRate': bitRate, + if (format != null) 'format': format, + if (sizeBytes != null) 'sizeBytes': sizeBytes, + }; + + /// Rebuild a completed record from the manifest. + factory DownloadInfo.fromJson(Map j) => DownloadInfo( + song: Song.fromJson((j['song'] as Map).cast()), + status: DownloadStatus.done, + path: j['path'] as String?, + bitRate: (j['bitRate'] as num?)?.toInt(), + format: j['format'] as String?, + sizeBytes: (j['sizeBytes'] as num?)?.toInt(), + progress: 1, + ); +} + +/// Snapshot of all known downloads for the active server, keyed by song id. +class DownloadState { + const DownloadState({this.byId = const {}}); + + final Map byId; + + DownloadInfo? operator [](String id) => byId[id]; + + bool isDownloaded(String id) => byId[id]?.isDone ?? false; + + List get completed => + byId.values.where((d) => d.isDone).toList(); + + int get totalBytes => completed.fold(0, (sum, d) => sum + (d.sizeBytes ?? 0)); + + DownloadState copyWith({Map? byId}) => + DownloadState(byId: byId ?? this.byId); +} + +/// Downloads tracks to disk for offline playback. Files live under +/// `/downloads//` and a `downloads_.json` +/// manifest survives restarts. Modeled on `library/library_index.dart` +/// (per-server keying, atomic temp+rename writes, a generation guard so a +/// server switch mid-download can't clobber the new server's manifest). +class DownloadController extends StateNotifier { + DownloadController({ + required SubsonicClient? Function() clientGetter, + required AppSettings Function() settingsGetter, + required String? Function() serverKeyGetter, + }) : _clientGetter = clientGetter, + _settingsGetter = settingsGetter, + _serverKeyGetter = serverKeyGetter, + super(const DownloadState()) { + reloadForServer(); + } + + final SubsonicClient? Function() _clientGetter; + final AppSettings Function() _settingsGetter; + final String? Function() _serverKeyGetter; + + final Dio _dio = Dio(BaseOptions( + receiveTimeout: const Duration(minutes: 5), + headers: {'User-Agent': 'ratune-mobile'}, + )); + + static const int _maxConcurrent = 3; + + int _generation = 0; + String? _loadedKey; + final List _queue = []; + int _active = 0; + + /// Path to a downloaded file if (and only if) it is fully downloaded — read + /// synchronously by the playback stream-URI resolver. + String? localPathFor(String id) { + final info = state.byId[id]; + return info != null && info.isDone ? info.path : null; + } + + bool isDownloaded(String id) => state.isDownloaded(id); + + // ---- Server switching / manifest load ---------------------------------- + + Future _downloadsDir(String key) async { + final dir = await getApplicationSupportDirectory(); + final d = Directory('${dir.path}/downloads/$key'); + if (!await d.exists()) await d.create(recursive: true); + return d; + } + + Future _manifestFile(String key) async { + final dir = await getApplicationSupportDirectory(); + return File('${dir.path}/downloads_$key.json'); + } + + /// Load (or clear) the manifest when the active server changes. Verifies each + /// file still exists on disk and drops stale entries. + Future reloadForServer() async { + final key = _serverKeyGetter(); + if (key == _loadedKey) return; + _generation++; + final gen = _generation; + _loadedKey = key; + _queue.clear(); + + if (key == null) { + state = const DownloadState(); + return; + } + + try { + final file = await _manifestFile(key); + if (!await file.exists()) { + if (gen == _generation) state = const DownloadState(); + return; + } + final raw = jsonDecode(await file.readAsString()); + final byId = {}; + if (raw is List) { + for (final e in raw.whereType()) { + final info = DownloadInfo.fromJson(e.cast()); + final path = info.path; + if (path != null && await File(path).exists()) { + byId[info.song.id] = info; + } + } + } + if (gen == _generation) state = DownloadState(byId: byId); + } catch (_) { + if (gen == _generation) state = const DownloadState(); + } + } + + // ---- Enqueue / download ------------------------------------------------- + + /// Queue [song] for download (no-op if already downloaded or in flight). + void download(Song song) { + if (song.id.isEmpty) return; + final existing = state.byId[song.id]; + if (existing != null && (existing.isDone || existing.isActive)) return; + if (_clientGetter() == null) return; // offline — nothing to fetch. + + _put(DownloadInfo(song: song, status: DownloadStatus.queued)); + _queue.add(song.id); + _pump(); + } + + /// Queue every track (album / playlist "download all"). + void downloadAll(List songs) { + for (final s in songs) { + download(s); + } + } + + void _pump() { + while (_active < _maxConcurrent && _queue.isNotEmpty) { + final id = _queue.removeAt(0); + final info = state.byId[id]; + if (info == null || info.status != DownloadStatus.queued) continue; + _active++; + _run(info.song).whenComplete(() { + _active--; + _pump(); + }); + } + } + + Future _run(Song song) async { + final gen = _generation; + final client = _clientGetter(); + final key = _serverKeyGetter(); + if (client == null || key == null) { + _put(state.byId[song.id]! + .copyWith(status: DownloadStatus.failed, error: 'Not connected')); + return; + } + final settings = _settingsGetter(); + final rate = settings.downloadMaxBitRate; + final format = settings.downloadFormat; + final uri = client.streamUri(song.id, maxBitRate: rate, format: format); + + // Choose a sensible extension; the stored path is authoritative regardless. + final ext = format ?? (rate > 0 ? 'mp3' : (song.suffix ?? 'mp3')); + + try { + _put(state.byId[song.id]! + .copyWith(status: DownloadStatus.downloading, progress: 0)); + + final dir = await _downloadsDir(key); + final finalPath = '${dir.path}/${song.id}.$ext'; + final tmpPath = '$finalPath.part'; + + await _dio.downloadUri( + uri, + tmpPath, + onReceiveProgress: (received, total) { + if (gen != _generation) return; + if (total > 0) { + final cur = state.byId[song.id]; + if (cur != null && cur.status == DownloadStatus.downloading) { + _put(cur.copyWith(progress: received / total)); + } + } + }, + ); + + if (gen != _generation) { + // Server switched mid-download — discard the partial file. + await File(tmpPath).delete().catchError((_) => File(tmpPath)); + return; + } + + final tmp = File(tmpPath); + await tmp.rename(finalPath); + final size = await File(finalPath).length(); + + _put(DownloadInfo( + song: song, + status: DownloadStatus.done, + path: finalPath, + bitRate: rate == 0 ? null : rate, + format: format, + sizeBytes: size, + progress: 1, + )); + await _persist(); + } catch (e) { + if (gen != _generation) return; + final cur = state.byId[song.id]; + if (cur != null) { + _put(cur.copyWith(status: DownloadStatus.failed, error: e.toString())); + } + } + } + + // ---- Remove ------------------------------------------------------------- + + /// Delete a single download (file + manifest entry). + Future remove(String songId) async { + final info = state.byId[songId]; + if (info == null) return; + _queue.remove(songId); + if (info.path != null) { + try { + final f = File(info.path!); + if (await f.exists()) await f.delete(); + } catch (_) {} + } + final next = Map.from(state.byId)..remove(songId); + state = state.copyWith(byId: next); + await _persist(); + } + + /// Delete every download for the active server. + Future clearAll() async { + _queue.clear(); + final key = _serverKeyGetter(); + for (final info in state.byId.values) { + if (info.path != null) { + try { + final f = File(info.path!); + if (await f.exists()) await f.delete(); + } catch (_) {} + } + } + state = const DownloadState(); + if (key != null) { + try { + final file = await _manifestFile(key); + if (await file.exists()) await file.delete(); + } catch (_) {} + } + } + + // ---- Internals ---------------------------------------------------------- + + void _put(DownloadInfo info) { + state = state.copyWith( + byId: {...state.byId, info.song.id: info}, + ); + } + + /// Atomic write of the completed-downloads manifest (temp + rename). + Future _persist() async { + final key = _serverKeyGetter(); + if (key == null) return; + try { + final file = await _manifestFile(key); + final tmp = File('${file.path}.tmp'); + await tmp.writeAsString( + jsonEncode(state.completed.map((d) => d.toJson()).toList()), + ); + await tmp.rename(file.path); + } catch (_) {} + } +} diff --git a/lib/history/play_history.dart b/lib/history/play_history.dart new file mode 100644 index 0000000..b5729f1 --- /dev/null +++ b/lib/history/play_history.dart @@ -0,0 +1,244 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; +import 'dart:math'; + +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:path_provider/path_provider.dart'; + +import '../subsonic/models.dart'; + +/// One play event, mirroring Ratune's `PlayRecord` (`history.rs`). +class PlayRecord { + PlayRecord({ + required this.songId, + required this.title, + required this.playedAt, + this.album, + this.albumId, + this.artist, + this.artistId, + this.coverArt, + this.duration, + }); + + final String songId; + final String title; + final DateTime playedAt; + final String? album; + final String? albumId; + final String? artist; + final String? artistId; + final String? coverArt; + final int? duration; + + Map toJson() => { + 'songId': songId, + 'title': title, + 'playedAt': playedAt.toIso8601String(), + 'album': album, + 'albumId': albumId, + 'artist': artist, + 'artistId': artistId, + 'coverArt': coverArt, + 'duration': duration, + }; + + factory PlayRecord.fromJson(Map j) => PlayRecord( + songId: j['songId'] as String? ?? '', + title: j['title'] as String? ?? 'Untitled', + playedAt: DateTime.tryParse(j['playedAt'] as String? ?? '') ?? + DateTime.fromMillisecondsSinceEpoch(0), + album: j['album'] as String?, + albumId: j['albumId'] as String?, + artist: j['artist'] as String?, + artistId: j['artistId'] as String?, + coverArt: j['coverArt'] as String?, + duration: (j['duration'] as num?)?.toInt(), + ); + + /// Reconstruct a playable [Song] from this record (enough for streaming). + Song toSong() => Song( + id: songId, + title: title, + album: album, + albumId: albumId, + artist: artist, + artistId: artistId, + coverArt: coverArt, + duration: duration, + ); + + factory PlayRecord.fromSong(Song s, DateTime at) => PlayRecord( + songId: s.id, + title: s.title ?? 'Untitled', + playedAt: at, + album: s.album, + albumId: s.albumId, + artist: s.artist, + artistId: s.artistId, + coverArt: s.coverArt, + duration: s.duration, + ); +} + +/// A rediscover suggestion — an artist not heard recently. +class RediscoverArtist { + RediscoverArtist({ + required this.artistId, + required this.name, + required this.lastPlayed, + required this.playCount, + }); + + final String artistId; + final String name; + final DateTime lastPlayed; + final int playCount; +} + +/// Owns the persistent play history (newest first, capped at [_maxRecords]). +class HistoryController extends StateNotifier> { + HistoryController() : super(const []) { + _load(); + } + + static const int _maxRecords = 10000; + File? _file; + + Future _load() async { + try { + final dir = await getApplicationSupportDirectory(); + _file = File('${dir.path}/play_history.json'); + if (await _file!.exists()) { + final raw = jsonDecode(await _file!.readAsString()); + if (raw is List) { + state = raw + .whereType() + .map((e) => PlayRecord.fromJson(e.cast())) + .toList(); + } + } + } catch (_) { + // Corrupt/missing history is non-fatal — start empty. + } + } + + Future record(Song song, {DateTime? at}) async { + if (song.id.isEmpty) return; + final rec = PlayRecord.fromSong(song, at ?? DateTime.now()); + final next = [rec, ...state]; + if (next.length > _maxRecords) next.removeRange(_maxRecords, next.length); + state = next; + unawaited(_persist()); + } + + Future _persist() async { + try { + await _file?.writeAsString( + jsonEncode(state.map((e) => e.toJson()).toList()), + ); + } catch (_) {} + } +} + +// ---- Pure derivations over a history list ------------------------------- + +/// Distinct recently-played songs (most recent first). +List recentSongs(List history, {int limit = 20}) { + final seen = {}; + final out = []; + for (final r in history) { + if (seen.add(r.songId)) { + out.add(r); + if (out.length >= limit) break; + } + } + return out; +} + +/// Distinct recently-played albums (most recent first). +List recentAlbums(List history, {int limit = 12}) { + final seen = {}; + final out = []; + for (final r in history) { + final key = r.albumId; + if (key == null) continue; + if (seen.add(key)) { + out.add(r); + if (out.length >= limit) break; + } + } + return out; +} + +/// Rediscover: artists you've heard before but aren't listening to now, biased +/// toward low play counts, then sampled for variety (Ratune +/// `history.rs:101-167`). [seed] drives the re-roll. +/// +/// The desktop original only surfaces artists last heard more than [minDays] +/// days ago. That's dead weight on a young history (everything is recent), so +/// we fall back to your least-recently-played artists — minus the couple you +/// just heard — whenever too few have genuinely aged out. +List rediscover( + List history, { + int count = 6, + int minDays = 3, + int seed = 0, + DateTime? now, +}) { + final ref = now ?? DateTime.now(); + final cutoff = ref.subtract(Duration(days: minDays)); + + final byArtist = {}; + for (final r in history) { + final id = r.artistId; + if (id == null || r.artist == null) continue; + final existing = byArtist[id]; + if (existing == null) { + byArtist[id] = RediscoverArtist( + artistId: id, + name: r.artist!, + lastPlayed: r.playedAt, + playCount: 1, + ); + } else { + byArtist[id] = RediscoverArtist( + artistId: id, + name: existing.name, + lastPlayed: + r.playedAt.isAfter(existing.lastPlayed) ? r.playedAt : existing.lastPlayed, + playCount: existing.playCount + 1, + ); + } + } + + final all = byArtist.values.toList(); + if (all.length <= 1) return const []; + + // Primary: artists genuinely not heard in the last [minDays]. + var candidates = all.where((a) => a.lastPlayed.isBefore(cutoff)).toList(); + + // Fallback for young histories: everything except the artists you've heard + // most recently (so we don't suggest what's playing now), which keeps the + // "you're neglecting these" spirit without an absolute age wall. + if (candidates.length < count) { + final byRecency = [...all]..sort((a, b) => b.lastPlayed.compareTo(a.lastPlayed)); + final recentlyHeard = + byRecency.take(2).map((a) => a.artistId).toSet(); + candidates = + all.where((a) => !recentlyHeard.contains(a.artistId)).toList(); + } + + // Prefer low play counts, then longest since last heard. + candidates.sort((a, b) { + final byCount = a.playCount.compareTo(b.playCount); + if (byCount != 0) return byCount; + return a.lastPlayed.compareTo(b.lastPlayed); + }); + + // Weighted variety: sample from the top slice using the seed. + final pool = candidates.take(count * 3).toList(); + pool.shuffle(Random(seed)); + return pool.take(count).toList(); +} diff --git a/lib/library/library_index.dart b/lib/library/library_index.dart new file mode 100644 index 0000000..04c07c2 --- /dev/null +++ b/lib/library/library_index.dart @@ -0,0 +1,193 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:crypto/crypto.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:path_provider/path_provider.dart'; + +import '../subsonic/models.dart'; +import '../subsonic/subsonic_client.dart'; + +/// Snapshot of the library-song index: the flat song list plus build progress. +class LibraryIndexState { + const LibraryIndexState({ + this.songs = const [], + this.building = false, + this.done = 0, + this.total = 0, + this.error, + }); + + final List songs; + final bool building; + + /// Albums crawled so far / total albums (drives "Indexing 120/340…"). + final int done; + final int total; + final String? error; + + bool get isEmpty => songs.isEmpty; + + LibraryIndexState copyWith({ + List? songs, + bool? building, + int? done, + int? total, + String? error, + }) => + LibraryIndexState( + songs: songs ?? this.songs, + building: building ?? this.building, + done: done ?? this.done, + total: total ?? this.total, + error: error, + ); +} + +/// Builds and caches a flat "all songs" index — Subsonic has no all-songs +/// endpoint, so we crawl every album (mirrors Ratune's `library_index` / +/// `fetch_all_library_songs`). The cache is keyed to the server so switching +/// servers never serves a stale catalog, and writes are atomic so an +/// interrupted crawl can't leave a truncated file. +class LibraryIndexController extends StateNotifier { + LibraryIndexController(this._clientGetter) : super(const LibraryIndexState()); + + final SubsonicClient? Function() _clientGetter; + + static const int _albumParallelism = 12; // Ratune's album_parallelism. + static const int _pageSize = 500; // Subsonic getAlbumList2 cap. + static const Duration _ttl = Duration(hours: 24); + + /// Bumped whenever the server changes / disconnects. Every async step checks + /// it and bails, so a build against the old server can't clobber the new one. + int _generation = 0; + + /// Server changed or went offline: cancel any in-flight build and drop the + /// in-memory index. Wired to the connection listener in `providers.dart`. + void onConnectionChanged() { + _generation++; + state = const LibraryIndexState(); + } + + String _keyFor(SubsonicClient c) => + md5.convert(utf8.encode('${c.baseUrl}|${c.username}')).toString(); + + Future _cacheFile(SubsonicClient c) async { + final dir = await getApplicationSupportDirectory(); + return File('${dir.path}/library_index_${_keyFor(c)}.json'); + } + + /// Load from a fresh, server-matching cache if present, otherwise [build]. + /// Called by the Tracks view on first display; a no-op if already built or + /// building. + Future ensureBuilt() async { + if (state.building || state.songs.isNotEmpty) return; + final client = _clientGetter(); + if (client == null) return; + final gen = _generation; + + try { + final file = await _cacheFile(client); + if (await file.exists()) { + final fresh = + DateTime.now().difference((await file.stat()).modified) < _ttl; + if (fresh) { + final raw = jsonDecode(await file.readAsString()); + if (raw is List && gen == _generation) { + state = state.copyWith( + songs: raw + .whereType() + .map((e) => Song.fromJson(e.cast())) + .toList(), + ); + return; + } + } + } + } catch (_) { + // Missing/corrupt cache is non-fatal — fall through to a rebuild. + } + + if (gen != _generation) return; + await build(); + } + + /// Force a rebuild, ignoring the cache (the refresh affordance). + Future refresh() async { + state = const LibraryIndexState(); + await build(); + } + + Future build() async { + final client = _clientGetter(); + if (client == null) return; + final gen = _generation; + state = const LibraryIndexState(building: true); + + try { + // 1. Page through every album (no silent cap — loop until a short page). + final albums = []; + var offset = 0; + while (true) { + if (gen != _generation) return; + final page = await client.getAlbumList2(size: _pageSize, offset: offset); + albums.addAll(page); + if (page.length < _pageSize) break; + offset += _pageSize; + } + if (gen != _generation) return; + state = state.copyWith(total: albums.length); + + // 2. Fetch each album's songs with bounded concurrency; dedupe by id. + final byId = {}; + var done = 0; + for (var i = 0; i < albums.length; i += _albumParallelism) { + if (gen != _generation) return; + final batch = albums.skip(i).take(_albumParallelism).toList(); + final results = await Future.wait(batch.map((a) async { + try { + return (await client.getAlbum(a.id)).songs; + } catch (_) { + return const []; // soft-fail a single album, keep crawling. + } + })); + for (final songs in results) { + for (final s in songs) { + if (s.id.isNotEmpty) byId[s.id] = s; + } + } + done += batch.length; + if (gen != _generation) return; + state = state.copyWith(done: done); + } + + final songs = byId.values.toList() + ..sort((a, b) => (a.title ?? '') + .toLowerCase() + .compareTo((b.title ?? '').toLowerCase())); + + if (gen != _generation) return; + state = state.copyWith(songs: songs, building: false, done: done); + await _persist(client, songs, gen); + } catch (e) { + if (gen != _generation) return; + state = state.copyWith(building: false, error: e.toString()); + } + } + + /// Atomic write: temp file then rename, so a crash mid-write can't truncate + /// the cache. Soft-fail — a missing cache just means a rebuild next launch. + Future _persist( + SubsonicClient client, + List songs, + int gen, + ) async { + try { + if (gen != _generation) return; + final file = await _cacheFile(client); + final tmp = File('${file.path}.tmp'); + await tmp.writeAsString(jsonEncode(songs.map((s) => s.toJson()).toList())); + await tmp.rename(file.path); + } catch (_) {} + } +} diff --git a/lib/main.dart b/lib/main.dart new file mode 100644 index 0000000..9055442 --- /dev/null +++ b/lib/main.dart @@ -0,0 +1,47 @@ +import 'dart:io' show Platform; + +import 'package:flutter/foundation.dart' show kIsWeb; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:just_audio_background/just_audio_background.dart'; + +import 'shell/app_shell.dart'; +import 'theme/accent.dart'; +import 'theme/app_theme.dart'; + +Future main() async { + WidgetsFlutterBinding.ensureInitialized(); + // Lock-screen / notification transport is only available where audio_service + // has a backend — Android/iOS. Skipping init elsewhere keeps the Linux dev + // target (and tests) running. + if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) { + // Never let background-audio setup block the first frame: on failure or + // hang we still start the app (playback just loses lock-screen controls). + try { + await JustAudioBackground.init( + androidNotificationChannelId: 'com.conversionpath.ratune_mobile.audio', + androidNotificationChannelName: 'Ratune playback', + androidNotificationOngoing: true, + ).timeout(const Duration(seconds: 8)); + } catch (e, st) { + debugPrint('JustAudioBackground.init failed: $e\n$st'); + } + } + runApp(const ProviderScope(child: RatuneApp())); +} + +class RatuneApp extends ConsumerWidget { + const RatuneApp({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + // The theme rebuilds whenever the album-art accent changes. + final accent = ref.watch(accentProvider); + return MaterialApp( + title: 'Ratune', + debugShowCheckedModeBanner: false, + theme: buildRatuneTheme(accent), + home: const AppShell(), + ); + } +} diff --git a/lib/playback/playback_engine.dart b/lib/playback/playback_engine.dart new file mode 100644 index 0000000..2e25ab6 --- /dev/null +++ b/lib/playback/playback_engine.dart @@ -0,0 +1,326 @@ +// Named constructor params can't be private, so initializing formals aren't +// possible for the private callback fields below. +// ignore_for_file: prefer_initializing_formals + +import 'dart:io' show Platform; + +import 'package:flutter/foundation.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:just_audio/just_audio.dart'; +import 'package:just_audio_background/just_audio_background.dart'; + +import '../subsonic/models.dart'; + +/// Immutable snapshot of the player, mirroring Ratune's `QueueState` + +/// player-event stream (`ratune-player/src/engine.rs`). +class PlaybackState { + const PlaybackState({ + this.queue = const [], + this.currentIndex, + this.playing = false, + this.position = Duration.zero, + this.duration = Duration.zero, + this.shuffle = false, + this.loop = LoopMode.off, + this.supported = true, + }); + + final List queue; + final int? currentIndex; + final bool playing; + final Duration position; + final Duration duration; + final bool shuffle; + final LoopMode loop; + + /// False on platforms without a just_audio backend (e.g. Linux desktop + /// without media_kit). The UI still reflects the selected track; only audio + /// output is unavailable. + final bool supported; + + Song? get current => + (currentIndex != null && currentIndex! >= 0 && currentIndex! < queue.length) + ? queue[currentIndex!] + : null; + + double get progress { + final total = duration.inMilliseconds; + if (total <= 0) return 0; + return (position.inMilliseconds / total).clamp(0.0, 1.0); + } + + PlaybackState copyWith({ + List? queue, + int? currentIndex, + bool? playing, + Duration? position, + Duration? duration, + bool? shuffle, + LoopMode? loop, + bool? supported, + }) { + return PlaybackState( + queue: queue ?? this.queue, + currentIndex: currentIndex ?? this.currentIndex, + playing: playing ?? this.playing, + position: position ?? this.position, + duration: duration ?? this.duration, + shuffle: shuffle ?? this.shuffle, + loop: loop ?? this.loop, + supported: supported ?? this.supported, + ); + } +} + +/// Owns the just_audio player and translates Subsonic songs into a gapless +/// queue. Playback methods no-op where audio is unsupported, but queue/current +/// state and album-art accent extraction still run so the UI is fully alive on +/// the Linux dev target. +class PlaybackController extends StateNotifier { + PlaybackController({ + required Uri? Function(Song) streamUriFor, + required Uri? Function(Song) coverArtUriFor, + required void Function(Uri artUri) onArt, + required void Function(Song song) onPlay, + }) : _streamUriFor = streamUriFor, + _coverArtUriFor = coverArtUriFor, + _onArt = onArt, + _onPlay = onPlay, + super(PlaybackState(supported: _audioSupported)) { + if (_audioSupported) { + _player = AudioPlayer(); + _wireStreams(); + } + } + + final Uri? Function(Song) _streamUriFor; + final Uri? Function(Song) _coverArtUriFor; + final void Function(Uri artUri) _onArt; + final void Function(Song song) _onPlay; + + AudioPlayer? _player; + + static bool get _audioSupported => + !kIsWeb && (Platform.isAndroid || Platform.isIOS || Platform.isMacOS); + + void _wireStreams() { + final player = _player!; + player.currentIndexStream.listen((i) { + if (i == null) return; + state = state.copyWith(currentIndex: i); + _notifyCurrent(); + }); + player.playerStateStream.listen((s) { + state = state.copyWith(playing: s.playing); + }); + player.positionStream.listen((p) { + state = state.copyWith(position: p); + }); + player.durationStream.listen((d) { + if (d != null) state = state.copyWith(duration: d); + }); + } + + /// Id of the song we last ran play side effects for. Queue edits shift + /// `currentIndex` (and re-emit `currentIndexStream`) without changing the + /// playing track, so we dedupe on song id to avoid re-scrobbling / re-running + /// accent extraction when the current song hasn't actually changed. + String? _lastNotifiedId; + + /// Monotonic tag counter — every AudioSource gets a globally-unique MediaItem + /// id even when the same song appears in the queue twice. just_audio_background + /// keys its notification off the tag id, so duplicate ids would confuse it. + int _tagSeq = 0; + + void _notifyCurrent() { + final song = state.current; + if (song == null) return; + if (song.id == _lastNotifiedId) return; + _lastNotifiedId = song.id; + final art = _coverArtUriFor(song); + if (art != null) _onArt(art); + _onPlay(song); + } + + AudioSource _sourceFor(Song song) { + final uri = _streamUriFor(song)!; + final art = _coverArtUriFor(song); + return AudioSource.uri( + uri, + tag: MediaItem( + id: '${song.id}#${_tagSeq++}', + title: song.title ?? 'Unknown', + album: song.album, + artist: song.artist, + duration: + song.duration != null ? Duration(seconds: song.duration!) : null, + artUri: art, + ), + ); + } + + /// Replace the queue with [songs] and start at [startIndex]. + /// + /// `state.queue` is set to exactly the *streamable* subset that gets loaded + /// into the player, so queue index == player source index 1:1. Every later + /// queue mutation (`playNext` / `addToQueue` / `removeAt`) relies on that + /// invariant to stay aligned. + Future playSongs(List songs, {int startIndex = 0}) async { + if (songs.isEmpty) return; + + final streamable = songs.where((s) => _streamUriFor(s) != null).toList(); + if (streamable.isEmpty) { + // Not connected / nothing playable — reflect the selection for the UI + // only; no player sources exist to mutate. + state = state.copyWith( + queue: songs, + currentIndex: startIndex.clamp(0, songs.length - 1), + position: Duration.zero, + ); + _lastNotifiedId = null; + _notifyCurrent(); + return; + } + + // Remap the requested start into the filtered list (the chosen song may + // itself have been unstreamable). + final target = songs[startIndex.clamp(0, songs.length - 1)]; + final targetIndex = streamable.indexOf(target); + final start = + targetIndex >= 0 ? targetIndex : startIndex.clamp(0, streamable.length - 1); + + state = state.copyWith( + queue: streamable, + currentIndex: start, + position: Duration.zero, + ); + // An explicit play should always (re)scrobble, even if it's the same song. + _lastNotifiedId = null; + + final player = _player; + if (player == null) { + // Linux/desktop: no streams will fire, so reflect the selection (art + + // history) directly. UI-only, no audio output. + _notifyCurrent(); + return; + } + await player.setAudioSources( + streamable.map(_sourceFor).toList(), + initialIndex: start, + ); + await player.play(); + // currentIndexStream fires _notifyCurrent for the started track. + } + + /// Insert [song] right after the current track (Ratune's "play next"). + /// Falls back to [playSongs] when nothing is playing. + Future playNext(Song song) async { + if (_streamUriFor(song) == null) return; + final q = state.queue; + final current = state.currentIndex; + if (q.isEmpty || current == null) { + await playSongs([song]); + return; + } + final at = (current + 1).clamp(0, q.length); + state = state.copyWith(queue: [...q]..insert(at, song)); + await _player?.insertAudioSource(at, _sourceFor(song)); + } + + /// Append [song] to the end of the queue. + Future addToQueue(Song song) async { + if (_streamUriFor(song) == null) return; + final q = state.queue; + if (q.isEmpty || state.currentIndex == null) { + await playSongs([song]); + return; + } + state = state.copyWith(queue: [...q, song]); + await _player?.addAudioSource(_sourceFor(song)); + } + + /// Remove the queue entry at [index], keeping `state.queue` and the player + /// playlist aligned. On mobile just_audio adjusts its own current index and + /// re-emits `currentIndexStream`; the id dedupe in [_notifyCurrent] avoids a + /// spurious re-scrobble when the playing track didn't actually change. + Future removeAt(int index) async { + final q = state.queue; + if (index < 0 || index >= q.length) return; + + final next = [...q]..removeAt(index); + if (next.isEmpty) { + await _player?.clearAudioSources(); + state = PlaybackState( + shuffle: state.shuffle, + loop: state.loop, + supported: state.supported, + ); + _lastNotifiedId = null; + return; + } + + final player = _player; + if (player == null) { + // Desktop/no-audio: no stream will correct the index for us. + final current = state.currentIndex; + var newIndex = current; + if (current != null) { + if (index < current) { + newIndex = current - 1; + } else if (index == current) { + // The removed slot now holds the following track. + newIndex = current.clamp(0, next.length - 1); + } + } + state = state.copyWith(queue: next, currentIndex: newIndex); + _notifyCurrent(); + return; + } + + state = state.copyWith(queue: next); + await player.removeAudioSourceAt(index); + } + + Future togglePlayPause() async { + final player = _player; + if (player == null) return; + if (player.playing) { + await player.pause(); + } else { + await player.play(); + } + } + + Future next() async => _player?.seekToNext(); + + Future previous() async => _player?.seekToPrevious(); + + Future seek(Duration position) async => _player?.seek(position); + + Future toggleShuffle() async { + final enabled = !state.shuffle; + state = state.copyWith(shuffle: enabled); + final player = _player; + if (player != null) { + await player.setShuffleModeEnabled(enabled); + } + } + + /// Cycle off → all → one → off (Ratune's queue-loop toggle, extended with + /// single-track repeat). + Future cycleLoop() async { + final nextMode = switch (state.loop) { + LoopMode.off => LoopMode.all, + LoopMode.all => LoopMode.one, + LoopMode.one => LoopMode.off, + }; + state = state.copyWith(loop: nextMode); + await _player?.setLoopMode(nextMode); + } + + @override + void dispose() { + _player?.dispose(); + super.dispose(); + } +} diff --git a/lib/playlists/playlists.dart b/lib/playlists/playlists.dart new file mode 100644 index 0000000..cf6c7b9 --- /dev/null +++ b/lib/playlists/playlists.dart @@ -0,0 +1,334 @@ +// Callback fields are assigned from named required params, which can't be +// private initializing formals. +// ignore_for_file: prefer_initializing_formals + +import 'dart:convert'; +import 'dart:io'; + +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:path_provider/path_provider.dart'; + +import '../subsonic/models.dart'; +import '../subsonic/subsonic_client.dart'; + +/// Playlists snapshot: the summaries (from `getPlaylists`) plus any full details +/// that have been opened. Details are cached so an opened playlist keeps working +/// offline. +class PlaylistsState { + const PlaylistsState({ + this.playlists = const [], + this.details = const {}, + this.loading = false, + }); + + final List playlists; + final Map details; + final bool loading; + + PlaylistsState copyWith({ + List? playlists, + Map? details, + bool? loading, + }) => + PlaylistsState( + playlists: playlists ?? this.playlists, + details: details ?? this.details, + loading: loading ?? this.loading, + ); +} + +/// Source of truth for playlists. The server is authoritative while online +/// (mutations are optimistic and reverted on failure, mirroring +/// `state/favorites.dart`); a per-server on-disk mirror +/// (`playlists_.json`, atomic temp+rename like +/// `library/library_index.dart`) keeps the last-known playlists + opened track +/// lists available offline. +class PlaylistsController extends StateNotifier { + PlaylistsController({ + required SubsonicClient? Function() clientGetter, + required String? Function() serverKeyGetter, + }) : _clientGetter = clientGetter, + _serverKeyGetter = serverKeyGetter, + super(const PlaylistsState()) { + reloadForServer(); + } + + final SubsonicClient? Function() _clientGetter; + final String? Function() _serverKeyGetter; + + int _generation = 0; + String? _loadedKey; + + // ---- Server switching --------------------------------------------------- + + Future _mirrorFile(String key) async { + final dir = await getApplicationSupportDirectory(); + return File('${dir.path}/playlists_$key.json'); + } + + /// Load the offline mirror for the active server, then refresh from the + /// server when online. + Future reloadForServer() async { + final key = _serverKeyGetter(); + if (key == _loadedKey && state.playlists.isNotEmpty) { + // Same server, already loaded — just refresh from server if possible. + await hydrate(); + return; + } + _generation++; + final gen = _generation; + _loadedKey = key; + + if (key == null) { + state = const PlaylistsState(); + return; + } + + // 1. Offline mirror first (instant, works with no connection). + try { + final file = await _mirrorFile(key); + if (await file.exists()) { + final raw = jsonDecode(await file.readAsString()); + if (raw is Map && gen == _generation) { + state = _fromMirror(raw.cast()); + } + } + } catch (_) { + // Missing/corrupt mirror is non-fatal. + } + + // 2. Refresh from server if connected. + await hydrate(); + } + + PlaylistsState _fromMirror(Map j) { + final playlists = (j['playlists'] as List? ?? const []) + .whereType() + .map((e) => Playlist.fromJson(e.cast())) + .toList(); + final details = {}; + final rawDetails = (j['details'] as Map?)?.cast() ?? const {}; + rawDetails.forEach((id, v) { + if (v is Map) { + details[id] = PlaylistDetail.fromJson(v.cast()); + } + }); + return PlaylistsState(playlists: playlists, details: details); + } + + // ---- Fetch -------------------------------------------------------------- + + /// Refresh the playlist list from the server (no-op offline). Keeps cached + /// details for playlists that still exist. + Future hydrate() async { + final client = _clientGetter(); + if (client == null) return; + final gen = _generation; + state = state.copyWith(loading: true); + try { + final playlists = await client.getPlaylists(); + if (gen != _generation) return; + final liveIds = playlists.map((p) => p.id).toSet(); + final details = { + for (final e in state.details.entries) + if (liveIds.contains(e.key)) e.key: e.value, + }; + state = PlaylistsState(playlists: playlists, details: details); + await _persist(); + } catch (_) { + if (gen == _generation) state = state.copyWith(loading: false); + } + } + + /// Fetch (and cache) a playlist's full track list. Returns the cached copy + /// when offline, or null if never fetched. + Future loadDetail(String id) async { + final client = _clientGetter(); + if (client == null) return state.details[id]; + final gen = _generation; + try { + final detail = await client.getPlaylist(id); + if (gen != _generation) return state.details[id]; + state = state.copyWith(details: {...state.details, id: detail}); + await _persist(); + return detail; + } catch (_) { + return state.details[id]; + } + } + + // ---- Mutations (optimistic) -------------------------------------------- + + /// Create a playlist and return its id (null on failure / offline). + Future create(String name) async { + final client = _clientGetter(); + if (client == null) return null; + try { + final created = await client.createPlaylist(name); + if (created != null) { + state = state.copyWith( + playlists: [...state.playlists, created.toSummary()], + details: {...state.details, created.id: created}, + ); + await _persist(); + return created.id; + } + // Server didn't echo the new playlist — refetch and locate it by name. + final priorIds = state.playlists.map((p) => p.id).toSet(); + await hydrate(); + final match = state.playlists + .where((p) => !priorIds.contains(p.id) && p.name == name) + .toList(); + return match.isNotEmpty ? match.last.id : null; + } catch (_) { + return null; + } + } + + Future rename(String id, String name) async { + final client = _clientGetter(); + if (client == null) return; + final prev = state; + state = state.copyWith( + playlists: [ + for (final p in state.playlists) + if (p.id == id) _renamed(p, name) else p, + ], + details: { + for (final e in state.details.entries) + e.key: e.key == id ? _renamedDetail(e.value, name) : e.value, + }, + ); + try { + await client.renamePlaylist(id, name); + await _persist(); + } catch (_) { + state = prev; // revert + } + } + + Future delete(String id) async { + final client = _clientGetter(); + if (client == null) return; + final prev = state; + state = state.copyWith( + playlists: state.playlists.where((p) => p.id != id).toList(), + details: { + for (final e in state.details.entries) + if (e.key != id) e.key: e.value, + }, + ); + try { + await client.deletePlaylist(id); + await _persist(); + } catch (_) { + state = prev; // revert + } + } + + Future addTracks(String id, List songs) async { + final client = _clientGetter(); + if (client == null || songs.isEmpty) return; + final prev = state; + final detail = state.details[id]; + if (detail != null) { + state = state.copyWith(details: { + ...state.details, + id: _withSongs(detail, [...detail.songs, ...songs]), + }); + } + _bumpSummaryCount(id, songs.length); + try { + await client.addTracksToPlaylist(id, songs.map((s) => s.id).toList()); + await _persist(); + } catch (_) { + state = prev; // revert + } + } + + Future removeAt(String id, int index) async { + final client = _clientGetter(); + if (client == null) return; + final prev = state; + final detail = state.details[id]; + if (detail == null || index < 0 || index >= detail.songs.length) return; + final nextSongs = [...detail.songs]..removeAt(index); + state = state.copyWith(details: { + ...state.details, + id: _withSongs(detail, nextSongs), + }); + _bumpSummaryCount(id, -1); + try { + await client.removeTrackFromPlaylist(id, index); + await _persist(); + } catch (_) { + state = prev; // revert + } + } + + // ---- Helpers ------------------------------------------------------------ + + void _bumpSummaryCount(String id, int delta) { + state = state.copyWith(playlists: [ + for (final p in state.playlists) + if (p.id == id) + Playlist( + id: p.id, + name: p.name, + songCount: ((p.songCount ?? 0) + delta).clamp(0, 1 << 30), + duration: p.duration, + owner: p.owner, + public: p.public, + coverArt: p.coverArt, + ) + else + p, + ]); + } + + static Playlist _renamed(Playlist p, String name) => Playlist( + id: p.id, + name: name, + songCount: p.songCount, + duration: p.duration, + owner: p.owner, + public: p.public, + coverArt: p.coverArt, + ); + + static PlaylistDetail _renamedDetail(PlaylistDetail d, String name) => + PlaylistDetail( + id: d.id, + name: name, + songCount: d.songCount, + duration: d.duration, + coverArt: d.coverArt, + songs: d.songs, + ); + + static PlaylistDetail _withSongs(PlaylistDetail d, List songs) => + PlaylistDetail( + id: d.id, + name: d.name, + songCount: songs.length, + duration: d.duration, + coverArt: d.coverArt, + songs: songs, + ); + + Future _persist() async { + final key = _serverKeyGetter(); + if (key == null) return; + try { + final file = await _mirrorFile(key); + final tmp = File('${file.path}.tmp'); + await tmp.writeAsString(jsonEncode({ + 'playlists': state.playlists.map((p) => p.toJson()).toList(), + 'details': { + for (final e in state.details.entries) e.key: e.value.toJson(), + }, + })); + await tmp.rename(file.path); + } catch (_) {} + } +} diff --git a/lib/screens/add_to_playlist_sheet.dart b/lib/screens/add_to_playlist_sheet.dart new file mode 100644 index 0000000..bd593b3 --- /dev/null +++ b/lib/screens/add_to_playlist_sheet.dart @@ -0,0 +1,191 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../state/providers.dart'; +import '../subsonic/models.dart'; +import '../theme/tokens.dart'; + +/// Bottom sheet to add [songs] to an existing playlist or a new one. No-op when +/// offline (playlist mutations require the server). +Future showAddToPlaylistSheet( + BuildContext context, { + required List songs, +}) { + return showModalBottomSheet( + context: context, + backgroundColor: RatuneColors.background, + isScrollControlled: true, + builder: (_) => _AddToPlaylistSheet(songs: songs), + ); +} + +class _AddToPlaylistSheet extends ConsumerWidget { + const _AddToPlaylistSheet({required this.songs}); + + final List songs; + + @override + Widget build(BuildContext context, WidgetRef ref) { + final accent = Theme.of(context).colorScheme.primary; + final playlists = ref.watch(playlistsProvider).playlists; + final connected = ref.watch(subsonicClientProvider) != null; + + return SafeArea( + child: Padding( + padding: const EdgeInsets.symmetric(vertical: RatuneSpacing.lg), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Padding( + padding: + const EdgeInsets.symmetric(horizontal: RatuneSpacing.xl), + child: Text('Add to playlist', + style: + TextStyle(color: accent, fontWeight: FontWeight.w700)), + ), + const SizedBox(height: RatuneSpacing.md), + if (!connected) + const Padding( + padding: EdgeInsets.all(RatuneSpacing.xl), + child: Text('Connect to a server to manage playlists.', + style: TextStyle(color: RatuneColors.dimmed)), + ) + else ...[ + _Tile( + icon: Icons.add, + label: 'New playlist…', + accent: accent, + onTap: () => _createAndAdd(context, ref), + ), + Flexible( + child: ListView( + shrinkWrap: true, + children: [ + for (final p in playlists) + _Tile( + icon: Icons.queue_music, + label: p.name, + trailing: + p.songCount != null ? '${p.songCount}' : null, + onTap: () async { + await ref + .read(playlistsProvider.notifier) + .addTracks(p.id, songs); + if (context.mounted) { + Navigator.of(context).pop(); + _toast(context, 'Added to ${p.name}'); + } + }, + ), + ], + ), + ), + ], + ], + ), + ), + ); + } + + Future _createAndAdd(BuildContext context, WidgetRef ref) async { + final name = await promptPlaylistName(context, title: 'New playlist'); + if (name == null || name.isEmpty) return; + final id = await ref.read(playlistsProvider.notifier).create(name); + if (id != null) { + await ref.read(playlistsProvider.notifier).addTracks(id, songs); + } + if (context.mounted) { + Navigator.of(context).pop(); + _toast(context, id != null ? 'Added to $name' : 'Could not create playlist'); + } + } +} + +class _Tile extends StatelessWidget { + const _Tile({ + required this.icon, + required this.label, + required this.onTap, + this.trailing, + this.accent, + }); + + final IconData icon; + final String label; + final VoidCallback onTap; + final String? trailing; + final Color? accent; + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: onTap, + child: Container( + constraints: + const BoxConstraints(minHeight: RatuneSpacing.minTouchTarget), + padding: const EdgeInsets.symmetric(horizontal: RatuneSpacing.xl), + child: Row( + children: [ + Icon(icon, size: 20, color: accent ?? RatuneColors.dimmed), + const SizedBox(width: RatuneSpacing.lg), + Expanded( + child: Text(label, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle(color: accent ?? RatuneColors.foreground)), + ), + if (trailing != null) + Text(trailing!, + style: const TextStyle(color: RatuneColors.dimmed)), + ], + ), + ), + ); + } +} + +/// Shared name prompt used by create / rename flows. Returns the trimmed name +/// or null if cancelled. +Future promptPlaylistName( + BuildContext context, { + required String title, + String initial = '', +}) { + final controller = TextEditingController(text: initial); + return showDialog( + context: context, + builder: (ctx) { + final accent = Theme.of(ctx).colorScheme.primary; + return AlertDialog( + backgroundColor: RatuneColors.surface, + title: Text(title), + content: TextField( + controller: controller, + autofocus: true, + style: const TextStyle(color: RatuneColors.foreground), + decoration: const InputDecoration( + hintText: 'Playlist name', + hintStyle: TextStyle(color: RatuneColors.dimmed), + ), + onSubmitted: (v) => Navigator.pop(ctx, v.trim()), + ), + actions: [ + TextButton( + onPressed: () => Navigator.pop(ctx), + child: const Text('Cancel')), + TextButton( + onPressed: () => Navigator.pop(ctx, controller.text.trim()), + child: Text('Save', style: TextStyle(color: accent)), + ), + ], + ); + }, + ); +} + +void _toast(BuildContext context, String message) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(message), duration: const Duration(seconds: 2)), + ); +} diff --git a/lib/screens/browser_screen.dart b/lib/screens/browser_screen.dart new file mode 100644 index 0000000..a5cb72a --- /dev/null +++ b/lib/screens/browser_screen.dart @@ -0,0 +1,744 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../downloads/download_manager.dart'; +import '../state/providers.dart'; +import '../subsonic/models.dart'; +import '../theme/tokens.dart'; +import '../widgets/hairline_panel.dart'; +import 'add_to_playlist_sheet.dart'; +import 'downloads_screen.dart'; +import 'favorites_screen.dart'; +import 'playlists_screen.dart'; +import 'search_screen.dart'; +import 'settings_screen.dart'; + +/// Browser tab — Artists / Albums / Tracks browse modes over the live Subsonic +/// server. Artists and Albums drill down by pushing onto the (nested) navigator; +/// Tracks is a flat list backed by the cached library index. +class BrowserScreen extends ConsumerWidget { + const BrowserScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final client = ref.watch(subsonicClientProvider); + final mode = ref.watch(browseModeProvider); + + return Padding( + padding: const EdgeInsets.fromLTRB( + RatuneSpacing.lg, + RatuneSpacing.xl, + RatuneSpacing.lg, + RatuneSpacing.lg, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Wrap( + spacing: RatuneSpacing.xl, + runSpacing: RatuneSpacing.xs, + children: [ + _Action( + icon: Icons.search, + label: 'Search', + onTap: () => Navigator.of(context).push( + MaterialPageRoute(builder: (_) => const SearchScreen()), + ), + ), + _Action( + icon: Icons.favorite_border, + label: 'Favorites', + onTap: () => Navigator.of(context).push( + MaterialPageRoute(builder: (_) => const FavoritesScreen()), + ), + ), + _Action( + icon: Icons.queue_music, + label: 'Playlists', + onTap: () => Navigator.of(context).push( + MaterialPageRoute(builder: (_) => const PlaylistsScreen()), + ), + ), + _Action( + icon: Icons.download, + label: 'Downloads', + onTap: () => Navigator.of(context).push( + MaterialPageRoute(builder: (_) => const DownloadsScreen()), + ), + ), + _Action( + icon: Icons.settings, + label: 'Settings', + onTap: () => Navigator.of(context).push( + MaterialPageRoute(builder: (_) => const SettingsScreen()), + ), + ), + ], + ), + const SizedBox(height: RatuneSpacing.md), + _ModeSelector(mode: mode), + const SizedBox(height: RatuneSpacing.lg), + Expanded( + child: client == null + ? const HairlinePanel( + title: 'Browse', + active: true, + child: _NotConnected(), + ) + : switch (mode) { + BrowseMode.artists => const _ArtistsPanel(), + BrowseMode.albums => const _AlbumsPanel(), + BrowseMode.tracks => const _TracksPanel(), + }, + ), + ], + ), + ); + } +} + +/// Three mono labels; the active one is underlined in accent — same language as +/// the bottom `_TabBar`. +class _ModeSelector extends ConsumerWidget { + const _ModeSelector({required this.mode}); + + final BrowseMode mode; + + @override + Widget build(BuildContext context, WidgetRef ref) { + final accent = Theme.of(context).colorScheme.primary; + Widget label(String text, BrowseMode m) { + final active = m == mode; + return InkWell( + onTap: () => ref.read(browseModeProvider.notifier).state = m, + child: Container( + constraints: + const BoxConstraints(minHeight: RatuneSpacing.minTouchTarget), + padding: const EdgeInsets.symmetric(horizontal: RatuneSpacing.md), + alignment: Alignment.center, + child: Text( + text, + style: TextStyle( + color: active ? RatuneColors.foreground : RatuneColors.dimmed, + fontWeight: active ? FontWeight.w700 : FontWeight.w400, + decoration: + active ? TextDecoration.underline : TextDecoration.none, + decorationColor: accent, + decorationThickness: 2, + ), + ), + ), + ); + } + + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + label('Artists', BrowseMode.artists), + const Text('|', style: TextStyle(color: RatuneColors.border)), + label('Albums', BrowseMode.albums), + const Text('|', style: TextStyle(color: RatuneColors.border)), + label('Tracks', BrowseMode.tracks), + ], + ); + } +} + +class _ArtistsPanel extends ConsumerWidget { + const _ArtistsPanel(); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final artists = ref.watch(artistsProvider); + return HairlinePanel( + title: 'Artists', + active: true, + trailing: artists.hasValue && artists.value!.isNotEmpty + ? '(${artists.value!.length})' + : null, + padding: const EdgeInsets.symmetric(vertical: RatuneSpacing.md), + child: artists.when( + loading: () => const _Centered(child: _Loading()), + error: (e, _) => _Centered(child: _ErrorText('$e')), + data: (list) => list.isEmpty + ? const _Centered(child: _ErrorText('No artists on this server.')) + : ListView.builder( + padding: EdgeInsets.zero, + itemCount: list.length, + itemBuilder: (context, i) { + final a = list[i]; + return BrowseRow( + title: a.name ?? 'Unknown artist', + trailing: a.albumCount != null ? '${a.albumCount}' : null, + onTap: () => Navigator.of(context).push( + MaterialPageRoute(builder: (_) => ArtistScreen(id: a.id)), + ), + ); + }, + ), + ), + ); + } +} + +class _AlbumsPanel extends ConsumerWidget { + const _AlbumsPanel(); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final albums = ref.watch(albumsProvider); + final client = ref.watch(subsonicClientProvider); + return HairlinePanel( + title: 'Albums', + active: true, + trailing: albums.hasValue && albums.value!.isNotEmpty + ? '(${albums.value!.length})' + : null, + padding: const EdgeInsets.all(RatuneSpacing.md), + child: albums.when( + loading: () => const _Centered(child: _Loading()), + error: (e, _) => _Centered(child: _ErrorText('$e')), + data: (list) => list.isEmpty + ? const _Centered(child: _ErrorText('No albums on this server.')) + : LayoutBuilder( + builder: (context, constraints) { + final cols = (constraints.maxWidth / 180).floor().clamp(2, 6); + return GridView.builder( + padding: EdgeInsets.zero, + gridDelegate: + SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: cols, + mainAxisSpacing: RatuneSpacing.md, + crossAxisSpacing: RatuneSpacing.md, + // Square art + two caption lines; extra vertical slack so + // the tile never sub-pixel-overflows. + childAspectRatio: 0.68, + ), + itemCount: list.length, + itemBuilder: (context, i) => _AlbumTile( + album: list[i], + artUri: (client != null && list[i].coverArt != null) + ? client + .coverArtUri(list[i].coverArt!, size: 300) + .toString() + : null, + ), + ); + }, + ), + ), + ); + } +} + +class _AlbumTile extends StatelessWidget { + const _AlbumTile({required this.album, required this.artUri}); + + final Album album; + final String? artUri; + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () => Navigator.of(context).push( + MaterialPageRoute(builder: (_) => AlbumScreen(id: album.id)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + AspectRatio( + aspectRatio: 1, + child: ColoredBox( + color: RatuneColors.surface, + child: artUri != null + ? Image.network( + artUri!, + key: ValueKey(artUri), + fit: BoxFit.cover, + gaplessPlayback: true, + errorBuilder: (_, _, _) => const _AlbumArtFallback(), + ) + : const _AlbumArtFallback(), + ), + ), + const SizedBox(height: RatuneSpacing.xs), + Text( + album.name ?? 'Unknown album', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle(color: RatuneColors.foreground), + ), + if (album.artist != null) + Text( + album.artist!, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle( + color: RatuneColors.dimmed, fontSize: 12), + ), + ], + ), + ); + } +} + +class _AlbumArtFallback extends StatelessWidget { + const _AlbumArtFallback(); + @override + Widget build(BuildContext context) => const Center( + child: Icon(Icons.album_outlined, + color: RatuneColors.dimmed, size: 32), + ); +} + +/// Flat alphabetical list of every song, backed by the crawled+cached library +/// index. Kicks off the build on first display and shows progress. +class _TracksPanel extends ConsumerStatefulWidget { + const _TracksPanel(); + + @override + ConsumerState<_TracksPanel> createState() => _TracksPanelState(); +} + +class _TracksPanelState extends ConsumerState<_TracksPanel> { + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + ref.read(libraryIndexProvider.notifier).ensureBuilt(); + }); + } + + @override + Widget build(BuildContext context) { + final index = ref.watch(libraryIndexProvider); + final playback = ref.read(playbackProvider.notifier); + + final Widget body; + if (index.building) { + final total = index.total; + final label = total > 0 + ? 'Indexing ${index.done}/$total albums…' + : 'Indexing library…'; + body = _Centered( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + const _Loading(), + const SizedBox(height: RatuneSpacing.md), + Text(label, style: const TextStyle(color: RatuneColors.dimmed)), + ], + ), + ); + } else if (index.songs.isEmpty) { + body = _Centered( + child: _ErrorText(index.error != null + ? 'Could not build the track index.' + : 'No tracks indexed yet.'), + ); + } else { + body = ListView.builder( + padding: EdgeInsets.zero, + itemCount: index.songs.length, + itemBuilder: (context, i) { + final song = index.songs[i]; + return BrowseRow( + title: song.title ?? 'Untitled', + trailing: song.artist, + onTap: () => playback.playSongs(index.songs, startIndex: i), + onPlayNext: () => playback.playNext(song), + onAddToQueue: () => playback.addToQueue(song), + ); + }, + ); + } + + return HairlinePanel( + title: 'Tracks', + active: true, + trailing: index.songs.isNotEmpty ? '(${index.songs.length})' : null, + padding: const EdgeInsets.symmetric(vertical: RatuneSpacing.md), + child: Column( + children: [ + Align( + alignment: Alignment.centerRight, + child: InkWell( + onTap: index.building + ? null + : () => ref.read(libraryIndexProvider.notifier).refresh(), + child: const Padding( + padding: EdgeInsets.symmetric( + horizontal: RatuneSpacing.lg, + vertical: RatuneSpacing.sm, + ), + child: Text('↻ refresh', + style: TextStyle(color: RatuneColors.dimmed)), + ), + ), + ), + Expanded(child: body), + ], + ), + ); + } +} + +class _Action extends StatelessWidget { + const _Action({required this.icon, required this.label, required this.onTap}); + + final IconData icon; + final String label; + final VoidCallback onTap; + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: onTap, + child: Padding( + padding: const EdgeInsets.symmetric(vertical: RatuneSpacing.sm), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(icon, size: 16, color: RatuneColors.dimmed), + const SizedBox(width: RatuneSpacing.sm), + Text(label, style: const TextStyle(color: RatuneColors.foreground)), + ], + ), + ), + ); + } +} + +class ArtistScreen extends ConsumerWidget { + const ArtistScreen({super.key, required this.id}); + + final String id; + + @override + Widget build(BuildContext context, WidgetRef ref) { + final artist = ref.watch(artistProvider(id)); + return _DetailScaffold( + title: artist.valueOrNull?.name ?? 'Artist', + child: artist.when( + loading: () => const _Centered(child: _Loading()), + error: (e, _) => _Centered(child: _ErrorText('$e')), + data: (a) => ListView.builder( + padding: EdgeInsets.zero, + itemCount: a.albums.length, + itemBuilder: (context, i) { + final album = a.albums[i]; + return BrowseRow( + title: album.name ?? 'Unknown album', + trailing: album.year?.toString(), + onTap: () => Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => AlbumScreen(id: album.id), + ), + ), + ); + }, + ), + ), + ); + } +} + +class AlbumScreen extends ConsumerWidget { + const AlbumScreen({super.key, required this.id}); + + final String id; + + @override + Widget build(BuildContext context, WidgetRef ref) { + final album = ref.watch(albumProvider(id)); + return _DetailScaffold( + title: album.valueOrNull?.name ?? 'Album', + child: album.when( + loading: () => const _Centered(child: _Loading()), + error: (e, _) => _Centered(child: _ErrorText('$e')), + data: (a) => ListView.builder( + padding: EdgeInsets.zero, + itemCount: a.songs.length, + itemBuilder: (context, i) { + final song = a.songs[i]; + final playback = ref.read(playbackProvider.notifier); + return BrowseRow( + leading: song.track?.toString(), + title: song.title ?? 'Untitled', + trailing: _fmtDuration(song.duration), + onTap: () => playback.playSongs(a.songs, startIndex: i), + onPlayNext: () => playback.playNext(song), + onAddToQueue: () => playback.addToQueue(song), + ); + }, + ), + ), + ); + } +} + +// ---- Shared bits -------------------------------------------------------- + +class BrowseRow extends StatelessWidget { + const BrowseRow({ + super.key, + required this.title, + this.leading, + this.trailing, + this.onTap, + this.onPlayNext, + this.onAddToQueue, + this.onAddToPlaylist, + this.onDownload, + this.onRemoveDownload, + this.downloadStatus, + }); + + final String title; + final String? leading; + final String? trailing; + final VoidCallback? onTap; + + /// When set, renders inline "play next" / "add to queue" icons (song rows). + final VoidCallback? onPlayNext; + final VoidCallback? onAddToQueue; + + /// Secondary song actions, folded into a trailing overflow menu so the row + /// stays uncluttered. + final VoidCallback? onAddToPlaylist; + final VoidCallback? onDownload; + final VoidCallback? onRemoveDownload; + + /// Current offline-download state for this row's track (drives the menu label + /// and the at-a-glance downloaded indicator). + final DownloadStatus? downloadStatus; + + bool get _hasMenu => + onAddToPlaylist != null || onDownload != null || onRemoveDownload != null; + + @override + Widget build(BuildContext context) { + final accent = Theme.of(context).colorScheme.primary; + final isDone = downloadStatus == DownloadStatus.done; + final isActive = downloadStatus == DownloadStatus.queued || + downloadStatus == DownloadStatus.downloading; + + return InkWell( + onTap: onTap, + child: Container( + constraints: + const BoxConstraints(minHeight: RatuneSpacing.minTouchTarget), + padding: const EdgeInsets.only(left: RatuneSpacing.lg), + child: Row( + children: [ + if (leading != null) + SizedBox( + width: 28, + child: Text(leading!, + style: const TextStyle(color: RatuneColors.dimmed)), + ), + Expanded( + child: Text( + title, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle(color: RatuneColors.foreground), + ), + ), + if (isDone) + Padding( + padding: const EdgeInsets.only(left: RatuneSpacing.sm), + child: + Icon(Icons.download_done, size: 14, color: accent), + ) + else if (isActive) + const Padding( + padding: EdgeInsets.only(left: RatuneSpacing.sm), + child: SizedBox( + width: 12, + height: 12, + child: CircularProgressIndicator(strokeWidth: 1.5), + ), + ), + if (trailing != null) ...[ + const SizedBox(width: RatuneSpacing.md), + Text(trailing!, + style: const TextStyle(color: RatuneColors.dimmed)), + ], + if (onPlayNext != null) + _RowIcon(icon: Icons.playlist_play, onTap: onPlayNext!), + if (onAddToQueue != null) + _RowIcon(icon: Icons.add, onTap: onAddToQueue!), + if (_hasMenu) + _RowMenu( + isDownloaded: isDone, + isDownloading: isActive, + onAddToPlaylist: onAddToPlaylist, + onDownload: onDownload, + onRemoveDownload: onRemoveDownload, + ), + if (onPlayNext == null && onAddToQueue == null && !_hasMenu) + const SizedBox(width: RatuneSpacing.lg), + ], + ), + ), + ); + } +} + +/// Trailing overflow menu for a song row's secondary actions. +class _RowMenu extends StatelessWidget { + const _RowMenu({ + required this.isDownloaded, + required this.isDownloading, + this.onAddToPlaylist, + this.onDownload, + this.onRemoveDownload, + }); + + final bool isDownloaded; + final bool isDownloading; + final VoidCallback? onAddToPlaylist; + final VoidCallback? onDownload; + final VoidCallback? onRemoveDownload; + + @override + Widget build(BuildContext context) { + return PopupMenuButton( + icon: const Icon(Icons.more_vert, size: 20, color: RatuneColors.dimmed), + color: RatuneColors.surface, + padding: EdgeInsets.zero, + constraints: + const BoxConstraints(minWidth: RatuneSpacing.minTouchTarget), + onSelected: (v) { + switch (v) { + case 'playlist': + onAddToPlaylist?.call(); + case 'download': + onDownload?.call(); + case 'remove_download': + onRemoveDownload?.call(); + } + }, + itemBuilder: (_) => [ + if (onAddToPlaylist != null) + const PopupMenuItem( + value: 'playlist', child: Text('Add to playlist')), + if (isDownloaded && onRemoveDownload != null) + const PopupMenuItem( + value: 'remove_download', child: Text('Remove download')) + else if (onDownload != null) + PopupMenuItem( + value: 'download', + enabled: !isDownloading, + child: Text(isDownloading ? 'Downloading…' : 'Download')), + ], + ); + } +} + +/// Compact trailing action icon with a ≥44pt hit target. +class _RowIcon extends StatelessWidget { + const _RowIcon({required this.icon, required this.onTap}); + + final IconData icon; + final VoidCallback onTap; + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: onTap, + customBorder: const CircleBorder(), + child: SizedBox( + width: RatuneSpacing.minTouchTarget, + height: RatuneSpacing.minTouchTarget, + child: Icon(icon, size: 20, color: RatuneColors.dimmed), + ), + ); + } +} + +class _DetailScaffold extends StatelessWidget { + const _DetailScaffold({ + required this.title, + required this.child, + this.actions, + }); + + final String title; + final Widget child; + final List? actions; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(title, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle(fontWeight: FontWeight.w700)), + actions: actions, + ), + body: SafeArea(child: child), + ); + } +} + +class _NotConnected extends StatelessWidget { + const _NotConnected(); + + @override + Widget build(BuildContext context) { + return const _Centered( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text('Not connected.', + style: TextStyle(color: RatuneColors.foreground)), + SizedBox(height: RatuneSpacing.sm), + Text('Tap the status bar to add a Subsonic server.', + textAlign: TextAlign.center, + style: TextStyle(color: RatuneColors.dimmed)), + ], + ), + ); + } +} + +class _Centered extends StatelessWidget { + const _Centered({required this.child}); + final Widget child; + @override + Widget build(BuildContext context) => Padding( + padding: const EdgeInsets.all(RatuneSpacing.xl), + child: Center(child: child), + ); +} + +class _Loading extends StatelessWidget { + const _Loading(); + @override + Widget build(BuildContext context) => const SizedBox( + height: 20, + width: 20, + child: CircularProgressIndicator(strokeWidth: 2), + ); +} + +class _ErrorText extends StatelessWidget { + const _ErrorText(this.message); + final String message; + @override + Widget build(BuildContext context) => Text( + message, + textAlign: TextAlign.center, + style: const TextStyle(color: RatuneColors.dimmed), + ); +} + +String? _fmtDuration(int? seconds) { + if (seconds == null) return null; + final m = seconds ~/ 60; + final s = seconds % 60; + return '$m:${s.toString().padLeft(2, '0')}'; +} diff --git a/lib/screens/connect_sheet.dart b/lib/screens/connect_sheet.dart new file mode 100644 index 0000000..181590a --- /dev/null +++ b/lib/screens/connect_sheet.dart @@ -0,0 +1,144 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../state/providers.dart'; +import '../subsonic/credentials.dart'; +import '../theme/tokens.dart'; + +/// Open the connect-server sheet. +Future showConnectSheet(BuildContext context) { + return showModalBottomSheet( + context: context, + backgroundColor: RatuneColors.background, + isScrollControlled: true, + builder: (_) => const _ConnectSheet(), + ); +} + +class _ConnectSheet extends ConsumerStatefulWidget { + const _ConnectSheet(); + + @override + ConsumerState<_ConnectSheet> createState() => _ConnectSheetState(); +} + +class _ConnectSheetState extends ConsumerState<_ConnectSheet> { + final _url = TextEditingController(); + final _user = TextEditingController(); + final _pass = TextEditingController(); + bool _busy = false; + + @override + void initState() { + super.initState(); + final creds = ref.read(connectionProvider).credentials; + if (creds != null) { + _url.text = creds.url; + _user.text = creds.username; + } + } + + @override + void dispose() { + _url.dispose(); + _user.dispose(); + _pass.dispose(); + super.dispose(); + } + + Future _connect() async { + setState(() => _busy = true); + final ok = await ref.read(connectionProvider.notifier).connect( + SubsonicCredentials( + url: _url.text.trim(), + username: _user.text.trim(), + password: _pass.text, + ), + ); + if (!mounted) return; + setState(() => _busy = false); + if (ok) Navigator.of(context).pop(); + } + + @override + Widget build(BuildContext context) { + final conn = ref.watch(connectionProvider); + final accent = Theme.of(context).colorScheme.primary; + return Padding( + padding: EdgeInsets.only( + left: RatuneSpacing.xl, + right: RatuneSpacing.xl, + top: RatuneSpacing.xl, + bottom: MediaQuery.of(context).viewInsets.bottom + RatuneSpacing.xl, + ), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Text('Connect to server', + style: TextStyle(color: accent, fontWeight: FontWeight.w700)), + const SizedBox(height: RatuneSpacing.lg), + _field(_url, 'Server URL', 'https://navidrome.example.com', + keyboard: TextInputType.url), + _field(_user, 'Username', 'you'), + _field(_pass, 'Password', '••••••••', obscure: true), + if (conn.status == ConnStatus.error && conn.error != null) ...[ + const SizedBox(height: RatuneSpacing.md), + Text(conn.error!, + style: const TextStyle(color: Color(0xFFE06C75))), + ], + const SizedBox(height: RatuneSpacing.lg), + FilledButton( + onPressed: _busy ? null : _connect, + style: FilledButton.styleFrom( + backgroundColor: accent, + foregroundColor: RatuneColors.background, + shape: const RoundedRectangleBorder(), + ), + child: _busy + ? const SizedBox( + height: 16, + width: 16, + child: CircularProgressIndicator(strokeWidth: 2), + ) + : const Text('Connect'), + ), + ], + ), + ); + } + + Widget _field( + TextEditingController c, + String label, + String hint, { + bool obscure = false, + TextInputType? keyboard, + }) { + return Padding( + padding: const EdgeInsets.only(bottom: RatuneSpacing.md), + child: TextField( + controller: c, + obscureText: obscure, + keyboardType: keyboard, + autocorrect: false, + enableSuggestions: false, + style: const TextStyle(color: RatuneColors.foreground), + decoration: InputDecoration( + labelText: label, + hintText: hint, + labelStyle: const TextStyle(color: RatuneColors.dimmed), + hintStyle: const TextStyle(color: RatuneColors.dimmed), + enabledBorder: const OutlineInputBorder( + borderRadius: BorderRadius.zero, + borderSide: BorderSide(color: RatuneColors.border), + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.zero, + borderSide: BorderSide(color: Theme.of(context).colorScheme.primary), + ), + ), + ), + ); + } +} diff --git a/lib/screens/downloads_screen.dart b/lib/screens/downloads_screen.dart new file mode 100644 index 0000000..560af8a --- /dev/null +++ b/lib/screens/downloads_screen.dart @@ -0,0 +1,234 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../downloads/download_manager.dart'; +import '../state/providers.dart'; +import '../theme/tokens.dart'; +import '../widgets/hairline_panel.dart'; + +/// Manage offline downloads: what's saved, how much space it uses, and any +/// in-flight transfers. Tapping a completed track plays it. +class DownloadsScreen extends ConsumerWidget { + const DownloadsScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final downloads = ref.watch(downloadManagerProvider); + final controller = ref.read(downloadManagerProvider.notifier); + final playback = ref.read(playbackProvider.notifier); + + final active = downloads.byId.values.where((d) => d.isActive).toList(); + final completed = downloads.completed; + + return Scaffold( + appBar: AppBar( + title: const Text('Downloads', + style: TextStyle(fontWeight: FontWeight.w700)), + actions: [ + if (completed.isNotEmpty) + TextButton( + onPressed: () => _confirmClear(context, controller), + child: const Text('Clear all', + style: TextStyle(color: RatuneColors.dimmed)), + ), + ], + ), + body: SafeArea( + child: (active.isEmpty && completed.isEmpty) + ? const Center( + child: Text('No downloads yet.', + style: TextStyle(color: RatuneColors.dimmed)), + ) + : ListView( + padding: const EdgeInsets.all(RatuneSpacing.lg), + children: [ + if (active.isNotEmpty) ...[ + HairlinePanel( + title: 'Downloading', + trailing: '(${active.length})', + padding: const EdgeInsets.symmetric( + vertical: RatuneSpacing.md), + child: Column( + children: [ + for (final d in active) _ActiveRow(info: d), + ], + ), + ), + const SizedBox(height: RatuneSpacing.xl), + ], + HairlinePanel( + title: 'Saved', + active: true, + trailing: completed.isEmpty + ? null + : '${completed.length} · ${_fmtBytes(downloads.totalBytes)}', + padding: + const EdgeInsets.symmetric(vertical: RatuneSpacing.md), + child: completed.isEmpty + ? const Padding( + padding: EdgeInsets.all(RatuneSpacing.lg), + child: Text('Nothing saved for offline yet.', + style: TextStyle(color: RatuneColors.dimmed)), + ) + : Column( + children: [ + for (final d in completed) + _SavedRow( + info: d, + onPlay: () => + playback.playSongs([d.song]), + onRemove: () => controller.remove(d.song.id), + ), + ], + ), + ), + ], + ), + ), + ); + } + + Future _confirmClear( + BuildContext context, DownloadController controller) async { + final ok = await showDialog( + context: context, + builder: (ctx) => AlertDialog( + backgroundColor: RatuneColors.surface, + title: const Text('Remove all downloads?'), + content: const Text( + 'This deletes every saved file for this server. It cannot be undone.'), + actions: [ + TextButton( + onPressed: () => Navigator.pop(ctx, false), + child: const Text('Cancel')), + TextButton( + onPressed: () => Navigator.pop(ctx, true), + child: const Text('Remove all')), + ], + ), + ); + if (ok == true) await controller.clearAll(); + } +} + +class _ActiveRow extends StatelessWidget { + const _ActiveRow({required this.info}); + final DownloadInfo info; + + @override + Widget build(BuildContext context) { + final accent = Theme.of(context).colorScheme.primary; + final failed = info.status == DownloadStatus.failed; + return Padding( + padding: const EdgeInsets.symmetric( + horizontal: RatuneSpacing.lg, vertical: RatuneSpacing.xs), + child: Row( + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(info.song.title ?? 'Untitled', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle(color: RatuneColors.foreground)), + const SizedBox(height: RatuneSpacing.xs), + if (failed) + const Text('Failed', + style: TextStyle(color: Color(0xFFE06C75), fontSize: 12)) + else + LinearProgressIndicator( + value: info.progress > 0 ? info.progress : null, + minHeight: 3, + backgroundColor: RatuneColors.border, + color: accent, + ), + ], + ), + ), + const SizedBox(width: RatuneSpacing.md), + Text( + failed + ? '—' + : (info.status == DownloadStatus.queued ? 'Queued' : ''), + style: const TextStyle(color: RatuneColors.dimmed, fontSize: 12), + ), + ], + ), + ); + } +} + +class _SavedRow extends StatelessWidget { + const _SavedRow({ + required this.info, + required this.onPlay, + required this.onRemove, + }); + + final DownloadInfo info; + final VoidCallback onPlay; + final VoidCallback onRemove; + + @override + Widget build(BuildContext context) { + final quality = info.format ?? + (info.bitRate != null ? '${info.bitRate} kbps' : 'Original'); + return InkWell( + onTap: onPlay, + child: Container( + constraints: + const BoxConstraints(minHeight: RatuneSpacing.minTouchTarget), + padding: const EdgeInsets.only(left: RatuneSpacing.lg), + child: Row( + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(info.song.title ?? 'Untitled', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle(color: RatuneColors.foreground)), + Text( + [ + info.song.artist, + '$quality · ${_fmtBytes(info.sizeBytes ?? 0)}', + ].where((e) => e != null && e.isNotEmpty).join(' · '), + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: + const TextStyle(color: RatuneColors.dimmed, fontSize: 12), + ), + ], + ), + ), + InkWell( + onTap: onRemove, + customBorder: const CircleBorder(), + child: const SizedBox( + width: RatuneSpacing.minTouchTarget, + height: RatuneSpacing.minTouchTarget, + child: Icon(Icons.delete_outline, + size: 20, color: RatuneColors.dimmed), + ), + ), + ], + ), + ), + ); + } +} + +String _fmtBytes(int bytes) { + if (bytes <= 0) return '0 MB'; + const units = ['B', 'KB', 'MB', 'GB']; + var size = bytes.toDouble(); + var i = 0; + while (size >= 1024 && i < units.length - 1) { + size /= 1024; + i++; + } + return '${size.toStringAsFixed(size >= 10 || i == 0 ? 0 : 1)} ${units[i]}'; +} diff --git a/lib/screens/favorites_screen.dart b/lib/screens/favorites_screen.dart new file mode 100644 index 0000000..aa11911 --- /dev/null +++ b/lib/screens/favorites_screen.dart @@ -0,0 +1,112 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../state/providers.dart'; +import '../theme/tokens.dart'; +import 'browser_screen.dart'; + +/// Favorites — starred songs / albums / artists from `getStarred2`. +class FavoritesScreen extends ConsumerWidget { + const FavoritesScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final starred = ref.watch(starredProvider); + return Scaffold( + appBar: AppBar( + title: const Text('Favorites', + style: TextStyle(fontWeight: FontWeight.w700)), + ), + body: SafeArea( + child: starred.when( + loading: () => const Center( + child: SizedBox( + height: 20, + width: 20, + child: CircularProgressIndicator(strokeWidth: 2), + ), + ), + error: (e, _) => Center( + child: Text('$e', + style: const TextStyle(color: RatuneColors.dimmed)), + ), + data: (s) { + if (s.songs.isEmpty && s.albums.isEmpty && s.artists.isEmpty) { + return const Center( + child: Text('No favorites yet.', + style: TextStyle(color: RatuneColors.dimmed)), + ); + } + return ListView( + children: [ + if (s.songs.isNotEmpty) ...[ + const _SectionLabel('Songs'), + for (var i = 0; i < s.songs.length; i++) + BrowseRow( + title: s.songs[i].title ?? 'Untitled', + trailing: s.songs[i].artist, + onTap: () => ref + .read(playbackProvider.notifier) + .playSongs(s.songs, startIndex: i), + onPlayNext: () => ref + .read(playbackProvider.notifier) + .playNext(s.songs[i]), + onAddToQueue: () => ref + .read(playbackProvider.notifier) + .addToQueue(s.songs[i]), + ), + ], + if (s.albums.isNotEmpty) ...[ + const _SectionLabel('Albums'), + for (final a in s.albums) + BrowseRow( + title: a.name ?? 'Unknown album', + trailing: a.artist, + onTap: () => Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => AlbumScreen(id: a.id), + ), + ), + ), + ], + if (s.artists.isNotEmpty) ...[ + const _SectionLabel('Artists'), + for (final a in s.artists) + BrowseRow( + title: a.name ?? 'Unknown artist', + onTap: () => Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => ArtistScreen(id: a.id), + ), + ), + ), + ], + ], + ); + }, + ), + ), + ); + } +} + +class _SectionLabel extends StatelessWidget { + const _SectionLabel(this.text); + final String text; + @override + Widget build(BuildContext context) => Padding( + padding: const EdgeInsets.fromLTRB( + RatuneSpacing.lg, + RatuneSpacing.lg, + RatuneSpacing.lg, + RatuneSpacing.sm, + ), + child: Text( + text, + style: TextStyle( + color: Theme.of(context).colorScheme.primary, + fontWeight: FontWeight.w700, + ), + ), + ); +} diff --git a/lib/screens/home_screen.dart b/lib/screens/home_screen.dart new file mode 100644 index 0000000..52e956c --- /dev/null +++ b/lib/screens/home_screen.dart @@ -0,0 +1,148 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../state/providers.dart'; +import '../theme/tokens.dart'; +import '../widgets/hairline_panel.dart'; +import 'browser_screen.dart'; + +/// Home tab — Recently Played (album-art strip), Recent Tracks, and Rediscover, +/// all derived from the local play history (mirrors Ratune's home tab). +class HomeScreen extends ConsumerWidget { + const HomeScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final client = ref.watch(subsonicClientProvider); + final recentAlbums = ref.watch(recentAlbumsProvider); + final recentSongs = ref.watch(recentSongsProvider); + final rediscover = ref.watch(rediscoverProvider); + + return ListView( + padding: const EdgeInsets.fromLTRB( + RatuneSpacing.lg, + RatuneSpacing.xl, + RatuneSpacing.lg, + RatuneSpacing.lg, + ), + children: [ + HairlinePanel( + title: 'Recently Played', + child: SizedBox( + height: 120, + child: recentAlbums.isEmpty + ? const _Empty('No listening history yet.') + : ListView.separated( + scrollDirection: Axis.horizontal, + itemCount: recentAlbums.length, + separatorBuilder: (_, _) => + const SizedBox(width: RatuneSpacing.md), + itemBuilder: (_, i) { + final rec = recentAlbums[i]; + final art = (client != null && rec.coverArt != null) + ? client.coverArtUri(rec.coverArt!, size: 240).toString() + : null; + return GestureDetector( + onTap: rec.albumId == null + ? null + : () => Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => + AlbumScreen(id: rec.albumId!), + ), + ), + child: SizedBox( + width: 120, + child: ColoredBox( + color: RatuneColors.surface, + child: art != null + ? Image.network(art, + fit: BoxFit.cover, gaplessPlayback: true) + : const Icon(Icons.album_outlined, + color: RatuneColors.dimmed), + ), + ), + ); + }, + ), + ), + ), + const SizedBox(height: RatuneSpacing.xl), + HairlinePanel( + title: 'Recent Tracks', + padding: const EdgeInsets.symmetric(vertical: RatuneSpacing.md), + child: recentSongs.isEmpty + ? const Padding( + padding: EdgeInsets.all(RatuneSpacing.lg), + child: _Empty('Nothing played recently.'), + ) + : Column( + children: [ + for (final rec in recentSongs.take(8)) + BrowseRow( + title: rec.title, + trailing: rec.artist, + onTap: () => ref + .read(playbackProvider.notifier) + .playSongs([rec.toSong()]), + onPlayNext: () => ref + .read(playbackProvider.notifier) + .playNext(rec.toSong()), + onAddToQueue: () => ref + .read(playbackProvider.notifier) + .addToQueue(rec.toSong()), + ), + ], + ), + ), + const SizedBox(height: RatuneSpacing.xl), + HairlinePanel( + title: 'Rediscover', + padding: const EdgeInsets.symmetric(vertical: RatuneSpacing.md), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + if (rediscover.isEmpty) + const Padding( + padding: EdgeInsets.all(RatuneSpacing.lg), + child: _Empty('Listen to more music to unlock suggestions.'), + ) + else + for (final a in rediscover) + BrowseRow( + title: a.name, + onTap: () => Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => ArtistScreen(id: a.artistId), + ), + ), + ), + InkWell( + onTap: () => + ref.read(rediscoverSeedProvider.notifier).state++, + child: const Padding( + padding: EdgeInsets.symmetric( + horizontal: RatuneSpacing.lg, + vertical: RatuneSpacing.md, + ), + child: Text('↻ re-roll', + style: TextStyle(color: RatuneColors.dimmed)), + ), + ), + ], + ), + ), + ], + ); + } +} + +class _Empty extends StatelessWidget { + const _Empty(this.message); + final String message; + @override + Widget build(BuildContext context) => Align( + alignment: Alignment.centerLeft, + child: Text(message, style: const TextStyle(color: RatuneColors.dimmed)), + ); +} diff --git a/lib/screens/now_playing_screen.dart b/lib/screens/now_playing_screen.dart new file mode 100644 index 0000000..dee5f51 --- /dev/null +++ b/lib/screens/now_playing_screen.dart @@ -0,0 +1,388 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:just_audio/just_audio.dart' show LoopMode; + +import '../playback/playback_engine.dart'; +import '../state/providers.dart'; +import '../subsonic/models.dart'; +import '../theme/tokens.dart'; +import '../widgets/block_progress_bar.dart'; +import '../widgets/hairline_panel.dart'; + +/// Now Playing tab — album art + info strip + transport, bound to the live +/// playback engine. The top region shows the full-size album art by default and +/// swaps to the queue when toggled, so the art keeps its original size while the +/// queue still gets a usable amount of space on demand. +class NowPlayingScreen extends ConsumerStatefulWidget { + const NowPlayingScreen({super.key}); + + @override + ConsumerState createState() => _NowPlayingScreenState(); +} + +class _NowPlayingScreenState extends ConsumerState { + bool _showQueue = false; + + @override + Widget build(BuildContext context) { + final state = ref.watch(playbackProvider); + final accent = Theme.of(context).colorScheme.primary; + final current = state.current; + + if (current == null) { + return const Center( + child: Text('Nothing playing.', + style: TextStyle(color: RatuneColors.dimmed)), + ); + } + + return Padding( + padding: const EdgeInsets.fromLTRB( + RatuneSpacing.lg, + RatuneSpacing.xl, + RatuneSpacing.lg, + RatuneSpacing.lg, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + // The album art keeps its natural (width-bound square) size; when the + // queue is toggled on it takes over this same region. + Expanded( + child: _showQueue ? const _QueuePanel() : const _AlbumArtPanel(), + ), + const SizedBox(height: RatuneSpacing.xl), + _InfoStrip(song: current, state: state, accent: accent), + const SizedBox(height: RatuneSpacing.sm), + _FavRating(song: current), + const SizedBox(height: RatuneSpacing.xs), + _Transport(state: state, ref: ref, accent: accent), + if (!state.supported) + const Padding( + padding: EdgeInsets.only(top: RatuneSpacing.sm), + child: Text( + 'Audio output unavailable on this platform — test on Android/iOS.', + style: TextStyle(color: RatuneColors.dimmed, fontSize: 11), + ), + ), + const SizedBox(height: RatuneSpacing.sm), + _QueueToggle( + showQueue: _showQueue, + queueLength: state.queue.length, + accent: accent, + onTap: () => setState(() => _showQueue = !_showQueue), + ), + ], + ), + ); + } +} + +/// Text toggle that swaps the top region between album art and the queue. +/// Styled like the app's other "↻ re-roll" / "↻ refresh" affordances. +class _QueueToggle extends StatelessWidget { + const _QueueToggle({ + required this.showQueue, + required this.queueLength, + required this.accent, + required this.onTap, + }); + + final bool showQueue; + final int queueLength; + final Color accent; + final VoidCallback onTap; + + @override + Widget build(BuildContext context) { + return Center( + child: InkWell( + onTap: onTap, + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: RatuneSpacing.lg, + vertical: RatuneSpacing.sm, + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + showQueue ? Icons.album_outlined : Icons.queue_music, + size: 16, + color: showQueue ? accent : RatuneColors.dimmed, + ), + const SizedBox(width: RatuneSpacing.sm), + Text( + showQueue ? 'Album art' : 'Queue ($queueLength)', + style: TextStyle( + color: showQueue ? accent : RatuneColors.foreground, + ), + ), + ], + ), + ), + ), + ); + } +} + +/// The play queue with reorder-free remove controls. Fills whichever space the +/// top region gives it. +class _QueuePanel extends ConsumerWidget { + const _QueuePanel(); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final state = ref.watch(playbackProvider); + final accent = Theme.of(context).colorScheme.primary; + return HairlinePanel( + title: 'Queue', + trailing: '(${state.queue.length})', + padding: const EdgeInsets.symmetric(vertical: RatuneSpacing.md), + child: ListView.builder( + padding: EdgeInsets.zero, + itemCount: state.queue.length, + itemBuilder: (context, i) { + final song = state.queue[i]; + final isCurrent = i == state.currentIndex; + return InkWell( + onTap: () => ref + .read(playbackProvider.notifier) + .playSongs(state.queue, startIndex: i), + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: RatuneSpacing.lg, + vertical: RatuneSpacing.xs, + ), + child: Row( + children: [ + SizedBox( + width: 28, + child: Text('${i + 1}', + style: const TextStyle(color: RatuneColors.dimmed)), + ), + Expanded( + child: Text( + song.title ?? 'Untitled', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + color: isCurrent ? accent : RatuneColors.foreground, + fontWeight: + isCurrent ? FontWeight.w700 : FontWeight.w400, + ), + ), + ), + Text(_fmt(song.duration), + style: const TextStyle(color: RatuneColors.dimmed)), + InkWell( + onTap: () => + ref.read(playbackProvider.notifier).removeAt(i), + customBorder: const CircleBorder(), + child: const SizedBox( + width: RatuneSpacing.minTouchTarget, + height: RatuneSpacing.minTouchTarget, + child: Icon(Icons.close, + size: 18, color: RatuneColors.dimmed), + ), + ), + ], + ), + ), + ); + }, + ), + ); + } +} + +/// Album art isolated into its own `const` widget that watches only the +/// current track's cover art — so position-tick rebuilds of the parent don't +/// touch it. `gaplessPlayback` + a URL-keyed element keep the previous frame +/// on screen until a genuinely new image is ready (no flashing). +class _AlbumArtPanel extends ConsumerWidget { + const _AlbumArtPanel(); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final coverArt = + ref.watch(playbackProvider.select((s) => s.current?.coverArt)); + final client = ref.watch(subsonicClientProvider); + final artUri = (client != null && coverArt != null) + ? client.coverArtUri(coverArt, size: 512).toString() + : null; + + return HairlinePanel( + title: 'Album Art', + padding: const EdgeInsets.all(RatuneSpacing.md), + child: AspectRatio( + aspectRatio: 1, + child: ColoredBox( + color: RatuneColors.surface, + child: artUri != null + ? Image.network( + artUri, + key: ValueKey(artUri), + fit: BoxFit.cover, + gaplessPlayback: true, + errorBuilder: (_, _, _) => const _ArtFallback(), + ) + : const _ArtFallback(), + ), + ), + ); + } +} + +/// Favorite (star) + 1–5 rating for the current track. Watches favorites only, +/// so it updates on star/rating changes independent of position ticks. +class _FavRating extends ConsumerWidget { + const _FavRating({required this.song}); + + final Song song; + + @override + Widget build(BuildContext context, WidgetRef ref) { + final fav = ref.watch(favoritesProvider); + final accent = Theme.of(context).colorScheme.primary; + final starred = fav.isSongStarred(song.id); + final rating = + fav.ratingFor(song.id) != 0 ? fav.ratingFor(song.id) : (song.userRating ?? 0); + + return Row( + children: [ + InkWell( + onTap: () => ref.read(favoritesProvider.notifier).toggleSong(song), + customBorder: const CircleBorder(), + child: Padding( + padding: const EdgeInsets.all(RatuneSpacing.sm), + child: Icon( + starred ? Icons.favorite : Icons.favorite_border, + color: starred ? accent : RatuneColors.dimmed, + size: 22, + ), + ), + ), + const SizedBox(width: RatuneSpacing.md), + for (int i = 1; i <= 5; i++) + GestureDetector( + onTap: () => ref + .read(favoritesProvider.notifier) + .rateSong(song.id, i == rating ? 0 : i), + child: Padding( + padding: const EdgeInsets.all(2), + child: Icon( + i <= rating ? Icons.star : Icons.star_border, + size: 18, + color: i <= rating ? accent : RatuneColors.dimmed, + ), + ), + ), + ], + ); + } +} + +class _InfoStrip extends StatelessWidget { + const _InfoStrip( + {required this.song, required this.state, required this.accent}); + + final Song song; + final PlaybackState state; + final Color accent; + + @override + Widget build(BuildContext context) { + final album = [ + if (song.album != null) song.album, + if (song.year != null) '${song.year}', + ].join(' · '); + return Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Text(song.title ?? 'Untitled', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle(color: accent, fontWeight: FontWeight.w700)), + Text(song.artist ?? 'Unknown artist', + style: const TextStyle(color: RatuneColors.foreground)), + if (album.isNotEmpty) + Text(album, style: const TextStyle(color: RatuneColors.dimmed)), + const SizedBox(height: RatuneSpacing.md), + Row( + children: [ + Text(_fmtDur(state.position), + style: const TextStyle(color: RatuneColors.dimmed)), + const SizedBox(width: RatuneSpacing.md), + Expanded(child: BlockProgressBar(progress: state.progress)), + const SizedBox(width: RatuneSpacing.md), + Text(_fmtDur(state.duration), + style: const TextStyle(color: RatuneColors.dimmed)), + ], + ), + ], + ); + } +} + +class _Transport extends StatelessWidget { + const _Transport( + {required this.state, required this.ref, required this.accent}); + + final PlaybackState state; + final WidgetRef ref; + final Color accent; + + @override + Widget build(BuildContext context) { + final controller = ref.read(playbackProvider.notifier); + final loopIcon = switch (state.loop) { + LoopMode.one => Icons.repeat_one, + _ => Icons.repeat, + }; + return Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + _btn(Icons.shuffle, controller.toggleShuffle, + color: state.shuffle ? accent : RatuneColors.dimmed), + _btn(Icons.skip_previous, controller.previous), + _btn(state.playing ? Icons.pause : Icons.play_arrow, + controller.togglePlayPause, + color: accent, size: 40), + _btn(Icons.skip_next, controller.next), + _btn(loopIcon, controller.cycleLoop, + color: state.loop != LoopMode.off ? accent : RatuneColors.dimmed), + ], + ); + } + + Widget _btn(IconData icon, VoidCallback onTap, + {Color color = RatuneColors.foreground, double size = 28}) { + return IconButton( + onPressed: onTap, + icon: Icon(icon, color: color, size: size), + ); + } +} + +class _ArtFallback extends StatelessWidget { + const _ArtFallback(); + @override + Widget build(BuildContext context) => const Center( + child: Icon(Icons.album_outlined, + color: RatuneColors.dimmed, size: 48), + ); +} + +String _fmt(int? seconds) { + if (seconds == null) return ''; + final m = seconds ~/ 60; + final s = seconds % 60; + return '$m:${s.toString().padLeft(2, '0')}'; +} + +String _fmtDur(Duration d) { + final m = d.inMinutes; + final s = d.inSeconds % 60; + return '$m:${s.toString().padLeft(2, '0')}'; +} diff --git a/lib/screens/playlists_screen.dart b/lib/screens/playlists_screen.dart new file mode 100644 index 0000000..8204540 --- /dev/null +++ b/lib/screens/playlists_screen.dart @@ -0,0 +1,359 @@ +import 'package:collection/collection.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../state/providers.dart'; +import '../subsonic/models.dart'; +import '../theme/tokens.dart'; +import '../widgets/hairline_panel.dart'; +import 'add_to_playlist_sheet.dart'; + +/// Playlists list — server-backed with an offline mirror. Create from the app +/// bar; each row opens its detail. Rename/delete via the row overflow menu. +class PlaylistsScreen extends ConsumerWidget { + const PlaylistsScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final state = ref.watch(playlistsProvider); + final controller = ref.read(playlistsProvider.notifier); + final connected = ref.watch(subsonicClientProvider) != null; + + return Scaffold( + appBar: AppBar( + title: const Text('Playlists', + style: TextStyle(fontWeight: FontWeight.w700)), + actions: [ + IconButton( + tooltip: 'New playlist', + onPressed: connected ? () => _create(context, ref) : null, + icon: const Icon(Icons.add), + ), + ], + ), + body: SafeArea( + child: Padding( + padding: const EdgeInsets.all(RatuneSpacing.lg), + child: HairlinePanel( + title: 'Playlists', + active: true, + trailing: + state.playlists.isEmpty ? null : '(${state.playlists.length})', + padding: const EdgeInsets.symmetric(vertical: RatuneSpacing.md), + child: state.playlists.isEmpty + ? Center( + child: Text( + connected + ? 'No playlists yet. Tap + to create one.' + : 'Connect to a server to see playlists.', + textAlign: TextAlign.center, + style: const TextStyle(color: RatuneColors.dimmed), + ), + ) + : ListView.builder( + padding: EdgeInsets.zero, + itemCount: state.playlists.length, + itemBuilder: (context, i) { + final p = state.playlists[i]; + return _PlaylistRow( + name: p.name, + subtitle: p.songCount != null + ? '${p.songCount} tracks' + : null, + onTap: () => Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => PlaylistDetailScreen(id: p.id), + ), + ), + onRename: connected + ? () async { + final name = await promptPlaylistName(context, + title: 'Rename playlist', initial: p.name); + if (name != null && name.isNotEmpty) { + controller.rename(p.id, name); + } + } + : null, + onDelete: connected + ? () => _confirmDelete(context, controller, p) + : null, + ); + }, + ), + ), + ), + ), + ); + } + + Future _create(BuildContext context, WidgetRef ref) async { + final name = await promptPlaylistName(context, title: 'New playlist'); + if (name != null && name.isNotEmpty) { + await ref.read(playlistsProvider.notifier).create(name); + } + } + + Future _confirmDelete( + BuildContext context, PlaylistsController controller, Playlist p) async { + final ok = await showDialog( + context: context, + builder: (ctx) => AlertDialog( + backgroundColor: RatuneColors.surface, + title: Text('Delete "${p.name}"?'), + actions: [ + TextButton( + onPressed: () => Navigator.pop(ctx, false), + child: const Text('Cancel')), + TextButton( + onPressed: () => Navigator.pop(ctx, true), + child: const Text('Delete')), + ], + ), + ); + if (ok == true) controller.delete(p.id); + } +} + +class _PlaylistRow extends StatelessWidget { + const _PlaylistRow({ + required this.name, + required this.onTap, + this.subtitle, + this.onRename, + this.onDelete, + }); + + final String name; + final String? subtitle; + final VoidCallback onTap; + final VoidCallback? onRename; + final VoidCallback? onDelete; + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: onTap, + child: Container( + constraints: + const BoxConstraints(minHeight: RatuneSpacing.minTouchTarget), + padding: const EdgeInsets.only(left: RatuneSpacing.lg), + child: Row( + children: [ + const Icon(Icons.queue_music, size: 18, color: RatuneColors.dimmed), + const SizedBox(width: RatuneSpacing.md), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(name, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle(color: RatuneColors.foreground)), + if (subtitle != null) + Text(subtitle!, + style: const TextStyle( + color: RatuneColors.dimmed, fontSize: 12)), + ], + ), + ), + if (onRename != null || onDelete != null) + PopupMenuButton( + icon: const Icon(Icons.more_vert, + size: 20, color: RatuneColors.dimmed), + color: RatuneColors.surface, + onSelected: (v) { + if (v == 'rename') onRename?.call(); + if (v == 'delete') onDelete?.call(); + }, + itemBuilder: (_) => [ + if (onRename != null) + const PopupMenuItem(value: 'rename', child: Text('Rename')), + if (onDelete != null) + const PopupMenuItem(value: 'delete', child: Text('Delete')), + ], + ), + ], + ), + ), + ); + } +} + +/// One playlist's tracks: play all / download all from the app bar, remove a +/// track via its trailing control. +class PlaylistDetailScreen extends ConsumerStatefulWidget { + const PlaylistDetailScreen({super.key, required this.id}); + + final String id; + + @override + ConsumerState createState() => + _PlaylistDetailScreenState(); +} + +class _PlaylistDetailScreenState extends ConsumerState { + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + ref.read(playlistsProvider.notifier).loadDetail(widget.id); + }); + } + + @override + Widget build(BuildContext context) { + final detail = ref.watch( + playlistsProvider.select((s) => s.details[widget.id])); + final summary = ref.watch(playlistsProvider.select((s) => + s.playlists.where((p) => p.id == widget.id).firstOrNull)); + final connected = ref.watch(subsonicClientProvider) != null; + final playback = ref.read(playbackProvider.notifier); + final songs = detail?.songs ?? const []; + + return Scaffold( + appBar: AppBar( + title: Text(detail?.name ?? summary?.name ?? 'Playlist', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle(fontWeight: FontWeight.w700)), + actions: [ + IconButton( + tooltip: 'Play all', + onPressed: + songs.isEmpty ? null : () => playback.playSongs(songs), + icon: const Icon(Icons.play_arrow), + ), + IconButton( + tooltip: 'Download all', + onPressed: songs.isEmpty + ? null + : () { + ref + .read(downloadManagerProvider.notifier) + .downloadAll(songs); + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text('Downloading playlist…'), + duration: Duration(seconds: 2)), + ); + }, + icon: const Icon(Icons.download), + ), + ], + ), + body: SafeArea( + child: detail == null + ? const Center( + child: Text('Loading…', + style: TextStyle(color: RatuneColors.dimmed)), + ) + : songs.isEmpty + ? const Center( + child: Text('This playlist is empty.', + style: TextStyle(color: RatuneColors.dimmed)), + ) + : ListView.builder( + padding: const EdgeInsets.symmetric( + vertical: RatuneSpacing.md), + itemCount: songs.length, + itemBuilder: (context, i) { + final song = songs[i]; + return _TrackRow( + index: i + 1, + song: song, + onTap: () => playback.playSongs(songs, startIndex: i), + onPlayNext: () => playback.playNext(song), + onAddToQueue: () => playback.addToQueue(song), + onRemove: connected + ? () => ref + .read(playlistsProvider.notifier) + .removeAt(widget.id, i) + : null, + ); + }, + ), + ), + ); + } +} + +class _TrackRow extends StatelessWidget { + const _TrackRow({ + required this.index, + required this.song, + required this.onTap, + required this.onPlayNext, + required this.onAddToQueue, + this.onRemove, + }); + + final int index; + final Song song; + final VoidCallback onTap; + final VoidCallback onPlayNext; + final VoidCallback onAddToQueue; + final VoidCallback? onRemove; + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: onTap, + child: Container( + constraints: + const BoxConstraints(minHeight: RatuneSpacing.minTouchTarget), + padding: const EdgeInsets.only(left: RatuneSpacing.lg), + child: Row( + children: [ + SizedBox( + width: 28, + child: Text('$index', + style: const TextStyle(color: RatuneColors.dimmed)), + ), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(song.title ?? 'Untitled', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle(color: RatuneColors.foreground)), + if (song.artist != null) + Text(song.artist!, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle( + color: RatuneColors.dimmed, fontSize: 12)), + ], + ), + ), + PopupMenuButton( + icon: const Icon(Icons.more_vert, + size: 20, color: RatuneColors.dimmed), + color: RatuneColors.surface, + onSelected: (v) { + switch (v) { + case 'next': + onPlayNext(); + case 'queue': + onAddToQueue(); + case 'remove': + onRemove?.call(); + } + }, + itemBuilder: (_) => [ + const PopupMenuItem(value: 'next', child: Text('Play next')), + const PopupMenuItem( + value: 'queue', child: Text('Add to queue')), + if (onRemove != null) + const PopupMenuItem( + value: 'remove', child: Text('Remove from playlist')), + ], + ), + ], + ), + ), + ); + } +} diff --git a/lib/screens/search_screen.dart b/lib/screens/search_screen.dart new file mode 100644 index 0000000..4b3438d --- /dev/null +++ b/lib/screens/search_screen.dart @@ -0,0 +1,119 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../state/providers.dart'; +import '../theme/tokens.dart'; +import 'browser_screen.dart'; + +/// Search — `search3` across artists / albums / songs. +class SearchScreen extends ConsumerStatefulWidget { + const SearchScreen({super.key}); + + @override + ConsumerState createState() => _SearchScreenState(); +} + +class _SearchScreenState extends ConsumerState { + final _controller = TextEditingController(); + String _query = ''; + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final accent = Theme.of(context).colorScheme.primary; + return Scaffold( + appBar: AppBar( + title: TextField( + controller: _controller, + autofocus: true, + textInputAction: TextInputAction.search, + style: const TextStyle(color: RatuneColors.foreground), + cursorColor: accent, + decoration: const InputDecoration( + hintText: 'Search artists, albums, songs…', + hintStyle: TextStyle(color: RatuneColors.dimmed), + border: InputBorder.none, + ), + onSubmitted: (v) => setState(() => _query = v), + ), + ), + body: SafeArea( + child: _query.trim().isEmpty + ? const Center( + child: Text('Type and press search.', + style: TextStyle(color: RatuneColors.dimmed)), + ) + : _Results(query: _query), + ), + ); + } +} + +class _Results extends ConsumerWidget { + const _Results({required this.query}); + + final String query; + + @override + Widget build(BuildContext context, WidgetRef ref) { + final results = ref.watch(searchProvider(query)); + return results.when( + loading: () => const Center( + child: SizedBox( + height: 20, + width: 20, + child: CircularProgressIndicator(strokeWidth: 2), + ), + ), + error: (e, _) => Center( + child: Text('$e', style: const TextStyle(color: RatuneColors.dimmed)), + ), + data: (r) { + if (r.artists.isEmpty && r.albums.isEmpty && r.songs.isEmpty) { + return const Center( + child: Text('No results.', + style: TextStyle(color: RatuneColors.dimmed)), + ); + } + return ListView( + children: [ + for (final a in r.artists) + BrowseRow( + title: a.name ?? 'Unknown artist', + onTap: () => Navigator.of(context).push( + MaterialPageRoute(builder: (_) => ArtistScreen(id: a.id)), + ), + ), + for (final a in r.albums) + BrowseRow( + title: a.name ?? 'Unknown album', + trailing: a.artist, + onTap: () => Navigator.of(context).push( + MaterialPageRoute(builder: (_) => AlbumScreen(id: a.id)), + ), + ), + for (var i = 0; i < r.songs.length; i++) + BrowseRow( + title: r.songs[i].title ?? 'Untitled', + trailing: r.songs[i].artist, + onTap: () => ref + .read(playbackProvider.notifier) + .playSongs(r.songs, startIndex: i), + onPlayNext: () => ref + .read(playbackProvider.notifier) + .playNext(r.songs[i]), + onAddToQueue: () => ref + .read(playbackProvider.notifier) + .addToQueue(r.songs[i]), + ), + ], + ); + }, + ); + } +} diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart new file mode 100644 index 0000000..c2f9bbd --- /dev/null +++ b/lib/screens/settings_screen.dart @@ -0,0 +1,174 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../settings/settings_store.dart'; +import '../theme/tokens.dart'; +import '../widgets/hairline_panel.dart'; + +/// Audio-quality settings: independent streaming and download knobs, both +/// driven by Subsonic's `stream` transcode params (see `settings/settings_store.dart`). +class SettingsScreen extends ConsumerWidget { + const SettingsScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final settings = ref.watch(settingsProvider); + final controller = ref.read(settingsProvider.notifier); + + return Scaffold( + appBar: AppBar( + title: const Text('Settings', + style: TextStyle(fontWeight: FontWeight.w700)), + ), + body: SafeArea( + child: ListView( + padding: const EdgeInsets.all(RatuneSpacing.lg), + children: [ + HairlinePanel( + title: 'Streaming', + active: true, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const _Caption( + 'Quality used when playing tracks that are not downloaded.'), + const SizedBox(height: RatuneSpacing.md), + _ChoiceChips( + label: 'Max bitrate', + values: AppSettings.bitrateChoices, + selected: settings.streamMaxBitRate, + labelFor: AppSettings.bitrateLabel, + onSelect: controller.setStreamMaxBitRate, + ), + ], + ), + ), + const SizedBox(height: RatuneSpacing.xl), + HairlinePanel( + title: 'Downloads', + active: true, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const _Caption( + 'Quality used when saving tracks for offline playback. ' + '"Original" keeps the source file (best quality, largest).'), + const SizedBox(height: RatuneSpacing.md), + _ChoiceChips( + label: 'Max bitrate', + values: AppSettings.bitrateChoices, + selected: settings.downloadMaxBitRate, + labelFor: AppSettings.bitrateLabel, + onSelect: controller.setDownloadMaxBitRate, + ), + const SizedBox(height: RatuneSpacing.lg), + _ChoiceChips( + label: 'Format', + values: AppSettings.formatChoices, + selected: settings.downloadFormat, + labelFor: AppSettings.formatLabel, + onSelect: controller.setDownloadFormat, + ), + ], + ), + ), + ], + ), + ), + ); + } +} + +class _Caption extends StatelessWidget { + const _Caption(this.text); + final String text; + @override + Widget build(BuildContext context) => Text( + text, + style: const TextStyle(color: RatuneColors.dimmed, fontSize: 12), + ); +} + +/// A labelled row of selectable value chips — the app's underline-accent +/// language applied to compact bordered chips. +class _ChoiceChips extends StatelessWidget { + const _ChoiceChips({ + required this.label, + required this.values, + required this.selected, + required this.labelFor, + required this.onSelect, + }); + + final String label; + final List values; + final T selected; + final String Function(T) labelFor; + final ValueChanged onSelect; + + @override + Widget build(BuildContext context) { + final accent = Theme.of(context).colorScheme.primary; + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(label, style: const TextStyle(color: RatuneColors.foreground)), + const SizedBox(height: RatuneSpacing.sm), + Wrap( + spacing: RatuneSpacing.sm, + runSpacing: RatuneSpacing.sm, + children: [ + for (final v in values) + _Chip( + text: labelFor(v), + active: v == selected, + accent: accent, + onTap: () => onSelect(v), + ), + ], + ), + ], + ); + } +} + +class _Chip extends StatelessWidget { + const _Chip({ + required this.text, + required this.active, + required this.accent, + required this.onTap, + }); + + final String text; + final bool active; + final Color accent; + final VoidCallback onTap; + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: onTap, + child: Container( + constraints: const BoxConstraints(minHeight: RatuneSpacing.minTouchTarget), + padding: const EdgeInsets.symmetric( + horizontal: RatuneSpacing.lg, + vertical: RatuneSpacing.md, + ), + decoration: BoxDecoration( + border: Border.all( + color: active ? accent : RatuneColors.border, + ), + color: active ? accent.withValues(alpha: 0.12) : RatuneColors.surface, + ), + child: Text( + text, + style: TextStyle( + color: active ? accent : RatuneColors.foreground, + fontWeight: active ? FontWeight.w700 : FontWeight.w400, + ), + ), + ), + ); + } +} diff --git a/lib/settings/settings_store.dart b/lib/settings/settings_store.dart new file mode 100644 index 0000000..b31bbf4 --- /dev/null +++ b/lib/settings/settings_store.dart @@ -0,0 +1,119 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:path_provider/path_provider.dart'; + +/// User-tunable audio quality. Streaming and offline downloads have independent +/// knobs, both driven by Subsonic's `stream` transcode params (`maxBitRate` + +/// `format`; a rate of 0 means original / no transcode). These are global (not +/// per-server) and persisted to a single atomic JSON file, following the +/// write pattern in `library/library_index.dart`. +class AppSettings { + const AppSettings({ + this.streamMaxBitRate = 0, + this.downloadMaxBitRate = 0, + this.downloadFormat, + }); + + /// Cap for live streaming, in kbps. 0 = original / no transcode. + final int streamMaxBitRate; + + /// Cap for downloaded files, in kbps. 0 = original (best offline quality). + final int downloadMaxBitRate; + + /// Transcode container for downloads (`mp3`, `opus`, `aac`), or null to keep + /// the original file / let the server decide. + final String? downloadFormat; + + /// Offered bitrate choices (kbps); 0 renders as "Original". + static const List bitrateChoices = [0, 96, 128, 192, 256, 320]; + + /// Offered download containers; null renders as "Original". + static const List formatChoices = [null, 'mp3', 'opus', 'aac']; + + static String bitrateLabel(int rate) => rate == 0 ? 'Original' : '$rate kbps'; + static String formatLabel(String? f) => f ?? 'Original'; + + AppSettings copyWith({ + int? streamMaxBitRate, + int? downloadMaxBitRate, + // Sentinel so an explicit null (→ original) is distinguishable from "unset". + Object? downloadFormat = _unset, + }) => + AppSettings( + streamMaxBitRate: streamMaxBitRate ?? this.streamMaxBitRate, + downloadMaxBitRate: downloadMaxBitRate ?? this.downloadMaxBitRate, + downloadFormat: identical(downloadFormat, _unset) + ? this.downloadFormat + : downloadFormat as String?, + ); + + static const Object _unset = Object(); + + Map toJson() => { + 'streamMaxBitRate': streamMaxBitRate, + 'downloadMaxBitRate': downloadMaxBitRate, + if (downloadFormat != null) 'downloadFormat': downloadFormat, + }; + + factory AppSettings.fromJson(Map j) => AppSettings( + streamMaxBitRate: (j['streamMaxBitRate'] as num?)?.toInt() ?? 0, + downloadMaxBitRate: (j['downloadMaxBitRate'] as num?)?.toInt() ?? 0, + downloadFormat: j['downloadFormat'] as String?, + ); +} + +/// Loads settings on launch and persists every change (atomic temp+rename). +class SettingsController extends StateNotifier { + SettingsController() : super(const AppSettings()) { + _load(); + } + + File? _file; + + Future _load() async { + try { + final dir = await getApplicationSupportDirectory(); + _file = File('${dir.path}/settings.json'); + if (await _file!.exists()) { + final raw = jsonDecode(await _file!.readAsString()); + if (raw is Map) { + state = AppSettings.fromJson(raw.cast()); + } + } + } catch (_) { + // Missing/corrupt settings are non-fatal — keep the defaults. + } + } + + void setStreamMaxBitRate(int rate) { + state = state.copyWith(streamMaxBitRate: rate); + _persist(); + } + + void setDownloadMaxBitRate(int rate) { + state = state.copyWith(downloadMaxBitRate: rate); + _persist(); + } + + void setDownloadFormat(String? format) { + state = state.copyWith(downloadFormat: format); + _persist(); + } + + Future _persist() async { + try { + final file = _file; + if (file == null) return; + final tmp = File('${file.path}.tmp'); + await tmp.writeAsString(jsonEncode(state.toJson())); + await tmp.rename(file.path); + } catch (_) {} + } +} + +final settingsProvider = + StateNotifierProvider( + (ref) => SettingsController(), +); diff --git a/lib/shell/app_shell.dart b/lib/shell/app_shell.dart new file mode 100644 index 0000000..c8cfee3 --- /dev/null +++ b/lib/shell/app_shell.dart @@ -0,0 +1,216 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../screens/browser_screen.dart'; +import '../screens/connect_sheet.dart'; +import '../screens/home_screen.dart'; +import '../screens/now_playing_screen.dart'; +import '../state/providers.dart'; +import '../theme/tokens.dart'; +import '../widgets/mini_player.dart'; + +/// Top-level shell: the three Ratune tabs (Home / Browse / Now Playing) with a +/// bottom tab bar and a status bar, mirroring the terminal layout. +class AppShell extends ConsumerStatefulWidget { + const AppShell({super.key}); + + @override + ConsumerState createState() => _AppShellState(); +} + +class _AppShellState extends ConsumerState { + static const _tabs = ['Home', 'Browse', 'Now Playing']; + + // Home and Browse push detail screens, so each owns a nested Navigator whose + // routes render *inside* the tab, beneath the persistent mini-player/tab bar. + // Now Playing never pushes, so it needs none. + final _homeNavKey = GlobalKey(); + final _browseNavKey = GlobalKey(); + + GlobalKey? _navKeyForTab(int tab) => switch (tab) { + 0 => _homeNavKey, + 1 => _browseNavKey, + _ => null, + }; + + /// Android system-back: pop the active tab's nested stack first, then fall + /// back to Home, and only exit the app from the Home root. + void _handleBack(int tab) { + final nav = _navKeyForTab(tab)?.currentState; + if (nav != null && nav.canPop()) { + nav.pop(); + } else if (tab != 0) { + ref.read(selectedTabProvider.notifier).state = 0; + } else { + SystemNavigator.pop(); + } + } + + @override + Widget build(BuildContext context) { + // Keep favorites alive from launch so its connect/disconnect listener runs + // and hydrates stars/ratings as soon as a server connects. + ref.watch(favoritesProvider); + final index = ref.watch(selectedTabProvider); + + return PopScope( + canPop: false, + onPopInvokedWithResult: (didPop, _) { + if (!didPop) _handleBack(index); + }, + child: Scaffold( + body: SafeArea( + bottom: false, + child: IndexedStack( + index: index, + children: [ + _TabNavigator(navigatorKey: _homeNavKey, child: const HomeScreen()), + _TabNavigator( + navigatorKey: _browseNavKey, child: const BrowserScreen()), + const NowPlayingScreen(), + ], + ), + ), + bottomNavigationBar: SafeArea( + top: false, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + const MiniPlayer(), + _TabBar( + tabs: _tabs, + index: index, + onSelect: (i) => + ref.read(selectedTabProvider.notifier).state = i, + ), + const _StatusBar(), + ], + ), + ), + ), + ); + } +} + +/// Wraps a tab root in its own [Navigator] so `Navigator.of(context).push` +/// calls from within the tab resolve here (nested) rather than the root +/// navigator — keeping the mini-player and tab bar on screen. +class _TabNavigator extends StatelessWidget { + const _TabNavigator({required this.navigatorKey, required this.child}); + + final GlobalKey navigatorKey; + final Widget child; + + @override + Widget build(BuildContext context) { + return Navigator( + key: navigatorKey, + onGenerateRoute: (settings) => + MaterialPageRoute(builder: (_) => child, settings: settings), + ); + } +} + +class _TabBar extends StatelessWidget { + const _TabBar({ + required this.tabs, + required this.index, + required this.onSelect, + }); + + final List tabs; + final int index; + final ValueChanged onSelect; + + @override + Widget build(BuildContext context) { + final accent = Theme.of(context).colorScheme.primary; + final children = []; + for (var i = 0; i < tabs.length; i++) { + final active = i == index; + children.add( + InkWell( + onTap: () => onSelect(i), + child: Container( + constraints: + const BoxConstraints(minHeight: RatuneSpacing.minTouchTarget), + padding: const EdgeInsets.symmetric( + horizontal: RatuneSpacing.md, + vertical: RatuneSpacing.md, + ), + child: Center( + child: Text( + tabs[i], + style: TextStyle( + color: active ? RatuneColors.foreground : RatuneColors.dimmed, + fontWeight: active ? FontWeight.w700 : FontWeight.w400, + decoration: + active ? TextDecoration.underline : TextDecoration.none, + decorationColor: accent, + decorationThickness: 2, + ), + ), + ), + ), + ), + ); + if (i < tabs.length - 1) { + children.add( + const Text('|', style: TextStyle(color: RatuneColors.border)), + ); + } + } + return Container( + decoration: const BoxDecoration( + border: Border(top: BorderSide(color: RatuneColors.border)), + ), + child: Row(mainAxisAlignment: MainAxisAlignment.center, children: children), + ); + } +} + +class _StatusBar extends ConsumerWidget { + const _StatusBar(); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final conn = ref.watch(connectionProvider); + final accent = Theme.of(context).colorScheme.primary; + + final (glyph, label, color) = switch (conn.status) { + ConnStatus.online => ( + '●', + conn.credentials?.display ?? 'online', + accent, + ), + ConnStatus.connecting => ('◐', 'connecting…', RatuneColors.dimmed), + ConnStatus.error => ('○', 'offline', const Color(0xFFE06C75)), + ConnStatus.disconnected => ('○', 'tap to connect', RatuneColors.dimmed), + }; + + return InkWell( + onTap: () => showConnectSheet(context), + child: Container( + height: 22, + padding: const EdgeInsets.symmetric(horizontal: RatuneSpacing.lg), + color: RatuneColors.surface, + child: Row( + children: [ + Text('$glyph ', style: TextStyle(color: color)), + Expanded( + child: Text( + label, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle(color: color), + ), + ), + const SizedBox(width: RatuneSpacing.md), + const Text('i — help', style: TextStyle(color: RatuneColors.dimmed)), + ], + ), + ), + ); + } +} diff --git a/lib/state/favorites.dart b/lib/state/favorites.dart new file mode 100644 index 0000000..3e573a8 --- /dev/null +++ b/lib/state/favorites.dart @@ -0,0 +1,98 @@ +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../subsonic/models.dart'; +import '../subsonic/subsonic_client.dart'; + +/// Client-side mirror of the server's stars + ratings, so toggles feel instant +/// (optimistic update, reverted on failure). Hydrated from `getStarred2`. +class FavoritesState { + const FavoritesState({ + this.songIds = const {}, + this.albumIds = const {}, + this.artistIds = const {}, + this.ratings = const {}, + }); + + final Set songIds; + final Set albumIds; + final Set artistIds; + final Map ratings; + + bool isSongStarred(String id) => songIds.contains(id); + int ratingFor(String id) => ratings[id] ?? 0; + + FavoritesState copyWith({ + Set? songIds, + Set? albumIds, + Set? artistIds, + Map? ratings, + }) => + FavoritesState( + songIds: songIds ?? this.songIds, + albumIds: albumIds ?? this.albumIds, + artistIds: artistIds ?? this.artistIds, + ratings: ratings ?? this.ratings, + ); +} + +class FavoritesController extends StateNotifier { + FavoritesController(this._clientGetter) : super(const FavoritesState()) { + if (_clientGetter() != null) hydrate(); + } + + final SubsonicClient? Function() _clientGetter; + + Future hydrate() async { + final client = _clientGetter(); + if (client == null) return; + try { + final starred = await client.getStarred2(); + final ratings = {}; + for (final s in starred.songs) { + if (s.userRating != null) ratings[s.id] = s.userRating!; + } + state = FavoritesState( + songIds: starred.songs.map((s) => s.id).toSet(), + albumIds: starred.albums.map((a) => a.id).toSet(), + artistIds: starred.artists.map((a) => a.id).toSet(), + ratings: ratings, + ); + } catch (_) { + // Leave current state on failure. + } + } + + void clear() => state = const FavoritesState(); + + Future toggleSong(Song song) async { + final client = _clientGetter(); + if (client == null) return; + final wasStarred = state.isSongStarred(song.id); + final next = Set.from(state.songIds); + wasStarred ? next.remove(song.id) : next.add(song.id); + state = state.copyWith(songIds: next); // optimistic + try { + await client.setStarred(starred: !wasStarred, songId: song.id); + } catch (_) { + // Revert on failure. + final reverted = Set.from(state.songIds); + wasStarred ? reverted.add(song.id) : reverted.remove(song.id); + state = state.copyWith(songIds: reverted); + } + } + + Future rateSong(String songId, int rating) async { + final client = _clientGetter(); + if (client == null) return; + final previous = state.ratings[songId] ?? 0; + final next = Map.from(state.ratings)..[songId] = rating; + state = state.copyWith(ratings: next); // optimistic + try { + await client.setRating(songId, rating); + } catch (_) { + final reverted = Map.from(state.ratings) + ..[songId] = previous; + state = state.copyWith(ratings: reverted); + } + } +} diff --git a/lib/state/providers.dart b/lib/state/providers.dart new file mode 100644 index 0000000..5f0ab63 --- /dev/null +++ b/lib/state/providers.dart @@ -0,0 +1,340 @@ +import 'dart:convert'; + +import 'package:crypto/crypto.dart'; +import 'package:flutter/widgets.dart' show NetworkImage; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../downloads/download_manager.dart'; +import '../history/play_history.dart'; +import '../library/library_index.dart'; +import '../playback/playback_engine.dart'; +import '../playlists/playlists.dart'; +import '../settings/settings_store.dart'; +import '../subsonic/credentials.dart'; +import '../subsonic/models.dart'; +import '../subsonic/subsonic_client.dart'; +import '../theme/accent.dart'; +import '../theme/accent_extract.dart'; +import 'favorites.dart'; + +// ---- Connection --------------------------------------------------------- + +enum ConnStatus { disconnected, connecting, online, error } + +class ConnectionState { + const ConnectionState({ + required this.status, + this.client, + this.credentials, + this.error, + }); + + final ConnStatus status; + final SubsonicClient? client; + final SubsonicCredentials? credentials; + final String? error; + + bool get isOnline => status == ConnStatus.online; +} + +final credentialStoreProvider = + Provider((_) => CredentialStore()); + +/// Owns the active server connection: builds the client, pings, persists +/// credentials, and auto-restores on launch. +class ConnectionController extends StateNotifier { + ConnectionController(this._store) + : super(const ConnectionState(status: ConnStatus.disconnected)) { + _restore(); + } + + final CredentialStore _store; + + Future _restore() async { + try { + final creds = await _store.load(); + if (creds != null) { + await connect(creds, persist: false); + } + } catch (_) { + // No secure-storage backend available (e.g. Linux without a running + // keyring daemon) — start disconnected rather than crashing. + } + } + + Future connect(SubsonicCredentials creds, {bool persist = true}) async { + state = const ConnectionState(status: ConnStatus.connecting); + final client = SubsonicClient( + baseUrl: creds.url, + username: creds.username, + password: creds.password, + ); + try { + final ok = await client.ping(); + if (!ok) { + // Keep the credentials on a reachability failure so the app still knows + // *which* server it is (offline downloads / playlists key off this) and + // can retry — only auth failures below drop them. + state = ConnectionState( + status: ConnStatus.error, + credentials: creds, + error: 'Could not reach the server.', + ); + return false; + } + // Persistence is best-effort: a locked/absent secure-storage backend + // (e.g. a locked Linux keyring) must not stop this session connecting. + if (persist) { + try { + await _store.save(creds); + } catch (_) {} + } + state = ConnectionState( + status: ConnStatus.online, + client: client, + credentials: creds, + ); + return true; + } on SubsonicError catch (e) { + // Auth failures drop the credentials (they're wrong); any other server + // error keeps them so offline features still resolve the server key. + state = ConnectionState( + status: ConnStatus.error, + credentials: e.isAuthFailure ? null : creds, + error: e.isAuthFailure ? 'Wrong username or password.' : e.message, + ); + return false; + } catch (e) { + state = ConnectionState( + status: ConnStatus.error, + credentials: creds, + error: e.toString(), + ); + return false; + } + } + + Future disconnect() async { + await _store.clear(); + state = const ConnectionState(status: ConnStatus.disconnected); + } +} + +final connectionProvider = + StateNotifierProvider( + (ref) => ConnectionController(ref.watch(credentialStoreProvider)), +); + +/// The active client, or null when not connected. +final subsonicClientProvider = Provider( + (ref) => ref.watch(connectionProvider).client, +); + +/// Stable per-server cache key (`md5(baseUrl|username)`), derived from the +/// current credentials so it also resolves while offline (the error state +/// retains credentials). Null when no server has ever been configured. Used to +/// scope on-disk downloads/playlists to the server they belong to. +final serverKeyProvider = Provider((ref) { + final creds = ref.watch(connectionProvider).credentials; + if (creds == null) return null; + final base = creds.url.endsWith('/') + ? creds.url.substring(0, creds.url.length - 1) + : creds.url; + return md5.convert(utf8.encode('$base|${creds.username}')).toString(); +}); + +// ---- Navigation / browse mode ------------------------------------------- + +/// The active bottom-tab index. Single source of truth shared by the tab bar +/// and the mini-player (which jumps to Now Playing on tap). +final selectedTabProvider = StateProvider((_) => 0); + +/// Index of the Now Playing tab in the shell's tab list. +const int nowPlayingTabIndex = 2; + +/// Top-level Browse mode selector. +enum BrowseMode { artists, albums, tracks } + +final browseModeProvider = StateProvider((_) => BrowseMode.artists); + +// ---- Library ------------------------------------------------------------ + +final artistsProvider = FutureProvider>((ref) async { + final client = ref.watch(subsonicClientProvider); + if (client == null) return const []; + final result = await client.getArtists(); + return result.all; +}); + +/// All albums (alphabetical), paged through fully so nothing is silently +/// truncated. Backs the Albums cover-art grid. +final albumsProvider = FutureProvider>((ref) async { + final client = ref.watch(subsonicClientProvider); + if (client == null) return const []; + const pageSize = 500; + final all = []; + var offset = 0; + while (true) { + final page = await client.getAlbumList2(size: pageSize, offset: offset); + all.addAll(page); + if (page.length < pageSize) break; + offset += pageSize; + } + return all; +}); + +/// The crawled + cached flat song index that backs the Tracks view. Cleared +/// (and any in-flight build cancelled) whenever the server changes. +final libraryIndexProvider = + StateNotifierProvider((ref) { + final controller = + LibraryIndexController(() => ref.read(subsonicClientProvider)); + ref.listen(connectionProvider, (_, _) { + controller.onConnectionChanged(); + }); + return controller; +}); + +final artistProvider = FutureProvider.family((ref, id) async { + final client = ref.watch(subsonicClientProvider); + if (client == null) throw StateError('Not connected'); + return client.getArtist(id); +}); + +final albumProvider = FutureProvider.family((ref, id) async { + final client = ref.watch(subsonicClientProvider); + if (client == null) throw StateError('Not connected'); + return client.getAlbum(id); +}); + +final searchProvider = + FutureProvider.family((ref, query) async { + final client = ref.watch(subsonicClientProvider); + if (client == null || query.trim().isEmpty) { + return SearchResult3(artists: const [], albums: const [], songs: const []); + } + return client.search3(query.trim()); +}); + +// ---- History (Home tab) ------------------------------------------------- + +final playHistoryProvider = + StateNotifierProvider>( + (ref) => HistoryController(), +); + +final recentSongsProvider = Provider>( + (ref) => recentSongs(ref.watch(playHistoryProvider)), +); + +final recentAlbumsProvider = Provider>( + (ref) => recentAlbums(ref.watch(playHistoryProvider)), +); + +/// Bump to re-roll the rediscover suggestions. +final rediscoverSeedProvider = StateProvider((_) => 0); + +final rediscoverProvider = Provider>((ref) { + final history = ref.watch(playHistoryProvider); + final seed = ref.watch(rediscoverSeedProvider); + return rediscover(history, seed: seed); +}); + +// ---- Favorites / ratings ------------------------------------------------ + +final favoritesProvider = + StateNotifierProvider((ref) { + final controller = + FavoritesController(() => ref.read(subsonicClientProvider)); + // Re-hydrate on connect, clear on disconnect. + ref.listen(connectionProvider, (prev, next) { + if (next.isOnline) { + controller.hydrate(); + } else { + controller.clear(); + } + }); + return controller; +}); + +/// Full starred set for the Favorites screen. +final starredProvider = FutureProvider((ref) async { + // Re-run when the local favorites set changes (e.g. after a toggle). + ref.watch(favoritesProvider); + final client = ref.watch(subsonicClientProvider); + if (client == null) { + return Starred2(artists: const [], albums: const [], songs: const []); + } + return client.getStarred2(); +}); + +// ---- Downloads ---------------------------------------------------------- + +/// Offline download store: fetches tracks to disk (per-server) and exposes +/// their status. Reloads its manifest whenever the server key changes. +final downloadManagerProvider = + StateNotifierProvider((ref) { + final controller = DownloadController( + clientGetter: () => ref.read(subsonicClientProvider), + settingsGetter: () => ref.read(settingsProvider), + serverKeyGetter: () => ref.read(serverKeyProvider), + ); + ref.listen(serverKeyProvider, (_, _) { + controller.reloadForServer(); + }); + return controller; +}); + +// ---- Playlists ---------------------------------------------------------- + +/// Server-backed playlists with an offline mirror. Reloads/refreshes whenever +/// the server key changes (connect / disconnect / server switch). +final playlistsProvider = + StateNotifierProvider((ref) { + final controller = PlaylistsController( + clientGetter: () => ref.read(subsonicClientProvider), + serverKeyGetter: () => ref.read(serverKeyProvider), + ); + ref.listen(serverKeyProvider, (_, _) { + controller.reloadForServer(); + }); + return controller; +}); + +// ---- Playback ----------------------------------------------------------- + +final playbackProvider = + StateNotifierProvider((ref) { + // Prefer a local downloaded file when one exists (works offline / survives + // service interruptions); otherwise stream at the configured bitrate. + Uri? streamUriFor(Song s) { + final local = ref.read(downloadManagerProvider.notifier).localPathFor(s.id); + if (local != null) return Uri.file(local); + final client = ref.read(subsonicClientProvider); + if (client == null) return null; + return client.streamUri( + s.id, + maxBitRate: ref.read(settingsProvider).streamMaxBitRate, + ); + } + + Uri? coverArtUriFor(Song s) { + final client = ref.read(subsonicClientProvider); + if (client == null || s.coverArt == null) return null; + return client.coverArtUri(s.coverArt!, size: 512); + } + + return PlaybackController( + streamUriFor: streamUriFor, + coverArtUriFor: coverArtUriFor, + onArt: (artUri) async { + final color = await extractAccent(NetworkImage(artUri.toString())); + if (color != null) ref.read(accentProvider.notifier).set(color); + }, + onPlay: (song) { + // Local history (drives the Home tab) + best-effort server scrobble. + ref.read(playHistoryProvider.notifier).record(song); + ref.read(subsonicClientProvider)?.scrobble(song.id).ignore(); + }, + ); +}); diff --git a/lib/subsonic/credentials.dart b/lib/subsonic/credentials.dart new file mode 100644 index 0000000..b2dba21 --- /dev/null +++ b/lib/subsonic/credentials.dart @@ -0,0 +1,64 @@ +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; + +/// A Subsonic server connection. The password is only ever held in memory and +/// in the platform secure store — never in plain app storage (mirrors Ratune's +/// keyring-first secret handling). +class SubsonicCredentials { + const SubsonicCredentials({ + required this.url, + required this.username, + required this.password, + this.alias, + }); + + final String url; + final String username; + final String password; + + /// Optional display label shown instead of the raw URL (Ratune `[server].alias`). + final String? alias; + + String get display => alias?.isNotEmpty == true ? alias! : Uri.parse(url).host; +} + +/// Persists [SubsonicCredentials] to the platform secure store +/// (Keychain / Keystore / libsecret). +class CredentialStore { + CredentialStore([FlutterSecureStorage? storage]) + : _storage = storage ?? const FlutterSecureStorage(); + + final FlutterSecureStorage _storage; + + static const _kUrl = 'subsonic_url'; + static const _kUser = 'subsonic_username'; + static const _kPass = 'subsonic_password'; + static const _kAlias = 'subsonic_alias'; + + Future save(SubsonicCredentials creds) async { + await _storage.write(key: _kUrl, value: creds.url); + await _storage.write(key: _kUser, value: creds.username); + await _storage.write(key: _kPass, value: creds.password); + await _storage.write(key: _kAlias, value: creds.alias ?? ''); + } + + Future load() async { + final url = await _storage.read(key: _kUrl); + final user = await _storage.read(key: _kUser); + final pass = await _storage.read(key: _kPass); + if (url == null || user == null || pass == null) return null; + final alias = await _storage.read(key: _kAlias); + return SubsonicCredentials( + url: url, + username: user, + password: pass, + alias: (alias == null || alias.isEmpty) ? null : alias, + ); + } + + Future clear() async { + await _storage.delete(key: _kUrl); + await _storage.delete(key: _kUser); + await _storage.delete(key: _kPass); + await _storage.delete(key: _kAlias); + } +} diff --git a/lib/subsonic/json_helpers.dart b/lib/subsonic/json_helpers.dart new file mode 100644 index 0000000..c3bc8dc --- /dev/null +++ b/lib/subsonic/json_helpers.dart @@ -0,0 +1,59 @@ +/// Defensive JSON helpers for the Subsonic protocol. +/// +/// Subsonic servers are inconsistent (Ratune handles the same quirks in +/// `ratune-subsonic/src/models.rs` via `OneOrMany` / `deserialize_flexible_id`): +/// * a field that is sometimes a single object and sometimes an array +/// * IDs that are sometimes strings and sometimes integers +/// Every accessor below tolerates nulls and mixed types rather than throwing. +library; + +/// Coerce a value that may be a single object, a list, or null into a list of +/// `T`, applying [fromJson] to each map element. +List oneOrMany( + dynamic value, + T Function(Map) fromJson, +) { + if (value == null) return const []; + if (value is List) { + return value + .whereType() + .map((e) => fromJson(e.cast())) + .toList(); + } + if (value is Map) { + return [fromJson(value.cast())]; + } + return const []; +} + +/// Read a string that the server might encode as an int (e.g. IDs). +String? asString(dynamic value) { + if (value == null) return null; + if (value is String) return value; + return value.toString(); +} + +/// Read an int from a value that might be an int, num, or numeric string. +int? asInt(dynamic value) { + if (value == null) return null; + if (value is int) return value; + if (value is num) return value.toInt(); + if (value is String) return int.tryParse(value); + return null; +} + +/// Read a double from an int/num/numeric-string. +double? asDouble(dynamic value) { + if (value == null) return null; + if (value is double) return value; + if (value is num) return value.toDouble(); + if (value is String) return double.tryParse(value); + return null; +} + +/// Read a bool that might arrive as a bool or the string "true"/"false". +bool asBool(dynamic value, {bool orElse = false}) { + if (value is bool) return value; + if (value is String) return value.toLowerCase() == 'true'; + return orElse; +} diff --git a/lib/subsonic/models.dart b/lib/subsonic/models.dart new file mode 100644 index 0000000..43e9599 --- /dev/null +++ b/lib/subsonic/models.dart @@ -0,0 +1,331 @@ +import 'json_helpers.dart'; + +/// Subsonic domain models, ported from `ratune-subsonic/src/models.rs`. +/// Nearly every field is nullable — servers omit fields freely. All parsing +/// goes through the defensive helpers in `json_helpers.dart`. + +class Song { + Song({ + required this.id, + this.title, + this.album, + this.artist, + this.albumId, + this.artistId, + this.track, + this.discNumber, + this.year, + this.genre, + this.coverArt, + this.duration, + this.bitRate, + this.contentType, + this.suffix, + this.size, + this.path, + this.starred = false, + this.userRating, + }); + + final String id; + final String? title; + final String? album; + final String? artist; + final String? albumId; + final String? artistId; + final int? track; + final int? discNumber; + final int? year; + final String? genre; + final String? coverArt; + + /// Track length in seconds. + final int? duration; + final int? bitRate; + final String? contentType; + final String? suffix; + final int? size; + final String? path; + final bool starred; + + /// 1–5, or null if unrated. + final int? userRating; + + factory Song.fromJson(Map j) => Song( + id: asString(j['id']) ?? '', + title: asString(j['title']), + album: asString(j['album']), + artist: asString(j['artist']), + albumId: asString(j['albumId']), + artistId: asString(j['artistId']), + track: asInt(j['track']), + discNumber: asInt(j['discNumber']), + year: asInt(j['year']), + genre: asString(j['genre']), + coverArt: asString(j['coverArt']), + duration: asInt(j['duration']), + bitRate: asInt(j['bitRate']), + contentType: asString(j['contentType']), + suffix: asString(j['suffix']), + size: asInt(j['size']), + path: asString(j['path']), + starred: j['starred'] != null, + userRating: asInt(j['userRating']), + ); + + /// Round-trips through [Song.fromJson]. Backs the persisted library index + /// (`library_index.dart`); only emits set fields to keep the cache compact. + Map toJson() => { + 'id': id, + if (title != null) 'title': title, + if (album != null) 'album': album, + if (artist != null) 'artist': artist, + if (albumId != null) 'albumId': albumId, + if (artistId != null) 'artistId': artistId, + if (track != null) 'track': track, + if (discNumber != null) 'discNumber': discNumber, + if (year != null) 'year': year, + if (genre != null) 'genre': genre, + if (coverArt != null) 'coverArt': coverArt, + if (duration != null) 'duration': duration, + if (bitRate != null) 'bitRate': bitRate, + if (contentType != null) 'contentType': contentType, + if (suffix != null) 'suffix': suffix, + if (size != null) 'size': size, + if (path != null) 'path': path, + if (starred) 'starred': true, + if (userRating != null) 'userRating': userRating, + }; +} + +class Album { + Album({ + required this.id, + this.name, + this.artist, + this.artistId, + this.coverArt, + this.songCount, + this.duration, + this.year, + this.genre, + this.starred = false, + this.userRating, + this.songs = const [], + }); + + final String id; + final String? name; + final String? artist; + final String? artistId; + final String? coverArt; + final int? songCount; + final int? duration; + final int? year; + final String? genre; + final bool starred; + final int? userRating; + + /// Populated only by `getAlbum`. + final List songs; + + factory Album.fromJson(Map j) => Album( + id: asString(j['id']) ?? '', + name: asString(j['name']) ?? asString(j['album']), + artist: asString(j['artist']), + artistId: asString(j['artistId']), + coverArt: asString(j['coverArt']), + songCount: asInt(j['songCount']), + duration: asInt(j['duration']), + year: asInt(j['year']), + genre: asString(j['genre']), + starred: j['starred'] != null, + userRating: asInt(j['userRating']), + songs: oneOrMany(j['song'], Song.fromJson), + ); +} + +class Artist { + Artist({ + required this.id, + this.name, + this.albumCount, + this.coverArt, + this.starred = false, + this.userRating, + this.albums = const [], + }); + + final String id; + final String? name; + final int? albumCount; + final String? coverArt; + final bool starred; + final int? userRating; + + /// Populated only by `getArtist`. + final List albums; + + factory Artist.fromJson(Map j) => Artist( + id: asString(j['id']) ?? '', + name: asString(j['name']), + albumCount: asInt(j['albumCount']), + coverArt: asString(j['coverArt']), + starred: j['starred'] != null, + userRating: asInt(j['userRating']), + albums: oneOrMany(j['album'], Album.fromJson), + ); +} + +/// A lettered bucket of artists from `getArtists` (``). +class ArtistIndex { + ArtistIndex({required this.name, required this.artists}); + + final String name; + final List artists; + + factory ArtistIndex.fromJson(Map j) => ArtistIndex( + name: asString(j['name']) ?? '', + artists: oneOrMany(j['artist'], Artist.fromJson), + ); +} + +/// Flattened result of `getArtists`. +class ArtistsResult { + ArtistsResult({required this.indexes}); + + final List indexes; + + List get all => [for (final i in indexes) ...i.artists]; + + factory ArtistsResult.fromJson(Map j) => ArtistsResult( + indexes: oneOrMany(j['index'], ArtistIndex.fromJson), + ); +} + +/// Result of `getStarred2` — the user's favorites. +class Starred2 { + Starred2({ + required this.artists, + required this.albums, + required this.songs, + }); + + final List artists; + final List albums; + final List songs; + + factory Starred2.fromJson(Map j) => Starred2( + artists: oneOrMany(j['artist'], Artist.fromJson), + albums: oneOrMany(j['album'], Album.fromJson), + songs: oneOrMany(j['song'], Song.fromJson), + ); +} + +/// Result of `search3`. +class SearchResult3 { + SearchResult3({ + required this.artists, + required this.albums, + required this.songs, + }); + + final List artists; + final List albums; + final List songs; + + factory SearchResult3.fromJson(Map j) => SearchResult3( + artists: oneOrMany(j['artist'], Artist.fromJson), + albums: oneOrMany(j['album'], Album.fromJson), + songs: oneOrMany(j['song'], Song.fromJson), + ); +} + +/// A playlist summary from `getPlaylists` (no tracks), ported from +/// `ratune-subsonic/src/models.rs`. [toJson] backs the offline playlist mirror +/// (`playlists/playlists.dart`). +class Playlist { + Playlist({ + required this.id, + required this.name, + this.songCount, + this.duration, + this.owner, + this.public, + this.coverArt, + }); + + final String id; + final String name; + final int? songCount; + final int? duration; + final String? owner; + final bool? public; + final String? coverArt; + + factory Playlist.fromJson(Map j) => Playlist( + id: asString(j['id']) ?? '', + name: asString(j['name']) ?? 'Untitled', + songCount: asInt(j['songCount']), + duration: asInt(j['duration']), + owner: asString(j['owner']), + public: j['public'] is bool ? j['public'] as bool : null, + coverArt: asString(j['coverArt']), + ); + + Map toJson() => { + 'id': id, + 'name': name, + if (songCount != null) 'songCount': songCount, + if (duration != null) 'duration': duration, + if (owner != null) 'owner': owner, + if (public != null) 'public': public, + if (coverArt != null) 'coverArt': coverArt, + }; +} + +/// A playlist with its full track list from `getPlaylist`. The Subsonic API +/// nests the tracks under the key `entry` (not `song`). +class PlaylistDetail { + PlaylistDetail({ + required this.id, + required this.name, + this.songCount, + this.duration, + this.coverArt, + this.songs = const [], + }); + + final String id; + final String name; + final int? songCount; + final int? duration; + final String? coverArt; + final List songs; + + factory PlaylistDetail.fromJson(Map j) => PlaylistDetail( + id: asString(j['id']) ?? '', + name: asString(j['name']) ?? 'Untitled', + songCount: asInt(j['songCount']), + duration: asInt(j['duration']), + coverArt: asString(j['coverArt']), + songs: oneOrMany(j['entry'], Song.fromJson), + ); + + Map toJson() => { + 'id': id, + 'name': name, + if (songCount != null) 'songCount': songCount, + if (duration != null) 'duration': duration, + if (coverArt != null) 'coverArt': coverArt, + 'entry': songs.map((s) => s.toJson()).toList(), + }; + + Playlist toSummary() => Playlist( + id: id, + name: name, + songCount: songCount ?? songs.length, + duration: duration, + coverArt: coverArt, + ); +} diff --git a/lib/subsonic/subsonic_client.dart b/lib/subsonic/subsonic_client.dart new file mode 100644 index 0000000..878bf9a --- /dev/null +++ b/lib/subsonic/subsonic_client.dart @@ -0,0 +1,292 @@ +import 'dart:convert'; +import 'dart:math'; + +import 'package:crypto/crypto.dart'; +import 'package:dio/dio.dart'; + +import 'json_helpers.dart'; +import 'models.dart'; + +/// A Subsonic API error (server returned `status: "failed"`), ported from +/// `ratune-subsonic/src/error.rs`. Code 40 is the auth-failure code. +class SubsonicError implements Exception { + SubsonicError(this.code, this.message); + + final int code; + final String message; + + static const int authErrorCode = 40; + bool get isAuthFailure => code == authErrorCode; + + @override + String toString() => 'SubsonicError($code): $message'; +} + +/// Subsonic HTTP client, ported from `ratune-subsonic/src/client.rs`. +/// +/// Auth is the classic token scheme: a fresh random salt per request and +/// `token = MD5(password + salt)`, sent as query params +/// `u / t / s / v / c / f=json`. The password is never sent in the clear. +class SubsonicClient { + SubsonicClient({ + required String baseUrl, + required this.username, + required String password, + Dio? dio, + }) : baseUrl = _trimTrailingSlash(baseUrl), + // ignore: prefer_initializing_formals — field is private, param can't be + _password = password, + _dio = dio ?? + Dio(BaseOptions( + connectTimeout: const Duration(seconds: 30), + receiveTimeout: const Duration(seconds: 30), + headers: {'User-Agent': 'ratune-mobile'}, + )); + + final String baseUrl; + final String username; + final String _password; + final Dio _dio; + + static const String apiVersion = '1.16.1'; + static const String clientName = 'ratune-mobile'; + static const String _saltAlphabet = + 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; + + static String _trimTrailingSlash(String url) => + url.endsWith('/') ? url.substring(0, url.length - 1) : url; + + /// Cryptographically-random 12-char salt (Dart's `Random.secure()` stands in + /// for the platform CSPRNG; Ratune uses a weaker LCG here). + String _makeSalt([int length = 12]) { + final rng = Random.secure(); + return List.generate( + length, + (_) => _saltAlphabet[rng.nextInt(_saltAlphabet.length)], + ).join(); + } + + String _makeToken(String salt) => + md5.convert(utf8.encode('$_password$salt')).toString(); + + /// The auth + protocol query params appended to every request. + Map _authParams() { + final salt = _makeSalt(); + return { + 'u': username, + 't': _makeToken(salt), + 's': salt, + 'v': apiVersion, + 'c': clientName, + 'f': 'json', + }; + } + + /// Build a signed request URI. [params] values may be a `String` or an + /// `Iterable` (the latter emits a repeated query param, e.g. several + /// `songIdToAdd` for `updatePlaylist`). + Uri _uri(String endpoint, [Map params = const {}]) { + return Uri.parse('$baseUrl/rest/$endpoint').replace( + queryParameters: {..._authParams(), ...params}, + ); + } + + /// Perform a GET and unwrap the `{"subsonic-response": {...}}` envelope, + /// throwing [SubsonicError] on `status: "failed"`. + Future> _get( + String endpoint, [ + Map params = const {}, + ]) async { + final response = await _dio.getUri(_uri(endpoint, params)); + final data = response.data; + final Map body = data is String + ? (jsonDecode(data) as Map).cast() + : (data as Map).cast(); + + final inner = + (body['subsonic-response'] as Map?)?.cast() ?? {}; + final status = asString(inner['status']); + if (status == 'failed') { + final err = (inner['error'] as Map?)?.cast() ?? {}; + throw SubsonicError( + asInt(err['code']) ?? -1, + asString(err['message']) ?? 'Unknown Subsonic error', + ); + } + return inner; + } + + // ---- Connectivity ------------------------------------------------------- + + /// `ping` — returns true if the server responds ok with valid credentials. + Future ping() async { + try { + await _get('ping'); + return true; + } on SubsonicError { + rethrow; + } catch (_) { + return false; + } + } + + // ---- Browsing ----------------------------------------------------------- + + /// `getArtists` — the full artist index. + Future getArtists() async { + final r = await _get('getArtists'); + final artists = + (r['artists'] as Map?)?.cast() ?? const {}; + return ArtistsResult.fromJson(artists); + } + + /// `getArtist` — one artist with its albums. + Future getArtist(String id) async { + final r = await _get('getArtist', {'id': id}); + return Artist.fromJson( + (r['artist'] as Map).cast()); + } + + /// `getAlbum` — one album with its songs. + Future getAlbum(String id) async { + final r = await _get('getAlbum', {'id': id}); + return Album.fromJson((r['album'] as Map).cast()); + } + + /// `getAlbumList2` — a page of albums by [type] (`alphabeticalByName`, + /// `newest`, `frequent`, …). Subsonic caps [size] at 500; page with [offset]. + /// Albums here carry metadata + cover art but no songs (use `getAlbum`). + Future> getAlbumList2({ + String type = 'alphabeticalByName', + int size = 500, + int offset = 0, + }) async { + final r = await _get('getAlbumList2', { + 'type': type, + 'size': '${size.clamp(1, 500)}', + 'offset': '$offset', + }); + final list = (r['albumList2'] as Map?)?.cast() ?? const {}; + return oneOrMany(list['album'], Album.fromJson); + } + + // ---- Search ------------------------------------------------------------- + + /// `search3` — combined artist/album/song search. + Future search3(String query) async { + final r = await _get('search3', {'query': query}); + final result = + (r['searchResult3'] as Map?)?.cast() ?? const {}; + return SearchResult3.fromJson(result); + } + + // ---- Favorites / ratings ------------------------------------------------ + + /// `getStarred2` — the user's starred artists/albums/songs. + Future getStarred2() async { + final r = await _get('getStarred2'); + final s = (r['starred2'] as Map?)?.cast() ?? const {}; + return Starred2.fromJson(s); + } + + /// `star` / `unstar`. Dispatches to the right param (id / albumId / artistId) + /// exactly like Ratune's `set_starred` (`client.rs`). + Future setStarred({ + required bool starred, + String? songId, + String? albumId, + String? artistId, + }) async { + final param = { + 'id': ?songId, + 'albumId': ?albumId, + 'artistId': ?artistId, + }; + if (param.isEmpty) return; + await _get(starred ? 'star' : 'unstar', param); + } + + /// `setRating` — 1–5, or 0 to clear. + Future setRating(String id, int rating) async { + await _get('setRating', {'id': id, 'rating': '${rating.clamp(0, 5)}'}); + } + + /// `scrobble` — record a play on the server (increments play counts / marks + /// now-playing). `submission=true` is a completed listen. + Future scrobble(String id, {bool submission = true}) async { + await _get('scrobble', {'id': id, 'submission': '$submission'}); + } + + // ---- Playlists ---------------------------------------------------------- + // Ported from `ratune-subsonic/src/client.rs`. Track mutations all go through + // `updatePlaylist` with `songIdToAdd` / `songIndexToRemove` / `name`. + + /// `getPlaylists` — every playlist visible to the authenticated user. + Future> getPlaylists() async { + final r = await _get('getPlaylists'); + final list = (r['playlists'] as Map?)?.cast() ?? const {}; + return oneOrMany(list['playlist'], Playlist.fromJson); + } + + /// `getPlaylist` — one playlist including its full track list. + Future getPlaylist(String id) async { + final r = await _get('getPlaylist', {'id': id}); + return PlaylistDetail.fromJson( + (r['playlist'] as Map).cast()); + } + + /// `createPlaylist` — create an empty playlist. Navidrome echoes the created + /// playlist under `playlist` (same shape as `getPlaylist`); returns it when + /// present so the caller gets the new id, else null (caller refetches). + Future createPlaylist(String name) async { + final r = await _get('createPlaylist', {'name': name}); + final p = (r['playlist'] as Map?)?.cast(); + return p == null ? null : PlaylistDetail.fromJson(p); + } + + /// `updatePlaylist` + one or more `songIdToAdd` — append tracks. + Future addTracksToPlaylist(String playlistId, List songIds) async { + if (songIds.isEmpty) return; + await _get('updatePlaylist', { + 'playlistId': playlistId, + 'songIdToAdd': songIds, + }); + } + + /// `updatePlaylist` + `songIndexToRemove` — remove the track at [index]. + Future removeTrackFromPlaylist(String playlistId, int index) async { + await _get('updatePlaylist', { + 'playlistId': playlistId, + 'songIndexToRemove': '$index', + }); + } + + /// `updatePlaylist` + `name` — rename a playlist. + Future renamePlaylist(String playlistId, String name) async { + await _get('updatePlaylist', {'playlistId': playlistId, 'name': name}); + } + + /// `deletePlaylist` — delete a playlist by id. + Future deletePlaylist(String id) async { + await _get('deletePlaylist', {'id': id}); + } + + // ---- Stream / art URLs (self-contained signed URLs) -------------------- + + /// Signed streaming URL, handed straight to the audio engine (or the download + /// manager, which fetches these bytes to disk). `maxBitRate == 0` means + /// original / no transcode; [format] requests a specific transcode container + /// (e.g. `mp3`, `opus`), or null for the server default / original. + Uri streamUri(String id, {int maxBitRate = 0, String? format}) => + _uri('stream', { + 'id': id, + if (maxBitRate > 0) 'maxBitRate': '$maxBitRate', + if (format != null && format.isNotEmpty) 'format': format, + }); + + /// Signed cover-art URL. [size] is clamped to Subsonic's 32–2048 range. + Uri coverArtUri(String id, {int? size}) => _uri('getCoverArt', { + 'id': id, + if (size != null) 'size': '${size.clamp(32, 2048)}', + }); +} diff --git a/lib/theme/accent.dart b/lib/theme/accent.dart new file mode 100644 index 0000000..3ef1855 --- /dev/null +++ b/lib/theme/accent.dart @@ -0,0 +1,24 @@ +import 'package:flutter/widgets.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import 'tokens.dart'; + +/// Holds the current accent color — the "hero" of Ratune's aesthetic. +/// +/// In the `dynamic` theme this is extracted from the playing track's album +/// art and boosted for readability in OKLab space (Ratune `color.rs:11-64`), +/// then interpolated toward over ~400ms. Phase 1 just exposes the default and +/// a setter; the extraction + animation land in Phase 2 with playback. +class AccentNotifier extends StateNotifier { + AccentNotifier() : super(RatuneColors.accentDefault); + + /// Snap to a new accent (e.g. from album-art extraction). + void set(Color color) => state = color; + + /// Return to the fixed default (e.g. no art / `static` theme). + void reset() => state = RatuneColors.accentDefault; +} + +final accentProvider = StateNotifierProvider( + (ref) => AccentNotifier(), +); diff --git a/lib/theme/accent_extract.dart b/lib/theme/accent_extract.dart new file mode 100644 index 0000000..1d1500f --- /dev/null +++ b/lib/theme/accent_extract.dart @@ -0,0 +1,29 @@ +import 'package:flutter/material.dart'; +import 'package:palette_generator/palette_generator.dart'; + +/// Extract a lively accent color from album art, mirroring Ratune's +/// art-driven `dynamic` theme (`color.rs`): pick the most vibrant swatch, then +/// nudge it into a readable lightness/saturation band. Ratune does the boost in +/// OKLab; this HSL approximation is close enough for now (OKLab is a later +/// refinement noted in the roadmap). +Future extractAccent(ImageProvider image) async { + final palette = await PaletteGenerator.fromImageProvider( + image, + size: const Size(200, 200), + maximumColorCount: 8, + ); + + final picked = palette.vibrantColor?.color ?? + palette.lightVibrantColor?.color ?? + palette.dominantColor?.color; + if (picked == null) return null; + return _ensureReadable(picked); +} + +Color _ensureReadable(Color c) { + final hsl = HSLColor.fromColor(c); + // Keep it bright enough to read on near-black, saturated enough to feel alive. + final lightness = hsl.lightness.clamp(0.45, 0.70); + final saturation = hsl.saturation < 0.40 ? 0.55 : hsl.saturation; + return hsl.withLightness(lightness).withSaturation(saturation).toColor(); +} diff --git a/lib/theme/app_theme.dart b/lib/theme/app_theme.dart new file mode 100644 index 0000000..a9b78c8 --- /dev/null +++ b/lib/theme/app_theme.dart @@ -0,0 +1,52 @@ +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; + +import 'tokens.dart'; + +/// Builds the app [ThemeData] from the Ratune tokens. +/// +/// Monospace type is core to the identity — every surface uses JetBrains Mono +/// (a close analog to the terminal fonts in Ratune's screenshots). The [accent] +/// is passed in so the theme rebuilds when album-art extraction changes it. +ThemeData buildRatuneTheme(Color accent) { + final mono = GoogleFonts.jetBrainsMonoTextTheme( + ThemeData.dark().textTheme, + ).apply( + bodyColor: RatuneColors.foreground, + displayColor: RatuneColors.foreground, + ); + + final scheme = ColorScheme.fromSeed( + seedColor: accent, + brightness: Brightness.dark, + surface: RatuneColors.surface, + ).copyWith( + primary: accent, + secondary: accent, + onSurface: RatuneColors.foreground, + ); + + return ThemeData( + useMaterial3: true, + brightness: Brightness.dark, + scaffoldBackgroundColor: RatuneColors.background, + canvasColor: RatuneColors.background, + colorScheme: scheme, + textTheme: mono, + primaryTextTheme: mono, + dividerColor: RatuneColors.border, + splashFactory: NoSplash.splashFactory, + highlightColor: Colors.transparent, + // Keep chrome flat and quiet — the content (and accent) carry the look. + appBarTheme: const AppBarTheme( + backgroundColor: RatuneColors.background, + surfaceTintColor: Colors.transparent, + elevation: 0, + centerTitle: false, + ), + listTileTheme: const ListTileThemeData( + dense: true, + minVerticalPadding: RatuneSpacing.sm, + ), + ); +} diff --git a/lib/theme/tokens.dart b/lib/theme/tokens.dart new file mode 100644 index 0000000..bed0544 --- /dev/null +++ b/lib/theme/tokens.dart @@ -0,0 +1,49 @@ +import 'package:flutter/widgets.dart'; + +/// Design tokens mirroring Ratune's `dynamic`/`static` theme defaults +/// (see ratune `docs/sample-config.toml`, `theme.rs`, `color.rs`). +/// +/// The palette is intentionally near-black and low-contrast; the *accent* +/// is the one lively color and, in the `dynamic` theme, is extracted live +/// from the current album art (Phase 2). Everything else stays fixed. +class RatuneColors { + const RatuneColors._(); + + /// App canvas — `background = #1a1a1a`. + static const Color background = Color(0xFF1A1A1A); + + /// Panel/surface fill — `surface = #161616` (slightly darker than canvas). + static const Color surface = Color(0xFF161616); + + /// Primary text — `foreground = #d4d0c8` (warm off-white, not pure white). + static const Color foreground = Color(0xFFD4D0C8); + + /// Secondary/muted text — `dimmed = #5a5858`. + static const Color dimmed = Color(0xFF5A5858); + + /// Hairline borders (inactive) — `border = #252525`. + static const Color border = Color(0xFF252525); + + /// Hairline borders when a pane is focused — `border_active`. + /// Ratune tints this toward the accent; we start with a lighter grey and + /// swap in the accent at runtime once art extraction lands. + static const Color borderActive = Color(0xFF3A3A3A); + + /// Default accent — `accent = #ff8c00`. Overridden per-track in `dynamic`. + static const Color accentDefault = Color(0xFFFF8C00); +} + +/// Spacing scale — dense, "player as instrument" rather than airy mobile cards. +class RatuneSpacing { + const RatuneSpacing._(); + + static const double xs = 2; + static const double sm = 4; + static const double md = 8; + static const double lg = 12; + static const double xl = 16; + + /// Minimum touch target per Apple/Material guidance — keep rows dense + /// visually but pad hit areas to at least this. + static const double minTouchTarget = 44; +} diff --git a/lib/widgets/block_progress_bar.dart b/lib/widgets/block_progress_bar.dart new file mode 100644 index 0000000..cba346b --- /dev/null +++ b/lib/widgets/block_progress_bar.dart @@ -0,0 +1,48 @@ +import 'package:flutter/material.dart'; + +import '../theme/tokens.dart'; + +/// The segmented block progress bar from Ratune's now-playing strip +/// (`progress_style = "██░"`). Discrete cells: filled cells use the accent, +/// empty cells the border grey, with hairline gaps between them. +class BlockProgressBar extends StatelessWidget { + const BlockProgressBar({ + super.key, + required this.progress, + this.cells = 40, + this.height = 10, + this.color, + }) : assert(progress >= 0 && progress <= 1); + + /// 0.0–1.0 elapsed fraction. + final double progress; + + /// Number of block cells to render. + final int cells; + + final double height; + + /// Filled color; defaults to the theme accent. + final Color? color; + + @override + Widget build(BuildContext context) { + final filledColor = color ?? Theme.of(context).colorScheme.primary; + final filled = (progress * cells).round(); + return SizedBox( + height: height, + child: Row( + children: List.generate(cells, (i) { + return Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 0.5), + child: ColoredBox( + color: i < filled ? filledColor : RatuneColors.border, + ), + ), + ); + }), + ), + ); + } +} diff --git a/lib/widgets/hairline_panel.dart b/lib/widgets/hairline_panel.dart new file mode 100644 index 0000000..4e16c21 --- /dev/null +++ b/lib/widgets/hairline_panel.dart @@ -0,0 +1,91 @@ +import 'package:flutter/material.dart'; + +import '../theme/tokens.dart'; + +/// A thin-stroked panel with its title label sitting *on* the top border — +/// Ratune's signature container ("Album Art", "Queue (127)", "Lyrics", +/// "Visualizer"). Recreated with the fieldset trick: draw a full 1px border, +/// then overlay the title with a background that occludes the segment behind +/// it, so the label appears to break the line. +class HairlinePanel extends StatelessWidget { + const HairlinePanel({ + super.key, + required this.title, + required this.child, + this.trailing, + this.active = false, + this.padding = const EdgeInsets.all(RatuneSpacing.lg), + this.backgroundColor = RatuneColors.background, + }); + + /// Panel label, e.g. "Queue". Rendered uppercase-ish in mono. + final String title; + + /// Optional trailing bit of the label, e.g. "(127)" — dimmed. + final String? trailing; + + /// Panel content. + final Widget child; + + /// When focused, the border and title tint toward the accent. + final bool active; + + final EdgeInsetsGeometry padding; + + /// Color painted behind the title to "cut" the border. Must match whatever + /// sits behind this panel (the canvas by default). + final Color backgroundColor; + + static const double _titleStraddle = 8; + + @override + Widget build(BuildContext context) { + final borderColor = + active ? RatuneColors.borderActive : RatuneColors.border; + final titleColor = + active ? Theme.of(context).colorScheme.primary : RatuneColors.dimmed; + + return Stack( + clipBehavior: Clip.none, + children: [ + Container( + margin: const EdgeInsets.only(top: _titleStraddle), + decoration: BoxDecoration( + border: Border.all(color: borderColor, width: 1), + ), + child: Padding(padding: padding, child: child), + ), + Positioned( + left: RatuneSpacing.lg, + top: 0, + child: Container( + color: backgroundColor, + padding: const EdgeInsets.symmetric( + horizontal: RatuneSpacing.md, + ), + child: Text.rich( + TextSpan( + children: [ + TextSpan( + text: title, + style: TextStyle( + color: titleColor, + fontWeight: FontWeight.w700, + letterSpacing: 0.5, + ), + ), + if (trailing != null) + TextSpan( + text: ' $trailing', + style: const TextStyle(color: RatuneColors.dimmed), + ), + ], + ), + style: Theme.of(context).textTheme.labelMedium, + ), + ), + ), + ], + ); + } +} diff --git a/lib/widgets/mini_player.dart b/lib/widgets/mini_player.dart new file mode 100644 index 0000000..dcb160d --- /dev/null +++ b/lib/widgets/mini_player.dart @@ -0,0 +1,136 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../state/providers.dart'; +import '../theme/tokens.dart'; + +/// Persistent mini-player pinned above the tab bar. Visible only while a track +/// is loaded; tapping the body jumps to the Now Playing tab. +/// +/// Watches `current`/`playing` via `.select()` so it doesn't rebuild on every +/// position tick — the moving progress line is isolated in [_MiniProgress]. +class MiniPlayer extends ConsumerWidget { + const MiniPlayer({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + // Redundant (and steals vertical space) on the Now Playing tab itself. + if (ref.watch(selectedTabProvider) == nowPlayingTabIndex) { + return const SizedBox.shrink(); + } + final current = ref.watch(playbackProvider.select((s) => s.current)); + if (current == null) return const SizedBox.shrink(); + + final playing = ref.watch(playbackProvider.select((s) => s.playing)); + final controller = ref.read(playbackProvider.notifier); + final client = ref.watch(subsonicClientProvider); + final accent = Theme.of(context).colorScheme.primary; + final artUri = (client != null && current.coverArt != null) + ? client.coverArtUri(current.coverArt!, size: 128).toString() + : null; + + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + const _MiniProgress(), + InkWell( + onTap: () => + ref.read(selectedTabProvider.notifier).state = nowPlayingTabIndex, + child: Container( + height: 52, + color: RatuneColors.surface, + padding: const EdgeInsets.only(left: RatuneSpacing.md), + child: Row( + children: [ + SizedBox( + width: 40, + height: 40, + child: ColoredBox( + color: RatuneColors.background, + child: artUri != null + ? Image.network( + artUri, + key: ValueKey(artUri), + fit: BoxFit.cover, + gaplessPlayback: true, + errorBuilder: (_, _, _) => const _ArtFallback(), + ) + : const _ArtFallback(), + ), + ), + const SizedBox(width: RatuneSpacing.md), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + current.title ?? 'Untitled', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle( + color: RatuneColors.foreground, + fontWeight: FontWeight.w700, + ), + ), + Text( + current.artist ?? 'Unknown artist', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle(color: RatuneColors.dimmed), + ), + ], + ), + ), + _btn(Icons.skip_previous, controller.previous), + _btn(playing ? Icons.pause : Icons.play_arrow, + controller.togglePlayPause, + color: accent), + _btn(Icons.skip_next, controller.next), + ], + ), + ), + ), + ], + ); + } + + Widget _btn(IconData icon, VoidCallback onTap, + {Color color = RatuneColors.foreground}) { + return IconButton( + onPressed: onTap, + visualDensity: VisualDensity.compact, + icon: Icon(icon, color: color, size: 24), + ); + } +} + +/// The hairline progress line on the top edge. Isolated so only this 2px strip +/// rebuilds on position ticks. +class _MiniProgress extends ConsumerWidget { + const _MiniProgress(); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final progress = ref.watch(playbackProvider.select((s) => s.progress)); + final accent = Theme.of(context).colorScheme.primary; + return SizedBox( + height: 2, + child: LinearProgressIndicator( + value: progress, + minHeight: 2, + backgroundColor: RatuneColors.border, + valueColor: AlwaysStoppedAnimation(accent), + ), + ); + } +} + +class _ArtFallback extends StatelessWidget { + const _ArtFallback(); + @override + Widget build(BuildContext context) => const Center( + child: Icon(Icons.album_outlined, + color: RatuneColors.dimmed, size: 22), + ); +} diff --git a/linux/.gitignore b/linux/.gitignore new file mode 100644 index 0000000..d3896c9 --- /dev/null +++ b/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt new file mode 100644 index 0000000..396c434 --- /dev/null +++ b/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "ratune_mobile") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.conversionpath.ratune_mobile") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/linux/flutter/CMakeLists.txt b/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000..d5bd016 --- /dev/null +++ b/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..d0e7f79 --- /dev/null +++ b/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) flutter_secure_storage_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterSecureStorageLinuxPlugin"); + flutter_secure_storage_linux_plugin_register_with_registrar(flutter_secure_storage_linux_registrar); +} diff --git a/linux/flutter/generated_plugin_registrant.h b/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..e0f0a47 --- /dev/null +++ b/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000..ce58916 --- /dev/null +++ b/linux/flutter/generated_plugins.cmake @@ -0,0 +1,25 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + flutter_secure_storage_linux +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST + jni +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/linux/runner/CMakeLists.txt b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000..e97dabc --- /dev/null +++ b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/linux/runner/main.cc b/linux/runner/main.cc new file mode 100644 index 0000000..e7c5c54 --- /dev/null +++ b/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/linux/runner/my_application.cc b/linux/runner/my_application.cc new file mode 100644 index 0000000..037f0c1 --- /dev/null +++ b/linux/runner/my_application.cc @@ -0,0 +1,148 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Called when first Flutter frame received. +static void first_frame_cb(MyApplication* self, FlView* view) { + gtk_widget_show(gtk_widget_get_toplevel(GTK_WIDGET(view))); +} + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "ratune_mobile"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "ratune_mobile"); + } + + gtk_window_set_default_size(window, 1280, 720); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments( + project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + GdkRGBA background_color; + // Background defaults to black, override it here if necessary, e.g. #00000000 + // for transparent. + gdk_rgba_parse(&background_color, "#000000"); + fl_view_set_background_color(view, &background_color); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + // Show the window when Flutter renders. + // Requires the view to be realized so we can start rendering. + g_signal_connect_swapped(view, "first-frame", G_CALLBACK(first_frame_cb), + self); + gtk_widget_realize(GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, + gchar*** arguments, + int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + // MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + // MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = + my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, "flags", + G_APPLICATION_NON_UNIQUE, nullptr)); +} diff --git a/linux/runner/my_application.h b/linux/runner/my_application.h new file mode 100644 index 0000000..db16367 --- /dev/null +++ b/linux/runner/my_application.h @@ -0,0 +1,21 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, + my_application, + MY, + APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..cc53269 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,722 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + args: + dependency: transitive + description: + name: args + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 + url: "https://pub.dev" + source: hosted + version: "2.7.0" + async: + dependency: transitive + description: + name: async + sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 + url: "https://pub.dev" + source: hosted + version: "2.13.1" + audio_service: + dependency: transitive + description: + name: audio_service + sha256: "95f3267f3449eb5cf71c8fcf1d556f57af1e898e2dc5815fb168d1843653edb7" + url: "https://pub.dev" + source: hosted + version: "0.18.19" + audio_service_platform_interface: + dependency: transitive + description: + name: audio_service_platform_interface + sha256: "6283782851f6c8b501b60904a32fc7199dc631172da0629d7301e66f672ab777" + url: "https://pub.dev" + source: hosted + version: "0.1.3" + audio_service_web: + dependency: transitive + description: + name: audio_service_web + sha256: b8ea9243201ee53383157fbccf13d5d2a866b5dda922ec19d866d1d5d70424df + url: "https://pub.dev" + source: hosted + version: "0.1.4" + audio_session: + dependency: transitive + description: + name: audio_session + sha256: f9e7711a0e24ca8b40f5d7ac374c3c6e55016f3157912badd18199cdbbca5c4d + url: "https://pub.dev" + source: hosted + version: "0.2.4" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + characters: + dependency: transitive + description: + name: characters + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b + url: "https://pub.dev" + source: hosted + version: "1.4.1" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.dev" + source: hosted + version: "1.1.2" + code_assets: + dependency: transitive + description: + name: code_assets + sha256: bf394f466ba9205f1812a0433b392d6af280f155f56651eda7c18cc32ed493b8 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + collection: + dependency: "direct main" + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.dev" + source: hosted + version: "1.19.1" + crypto: + dependency: "direct main" + description: + name: crypto + sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf + url: "https://pub.dev" + source: hosted + version: "3.0.7" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd" + url: "https://pub.dev" + source: hosted + version: "1.0.9" + dio: + dependency: "direct main" + description: + name: dio + sha256: "0df44ebba85e503958eb75d07eedd3c86275a58c1d3eda2f2ce8f0a2c3abbb3c" + url: "https://pub.dev" + source: hosted + version: "5.11.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "0786d0b7295a373de356fc0af4f6f1d0ab2844ed31b19dfc5e7556b70e24212c" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.dev" + source: hosted + version: "1.3.3" + ffi: + dependency: transitive + description: + name: ffi + sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + ffi_leak_tracker: + dependency: transitive + description: + name: ffi_leak_tracker + sha256: "4093d4ef9ca06ffe2786e73bfb25e22aa92112b9bb4ec941f11e3e6b61489a97" + url: "https://pub.dev" + source: hosted + version: "0.1.2" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://pub.dev" + source: hosted + version: "1.1.1" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + sha256: "1de7849213b4c73c85aca7e0ac687a9a5d82ccdb594366b9dcc26cb6a2189cd2" + url: "https://pub.dev" + source: hosted + version: "3.4.2" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" + url: "https://pub.dev" + source: hosted + version: "6.0.0" + flutter_riverpod: + dependency: "direct main" + description: + name: flutter_riverpod + sha256: "9532ee6db4a943a1ed8383072a2e3eeda041db5657cdf6d2acecf3c21ecbe7e1" + url: "https://pub.dev" + source: hosted + version: "2.6.1" + flutter_secure_storage: + dependency: "direct main" + description: + name: flutter_secure_storage + sha256: "7686b1d6a29985dcbb808c59518226e603e3bfa7c0ddfd1a0d00e4cda77c868e" + url: "https://pub.dev" + source: hosted + version: "10.3.1" + flutter_secure_storage_darwin: + dependency: transitive + description: + name: flutter_secure_storage_darwin + sha256: "82329fa5cdf343773b1b6897dea959105a29f092454259edff92f9f6637e8149" + url: "https://pub.dev" + source: hosted + version: "0.3.2" + flutter_secure_storage_linux: + dependency: transitive + description: + name: flutter_secure_storage_linux + sha256: a5f35ddab43cf5c8215d2feb4ce1957851f28c5c37e6f04335066a0602087bf5 + url: "https://pub.dev" + source: hosted + version: "3.0.1" + flutter_secure_storage_platform_interface: + dependency: transitive + description: + name: flutter_secure_storage_platform_interface + sha256: "06686df417f34fe9f963ed217b7fdce250e2f637ddd6c374d7eb054549770633" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + flutter_secure_storage_web: + dependency: transitive + description: + name: flutter_secure_storage_web + sha256: "073a62b3aeb866ab4ce795f960413948e51e5a42a9b0c8333b6daf5bb3208a1c" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + flutter_secure_storage_windows: + dependency: transitive + description: + name: flutter_secure_storage_windows + sha256: "471951813a97006d899db4948acc654a4f28c440083ea08178935ce20b173ec1" + url: "https://pub.dev" + source: hosted + version: "4.2.2" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + google_fonts: + dependency: "direct main" + description: + name: google_fonts + sha256: d3f251381df389f7418d4dff416bd27c0a23138df22969aafd28c4a4b1bb3cd6 + url: "https://pub.dev" + source: hosted + version: "8.2.0" + hooks: + dependency: transitive + description: + name: hooks + sha256: "9a62a50b50b769a737bc0a8ff381f333529df3ab746b2f6b02e83760231455ba" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + http: + dependency: transitive + description: + name: http + sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" + url: "https://pub.dev" + source: hosted + version: "1.6.0" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.dev" + source: hosted + version: "4.1.2" + jni: + dependency: transitive + description: + name: jni + sha256: "5bc9a9daac5ccfbd6a758377600b9f7fdce13d93f26e8012a8941014a5d978d1" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + jni_flutter: + dependency: transitive + description: + name: jni_flutter + sha256: "7b717011ea40d04fd47c2731d3d1d36eb99eba3435c2753d62489e8c3c9991d5" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + jni_util: + dependency: transitive + description: + name: jni_util + sha256: "1ba86da04a5f2bf18fde2edb235587e70c5b0fc5bd4ba955f46b00942c3fc35f" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + js: + dependency: transitive + description: + name: js + sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc" + url: "https://pub.dev" + source: hosted + version: "0.7.2" + just_audio: + dependency: "direct main" + description: + name: just_audio + sha256: e60aa97b233ddea025e13dfac59195207f528fa5e9e4a4a49a8c0766701e5fe6 + url: "https://pub.dev" + source: hosted + version: "0.10.6" + just_audio_background: + dependency: "direct main" + description: + name: just_audio_background + sha256: "3900825701164577db65337792bc122b66f9eb1245ee47e7ae8244ae5ceb8030" + url: "https://pub.dev" + source: hosted + version: "0.0.1-beta.17" + just_audio_platform_interface: + dependency: transitive + description: + name: just_audio_platform_interface + sha256: "2532c8d6702528824445921c5ff10548b518b13f808c2e34c2fd54793b999a6a" + url: "https://pub.dev" + source: hosted + version: "4.6.0" + just_audio_web: + dependency: transitive + description: + name: just_audio_web + sha256: "6ba8a2a7e87d57d32f0f7b42856ade3d6a9fbe0f1a11fabae0a4f00bb73f0663" + url: "https://pub.dev" + source: hosted + version: "0.4.16" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + url: "https://pub.dev" + source: hosted + version: "11.0.2" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + url: "https://pub.dev" + source: hosted + version: "3.0.10" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + lints: + dependency: transitive + description: + name: lints + sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df" + url: "https://pub.dev" + source: hosted + version: "6.1.0" + logging: + dependency: transitive + description: + name: logging + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 + url: "https://pub.dev" + source: hosted + version: "0.12.19" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" + url: "https://pub.dev" + source: hosted + version: "0.13.0" + meta: + dependency: transitive + description: + name: meta + sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" + url: "https://pub.dev" + source: hosted + version: "1.18.0" + mime: + dependency: transitive + description: + name: mime + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + objective_c: + dependency: transitive + description: + name: objective_c + sha256: b7fb95a6d9a4f009edd63dc5ac69f07420b23a16161c6dd8660290b59c602e8e + url: "https://pub.dev" + source: hosted + version: "9.5.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: ffcf4cf3d6c0b74ac43708d9f56625506e8a68aa935abe9d267a7330f320eb5d + url: "https://pub.dev" + source: hosted + version: "3.0.0" + palette_generator: + dependency: "direct main" + description: + name: palette_generator + sha256: "4420f7ccc3f0a4a906144e73f8b6267cd940b64f57a7262e95cb8cec3a8ae0ed" + url: "https://pub.dev" + source: hosted + version: "0.3.3+7" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: a7f4874f987173da295a61c181b8ee71dab59b332a486b391babf26a1b884825 + url: "https://pub.dev" + source: hosted + version: "2.1.6" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699" + url: "https://pub.dev" + source: hosted + version: "2.6.0" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: "58c2005f147315b11e9b4a7bc889cd5203e250cba8e3f012dae259b4972b5c16" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "484838772624c3a4b94f1e44a3e19897fee738f2d5c4ce448443b0417f7c9dda" + url: "https://pub.dev" + source: hosted + version: "2.1.3" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + platform: + dependency: transitive + description: + name: platform + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.dev" + source: hosted + version: "3.1.6" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + record_use: + dependency: transitive + description: + name: record_use + sha256: "2551bd8eecfe95d14ae75f6021ad0248be5c27f138c2ec12fcb52b500b3ba1ed" + url: "https://pub.dev" + source: hosted + version: "0.6.0" + riverpod: + dependency: transitive + description: + name: riverpod + sha256: "59062512288d3056b2321804332a13ffdd1bf16df70dcc8e506e411280a72959" + url: "https://pub.dev" + source: hosted + version: "2.6.1" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" + url: "https://pub.dev" + source: hosted + version: "0.28.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" + url: "https://pub.dev" + source: hosted + version: "1.10.2" + sqflite: + dependency: transitive + description: + name: sqflite + sha256: "58a799e6ac17dd32fbab93813d39ed835a75ccc0f8f85b8955fe318c6712b082" + url: "https://pub.dev" + source: hosted + version: "2.4.3" + sqflite_android: + dependency: transitive + description: + name: sqflite_android + sha256: d0548f9d7422a2dae99ec6f8b0a3074463b132d216fa5ba0d230eeefc901983b + url: "https://pub.dev" + source: hosted + version: "2.4.3" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + sha256: "5bf6a55c166e73bf651ba7ec3ed486e577620e3dc8f3a9c6a258a8031b624590" + url: "https://pub.dev" + source: hosted + version: "2.5.11" + sqflite_darwin: + dependency: transitive + description: + name: sqflite_darwin + sha256: c86ca18b8f666bbf903924687fe21cc16fc385d086005067e26619ca530bef9f + url: "https://pub.dev" + source: hosted + version: "2.4.3+1" + sqflite_platform_interface: + dependency: transitive + description: + name: sqflite_platform_interface + sha256: f84939f84350d92d04416f8bc4dc52d3896aec7716cc9e80cf0146342139dc50 + url: "https://pub.dev" + source: hosted + version: "2.4.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.dev" + source: hosted + version: "1.12.1" + state_notifier: + dependency: transitive + description: + name: state_notifier + sha256: b8677376aa54f2d7c58280d5a007f9e8774f1968d1fb1c096adcb4792fba29bb + url: "https://pub.dev" + source: hosted + version: "1.0.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.dev" + source: hosted + version: "1.4.1" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "61894a1956de6b4fc1aefd0892e109514a1a706cbece3ac59decd90ff5a7a423" + url: "https://pub.dev" + source: hosted + version: "3.4.1+1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.dev" + source: hosted + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" + url: "https://pub.dev" + source: hosted + version: "0.7.11" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + uuid: + dependency: transitive + description: + name: uuid + sha256: "9b129329f58692f6e6578329498a8fe9fbe98f090beb764ffbb8ee2eadd01dcd" + url: "https://pub.dev" + source: hosted + version: "4.6.0" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + url: "https://pub.dev" + source: hosted + version: "2.2.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360" + url: "https://pub.dev" + source: hosted + version: "15.2.0" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + win32: + dependency: transitive + description: + name: win32 + sha256: ba6f4bba816c8d7e3c1580e170f3786d216951cc6b94babc3b814c08d2cb2738 + url: "https://pub.dev" + source: hosted + version: "6.3.0" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce + url: "https://pub.dev" + source: hosted + version: "3.1.3" +sdks: + dart: ">=3.12.2 <4.0.0" + flutter: ">=3.44.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..ac09600 --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,99 @@ +name: ratune_mobile +description: "A new Flutter project." +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: ^3.12.2 + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.8 + dio: ^5.11.0 + flutter_riverpod: ^2.6.1 + flutter_secure_storage: ^10.3.1 + crypto: ^3.0.7 + google_fonts: ^8.2.0 + path_provider: ^2.1.6 + collection: ^1.19.1 + just_audio: ^0.10.6 + just_audio_background: ^0.0.1-beta.17 + palette_generator: ^0.3.3+7 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^6.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/to/resolution-aware-images + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/to/asset-from-package + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/to/font-from-package diff --git a/test/widget_test.dart b/test/widget_test.dart new file mode 100644 index 0000000..82aff2e --- /dev/null +++ b/test/widget_test.dart @@ -0,0 +1,15 @@ +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:ratune_mobile/main.dart'; + +void main() { + testWidgets('App shell renders the three tabs', (WidgetTester tester) async { + await tester.pumpWidget(const ProviderScope(child: RatuneApp())); + await tester.pump(); + + expect(find.text('Home'), findsOneWidget); + expect(find.text('Browse'), findsOneWidget); + expect(find.text('Now Playing'), findsOneWidget); + }); +}