@@ -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
0 commit comments