@@ -150,6 +150,59 @@ class CoreManager {
150150 await dio.post ('$baseUrl /manager/start' );
151151 }
152152
153+ Future <bool > getIsStarted () async {
154+ final managerRes = await dio.get ('$baseUrl /manager' );
155+ var isStarted = managerRes.data['isStarted' ];
156+ if (isStarted is bool ) {
157+ return isStarted;
158+ }
159+ return false ;
160+ }
161+
162+ Future <String > getCurProxyInfo () async {
163+ final managerRes = await dio.get ('$baseUrl /proxies/cur-proxy' );
164+ var name = managerRes.data['name' ];
165+ if (name is String && name.isNotEmpty) {
166+ return name;
167+ }
168+ var addr = managerRes.data['addr' ];
169+ if (addr is String && addr.isNotEmpty) {
170+ return addr;
171+ }
172+ return "" ;
173+ }
174+
175+ Future <ProxyList > getProxyList () async {
176+ final proxiesRes = await dio.get ('$baseUrl /proxies' );
177+ return ProxyList .fromJson (proxiesRes.data);
178+ }
179+
180+ Future <RuleList > getRuleList () async {
181+ final rulesRes = await dio.get ('$baseUrl /rules' );
182+ return RuleList .fromJson (rulesRes.data);
183+ }
184+
185+ Future <void > selectProxy (String id) async {
186+ await dio.post ('$baseUrl /selected/proxy' , data: {'id' : id});
187+ }
188+
189+ Future <void > selectRule (String id) async {
190+ await dio.post ('$baseUrl /selected/rule' , data: {'id' : id});
191+ }
192+
193+ Future <ProxyMode > getMode () async {
194+ final setting = await dio.get ('$baseUrl /setting' );
195+ if (setting.data.containsKey ('mode' ) && setting.data['mode' ] is String ) {
196+ if (setting.data['mode' ] == 'tun' ) {
197+ return ProxyMode .tun;
198+ }
199+ if (setting.data['mode' ] == 'system' ) {
200+ return ProxyMode .system;
201+ }
202+ }
203+ return ProxyMode .mixed;
204+ }
205+
153206 Future <void > exitCore () async {
154207 if (Platform .isWindows) {
155208 try {
@@ -178,3 +231,59 @@ class CoreManager {
178231 });
179232 }
180233}
234+
235+ class ProxyItem {
236+ final String id;
237+ final String name;
238+ final String ? server;
239+ final int ? port;
240+
241+ ProxyItem (this .id, this .name, this .server, this .port);
242+
243+ ProxyItem .fromJson (Map <String , dynamic > json)
244+ : id = (json['id' ] as String ),
245+ name = (json['name' ] as String ),
246+ server = (json['server' ] as String ),
247+ port = (json['port' ] as int );
248+
249+ Map <String , dynamic > toJson () => {
250+ 'id' : id,
251+ 'name' : name,
252+ };
253+ }
254+
255+ class ProxyList {
256+ final List <ProxyItem > proxies;
257+ String selectedId;
258+
259+ ProxyList (this .proxies, this .selectedId);
260+
261+ ProxyList .fromJson (Map <String , dynamic > json)
262+ : proxies = json['proxies' ] != null
263+ ? (json['proxies' ] as List )
264+ .map ((asset) =>
265+ ProxyItem .fromJson (asset as Map <String , dynamic >))
266+ .toList ()
267+ : < ProxyItem > [],
268+ selectedId = (json['selectedId' ] as String );
269+
270+ Map <String , dynamic > toJson () =>
271+ {'proxies' : proxies.map ((asset) => asset.toJson ()).toList ()};
272+ }
273+
274+ class RuleList {
275+ final List <String > rules;
276+ String selectedId;
277+
278+ RuleList (this .rules, this .selectedId);
279+
280+ RuleList .fromJson (Map <String , dynamic > json)
281+ : rules = json['rules' ] != null
282+ ? (json['rules' ] as List ).map ((asset) => asset as String ).toList ()
283+ : < String > [],
284+ selectedId = (json['selectedId' ] as String );
285+
286+ Map <String , dynamic > toJson () => {'rules' : rules};
287+ }
288+
289+ enum ProxyMode { tun, system, mixed }
0 commit comments