Better windows notification

This commit is contained in:
2025-10-01 12:28:23 +08:00
parent a4f7b8415d
commit 28db6f9f01
4 changed files with 43 additions and 7 deletions

View File

@@ -168,7 +168,7 @@ class AccountConnectionNewSheet extends HookConsumerWidget {
scopes: [AppleIDAuthorizationScopes.email], scopes: [AppleIDAuthorizationScopes.email],
webAuthenticationOptions: WebAuthenticationOptions( webAuthenticationOptions: WebAuthenticationOptions(
clientId: 'dev.solsynth.solarpass', clientId: 'dev.solsynth.solarpass',
redirectUri: Uri.parse('https://id.solian.app/auth/callback'), redirectUri: Uri.parse('https://solian.app/auth/callback'),
), ),
); );

View File

@@ -98,7 +98,7 @@ class _AccountBasicInfo extends StatelessWidget {
onPressed: () { onPressed: () {
SharePlus.instance.share( SharePlus.instance.share(
ShareParams( ShareParams(
uri: Uri.parse('https://id.solian.app/@${data.name}'), uri: Uri.parse('https://solian.app/@${data.name}'),
), ),
); );
}, },

View File

@@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:island/main.dart'; import 'package:island/main.dart';
import 'package:island/pods/config.dart';
import 'package:island/route.dart'; import 'package:island/route.dart';
import 'package:island/models/account.dart'; import 'package:island/models/account.dart';
import 'package:island/pods/websocket.dart'; import 'package:island/pods/websocket.dart';
@@ -13,6 +14,7 @@ import 'package:island/talker.dart';
import 'package:island/widgets/app_notification.dart'; import 'package:island/widgets/app_notification.dart';
import 'package:top_snackbar_flutter/top_snack_bar.dart'; import 'package:top_snackbar_flutter/top_snack_bar.dart';
import 'package:url_launcher/url_launcher_string.dart'; import 'package:url_launcher/url_launcher_string.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import 'package:windows_notification/windows_notification.dart' as winty; import 'package:windows_notification/windows_notification.dart' as winty;
import 'package:windows_notification/notification_message.dart'; import 'package:windows_notification/notification_message.dart';
@@ -30,7 +32,7 @@ void _onAppLifecycleChanged(AppLifecycleState state) {
Future<void> initializeLocalNotifications() async { Future<void> initializeLocalNotifications() async {
// Initialize Windows notification for Windows platform // Initialize Windows notification for Windows platform
windowsNotification = winty.WindowsNotification( windowsNotification = winty.WindowsNotification(
applicationId: 'dev.solsynth.solian', applicationId: "Solian",
); );
WidgetsBinding.instance.addObserver( WidgetsBinding.instance.addObserver(
@@ -102,12 +104,46 @@ StreamSubscription<WebSocketPacket> setupNotificationListener(
); );
if (windowsNotification != null) { if (windowsNotification != null) {
final serverUrl = ref.read(serverUrlProvider);
final pfp = notification.meta['pfp'] as String?;
final img = notification.meta['images'] as List<dynamic>?;
final actionUrl = notification.meta['action_uri'] as String?;
// Download and cache images
String? imagePath;
String? largeImagePath;
if (pfp != null) {
try {
final file = await DefaultCacheManager().getSingleFile(
'$serverUrl/drive/files/$pfp',
);
imagePath = file.path;
} catch (e) {
talker.error('Failed to download pfp image: $e');
}
}
if (img != null && img.isNotEmpty) {
try {
final file = await DefaultCacheManager().getSingleFile(
'$serverUrl/drive/files/${img.firstOrNull}',
);
largeImagePath = file.path;
} catch (e) {
talker.error('Failed to download large image: $e');
}
}
// Use Windows notification for Windows platform // Use Windows notification for Windows platform
final notificationMessage = NotificationMessage.fromPluginTemplate( final notificationMessage = NotificationMessage.fromPluginTemplate(
DateTime.now().millisecondsSinceEpoch.toString(), // unique id notification.id, // unique id
notification.title, notification.title,
notification.content, [notification.subtitle, notification.content].where((e) => e.isNotEmpty).join('\n'),
launch: notification.meta['action_uri'] as String?, group: notification.topic,
image: imagePath,
largeImage: largeImagePath,
launch: actionUrl != null ? 'solian://$actionUrl' : null,
); );
await windowsNotification!.showNotificationPluginTemplate( await windowsNotification!.showNotificationPluginTemplate(
notificationMessage, notificationMessage,

View File

@@ -106,7 +106,7 @@ class CloudFileWidget extends HookConsumerWidget {
TextButton.icon( TextButton.icon(
onPressed: () { onPressed: () {
launchUrlString( launchUrlString(
'https://fs.solian.app/files/${item.id}', 'https://solian.app/files/${item.id}',
mode: LaunchMode.externalApplication, mode: LaunchMode.externalApplication,
); );
}, },