Skip to content

Commit 9cdcc9e

Browse files
committed
feat: fix deeplink
1 parent e218852 commit 9cdcc9e

18 files changed

+530
-795
lines changed

l10n_arb/intl_zh_CN.arb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
"loadingFailed": "加载失败",
2929
"emptyContent": "无内容",
3030
"noMoreContent": "没有更多内容",
31+
"connect": "连接",
32+
"serverConnectTestSuccess": "服务器连接成功 ↑↓ {delay}ms",
33+
"serverConnectTestFailed": "服务器连接失败 {reason}",
3134

3235
"durationJustNow": "刚刚",
3336
"durationSeconds": "{number} 秒前",

lib/bloc/main_bloc.dart

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,49 @@ class MainBloc extends Bloc<MainEvent, MainState> {
102102
}
103103
}, transformer: droppable());
104104

105+
on<MainGetServerInfoEvent>((event, emit) async {
106+
emit(MainGetServerInfoState(state, EventStatus.processing));
107+
try {
108+
var newState = state;
109+
final startTime = DateTime.now();
110+
final resp = await _repo.anonymousGetServerInfo(event.server);
111+
final delay = DateTime.now().difference(startTime).inMilliseconds;
112+
if (resp case Ok()) {
113+
final info = resp.v;
114+
final knownServerInfos = {
115+
event.server.serverID: ServerInformation(
116+
sourceCodeAddress: info.serverBinarySummary.sourceCodeAddress,
117+
buildVersion: info.serverBinarySummary.buildVersion,
118+
buildDate: info.serverBinarySummary.buildDate,
119+
protocolVersion: info.protocolSummary.version,
120+
),
121+
...state.knownServerInfos,
122+
};
123+
final knownServerFeatureSummaries = {
124+
event.server.serverID: info.featureSummary,
125+
...state.knownServerFeatureSummaries,
126+
};
127+
final knownServerInstanceSummaries = {
128+
event.server.serverID: info.serverInstanceSummary,
129+
...state.knownServerInstanceSummaries,
130+
};
131+
newState = newState.copyWith(
132+
knownServerInfos: knownServerInfos,
133+
knownServerFeatureSummaries: knownServerFeatureSummaries,
134+
knownServerInstanceSummaries: knownServerInstanceSummaries,
135+
);
136+
emit(MainGetServerInfoState(newState, EventStatus.success,
137+
delay: delay));
138+
} else if (resp case Err()) {
139+
emit(MainGetServerInfoState(state, EventStatus.failed, msg: resp.e));
140+
}
141+
} catch (e) {
142+
debugPrint(e.toString());
143+
emit(MainGetServerInfoState(state, EventStatus.failed,
144+
msg: e.toString()));
145+
}
146+
}, transformer: restartable());
147+
105148
on<MainLoginEvent>((event, emit) async {
106149
emit(MainLoginState(state, EventStatus.processing));
107150
try {
@@ -137,6 +180,7 @@ class MainBloc extends Bloc<MainEvent, MainState> {
137180
if (event.server == null && state.currentServer == null) {
138181
return;
139182
}
183+
emit(MainRefreshServerInfoState(state, EventStatus.processing));
140184
try {
141185
final currentServer = event.server ?? state.currentServer!;
142186
var newState = state;
@@ -175,9 +219,10 @@ class MainBloc extends Bloc<MainEvent, MainState> {
175219
final user = resp2.v;
176220
newState = newState.copyWith(currentUser: user.user);
177221
}
178-
emit(newState);
222+
emit(MainRefreshServerInfoState(newState, EventStatus.success));
179223
} catch (e) {
180224
debugPrint(e.toString());
225+
emit(MainRefreshServerInfoState(state, EventStatus.failed));
181226
}
182227
}, transformer: restartable());
183228

lib/bloc/main_event.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ class MainInitEvent extends MainEvent {
1212
MainInitEvent(super.context);
1313
}
1414

15+
class MainGetServerInfoEvent extends MainEvent {
16+
final ServerConfig server;
17+
18+
MainGetServerInfoEvent(super.context, {required this.server});
19+
}
20+
1521
class MainLoginEvent extends MainEvent {
1622
final ServerConfig? serverConfig;
1723
final String? password;

lib/bloc/main_state.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,22 @@ class MainInitState extends MainEventState {
7272
MainInitState(super.state, super.statusCode, {super.msg}) : super.clone();
7373
}
7474

75+
class MainGetServerInfoState extends MainEventState {
76+
MainGetServerInfoState(
77+
super.state,
78+
super.statusCode, {
79+
super.msg,
80+
this.delay,
81+
}) : super.clone();
82+
83+
final int? delay;
84+
}
85+
86+
class MainRefreshServerInfoState extends MainEventState {
87+
MainRefreshServerInfoState(super.state, super.statusCode, {super.msg})
88+
: super.clone();
89+
}
90+
7591
class MainLoginState extends MainEventState {
7692
MainLoginState(super.state, super.statusCode, {super.msg}) : super.clone();
7793
}

lib/l10n/intl/messages_zh-CN.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ class MessageLookup extends MessageLookupByLibrary {
5555

5656
static String m12(server) => "注册到 ${server}";
5757

58+
static String m16(reason) => "服务器连接失败 ${reason}";
59+
60+
static String m17(delay) => "服务器连接成功 ↑↓ ${delay}ms";
61+
5862
final messages = _notInlinedMessages(_notInlinedMessages);
5963
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
6064
"ACCOUNT_PLATFORM": MessageLookupByLibrary.simpleMessage("平台"),
@@ -164,6 +168,7 @@ class MessageLookup extends MessageLookupByLibrary {
164168
"clientSetting": MessageLookupByLibrary.simpleMessage("客户端设置"),
165169
"close": MessageLookupByLibrary.simpleMessage("关闭"),
166170
"confirm": MessageLookupByLibrary.simpleMessage("确认"),
171+
"connect": MessageLookupByLibrary.simpleMessage("连接"),
167172
"connectInClient": MessageLookupByLibrary.simpleMessage("使用客户端登录"),
168173
"continueInCurrentServer": MessageLookupByLibrary.simpleMessage("继续使用"),
169174
"continueInWebVersion": MessageLookupByLibrary.simpleMessage("继续使用网页版"),
@@ -252,6 +257,8 @@ class MessageLookup extends MessageLookupByLibrary {
252257
"safari": MessageLookupByLibrary.simpleMessage("Safari"),
253258
"samsung": MessageLookupByLibrary.simpleMessage("三星"),
254259
"scanningLocalFiles": MessageLookupByLibrary.simpleMessage("正在扫描本地文件"),
260+
"serverConnectTestFailed": m16,
261+
"serverConnectTestSuccess": m17,
255262
"serverSetup": MessageLookupByLibrary.simpleMessage("服务器设置"),
256263
"settings": MessageLookupByLibrary.simpleMessage("设置"),
257264
"showServerConfig": MessageLookupByLibrary.simpleMessage("查看服务器信息"),

lib/l10n/l10n.dart

Lines changed: 30 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/main_window.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:go_router/go_router.dart';
77

88
import 'bloc/deeplink_bloc.dart';
99
import 'common/platform.dart';
10+
import 'view/pages/settings/server_select/server_select_page.dart';
1011
import 'view/specialized/theme_mode_toggle.dart';
1112
import 'view/specialized/title_bar.dart';
1213

@@ -78,9 +79,15 @@ class _DeepLinkWidget extends StatelessWidget {
7879
@override
7980
Widget build(BuildContext context) {
8081
return BlocConsumer<DeepLinkBloc, DeepLinkState>(
81-
listener: (context, state) {
82+
listener: (context, state) async {
8283
if (state is DeepLinkConnectState) {
83-
// TODO: Implement deep link handling
84+
final navigator = Navigator.of(context);
85+
await showDialog(
86+
context: context,
87+
builder: (context) {
88+
return ServerLinkAddDialog(navigator, server: state.serverConfig);
89+
},
90+
);
8491
}
8592
},
8693
builder: (context, state) {

lib/repo/main_repo.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,14 @@ class MainRepo {
9898
return id;
9999
}
100100

101+
Future<Result<GetServerInformationResponse, String>> anonymousGetServerInfo(
102+
ServerConfig config) async {
103+
final client = await LibrarianService.grpc(ServerConfig(
104+
host: config.host, port: config.port, enableTLS: config.enableTLS));
105+
return client.doRequest(
106+
(client) => client.getServerInformation, GetServerInformationRequest());
107+
}
108+
101109
Future<Result<GetServerInformationResponse, String>> getServerInfo(
102110
EventContext context) async {
103111
return _api.get(context.sid).doRequest(

lib/route.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ import 'view/pages/settings/admin/user_edit_panel.dart';
4040
import 'view/pages/settings/admin/user_manage_page.dart';
4141
import 'view/pages/settings/client/client_setting_page.dart';
4242
import 'view/pages/settings/porter_context_page.dart';
43-
import 'view/pages/settings/server_select_page.dart';
43+
import 'view/pages/settings/server_select/server_select_page.dart';
4444
import 'view/pages/settings/session/session_edit_panel.dart';
4545
import 'view/pages/settings/session/session_manage_page.dart';
4646
import 'view/pages/settings/settings_nav.dart';

0 commit comments

Comments
 (0)