You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.6 KiB
Dart
48 lines
1.6 KiB
Dart
import 'dart:convert';
|
|
import 'package:http/http.dart' as http;
|
|
|
|
class DailyWorkingApi {
|
|
final http.Client client;
|
|
DailyWorkingApi({required this.client});
|
|
|
|
/// Liefert Map weekday(1..7) -> Minuten (int)
|
|
Future<Map<int, int>> getDailyMinutes() async {
|
|
final uri = Uri.parse(
|
|
'https://api.windesign.at/workinghours.php?module=dailyworking&function=getList',
|
|
);
|
|
final res = await client.get(uri);
|
|
if (res.statusCode != 200) {
|
|
throw Exception('dailyworking/getList failed: ${res.statusCode} ${res.body}');
|
|
}
|
|
final map = jsonDecode(res.body) as Map<String, dynamic>;
|
|
if (map['error'] == true) {
|
|
throw Exception('dailyworking/getList error: ${map['errmsg']}');
|
|
}
|
|
final entries = (map['entries'] as List?) ?? const [];
|
|
if (entries.isEmpty) {
|
|
return {
|
|
1: 8 * 60, 2: 8 * 60, 3: 8 * 60, 4: 8 * 60, 5: 8 * 60, 6: 0, 7: 0,
|
|
};
|
|
}
|
|
final row = entries.first as Map<String, dynamic>;
|
|
int parseHHMMSS(String? s) {
|
|
if (s == null || s.isEmpty) return 0;
|
|
final parts = s.split(':');
|
|
if (parts.length < 2) return 0;
|
|
final h = int.tryParse(parts[0]) ?? 0;
|
|
final m = int.tryParse(parts[1]) ?? 0;
|
|
return h * 60 + m;
|
|
}
|
|
|
|
return {
|
|
1: parseHHMMSS(row['monday'] as String?),
|
|
2: parseHHMMSS(row['tuesday'] as String?),
|
|
3: parseHHMMSS(row['wednesday'] as String?),
|
|
4: parseHHMMSS(row['thursday'] as String?),
|
|
5: parseHHMMSS(row['friday'] as String?),
|
|
6: parseHHMMSS(row['saturday'] as String?),
|
|
7: parseHHMMSS(row['sunday'] as String?),
|
|
};
|
|
}
|
|
}
|