WebDavClientInterface— interface for all sync WebDAV operationsWebDavItem: new fieldsetag,mtime(int),mountType,contentTypeWebDavClient::getHttpClient()— exposes injected PSR-18 client for advanced usageWebDavClient::sendRequest()— generic WebDAV request method for extensionsWebDavClient::getFileInfo()— PROPFIND Depth:0 for size/etagWebDavClient::setMtime()— PROPPATCH lastmodifiedWebDavClient::listBreadthFirst()— BFS directory traversalWebDavClient::listRecursive()— depth-first directory traversalWebDavClient::createDirectoryRecursive()— MKCOL with parent creationWebDavClient::exists()— PROPFIND Depth:0 existence check- SabreDAV-compatible URL encoding (
encodePath) - PROPFIND XML parsing with nc:mount-type support
WebDavClientnow accepts PSR-18ClientInterfacevia DI (Guzzle can be injected)WebDavItem: removedlastModified(DateTime), replaced withmtime(int unix timestamp)WebDavItem: removedisMarkdownFile()(app-specific)WebDavResponse: addedstatusCodefield- All internal helper methods are
protectedfor subclass access composer.json: addedpsr/log,ext-domdependencies
WebDavItem::isMarkdownFile()— was app-specificWebDavItem::getFormattedLastModified()— usemtimedirectly