Initial commit
Some checks failed
Main Deploy Workflow / deploy_web (push) Has been cancelled
Main Deploy Workflow / deploy_playstore_internal (push) Has been cancelled
Close stale issues and PRs / stale (push) Has been cancelled

This commit is contained in:
2026-09-11 15:59:56 -03:00
commit 0037b0b9cf
651 changed files with 199705 additions and 0 deletions

View File

@@ -0,0 +1,108 @@
// SPDX-FileCopyrightText: 2019-Present Christian Kußowski
// SPDX-FileCopyrightText: 2019-Present Contributors to FluffyChat
//
// SPDX-License-Identifier: AGPL-3.0-or-later
import 'dart:io';
import 'package:tatchat/config/setting_keys.dart';
import 'package:tatchat/l10n/l10n.dart';
import 'package:flutter/foundation.dart';
import 'package:go_router/go_router.dart';
import 'package:material_ui/material_ui.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:url_launcher/url_launcher_string.dart';
import '../config/app_config.dart';
abstract class PlatformInfos {
static bool get isWeb => kIsWeb;
static bool get isLinux => !kIsWeb && Platform.isLinux;
static bool get isWindows => !kIsWeb && Platform.isWindows;
static bool get isMacOS => !kIsWeb && Platform.isMacOS;
static bool get isIOS => !kIsWeb && Platform.isIOS;
static bool get isAndroid => !kIsWeb && Platform.isAndroid;
static bool get isCupertinoStyle => isIOS || isMacOS;
static bool get isMobile => isAndroid || isIOS;
/// For desktops which don't support ChachedNetworkImage yet
static bool get isBetaDesktop => isWindows || isLinux;
static bool get isDesktop => isLinux || isWindows || isMacOS;
static bool get usesTouchscreen => !isMobile;
static bool get supportsVideoPlayer =>
!PlatformInfos.isWindows && !PlatformInfos.isLinux;
static bool get supportsCustomImageResizer =>
PlatformInfos.isWeb || PlatformInfos.isMobile;
/// Web could also record in theory but currently creates broken opus
static bool get platformCanRecord => (isMobile || isMacOS);
static bool get supportsAppLock => (isMobile || isMacOS);
static String get appDisplayName =>
'${AppSettings.applicationName.value} ${isWeb ? 'web' : Platform.operatingSystem}${kReleaseMode ? '' : 'Debug'}';
static Future<String> getVersion() async {
var version = kIsWeb ? 'Web' : 'Unknown';
try {
version = (await PackageInfo.fromPlatform()).version;
} catch (_) {}
return version;
}
static Future<void> showDialog(BuildContext context) async {
final l10n = L10n.of(context);
final version = await PlatformInfos.getVersion();
if (!context.mounted) return;
showAboutDialog(
context: context,
children: [
Text(l10n.versionWithNumber(version)),
TextButton.icon(
onPressed: () => launchUrlString(AppConfig.sourceCodeUrl),
icon: const Icon(Icons.source_outlined),
label: Text(l10n.sourceCode),
),
Builder(
builder: (innerContext) {
return TextButton.icon(
onPressed: () {
context.go('/logs');
Navigator.of(innerContext).pop();
},
icon: const Icon(Icons.list_outlined),
label: Text(l10n.logs),
);
},
),
Builder(
builder: (innerContext) {
return TextButton.icon(
onPressed: () {
context.go('/configs');
Navigator.of(innerContext).pop();
},
icon: const Icon(Icons.settings_applications_outlined),
label: Text(l10n.advancedConfigs),
);
},
),
],
applicationIcon: ClipRRect(
borderRadius: BorderRadius.circular(64),
child: Image.asset(
'./assets/logo/mini/logo_mini.png',
width: 64,
height: 64,
),
),
applicationName: AppSettings.applicationName.value,
);
}
}