From e6fee03c2066a2e1b8f6f5b97c688ac40439a003 Mon Sep 17 00:00:00 2001 From: arenekosreal <17194552+arenekosreal@users.noreply.github.com> Date: Sun, 14 Jul 2024 21:38:28 +0800 Subject: [PATCH] feat(linux): Use XDG_STATE_HOME to storage logs (#1675) * feat(linux): Use XDG_STATE_HOME to storage logs * fix: Clean LSP suggestions. * fix: Use Platform.environment instead String.fromEnvironment The latter seems return an empty string. See: https://github.com/flutter/flutter/issues/55870#issuecomment-936612420 --- lib/services/logger/logger.dart | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/services/logger/logger.dart b/lib/services/logger/logger.dart index 38252e87..1df7b5aa 100644 --- a/lib/services/logger/logger.dart +++ b/lib/services/logger/logger.dart @@ -65,6 +65,11 @@ class AppLogger { if (kIsMacOS) { dir = join((await getLibraryDirectory()).path, "Logs"); } + + if (kIsLinux) { + dir = join(_getXdgStateHome(), "spotube"); + } + final file = File(join(dir, ".spotube_logs")); if (!await file.exists()) { await file.create(recursive: true); @@ -88,6 +93,20 @@ class AppLogger { ); } } + + static String _getXdgStateHome() { + // path_provider seems does not support XDG_STATE_HOME, + // which is the specification to store application logs on Linux. + // See https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html + // TODO: Use path_provider once it supports XDG_STATE_HOME + if (const bool.hasEnvironment("XDG_STATE_HOME")) { + String xdgStateHomeRaw = Platform.environment["XDG_STATE_HOME"] ?? ""; + if (xdgStateHomeRaw.isNotEmpty) { + return xdgStateHomeRaw; + } + } + return join(Platform.environment["HOME"] ?? "", ".local", "state"); + } } class AppLoggerProviderObserver extends ProviderObserver {