Move ownCloud client condition from Storage to Server

This commit is contained in:
bohwaz 2022-10-25 16:29:42 +02:00
parent 3c6f81c45c
commit 12f5d7cfbd
4 changed files with 13 additions and 7 deletions

View file

@ -36,6 +36,8 @@ Its original purpose was to serve as a demo and test for the KD2 WebDAV library,
### NextCloud/ownCloud features ### NextCloud/ownCloud features
KaraDAV is compatible with ownCloud and NextCloud clients, because on Android there is not much nice WebDAV clients, and on desktop their clients allow for two-way sync, which no other WebDAV client provides.
The following ownCloud/NextCloud specific features are supported: The following ownCloud/NextCloud specific features are supported:
* [Direct download](https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-api-overview.html#direct-download) * [Direct download](https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-api-overview.html#direct-download)

View file

@ -105,7 +105,9 @@ abstract class AbstractStorage
* @param array $properties List of properties requested by client (see ::properties) * @param array $properties List of properties requested by client (see ::properties)
* @return iterable An array or other iterable (eg. a generator) * @return iterable An array or other iterable (eg. a generator)
* where each item has a key string containing the name of the resource (eg. file name), * where each item has a key string containing the name of the resource (eg. file name),
* and the value being an array of properties, or NULL * and the value being an array of properties, or NULL.
*
* If the array value IS NULL, then a subsequent call to properties() will be issued for each element.
*/ */
abstract public function list(string $uri, array $properties): iterable; abstract public function list(string $uri, array $properties): iterable;

View file

@ -742,6 +742,14 @@ class Server
$alias = $root_namespaces[$ns] ?? null; $alias = $root_namespaces[$ns] ?? null;
$attributes = ''; $attributes = '';
// The ownCloud Android app doesn't like formatted dates, it makes it crash.
// so force it to have a timestamp
if ($name == 'DAV::creationdate'
&& ($value instanceof \DateTimeInterface)
&& false !== stripos($_SERVER['HTTP_USER_AGENT'] ?? '', 'owncloud')) {
$value = $value->getTimestamp();
}
if ($name == 'DAV::resourcetype' && $value == 'collection') { if ($name == 'DAV::resourcetype' && $value == 'collection') {
$value = '<d:collection />'; $value = '<d:collection />';
} }

View file

@ -3,7 +3,6 @@
namespace KaraDAV; namespace KaraDAV;
use KD2\WebDAV\AbstractStorage; use KD2\WebDAV\AbstractStorage;
use KD2\WebDAV\Server as WebDAV_Server;
use KD2\WebDAV\WOPI; use KD2\WebDAV\WOPI;
use KD2\WebDAV\Exception as WebDAV_Exception; use KD2\WebDAV\Exception as WebDAV_Exception;
@ -130,11 +129,6 @@ class Storage extends AbstractStorage
case 'DAV::lastaccessed': case 'DAV::lastaccessed':
return new \DateTime('@' . fileatime($target)); return new \DateTime('@' . fileatime($target));
case 'DAV::creationdate': case 'DAV::creationdate':
// The ownCloud Android app doesn't like formatted dates, it makes it crash.
if (false !== stripos($_SERVER['HTTP_USER_AGENT'] ?? '', 'owncloud')) {
return filectime($target);
}
return new \DateTime('@' . filectime($target)); return new \DateTime('@' . filectime($target));
case WebDAV::PROP_DIGEST_MD5: case WebDAV::PROP_DIGEST_MD5:
if (!is_file($target)) { if (!is_file($target)) {