mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-14 08:25:16 +00:00
chore: add migration script to move from files from macos sandbox to non-sandbox directories
This commit is contained in:
parent
f76f8b3013
commit
d3620933c0
@ -38,6 +38,7 @@ import 'package:spotube/services/logger/logger.dart';
|
|||||||
import 'package:spotube/services/wm_tools/wm_tools.dart';
|
import 'package:spotube/services/wm_tools/wm_tools.dart';
|
||||||
import 'package:spotube/themes/theme.dart';
|
import 'package:spotube/themes/theme.dart';
|
||||||
import 'package:spotube/utils/migrations/hive.dart';
|
import 'package:spotube/utils/migrations/hive.dart';
|
||||||
|
import 'package:spotube/utils/migrations/sandbox.dart';
|
||||||
import 'package:spotube/utils/platform.dart';
|
import 'package:spotube/utils/platform.dart';
|
||||||
import 'package:system_theme/system_theme.dart';
|
import 'package:system_theme/system_theme.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
@ -68,6 +69,8 @@ Future<void> main(List<String> rawArgs) async {
|
|||||||
|
|
||||||
MediaKit.ensureInitialized();
|
MediaKit.ensureInitialized();
|
||||||
|
|
||||||
|
await migrateMacOsFromSandboxToNoSandbox();
|
||||||
|
|
||||||
// force High Refresh Rate on some Android devices (like One Plus)
|
// force High Refresh Rate on some Android devices (like One Plus)
|
||||||
if (kIsAndroid) {
|
if (kIsAndroid) {
|
||||||
await FlutterDisplayMode.setHighRefreshRate();
|
await FlutterDisplayMode.setHighRefreshRate();
|
||||||
|
@ -4,6 +4,7 @@ import 'package:gap/gap.dart';
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:spotube/collections/assets.gen.dart';
|
import 'package:spotube/collections/assets.gen.dart';
|
||||||
import 'package:spotube/collections/spotube_icons.dart';
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
|
import 'package:spotube/models/database/database.dart';
|
||||||
import 'package:spotube/modules/connect/connect_device.dart';
|
import 'package:spotube/modules/connect/connect_device.dart';
|
||||||
import 'package:spotube/modules/home/sections/featured.dart';
|
import 'package:spotube/modules/home/sections/featured.dart';
|
||||||
import 'package:spotube/modules/home/sections/feed.dart';
|
import 'package:spotube/modules/home/sections/feed.dart';
|
||||||
@ -15,6 +16,7 @@ import 'package:spotube/modules/home/sections/recent.dart';
|
|||||||
import 'package:spotube/components/titlebar/titlebar.dart';
|
import 'package:spotube/components/titlebar/titlebar.dart';
|
||||||
import 'package:spotube/extensions/constrains.dart';
|
import 'package:spotube/extensions/constrains.dart';
|
||||||
import 'package:spotube/pages/settings/settings.dart';
|
import 'package:spotube/pages/settings/settings.dart';
|
||||||
|
import 'package:spotube/provider/user_preferences/user_preferences_provider.dart';
|
||||||
import 'package:spotube/utils/platform.dart';
|
import 'package:spotube/utils/platform.dart';
|
||||||
import 'package:spotube/utils/service_utils.dart';
|
import 'package:spotube/utils/service_utils.dart';
|
||||||
|
|
||||||
@ -26,6 +28,8 @@ class HomePage extends HookConsumerWidget {
|
|||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final controller = useScrollController();
|
final controller = useScrollController();
|
||||||
final mediaQuery = MediaQuery.of(context);
|
final mediaQuery = MediaQuery.of(context);
|
||||||
|
final layoutMode =
|
||||||
|
ref.watch(userPreferencesProvider.select((s) => s.layoutMode));
|
||||||
|
|
||||||
return SafeArea(
|
return SafeArea(
|
||||||
bottom: false,
|
bottom: false,
|
||||||
@ -34,7 +38,7 @@ class HomePage extends HookConsumerWidget {
|
|||||||
body: CustomScrollView(
|
body: CustomScrollView(
|
||||||
controller: controller,
|
controller: controller,
|
||||||
slivers: [
|
slivers: [
|
||||||
if (mediaQuery.smAndDown)
|
if (mediaQuery.smAndDown || layoutMode == LayoutMode.compact)
|
||||||
SliverAppBar(
|
SliverAppBar(
|
||||||
floating: true,
|
floating: true,
|
||||||
title: Assets.spotubeLogoPng.image(height: 45),
|
title: Assets.spotubeLogoPng.image(height: 45),
|
||||||
|
58
lib/utils/migrations/sandbox.dart
Normal file
58
lib/utils/migrations/sandbox.dart
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:path/path.dart';
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
import 'package:spotube/services/logger/logger.dart';
|
||||||
|
import 'package:spotube/utils/platform.dart';
|
||||||
|
|
||||||
|
/// Migrates sandbox files on macOS to non-sandbox directories
|
||||||
|
Future<void> migrateMacOsFromSandboxToNoSandbox() async {
|
||||||
|
if (!kIsMacOS) return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
final sandboxApplicationSupportDir = Directory(
|
||||||
|
"/Users/${Platform.environment["USER"]}/Library/Containers/oss.krtirtho.spotube/Data/Library/Application Support/oss.krtirtho.spotube",
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!await sandboxApplicationSupportDir.exists()) {
|
||||||
|
stdout.writeln("🔵 Sandbox directory not found, skipping migration");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const fileExts = [".db", ".lock", ".hive"];
|
||||||
|
|
||||||
|
final supportDir = await getApplicationSupportDirectory()
|
||||||
|
..create(recursive: true);
|
||||||
|
|
||||||
|
final supportFiles = await supportDir.list().toList();
|
||||||
|
final oldSupportFiles = await sandboxApplicationSupportDir.list().toList();
|
||||||
|
|
||||||
|
if (oldSupportFiles.isEmpty) {
|
||||||
|
stdout.writeln(
|
||||||
|
"🔵 No files found in sandboxed directory, skipping migration",
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
} else if (supportFiles.any(
|
||||||
|
(file) => file is File && fileExts.contains(extension(file.path)))) {
|
||||||
|
stdout.writeln(
|
||||||
|
"🔵 Non-sandbox directory is not empty, skipping migration",
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (final oldSupportFile in oldSupportFiles) {
|
||||||
|
if (oldSupportFile is File &&
|
||||||
|
fileExts.contains(extension(oldSupportFile.path))) {
|
||||||
|
final newPath = join(supportDir.path, basename(oldSupportFile.path));
|
||||||
|
await oldSupportFile.copy(newPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stdout.writeln("✅ Migrated sandboxed files to non-sandboxed directory");
|
||||||
|
} catch (e, stack) {
|
||||||
|
stdout.writeln(
|
||||||
|
"❌ Error migrating sandboxed files to non-sandboxed directory",
|
||||||
|
);
|
||||||
|
AppLogger.reportError(e, stack);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user