Files
umbrix/lib/services/deep_link_service.dart
problematicconsumer acc438c40e Fix linux startup
2023-07-23 13:40:59 +03:30

49 lines
1.3 KiB
Dart

import 'dart:io';
import 'package:hiddify/utils/utils.dart';
import 'package:protocol_handler/protocol_handler.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'deep_link_service.g.dart';
typedef NewProfileLink = ({String? url, String? name});
@Riverpod(keepAlive: true)
class DeepLinkService extends _$DeepLinkService
with ProtocolListener, InfraLogger {
@override
Future<NewProfileLink?> build() async {
if (!Platform.isLinux) {
for (final protocol in _protocols) {
await protocolHandler.register(protocol);
}
}
protocolHandler.addListener(this);
ref.onDispose(() {
protocolHandler.removeListener(this);
});
final initialPayload = await protocolHandler.getInitialUrl();
if (initialPayload != null) {
loggy.debug('initial payload: [$initialPayload]');
final link = LinkParser.deep(initialPayload);
return link;
}
return null;
}
static const _protocols = ['clash', 'clashmeta'];
@override
void onProtocolUrlReceived(String url) {
super.onProtocolUrlReceived(url);
loggy.debug("url received: [$url]");
final link = LinkParser.deep(url);
if (link == null) {
loggy.debug("link was not valid");
return;
}
update((_) => link);
}
}