Noo design system rebuild #1

Merged
ayushya merged 31 commits from noo-design-system-rebuild into main 2026-10-01 09:23:58 -04:00
2 changed files with 26 additions and 4 deletions
Showing only changes of commit 1b8bbaa22f - Show all commits
+9
View File
@@ -73,6 +73,15 @@ rather than needing a rewrite for multi-account support.
there is no WebDAV client dependency. `_parseDavDate`/`_davPath` in this
file exist because WebDAV responses use RFC 1123 dates and either bare
paths or full URLs for `href`; reuse them rather than re-deriving.
`creationdate` specifically needs `_parseDavCreationDate`, not
`_parseDavDate` directly - Nextcloud has no real per-file creation-time
tracking for most setups, so that property routinely comes back as a
placeholder Unix-epoch date rather than being omitted, which
`_parseDavDate` alone parses "successfully" into a real (if bogus)
January 1970 `DateTime`. `_parseDavCreationDate` treats that placeholder
as absent instead, so `NextcloudItem.dateCreated` falls back to
`lastModified` (its constructor's default) the same as it would for a
missing/unparseable value.
- **Everything else** (shares, activity, trash, favorites, quota, user info,
file versions) goes through Nextcloud's OCS APIs (`/ocs/v2.php/...`), JSON
in, with the `OCS-APIRequest: true` header required on every OCS call.
+17 -4
View File
@@ -44,6 +44,19 @@ DateTime? _parseDavDate(String? raw) {
}
}
/// Nextcloud's WebDAV server has no real per-file creation-time tracking
/// for most setups, so its `creationdate` property routinely comes back as
/// a placeholder Unix-epoch date ("Thu, 01 Jan 1970 00:00:00 GMT") instead
/// of being omitted - [_parseDavDate] parses that "successfully" into a
/// real (if bogus) `DateTime`, so every item's created date read January
/// 1970. Treat it as absent instead, the same as a missing/unparseable
/// value: `NextcloudItem`'s constructor then falls back to `lastModified`.
DateTime? _parseDavCreationDate(String? raw) {
final parsed = _parseDavDate(raw);
if (parsed != null && parsed.millisecondsSinceEpoch <= 0) return null;
return parsed;
}
/// The OCS Activity API reports each event's time as an ISO 8601 string in
/// a `datetime` field (e.g. "2025-09-15T12:34:56+00:00") - there is no
/// numeric `timestamp` field despite that being a very easy name to guess.
@@ -356,7 +369,7 @@ class NextcloudService {
final size = int.tryParse(sizeStr ?? '0') ?? 0;
final lastMod = _parseDavDate(lastModStr) ?? DateTime.now();
final created = _parseDavDate(createdStr);
final created = _parseDavCreationDate(createdStr);
final itemType = NextcloudItem.deduceType(name, isCollection, mimeType);
final validId = (fileId != null && fileId.isNotEmpty) ? fileId : name;
@@ -671,7 +684,7 @@ class NextcloudService {
final size = int.tryParse(sizeStr ?? '0') ?? 0;
final lastMod = _parseDavDate(lastModStr) ?? DateTime.now();
final created = _parseDavDate(createdStr);
final created = _parseDavCreationDate(createdStr);
final itemType = NextcloudItem.deduceType(name, false, mimeType);
final validId = (fileId != null && fileId.isNotEmpty) ? fileId : name;
@@ -835,7 +848,7 @@ class NextcloudService {
final size = int.tryParse(sizeStr ?? '0') ?? 0;
final lastMod = _parseDavDate(lastModStr) ?? DateTime.now();
final created = _parseDavDate(createdStr);
final created = _parseDavCreationDate(createdStr);
final itemType = NextcloudItem.deduceType(name, isCollection, mimeType);
final validId = (fileId != null && fileId.isNotEmpty) ? fileId : name;
@@ -1000,7 +1013,7 @@ class NextcloudService {
final size = int.tryParse(sizeStr ?? '0') ?? 0;
final lastMod = _parseDavDate(lastModStr) ?? DateTime.now();
final created = _parseDavDate(createdStr);
final created = _parseDavCreationDate(createdStr);
final itemType = NextcloudItem.deduceType(name, false, mimeType);
final validId = (fileId != null && fileId.isNotEmpty) ? fileId : name;