156 lines
4.3 KiB
Dart
156 lines
4.3 KiB
Dart
import '../../marianumcloud/webdav/queries/list_files/cacheable_file.dart';
|
|
import '../../marianumcloud/webdav/queries/list_files/list_files_response.dart';
|
|
|
|
/// Curated WebDAV listings for the demo mode. Everything is built on
|
|
/// [CacheableFile] (the app-level model the file UI renders) so no `nextcloud`
|
|
/// DAV objects need to be faked and no network is ever touched.
|
|
///
|
|
/// `hasPreview`/`fileId` are left null on purpose: without them the file list
|
|
/// won't try to fetch server-side thumbnails for the fixtures.
|
|
class DemoFiles {
|
|
const DemoFiles._();
|
|
|
|
/// Returns the listing for [path] as passed to `FilesDataProvider.listFiles`
|
|
/// (`/` or empty for the root, otherwise the joined folder display names).
|
|
/// Unknown folders resolve to an empty listing rather than an error.
|
|
static ListFilesResponse listing(String path) {
|
|
final key = path.replaceAll('/', '').trim();
|
|
switch (key) {
|
|
case '':
|
|
return _root();
|
|
case 'Hausaufgaben':
|
|
return _hausaufgaben();
|
|
case 'Arbeitsblätter':
|
|
return _arbeitsblaetter();
|
|
case 'Klausuren':
|
|
return _klausuren();
|
|
case 'Schuljahr 2025-26':
|
|
return _schuljahr();
|
|
default:
|
|
return ListFilesResponse({});
|
|
}
|
|
}
|
|
|
|
static ListFilesResponse _root() => ListFilesResponse({
|
|
_folder('Hausaufgaben', daysAgo: 1),
|
|
_folder('Arbeitsblätter', daysAgo: 3),
|
|
_folder('Klausuren', daysAgo: 12),
|
|
_folder('Schuljahr 2025-26', daysAgo: 30),
|
|
_file('Deutsch Lektüre.pdf', size: 2_480_000, daysAgo: 2),
|
|
_file('Mathe Formelsammlung.pdf', size: 890_000, daysAgo: 9),
|
|
_file('Bio Referat.pptx', size: 5_120_000, daysAgo: 5),
|
|
_file('Stundenplan.pdf', size: 145_000, daysAgo: 14),
|
|
});
|
|
|
|
static ListFilesResponse _hausaufgaben() => ListFilesResponse({
|
|
_file(
|
|
'Deutsch Aufsatz.docx',
|
|
parent: 'Hausaufgaben',
|
|
size: 42_000,
|
|
daysAgo: 1,
|
|
),
|
|
_file(
|
|
'Mathe Übungen KW28.pdf',
|
|
parent: 'Hausaufgaben',
|
|
size: 310_000,
|
|
daysAgo: 2,
|
|
),
|
|
_file(
|
|
'Englisch Vokabeln.pdf',
|
|
parent: 'Hausaufgaben',
|
|
size: 96_000,
|
|
daysAgo: 4,
|
|
),
|
|
});
|
|
|
|
static ListFilesResponse _arbeitsblaetter() => ListFilesResponse({
|
|
_file(
|
|
'Physik Optik.pdf',
|
|
parent: 'Arbeitsblätter',
|
|
size: 720_000,
|
|
daysAgo: 6,
|
|
),
|
|
_file(
|
|
'Geschichte Weimar.pdf',
|
|
parent: 'Arbeitsblätter',
|
|
size: 540_000,
|
|
daysAgo: 8,
|
|
),
|
|
});
|
|
|
|
static ListFilesResponse _klausuren() => ListFilesResponse({
|
|
_file(
|
|
'Mathe Klausur 1.pdf',
|
|
parent: 'Klausuren',
|
|
size: 630_000,
|
|
daysAgo: 20,
|
|
),
|
|
_file(
|
|
'Deutsch Klausur 1.pdf',
|
|
parent: 'Klausuren',
|
|
size: 580_000,
|
|
daysAgo: 34,
|
|
),
|
|
});
|
|
|
|
static ListFilesResponse _schuljahr() => ListFilesResponse({
|
|
_folder('Halbjahr 1', parent: 'Schuljahr 2025-26', daysAgo: 40),
|
|
_file(
|
|
'Klassenliste 10b.pdf',
|
|
parent: 'Schuljahr 2025-26',
|
|
size: 78_000,
|
|
daysAgo: 60,
|
|
),
|
|
});
|
|
|
|
static CacheableFile _folder(
|
|
String name, {
|
|
String? parent,
|
|
required int daysAgo,
|
|
}) {
|
|
final base = parent == null ? '' : '/$parent';
|
|
return CacheableFile(
|
|
path: '$base/$name/',
|
|
isDirectory: true,
|
|
name: name,
|
|
modifiedAt: _relative(daysAgo),
|
|
createdAt: _relative(daysAgo + 30),
|
|
);
|
|
}
|
|
|
|
static CacheableFile _file(
|
|
String name, {
|
|
String? parent,
|
|
required int size,
|
|
required int daysAgo,
|
|
}) {
|
|
final base = parent == null ? '' : '/$parent';
|
|
return CacheableFile(
|
|
path: '$base/$name',
|
|
isDirectory: false,
|
|
name: name,
|
|
mimeType: _mimeFor(name),
|
|
size: size,
|
|
modifiedAt: _relative(daysAgo),
|
|
createdAt: _relative(daysAgo + 30),
|
|
);
|
|
}
|
|
|
|
static DateTime _relative(int daysAgo) =>
|
|
DateTime.now().subtract(Duration(days: daysAgo, hours: 3));
|
|
|
|
static String _mimeFor(String name) {
|
|
final ext = name.split('.').last.toLowerCase();
|
|
switch (ext) {
|
|
case 'pdf':
|
|
return 'application/pdf';
|
|
case 'pptx':
|
|
return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
|
|
case 'docx':
|
|
return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
|
|
default:
|
|
return 'application/octet-stream';
|
|
}
|
|
}
|
|
}
|