mirror of
https://github.com/rustdesk/rustdesk.git
synced 2024-12-12 02:09:12 +08:00
3e357159f3
1. opt request json type. 2. desktop and mobile use same loginDialog. 3. opt loginDialog UI style. 4. opt login request Exception catch.
141 lines
4.4 KiB
Dart
141 lines
4.4 KiB
Dart
import 'package:flutter/widgets.dart';
|
|
import 'package:flutter_hbb/common.dart';
|
|
import 'package:flutter_hbb/common/widgets/peer_tab_page.dart';
|
|
import 'package:flutter_hbb/common/hbbs/hbbs.dart';
|
|
import 'package:flutter_hbb/models/model.dart';
|
|
import 'package:flutter_hbb/models/peer_model.dart';
|
|
import 'package:flutter_hbb/models/platform_model.dart';
|
|
import 'package:get/get.dart';
|
|
import 'dart:convert';
|
|
import 'package:http/http.dart' as http;
|
|
|
|
class GroupModel {
|
|
final RxBool userLoading = false.obs;
|
|
final RxString userLoadError = "".obs;
|
|
final RxBool peerLoading = false.obs; //to-do: not used
|
|
final RxString peerLoadError = "".obs;
|
|
final RxList<UserPayload> users = RxList.empty(growable: true);
|
|
final RxList<PeerPayload> peerPayloads = RxList.empty(growable: true);
|
|
final RxList<Peer> peersShow = RxList.empty(growable: true);
|
|
WeakReference<FFI> parent;
|
|
|
|
GroupModel(this.parent);
|
|
|
|
Future<void> reset() async {
|
|
userLoading.value = false;
|
|
userLoadError.value = "";
|
|
peerLoading.value = false;
|
|
peerLoadError.value = "";
|
|
users.clear();
|
|
peerPayloads.clear();
|
|
peersShow.clear();
|
|
}
|
|
|
|
Future<void> pull() async {
|
|
await reset();
|
|
if (gFFI.userModel.userName.isEmpty ||
|
|
(gFFI.userModel.isAdmin.isFalse && gFFI.userModel.groupName.isEmpty)) {
|
|
statePeerTab.check();
|
|
return;
|
|
}
|
|
userLoading.value = true;
|
|
userLoadError.value = "";
|
|
final api = "${await bind.mainGetApiServer()}/api/users";
|
|
try {
|
|
var uri0 = Uri.parse(api);
|
|
final pageSize = 20;
|
|
var total = 0;
|
|
int current = 0;
|
|
do {
|
|
current += 1;
|
|
var uri = Uri(
|
|
scheme: uri0.scheme,
|
|
host: uri0.host,
|
|
path: uri0.path,
|
|
port: uri0.port,
|
|
queryParameters: {
|
|
'current': current.toString(),
|
|
'pageSize': pageSize.toString(),
|
|
if (gFFI.userModel.isAdmin.isFalse)
|
|
'grp': gFFI.userModel.groupName.value,
|
|
});
|
|
final resp = await http.get(uri, headers: getHttpHeaders());
|
|
if (resp.body.isNotEmpty && resp.body.toLowerCase() != "null") {
|
|
Map<String, dynamic> json = jsonDecode(resp.body);
|
|
if (json.containsKey('error')) {
|
|
throw json['error'];
|
|
} else {
|
|
if (total == 0) total = json['total'];
|
|
if (json.containsKey('data')) {
|
|
final data = json['data'];
|
|
if (data is List) {
|
|
for (final user in data) {
|
|
users.add(UserPayload.fromJson(user));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} while (current * pageSize < total);
|
|
} catch (err) {
|
|
debugPrint('$err');
|
|
userLoadError.value = err.toString();
|
|
} finally {
|
|
userLoading.value = false;
|
|
statePeerTab.check();
|
|
}
|
|
}
|
|
|
|
Future<void> pullUserPeers(String username) async {
|
|
peerPayloads.clear();
|
|
peersShow.clear();
|
|
peerLoading.value = true;
|
|
peerLoadError.value = "";
|
|
final api = "${await bind.mainGetApiServer()}/api/peers";
|
|
try {
|
|
var uri0 = Uri.parse(api);
|
|
final pageSize = 20;
|
|
var total = 0;
|
|
int current = 0;
|
|
do {
|
|
current += 1;
|
|
var uri = Uri(
|
|
scheme: uri0.scheme,
|
|
host: uri0.host,
|
|
path: uri0.path,
|
|
port: uri0.port,
|
|
queryParameters: {
|
|
'current': current.toString(),
|
|
'pageSize': pageSize.toString(),
|
|
'grp': gFFI.userModel.groupName.value,
|
|
'target_user': username
|
|
});
|
|
final resp = await http.get(uri, headers: getHttpHeaders());
|
|
if (resp.body.isNotEmpty && resp.body.toLowerCase() != "null") {
|
|
Map<String, dynamic> json = jsonDecode(resp.body);
|
|
if (json.containsKey('error')) {
|
|
throw json['error'];
|
|
} else {
|
|
if (total == 0) total = json['total'];
|
|
if (json.containsKey('data')) {
|
|
final data = json['data'];
|
|
if (data is List) {
|
|
for (final p in data) {
|
|
final peer = PeerPayload.fromJson(p);
|
|
peerPayloads.add(peer);
|
|
peersShow.add(PeerPayload.toPeer(peer));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} while (current * pageSize < total);
|
|
} catch (err) {
|
|
debugPrint('$err');
|
|
peerLoadError.value = err.toString();
|
|
} finally {
|
|
peerLoading.value = false;
|
|
}
|
|
}
|
|
}
|