Implement Scanner-View

This commit is contained in:
2025-04-13 00:17:06 +02:00
parent c0b8a8a3f4
commit 95353735b0
19 changed files with 961 additions and 179 deletions

View File

@@ -1,6 +1,6 @@
import 'package:simplecloudnotifier/models/channel.dart';
enum ScanResultMode { ChannelSubscribe, MessageSend, Channel }
enum ScanResultMode { ChannelSubscribe, MessageSend, Channel, Error }
abstract class ScanResult {
ScanResultMode get mode;
@@ -12,10 +12,10 @@ abstract class ScanResult {
final v = Uri.tryParse(lines[0]);
if (v != null && v.queryParameters.containsKey('preset_user_id') && v.queryParameters.containsKey('preset_user_key')) {
return ScanResultMessageSend(userID: v.queryParameters['preset_user_id']!, userKey: v.queryParameters['preset_user_key']);
return ScanResultMessageSend(userID: v.queryParameters['preset_user_id']!, userKey: v.queryParameters['preset_user_key'], url: lines[0]);
}
if (v != null && v.queryParameters.containsKey('preset_user_id') && v.queryParameters.containsKey('preset_user_key')) {
return ScanResultMessageSend(userID: v.queryParameters['preset_user_id']!, userKey: null);
return ScanResultMessageSend(userID: v.queryParameters['preset_user_id']!, userKey: null, url: lines[0]);
}
}
@@ -24,12 +24,12 @@ abstract class ScanResult {
}
if (lines.length == 5 && lines[0] == '@scn.channel' && lines[1] == 'v1') {
if (lines.length != 4) return null;
if (lines.length != 5) return null;
return ScanResultChannel(channelDisplayName: lines[2], ownerUserID: lines[3], channelID: lines[4]);
}
return null;
return ScanResultError(message: 'Invalid QR code');
}
static String createChannelQR(Channel channel) {
@@ -44,8 +44,9 @@ abstract class ScanResult {
class ScanResultMessageSend extends ScanResult {
final String userID;
final String? userKey;
final String url;
ScanResultMessageSend({required this.userID, required this.userKey});
ScanResultMessageSend({required this.userID, required this.userKey, required this.url});
@override
ScanResultMode get mode => ScanResultMode.MessageSend;
@@ -73,3 +74,12 @@ class ScanResultChannelSubscribe extends ScanResult {
@override
ScanResultMode get mode => ScanResultMode.ChannelSubscribe;
}
class ScanResultError extends ScanResult {
final String message;
ScanResultError({required this.message});
@override
ScanResultMode get mode => ScanResultMode.Error;
}