mirror of
https://github.com/JGeek00/adguard-home-manager.git
synced 2025-06-10 00:27:48 +00:00
Merge branch 'beta'
This commit is contained in:
commit
b25d3fd0dd
12 changed files with 257 additions and 126 deletions
|
@ -653,5 +653,12 @@
|
||||||
"queries": "查询",
|
"queries": "查询",
|
||||||
"adultSites": "成人网站",
|
"adultSites": "成人网站",
|
||||||
"quickFilters": "状态过滤器",
|
"quickFilters": "状态过滤器",
|
||||||
"searchDomainInternet": "在互联网上搜索该域名"
|
"searchDomainInternet": "在互联网上搜索该域名",
|
||||||
|
"hideServerAddress": "隐藏服务器地址",
|
||||||
|
"hideServerAddressDescription": "在主页上隐藏服务器地址",
|
||||||
|
"topItemsOrder": "顶部项目顺序",
|
||||||
|
"topItemsOrderDescription": "排列主页顶部项目列表",
|
||||||
|
"topItemsReorderInfo": "按住并滑动一个项目以重新排序。",
|
||||||
|
"discardChanges": "放弃更改",
|
||||||
|
"discardChangesDescription": "您确定要放弃更改吗?"
|
||||||
}
|
}
|
||||||
|
|
|
@ -653,5 +653,12 @@
|
||||||
"queries": "查询",
|
"queries": "查询",
|
||||||
"adultSites": "成人网站",
|
"adultSites": "成人网站",
|
||||||
"quickFilters": "状态过滤器",
|
"quickFilters": "状态过滤器",
|
||||||
"searchDomainInternet": "在互联网上搜索该域名"
|
"searchDomainInternet": "在互联网上搜索该域名",
|
||||||
|
"hideServerAddress": "隐藏服务器地址",
|
||||||
|
"hideServerAddressDescription": "在主页上隐藏服务器地址",
|
||||||
|
"topItemsOrder": "顶部项目顺序",
|
||||||
|
"topItemsOrderDescription": "排列主页顶部项目列表",
|
||||||
|
"topItemsReorderInfo": "按住并滑动一个项目以重新排序。",
|
||||||
|
"discardChanges": "放弃更改",
|
||||||
|
"discardChangesDescription": "您确定要放弃更改吗?"
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,8 +72,8 @@ class DhcpStatus {
|
||||||
|
|
||||||
factory DhcpStatus.fromJson(Map<String, dynamic> json) => DhcpStatus(
|
factory DhcpStatus.fromJson(Map<String, dynamic> json) => DhcpStatus(
|
||||||
interfaceName: json["interface_name"],
|
interfaceName: json["interface_name"],
|
||||||
v4: IpVersion.fromJson(json["v4"]),
|
v4: json["v4"] != null ? IpVersion.fromJson(json["v4"]) : null,
|
||||||
v6: IpVersion.fromJson(json["v6"]),
|
v6: json["v6"] != null ? IpVersion.fromJson(json["v6"]) : null,
|
||||||
leases: List<Lease>.from(json["leases"].map((x) => Lease.fromJson(x))),
|
leases: List<Lease>.from(json["leases"].map((x) => Lease.fromJson(x))),
|
||||||
staticLeases: List<Lease>.from(json["static_leases"].map((x) => Lease.fromJson(x))),
|
staticLeases: List<Lease>.from(json["static_leases"].map((x) => Lease.fromJson(x))),
|
||||||
enabled: json["enabled"],
|
enabled: json["enabled"],
|
||||||
|
|
|
@ -12,7 +12,7 @@ class DnsInfo {
|
||||||
int? cacheSize;
|
int? cacheSize;
|
||||||
int? cacheTtlMin;
|
int? cacheTtlMin;
|
||||||
int? cacheTtlMax;
|
int? cacheTtlMax;
|
||||||
bool cacheOptimistic;
|
bool? cacheOptimistic;
|
||||||
bool resolveClients;
|
bool resolveClients;
|
||||||
bool usePrivatePtrResolvers;
|
bool usePrivatePtrResolvers;
|
||||||
List<String> localPtrUpstreams;
|
List<String> localPtrUpstreams;
|
||||||
|
|
|
@ -169,12 +169,14 @@ class ServersProvider with ChangeNotifier {
|
||||||
|
|
||||||
void checkServerUpdatesAvailable({
|
void checkServerUpdatesAvailable({
|
||||||
required Server server,
|
required Server server,
|
||||||
|
ApiClient? apiClient
|
||||||
}) async {
|
}) async {
|
||||||
|
final client = apiClient ?? _apiClient;
|
||||||
setUpdateAvailableLoadStatus(LoadStatus.loading, true);
|
setUpdateAvailableLoadStatus(LoadStatus.loading, true);
|
||||||
final result = await _apiClient!.checkServerUpdates();
|
final result = await client!.checkServerUpdates();
|
||||||
if (result['result'] == 'success') {
|
if (result['result'] == 'success') {
|
||||||
UpdateAvailableData data = UpdateAvailableData.fromJson(result['data']);
|
UpdateAvailableData data = UpdateAvailableData.fromJson(result['data']);
|
||||||
final gitHubResult = await _apiClient!.getUpdateChangelog(releaseTag: data.newVersion ?? data.currentVersion);
|
final gitHubResult = await client.getUpdateChangelog(releaseTag: data.newVersion ?? data.currentVersion);
|
||||||
if (gitHubResult['result'] == 'success') {
|
if (gitHubResult['result'] == 'success') {
|
||||||
data.changelog = gitHubResult['body'];
|
data.changelog = gitHubResult['body'];
|
||||||
}
|
}
|
||||||
|
@ -186,11 +188,12 @@ class ServersProvider with ChangeNotifier {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future initializateServer(Server server) async {
|
Future initializateServer(Server server, ApiClient apiClient) async {
|
||||||
final serverStatus = await _apiClient!.getServerStatus();
|
final serverStatus = await _apiClient!.getServerStatus();
|
||||||
if (serverStatus['result'] == 'success') {
|
if (serverStatus['result'] == 'success') {
|
||||||
checkServerUpdatesAvailable( // Do not await
|
checkServerUpdatesAvailable( // Do not await
|
||||||
server: server,
|
server: server,
|
||||||
|
apiClient: apiClient
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -222,8 +225,9 @@ class ServersProvider with ChangeNotifier {
|
||||||
|
|
||||||
if (defaultServer != null) {
|
if (defaultServer != null) {
|
||||||
_selectedServer = defaultServer;
|
_selectedServer = defaultServer;
|
||||||
_apiClient = ApiClient(server: defaultServer);
|
final client = ApiClient(server: defaultServer);
|
||||||
initializateServer(defaultServer);
|
_apiClient = client;
|
||||||
|
initializateServer(defaultServer, client);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -304,7 +304,7 @@ class _HomeState extends State<Home> {
|
||||||
displacement: 95,
|
displacement: 95,
|
||||||
onRefresh: () async {
|
onRefresh: () async {
|
||||||
final result = await statusProvider.getServerStatus();
|
final result = await statusProvider.getServerStatus();
|
||||||
if (result == false) {
|
if (mounted && result == false) {
|
||||||
showSnacbkar(
|
showSnacbkar(
|
||||||
appConfigProvider: appConfigProvider,
|
appConfigProvider: appConfigProvider,
|
||||||
label: AppLocalizations.of(context)!.serverStatusNotRefreshed,
|
label: AppLocalizations.of(context)!.serverStatusNotRefreshed,
|
||||||
|
|
|
@ -80,7 +80,7 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
|
||||||
newStatus: value,
|
newStatus: value,
|
||||||
time: time
|
time: time
|
||||||
);
|
);
|
||||||
if (result != null) {
|
if (mounted && result != null) {
|
||||||
if (result != false) {
|
if (result != false) {
|
||||||
appConfigProvider.addLog(result);
|
appConfigProvider.addLog(result);
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,7 +58,7 @@ class _CacheConfigDnsScreenState extends State<CacheConfigDnsScreen> {
|
||||||
cacheSizeController.text = dnsProvider.dnsInfo!.cacheSize.toString();
|
cacheSizeController.text = dnsProvider.dnsInfo!.cacheSize.toString();
|
||||||
overrideMinTtlController.text = dnsProvider.dnsInfo!.cacheTtlMin.toString();
|
overrideMinTtlController.text = dnsProvider.dnsInfo!.cacheTtlMin.toString();
|
||||||
overrideMaxTtlController.text = dnsProvider.dnsInfo!.cacheTtlMax.toString();
|
overrideMaxTtlController.text = dnsProvider.dnsInfo!.cacheTtlMax.toString();
|
||||||
optimisticCache = dnsProvider.dnsInfo!.cacheOptimistic;
|
optimisticCache = dnsProvider.dnsInfo!.cacheOptimistic ?? false;
|
||||||
validData = true;
|
validData = true;
|
||||||
super.initState();
|
super.initState();
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,7 +130,7 @@ class _TopItemsScreenState extends State<TopItemsScreen> {
|
||||||
body: RefreshIndicator(
|
body: RefreshIndicator(
|
||||||
onRefresh: () async {
|
onRefresh: () async {
|
||||||
final result = await statusProvider.getServerStatus();
|
final result = await statusProvider.getServerStatus();
|
||||||
if (result == false) {
|
if (mounted && result == false) {
|
||||||
showSnacbkar(
|
showSnacbkar(
|
||||||
appConfigProvider: appConfigProvider,
|
appConfigProvider: appConfigProvider,
|
||||||
label: AppLocalizations.of(context)!.serverStatusNotRefreshed,
|
label: AppLocalizations.of(context)!.serverStatusNotRefreshed,
|
||||||
|
|
|
@ -120,9 +120,76 @@ Future<Map<String, dynamic>> loadDb(bool acceptsDynamicTheme) async {
|
||||||
'adguard_home_manager.db',
|
'adguard_home_manager.db',
|
||||||
version: 9,
|
version: 9,
|
||||||
onCreate: (Database db, int version) async {
|
onCreate: (Database db, int version) async {
|
||||||
await db.execute("CREATE TABLE servers (id TEXT PRIMARY KEY, name TEXT, connectionMethod TEXT, domain TEXT, path TEXT, port INTEGER, user TEXT, password TEXT, defaultServer INTEGER, authToken TEXT, runningOnHa INTEGER)");
|
await db.execute(
|
||||||
await db.execute("CREATE TABLE appConfig (theme NUMERIC, overrideSslCheck NUMERIC, hideZeroValues NUMERIC, useDynamicColor NUMERIC, staticColor NUMERIC, useThemeColorForStatus NUMERIC, showTimeLogs NUMERIC, showIpLogs NUMERIC, combinedChart NUMERIC, doNotRememberVersion TEXT, hideServerAddress NUMERIC, homeTopItemsOrder TEXT)");
|
"""
|
||||||
await db.execute("INSERT INTO appConfig (theme, overrideSslCheck, hideZeroValues, useDynamicColor, staticColor, useThemeColorForStatus, showTimeLogs, showIpLogs, combinedChart, hideServerAddress, homeTopItemsOrder) VALUES (0, 0, 0, ${acceptsDynamicTheme == true ? 1 : 0}, 0, 0, 0, 0, 0, 0, $homeTopItemsDefaultOrderString)");
|
CREATE TABLE
|
||||||
|
servers (
|
||||||
|
id TEXT PRIMARY KEY,
|
||||||
|
name TEXT,
|
||||||
|
connectionMethod TEXT,
|
||||||
|
domain TEXT,
|
||||||
|
path TEXT,
|
||||||
|
port INTEGER,
|
||||||
|
user TEXT,
|
||||||
|
password TEXT,
|
||||||
|
defaultServer INTEGER,
|
||||||
|
authToken TEXT,
|
||||||
|
runningOnHa INTEGER
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
);
|
||||||
|
|
||||||
|
await db.execute(
|
||||||
|
"""
|
||||||
|
CREATE TABLE
|
||||||
|
appConfig (
|
||||||
|
theme NUMERIC,
|
||||||
|
overrideSslCheck NUMERIC,
|
||||||
|
hideZeroValues NUMERIC,
|
||||||
|
useDynamicColor NUMERIC,
|
||||||
|
staticColor NUMERIC,
|
||||||
|
useThemeColorForStatus NUMERIC,
|
||||||
|
showTimeLogs NUMERIC,
|
||||||
|
showIpLogs NUMERIC,
|
||||||
|
combinedChart NUMERIC,
|
||||||
|
doNotRememberVersion TEXT,
|
||||||
|
hideServerAddress NUMERIC,
|
||||||
|
homeTopItemsOrder TEXT
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
);
|
||||||
|
|
||||||
|
await db.execute(
|
||||||
|
"""
|
||||||
|
INSERT INTO
|
||||||
|
appConfig (
|
||||||
|
theme,
|
||||||
|
overrideSslCheck,
|
||||||
|
hideZeroValues,
|
||||||
|
useDynamicColor,
|
||||||
|
staticColor,
|
||||||
|
useThemeColorForStatus,
|
||||||
|
showTimeLogs,
|
||||||
|
showIpLogs,
|
||||||
|
combinedChart,
|
||||||
|
hideServerAddress,
|
||||||
|
homeTopItemsOrder
|
||||||
|
)
|
||||||
|
VALUES (
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
${acceptsDynamicTheme == true ? 1 : 0},
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
'$homeTopItemsDefaultOrderString'
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
);
|
||||||
},
|
},
|
||||||
onUpgrade: (Database db, int oldVersion, int newVersion) async {
|
onUpgrade: (Database db, int oldVersion, int newVersion) async {
|
||||||
if (oldVersion == 1) {
|
if (oldVersion == 1) {
|
||||||
|
|
|
@ -20,6 +20,7 @@ import 'package:adguard_home_manager/models/clients.dart';
|
||||||
import 'package:adguard_home_manager/models/clients_allowed_blocked.dart';
|
import 'package:adguard_home_manager/models/clients_allowed_blocked.dart';
|
||||||
import 'package:adguard_home_manager/models/server.dart';
|
import 'package:adguard_home_manager/models/server.dart';
|
||||||
import 'package:adguard_home_manager/constants/urls.dart';
|
import 'package:adguard_home_manager/constants/urls.dart';
|
||||||
|
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||||
|
|
||||||
|
|
||||||
Future<Map<String, dynamic>> apiRequest({
|
Future<Map<String, dynamic>> apiRequest({
|
||||||
|
@ -270,80 +271,107 @@ class ApiClient {
|
||||||
});
|
});
|
||||||
|
|
||||||
Future getServerVersion() async {
|
Future getServerVersion() async {
|
||||||
final result = await apiRequest(
|
try {
|
||||||
server: server,
|
final result = await apiRequest(
|
||||||
method: 'get',
|
server: server,
|
||||||
urlPath: '/status',
|
method: 'get',
|
||||||
type: 'get_server_version'
|
urlPath: '/status',
|
||||||
);
|
type: 'get_server_version'
|
||||||
|
);
|
||||||
|
|
||||||
if (result['hasResponse'] == true) {
|
if (result['hasResponse'] == true) {
|
||||||
if (result['statusCode'] == 200 && result['body'] != null) {
|
if (result['statusCode'] == 200 && result['body'] != null) {
|
||||||
return {
|
return {
|
||||||
'result': 'success',
|
'result': 'success',
|
||||||
'data': jsonDecode(result['body'])['version']
|
'data': jsonDecode(result['body'])['version']
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return {
|
||||||
|
'result': 'error',
|
||||||
|
'log': AppLog(
|
||||||
|
type: 'get_server_version',
|
||||||
|
dateTime: DateTime.now(),
|
||||||
|
message: 'error_code_not_expected',
|
||||||
|
statusCode: result['statusCode'].toString(),
|
||||||
|
resBody: result['body']
|
||||||
|
)
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return {
|
return result;
|
||||||
'result': 'error',
|
|
||||||
'log': AppLog(
|
|
||||||
type: 'get_server_version',
|
|
||||||
dateTime: DateTime.now(),
|
|
||||||
message: 'error_code_not_expected',
|
|
||||||
statusCode: result['statusCode'].toString(),
|
|
||||||
resBody: result['body']
|
|
||||||
)
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
} catch (e) {
|
||||||
else {
|
Sentry.captureException(e);
|
||||||
return result;
|
return {
|
||||||
|
'result': 'error',
|
||||||
|
'log': AppLog(
|
||||||
|
type: 'get_server_version',
|
||||||
|
dateTime: DateTime.now(),
|
||||||
|
message: 'error_code_not_expected',
|
||||||
|
resBody: e.toString()
|
||||||
|
)
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future getServerStatus() async {
|
Future getServerStatus() async {
|
||||||
final result = await Future.wait([
|
try {
|
||||||
apiRequest(server: server, method: 'get', urlPath: '/stats', type: 'server_status'),
|
final result = await Future.wait([
|
||||||
apiRequest(server: server, method: 'get', urlPath: '/status', type: 'server_status'),
|
apiRequest(server: server, method: 'get', urlPath: '/stats', type: 'server_status'),
|
||||||
apiRequest(server: server, method: 'get', urlPath: '/filtering/status', type: 'server_status'),
|
apiRequest(server: server, method: 'get', urlPath: '/status', type: 'server_status'),
|
||||||
apiRequest(server: server, method: 'get', urlPath: '/safesearch/status', type: 'server_status'),
|
apiRequest(server: server, method: 'get', urlPath: '/filtering/status', type: 'server_status'),
|
||||||
apiRequest(server: server, method: 'get', urlPath: '/safebrowsing/status', type: 'server_status'),
|
apiRequest(server: server, method: 'get', urlPath: '/safesearch/status', type: 'server_status'),
|
||||||
apiRequest(server: server, method: 'get', urlPath: '/parental/status', type: 'server_status'),
|
apiRequest(server: server, method: 'get', urlPath: '/safebrowsing/status', type: 'server_status'),
|
||||||
apiRequest(server: server, method: 'get', urlPath: '/clients', type: 'server_status'),
|
apiRequest(server: server, method: 'get', urlPath: '/parental/status', type: 'server_status'),
|
||||||
]);
|
apiRequest(server: server, method: 'get', urlPath: '/clients', type: 'server_status'),
|
||||||
|
]);
|
||||||
|
|
||||||
if (
|
|
||||||
result[0]['hasResponse'] == true &&
|
|
||||||
result[1]['hasResponse'] == true &&
|
|
||||||
result[2]['hasResponse'] == true &&
|
|
||||||
result[3]['hasResponse'] == true &&
|
|
||||||
result[4]['hasResponse'] == true &&
|
|
||||||
result[5]['hasResponse'] == true &&
|
|
||||||
result[6]['hasResponse'] == true
|
|
||||||
) {
|
|
||||||
if (
|
if (
|
||||||
result[0]['statusCode'] == 200 &&
|
result[0]['hasResponse'] == true &&
|
||||||
result[1]['statusCode'] == 200 &&
|
result[1]['hasResponse'] == true &&
|
||||||
result[2]['statusCode'] == 200 &&
|
result[2]['hasResponse'] == true &&
|
||||||
result[3]['statusCode'] == 200 &&
|
result[3]['hasResponse'] == true &&
|
||||||
result[4]['statusCode'] == 200 &&
|
result[4]['hasResponse'] == true &&
|
||||||
result[5]['statusCode'] == 200 &&
|
result[5]['hasResponse'] == true &&
|
||||||
result[6]['statusCode'] == 200
|
result[6]['hasResponse'] == true
|
||||||
) {
|
) {
|
||||||
final Map<String, dynamic> mappedData = {
|
if (
|
||||||
'stats': jsonDecode(result[0]['body']),
|
result[0]['statusCode'] == 200 &&
|
||||||
'clients': jsonDecode(result[6]['body'])['clients'],
|
result[1]['statusCode'] == 200 &&
|
||||||
'status': jsonDecode(result[1]['body']),
|
result[2]['statusCode'] == 200 &&
|
||||||
'filtering': jsonDecode(result[2]['body']),
|
result[3]['statusCode'] == 200 &&
|
||||||
'safeSearch': jsonDecode(result[3]['body']),
|
result[4]['statusCode'] == 200 &&
|
||||||
'safeBrowsingEnabled': jsonDecode(result[4]['body']),
|
result[5]['statusCode'] == 200 &&
|
||||||
'parentalControlEnabled': jsonDecode(result[5]['body']),
|
result[6]['statusCode'] == 200
|
||||||
};
|
) {
|
||||||
return {
|
final Map<String, dynamic> mappedData = {
|
||||||
'result': 'success',
|
'stats': jsonDecode(result[0]['body']),
|
||||||
'data': ServerStatus.fromJson(mappedData)
|
'clients': jsonDecode(result[6]['body'])['clients'],
|
||||||
};
|
'status': jsonDecode(result[1]['body']),
|
||||||
|
'filtering': jsonDecode(result[2]['body']),
|
||||||
|
'safeSearch': jsonDecode(result[3]['body']),
|
||||||
|
'safeBrowsingEnabled': jsonDecode(result[4]['body']),
|
||||||
|
'parentalControlEnabled': jsonDecode(result[5]['body']),
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
'result': 'success',
|
||||||
|
'data': ServerStatus.fromJson(mappedData)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return {
|
||||||
|
'result': 'error',
|
||||||
|
'log': AppLog(
|
||||||
|
type: 'get_server_status',
|
||||||
|
dateTime: DateTime.now(),
|
||||||
|
message: 'error_code_not_expected',
|
||||||
|
statusCode: result.map((res) => res['statusCode']).toString(),
|
||||||
|
resBody: result.map((res) => res['body']).toString()
|
||||||
|
)
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return {
|
return {
|
||||||
|
@ -351,24 +379,23 @@ class ApiClient {
|
||||||
'log': AppLog(
|
'log': AppLog(
|
||||||
type: 'get_server_status',
|
type: 'get_server_status',
|
||||||
dateTime: DateTime.now(),
|
dateTime: DateTime.now(),
|
||||||
message: 'error_code_not_expected',
|
message: 'no_response',
|
||||||
statusCode: result.map((res) => res['statusCode']).toString(),
|
statusCode: result.map((res) => res['statusCode'] ?? 'null').toString(),
|
||||||
resBody: result.map((res) => res['body']).toString()
|
resBody: result.map((res) => res['body'] ?? 'null').toString()
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
} catch (e) {
|
||||||
else {
|
Sentry.captureException(e);
|
||||||
return {
|
return {
|
||||||
'result': 'error',
|
'result': 'error',
|
||||||
'log': AppLog(
|
'log': AppLog(
|
||||||
type: 'get_server_status',
|
type: 'get_server_status',
|
||||||
dateTime: DateTime.now(),
|
dateTime: DateTime.now(),
|
||||||
message: 'no_response',
|
message: 'no_response',
|
||||||
statusCode: result.map((res) => res['statusCode'] ?? 'null').toString(),
|
resBody: e.toString()
|
||||||
resBody: result.map((res) => res['body'] ?? 'null').toString()
|
)
|
||||||
)
|
};
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2004,34 +2031,48 @@ class ApiClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future checkServerUpdates() async {
|
Future checkServerUpdates() async {
|
||||||
final result = await Future.wait([
|
try {
|
||||||
apiRequest(
|
final result = await Future.wait([
|
||||||
urlPath: '/version.json',
|
apiRequest(
|
||||||
method: 'post',
|
urlPath: '/version.json',
|
||||||
server: server,
|
method: 'post',
|
||||||
type: 'check_server_updates',
|
server: server,
|
||||||
body: {
|
type: 'check_server_updates',
|
||||||
"recheck_now": true
|
body: {
|
||||||
}
|
"recheck_now": true
|
||||||
),
|
}
|
||||||
apiRequest(
|
),
|
||||||
urlPath: '/status',
|
apiRequest(
|
||||||
method: 'get',
|
urlPath: '/status',
|
||||||
server: server,
|
method: 'get',
|
||||||
type: 'check_server_updates',
|
server: server,
|
||||||
),
|
type: 'check_server_updates',
|
||||||
]);
|
),
|
||||||
|
]);
|
||||||
|
|
||||||
if (result[0]['hasResponse'] == true && result[1]['hasResponse'] == true) {
|
if (result[0]['hasResponse'] == true && result[1]['hasResponse'] == true) {
|
||||||
if (result[0]['statusCode'] == 200 && result[1]['statusCode'] == 200) {
|
if (result[0]['statusCode'] == 200 && result[1]['statusCode'] == 200) {
|
||||||
final Map<String, dynamic> obj = {
|
final Map<String, dynamic> obj = {
|
||||||
...jsonDecode(result[0]['body']),
|
...jsonDecode(result[0]['body']),
|
||||||
'current_version': ServerInfoData.fromJson(jsonDecode(result[1]['body'])).version
|
'current_version': ServerInfoData.fromJson(jsonDecode(result[1]['body'])).version
|
||||||
};
|
};
|
||||||
return {
|
return {
|
||||||
'result': 'success',
|
'result': 'success',
|
||||||
'data': obj
|
'data': obj
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return {
|
||||||
|
'result': 'error',
|
||||||
|
'log': AppLog(
|
||||||
|
type: 'get_filtering_status',
|
||||||
|
dateTime: DateTime.now(),
|
||||||
|
message: 'error_code_not_expected',
|
||||||
|
statusCode: result.map((res) => res['statusCode'] ?? 'null').toString(),
|
||||||
|
resBody: result.map((res) => res['body'] ?? 'null').toString(),
|
||||||
|
)
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return {
|
return {
|
||||||
|
@ -2039,22 +2080,21 @@ class ApiClient {
|
||||||
'log': AppLog(
|
'log': AppLog(
|
||||||
type: 'get_filtering_status',
|
type: 'get_filtering_status',
|
||||||
dateTime: DateTime.now(),
|
dateTime: DateTime.now(),
|
||||||
message: 'error_code_not_expected',
|
message: 'no_response',
|
||||||
statusCode: result.map((res) => res['statusCode'] ?? 'null').toString(),
|
statusCode: result.map((res) => res['statusCode'] ?? 'null').toString(),
|
||||||
resBody: result.map((res) => res['body'] ?? 'null').toString(),
|
resBody: result.map((res) => res['body'] ?? 'null').toString(),
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
} catch (e) {
|
||||||
else {
|
Sentry.captureException(e);
|
||||||
return {
|
return {
|
||||||
'result': 'error',
|
'result': 'error',
|
||||||
'log': AppLog(
|
'log': AppLog(
|
||||||
type: 'get_filtering_status',
|
type: 'get_filtering_status',
|
||||||
dateTime: DateTime.now(),
|
dateTime: DateTime.now(),
|
||||||
message: 'no_response',
|
message: 'no_response',
|
||||||
statusCode: result.map((res) => res['statusCode'] ?? 'null').toString(),
|
resBody: e.toString(),
|
||||||
resBody: result.map((res) => res['body'] ?? 'null').toString(),
|
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -256,6 +256,8 @@ class _AddServerModalState extends State<AddServerModal> {
|
||||||
? await loginHA(serverObj)
|
? await loginHA(serverObj)
|
||||||
: await login(serverObj);
|
: await login(serverObj);
|
||||||
|
|
||||||
|
if (!mounted) return;
|
||||||
|
|
||||||
if (result['result'] == 'success') {
|
if (result['result'] == 'success') {
|
||||||
if (serverObj.user != null && serverObj.password != null) {
|
if (serverObj.user != null && serverObj.password != null) {
|
||||||
serverObj.authToken = encodeBase64UserPass(serverObj.user!, serverObj.password!);
|
serverObj.authToken = encodeBase64UserPass(serverObj.user!, serverObj.password!);
|
||||||
|
@ -268,6 +270,8 @@ class _AddServerModalState extends State<AddServerModal> {
|
||||||
|
|
||||||
final serverStatus = await apiClient.getServerStatus();
|
final serverStatus = await apiClient.getServerStatus();
|
||||||
|
|
||||||
|
if (!mounted) return;
|
||||||
|
|
||||||
if (serverStatus['result'] == 'success') {
|
if (serverStatus['result'] == 'success') {
|
||||||
statusProvider.setServerStatusData(
|
statusProvider.setServerStatusData(
|
||||||
data: serverStatus['data']
|
data: serverStatus['data']
|
||||||
|
@ -380,12 +384,14 @@ class _AddServerModalState extends State<AddServerModal> {
|
||||||
? await loginHA(serverObj)
|
? await loginHA(serverObj)
|
||||||
: await login(serverObj);
|
: await login(serverObj);
|
||||||
|
|
||||||
|
if (!mounted) return;
|
||||||
if (result['result'] == 'success') {
|
if (result['result'] == 'success') {
|
||||||
if (serverObj.user != null && serverObj.password != null) {
|
if (serverObj.user != null && serverObj.password != null) {
|
||||||
serverObj.authToken = encodeBase64UserPass(serverObj.user!, serverObj.password!);
|
serverObj.authToken = encodeBase64UserPass(serverObj.user!, serverObj.password!);
|
||||||
}
|
}
|
||||||
final serverSaved = await serversProvider.editServer(serverObj);
|
final serverSaved = await serversProvider.editServer(serverObj);
|
||||||
|
|
||||||
|
if (!mounted) return;
|
||||||
if (serverSaved == null) {
|
if (serverSaved == null) {
|
||||||
final ApiClient apiClient = ApiClient(server: serverObj);
|
final ApiClient apiClient = ApiClient(server: serverObj);
|
||||||
final version = await apiClient.getServerVersion();
|
final version = await apiClient.getServerVersion();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue