Kenneth Bruen
2 years ago
9 changed files with 418 additions and 7 deletions
File diff suppressed because one or more lines are too long
@ -0,0 +1,140 @@
|
||||
import 'package:fluent_ui/fluent_ui.dart'; |
||||
import 'package:flutter/services.dart'; |
||||
import 'package:info_tren/pages/about/about_page.dart'; |
||||
import 'package:url_launcher/url_launcher.dart'; |
||||
|
||||
class AboutPageFluent extends AboutPageShared { |
||||
const AboutPageFluent({super.key}); |
||||
|
||||
@override |
||||
State<AboutPageShared> createState() => AboutPageStateFluent(); |
||||
} |
||||
|
||||
class AboutPageStateFluent extends AboutPageState<AboutPageFluent> { |
||||
@override |
||||
Widget build(BuildContext context) { |
||||
return NavigationView( |
||||
appBar: NavigationAppBar( |
||||
title: Text(pageTitle), |
||||
), |
||||
content: SingleChildScrollView( |
||||
child: Column( |
||||
mainAxisSize: MainAxisSize.min, |
||||
crossAxisAlignment: CrossAxisAlignment.stretch, |
||||
children: [ |
||||
Center( |
||||
child: Text( |
||||
'Info Tren', |
||||
style: FluentTheme.of(context).typography.display, |
||||
), |
||||
), |
||||
if (packageInfo != null) |
||||
Center( |
||||
child: Text( |
||||
packageInfo!.packageName, |
||||
style: FluentTheme.of(context).typography.caption, |
||||
), |
||||
), |
||||
// ListTile( |
||||
// title: Text(versionTitleText), |
||||
// subtitle: localChangelog.isEmpty ? null : Text(localChangelog.first.title), |
||||
// ), |
||||
const Divider(), |
||||
for (final log in mergedChangelogs) ...[ |
||||
Padding( |
||||
padding: const EdgeInsets.fromLTRB(8, 8, 8, 0), |
||||
child: Row( |
||||
crossAxisAlignment: CrossAxisAlignment.center, |
||||
children: [ |
||||
Expanded( |
||||
child: Text( |
||||
log.version.toString(), |
||||
style: FluentTheme.of(context).typography.title, |
||||
), |
||||
), |
||||
if (localChangelog.isNotEmpty && log.version == localChangelog.first.version) |
||||
Container( |
||||
decoration: BoxDecoration( |
||||
border: Border.all( |
||||
color: FluentTheme.of(context).inactiveColor, |
||||
width: 1, |
||||
), |
||||
borderRadius: BorderRadius.circular(20), |
||||
), |
||||
child: Padding( |
||||
padding: const EdgeInsets.all(4), |
||||
child: Text( |
||||
currentVersionText, |
||||
style: const TextStyle( |
||||
inherit: true, |
||||
), |
||||
), |
||||
), |
||||
), |
||||
if (remoteChangelog.isNotEmpty && log.version == remoteChangelog.first.version && (localChangelog.isEmpty || localChangelog.first.version != log.version)) |
||||
Container( |
||||
decoration: BoxDecoration( |
||||
border: Border.all( |
||||
color: Colors.green, |
||||
width: 1, |
||||
), |
||||
borderRadius: BorderRadius.circular(20), |
||||
), |
||||
child: Padding( |
||||
padding: const EdgeInsets.all(4), |
||||
child: Text( |
||||
latestVersionText, |
||||
style: TextStyle( |
||||
inherit: true, |
||||
color: Colors.green, |
||||
), |
||||
), |
||||
), |
||||
), |
||||
if (AboutPageState.download == 'apk' && log.apkLink != null) |
||||
GestureDetector( |
||||
onSecondaryTap: () { |
||||
Clipboard.setData(ClipboardData(text: log.apkLink!.toString())); |
||||
// ScaffoldMessenger.of(context).showSnackBar(const SnackBar( |
||||
// content: Text('Link copied to clipboard'), |
||||
// )); |
||||
}, |
||||
onLongPress: () { |
||||
Clipboard.setData(ClipboardData(text: log.apkLink!.toString())); |
||||
// ScaffoldMessenger.of(context).showSnackBar(const SnackBar( |
||||
// content: Text('Link copied to clipboard'), |
||||
// )); |
||||
}, |
||||
onTap: () { |
||||
launchUrl( |
||||
log.apkLink!, |
||||
mode: LaunchMode.externalApplication, |
||||
); |
||||
}, |
||||
behavior: HitTestBehavior.translucent, |
||||
child: const Tooltip( |
||||
message: 'Download APK', |
||||
child: Padding( |
||||
padding: EdgeInsets.all(4), |
||||
child: Icon(FluentIcons.download), |
||||
), |
||||
), |
||||
), |
||||
], |
||||
), |
||||
), |
||||
Padding( |
||||
padding: const EdgeInsets.all(8.0), |
||||
child: RichText( |
||||
text: TextSpan( |
||||
text: log.description, |
||||
), |
||||
), |
||||
), |
||||
], |
||||
], |
||||
), |
||||
), |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,8 @@
|
||||
[Desktop Entry] |
||||
Type=Application |
||||
Encoding=UTF-8 |
||||
Name=Info Tren |
||||
Comment= |
||||
Exec= |
||||
Icon= |
||||
Terminal=False |
@ -0,0 +1,39 @@
|
||||
#! /bin/sh |
||||
install_dir="$1" |
||||
if [ -z "$install_dir" ]; then |
||||
echo "Please specify a directory to install InfoTren to." |
||||
echo "Example:" |
||||
echo " $0 ~/infotren" |
||||
exit 3 |
||||
fi |
||||
|
||||
if [ ! -d "$install_dir" ]; then |
||||
if [ -d $(dirname "$install_dir") ]; then |
||||
mkdir "$install_dir" |
||||
else |
||||
echo "$install_dir doesn't exist. Please specify a directory to install InfoTren to." |
||||
echo "Example:" |
||||
echo " $0 ~/infotren" |
||||
exit 1 |
||||
fi |
||||
fi |
||||
|
||||
if [ ! -f ./infotren.desktop ]; then |
||||
if [ -f "$(dirname $0)/infotren.desktop" ]; then |
||||
cd "$(dirname $0)" |
||||
else |
||||
echo "Run this script from inside the infotren directory." |
||||
exit 2 |
||||
fi |
||||
fi |
||||
|
||||
echo "Installing InfoTren to $install_dir" |
||||
cp -r . "$install_dir" |
||||
if [ -z "$XDG_DATA_HOME" ]; then |
||||
XDG_DATA_HOME=~/.local/share |
||||
fi |
||||
if [ ! -d "$XDG_DATA_HOME/applications" ]; then |
||||
mkdir -p "$XDG_DATA_HOME/applications" |
||||
fi |
||||
echo "Installing infotren.desktop to $XDG_DATA_HOME/applications/infotren.desktop" |
||||
cat infotren.desktop | sed "s|Exec=|Exec=$install_dir/info_tren|g" > "$XDG_DATA_HOME/applications/infotren.desktop" |
Loading…
Reference in new issue