commit
ea9b1cc340
27 changed files with 1367 additions and 57 deletions
|
@ -107,6 +107,7 @@ return array(
|
|||
'OCP\\Files\\FileNameTooLongException' => $baseDir . '/lib/public/Files/FileNameTooLongException.php',
|
||||
'OCP\\Files\\Folder' => $baseDir . '/lib/public/Files/Folder.php',
|
||||
'OCP\\Files\\ForbiddenException' => $baseDir . '/lib/public/Files/ForbiddenException.php',
|
||||
'OCP\\Files\\IAppData' => $baseDir . '/lib/public/Files/IAppData.php',
|
||||
'OCP\\Files\\IHomeStorage' => $baseDir . '/lib/public/Files/IHomeStorage.php',
|
||||
'OCP\\Files\\IMimeTypeDetector' => $baseDir . '/lib/public/Files/IMimeTypeDetector.php',
|
||||
'OCP\\Files\\IMimeTypeLoader' => $baseDir . '/lib/public/Files/IMimeTypeLoader.php',
|
||||
|
@ -123,6 +124,9 @@ return array(
|
|||
'OCP\\Files\\NotPermittedException' => $baseDir . '/lib/public/Files/NotPermittedException.php',
|
||||
'OCP\\Files\\ObjectStore\\IObjectStore' => $baseDir . '/lib/public/Files/ObjectStore/IObjectStore.php',
|
||||
'OCP\\Files\\ReservedWordException' => $baseDir . '/lib/public/Files/ReservedWordException.php',
|
||||
'OCP\\Files\\SimpleFS\\ISimpleFile' => $baseDir . '/lib/public/Files/SimpleFS/ISimpleFile.php',
|
||||
'OCP\\Files\\SimpleFS\\ISimpleFolder' => $baseDir . '/lib/public/Files/SimpleFS/ISimpleFolder.php',
|
||||
'OCP\\Files\\SimpleFS\\ISimpleRoot' => $baseDir . '/lib/public/Files/SimpleFS/ISimpleRoot.php',
|
||||
'OCP\\Files\\Storage' => $baseDir . '/lib/public/Files/Storage.php',
|
||||
'OCP\\Files\\StorageAuthException' => $baseDir . '/lib/public/Files/StorageAuthException.php',
|
||||
'OCP\\Files\\StorageBadConfigException' => $baseDir . '/lib/public/Files/StorageBadConfigException.php',
|
||||
|
@ -459,6 +463,8 @@ return array(
|
|||
'OC\\Encryption\\Manager' => $baseDir . '/lib/private/Encryption/Manager.php',
|
||||
'OC\\Encryption\\Update' => $baseDir . '/lib/private/Encryption/Update.php',
|
||||
'OC\\Encryption\\Util' => $baseDir . '/lib/private/Encryption/Util.php',
|
||||
'OC\\Files\\AppData\\AppData' => $baseDir . '/lib/private/Files/AppData/AppData.php',
|
||||
'OC\\Files\\AppData\\Factory' => $baseDir . '/lib/private/Files/AppData/Factory.php',
|
||||
'OC\\Files\\Cache\\Cache' => $baseDir . '/lib/private/Files/Cache/Cache.php',
|
||||
'OC\\Files\\Cache\\CacheEntry' => $baseDir . '/lib/private/Files/Cache/CacheEntry.php',
|
||||
'OC\\Files\\Cache\\FailedCache' => $baseDir . '/lib/private/Files/Cache/FailedCache.php',
|
||||
|
@ -500,6 +506,8 @@ return array(
|
|||
'OC\\Files\\ObjectStore\\NoopScanner' => $baseDir . '/lib/private/Files/ObjectStore/NoopScanner.php',
|
||||
'OC\\Files\\ObjectStore\\ObjectStoreStorage' => $baseDir . '/lib/private/Files/ObjectStore/ObjectStoreStorage.php',
|
||||
'OC\\Files\\ObjectStore\\Swift' => $baseDir . '/lib/private/Files/ObjectStore/Swift.php',
|
||||
'OC\\Files\\SimpleFS\\SimpleFile' => $baseDir . '/lib/private/Files/SimpleFS/SimpleFile.php',
|
||||
'OC\\Files\\SimpleFS\\SimpleFolder' => $baseDir . '/lib/private/Files/SimpleFS/SimpleFolder.php',
|
||||
'OC\\Files\\Storage\\Common' => $baseDir . '/lib/private/Files/Storage/Common.php',
|
||||
'OC\\Files\\Storage\\CommonTest' => $baseDir . '/lib/private/Files/Storage/CommonTest.php',
|
||||
'OC\\Files\\Storage\\DAV' => $baseDir . '/lib/private/Files/Storage/DAV.php',
|
||||
|
@ -638,6 +646,8 @@ return array(
|
|||
'OC\\Repair\\FillETags' => $baseDir . '/lib/private/Repair/FillETags.php',
|
||||
'OC\\Repair\\InnoDB' => $baseDir . '/lib/private/Repair/InnoDB.php',
|
||||
'OC\\Repair\\MoveUpdaterStepFile' => $baseDir . '/lib/private/Repair/MoveUpdaterStepFile.php',
|
||||
'OC\\Repair\\NC11\\MoveAvatars' => $baseDir . '/lib/private/Repair/NC11/MoveAvatars.php',
|
||||
'OC\\Repair\\NC11\\MoveAvatarsBackgroundJob' => $baseDir . '/lib/private/Repair/NC11/MoveAvatarBackgroundJob.php',
|
||||
'OC\\Repair\\OldGroupMembershipShares' => $baseDir . '/lib/private/Repair/OldGroupMembershipShares.php',
|
||||
'OC\\Repair\\Preview' => $baseDir . '/lib/private/Repair/Preview.php',
|
||||
'OC\\Repair\\RemoveGetETagEntries' => $baseDir . '/lib/private/Repair/RemoveGetETagEntries.php',
|
||||
|
|
|
@ -137,6 +137,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
|
|||
'OCP\\Files\\FileNameTooLongException' => __DIR__ . '/../../..' . '/lib/public/Files/FileNameTooLongException.php',
|
||||
'OCP\\Files\\Folder' => __DIR__ . '/../../..' . '/lib/public/Files/Folder.php',
|
||||
'OCP\\Files\\ForbiddenException' => __DIR__ . '/../../..' . '/lib/public/Files/ForbiddenException.php',
|
||||
'OCP\\Files\\IAppData' => __DIR__ . '/../../..' . '/lib/public/Files/IAppData.php',
|
||||
'OCP\\Files\\IHomeStorage' => __DIR__ . '/../../..' . '/lib/public/Files/IHomeStorage.php',
|
||||
'OCP\\Files\\IMimeTypeDetector' => __DIR__ . '/../../..' . '/lib/public/Files/IMimeTypeDetector.php',
|
||||
'OCP\\Files\\IMimeTypeLoader' => __DIR__ . '/../../..' . '/lib/public/Files/IMimeTypeLoader.php',
|
||||
|
@ -153,6 +154,9 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
|
|||
'OCP\\Files\\NotPermittedException' => __DIR__ . '/../../..' . '/lib/public/Files/NotPermittedException.php',
|
||||
'OCP\\Files\\ObjectStore\\IObjectStore' => __DIR__ . '/../../..' . '/lib/public/Files/ObjectStore/IObjectStore.php',
|
||||
'OCP\\Files\\ReservedWordException' => __DIR__ . '/../../..' . '/lib/public/Files/ReservedWordException.php',
|
||||
'OCP\\Files\\SimpleFS\\ISimpleFile' => __DIR__ . '/../../..' . '/lib/public/Files/SimpleFS/ISimpleFile.php',
|
||||
'OCP\\Files\\SimpleFS\\ISimpleFolder' => __DIR__ . '/../../..' . '/lib/public/Files/SimpleFS/ISimpleFolder.php',
|
||||
'OCP\\Files\\SimpleFS\\ISimpleRoot' => __DIR__ . '/../../..' . '/lib/public/Files/SimpleFS/ISimpleRoot.php',
|
||||
'OCP\\Files\\Storage' => __DIR__ . '/../../..' . '/lib/public/Files/Storage.php',
|
||||
'OCP\\Files\\StorageAuthException' => __DIR__ . '/../../..' . '/lib/public/Files/StorageAuthException.php',
|
||||
'OCP\\Files\\StorageBadConfigException' => __DIR__ . '/../../..' . '/lib/public/Files/StorageBadConfigException.php',
|
||||
|
@ -489,6 +493,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
|
|||
'OC\\Encryption\\Manager' => __DIR__ . '/../../..' . '/lib/private/Encryption/Manager.php',
|
||||
'OC\\Encryption\\Update' => __DIR__ . '/../../..' . '/lib/private/Encryption/Update.php',
|
||||
'OC\\Encryption\\Util' => __DIR__ . '/../../..' . '/lib/private/Encryption/Util.php',
|
||||
'OC\\Files\\AppData\\AppData' => __DIR__ . '/../../..' . '/lib/private/Files/AppData/AppData.php',
|
||||
'OC\\Files\\AppData\\Factory' => __DIR__ . '/../../..' . '/lib/private/Files/AppData/Factory.php',
|
||||
'OC\\Files\\Cache\\Cache' => __DIR__ . '/../../..' . '/lib/private/Files/Cache/Cache.php',
|
||||
'OC\\Files\\Cache\\CacheEntry' => __DIR__ . '/../../..' . '/lib/private/Files/Cache/CacheEntry.php',
|
||||
'OC\\Files\\Cache\\FailedCache' => __DIR__ . '/../../..' . '/lib/private/Files/Cache/FailedCache.php',
|
||||
|
@ -530,6 +536,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
|
|||
'OC\\Files\\ObjectStore\\NoopScanner' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/NoopScanner.php',
|
||||
'OC\\Files\\ObjectStore\\ObjectStoreStorage' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/ObjectStoreStorage.php',
|
||||
'OC\\Files\\ObjectStore\\Swift' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/Swift.php',
|
||||
'OC\\Files\\SimpleFS\\SimpleFile' => __DIR__ . '/../../..' . '/lib/private/Files/SimpleFS/SimpleFile.php',
|
||||
'OC\\Files\\SimpleFS\\SimpleFolder' => __DIR__ . '/../../..' . '/lib/private/Files/SimpleFS/SimpleFolder.php',
|
||||
'OC\\Files\\Storage\\Common' => __DIR__ . '/../../..' . '/lib/private/Files/Storage/Common.php',
|
||||
'OC\\Files\\Storage\\CommonTest' => __DIR__ . '/../../..' . '/lib/private/Files/Storage/CommonTest.php',
|
||||
'OC\\Files\\Storage\\DAV' => __DIR__ . '/../../..' . '/lib/private/Files/Storage/DAV.php',
|
||||
|
@ -668,6 +676,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
|
|||
'OC\\Repair\\FillETags' => __DIR__ . '/../../..' . '/lib/private/Repair/FillETags.php',
|
||||
'OC\\Repair\\InnoDB' => __DIR__ . '/../../..' . '/lib/private/Repair/InnoDB.php',
|
||||
'OC\\Repair\\MoveUpdaterStepFile' => __DIR__ . '/../../..' . '/lib/private/Repair/MoveUpdaterStepFile.php',
|
||||
'OC\\Repair\\NC11\\MoveAvatars' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/MoveAvatars.php',
|
||||
'OC\\Repair\\NC11\\MoveAvatarsBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/MoveAvatarBackgroundJob.php',
|
||||
'OC\\Repair\\OldGroupMembershipShares' => __DIR__ . '/../../..' . '/lib/private/Repair/OldGroupMembershipShares.php',
|
||||
'OC\\Repair\\Preview' => __DIR__ . '/../../..' . '/lib/private/Repair/Preview.php',
|
||||
'OC\\Repair\\RemoveGetETagEntries' => __DIR__ . '/../../..' . '/lib/private/Repair/RemoveGetETagEntries.php',
|
||||
|
|
|
@ -46,6 +46,7 @@ use OC\AppFramework\Utility\SimpleContainer;
|
|||
use OC\Core\Middleware\TwoFactorMiddleware;
|
||||
use OCP\AppFramework\IApi;
|
||||
use OCP\AppFramework\IAppContainer;
|
||||
use OCP\Files\IAppData;
|
||||
|
||||
|
||||
class DIContainer extends SimpleContainer implements IAppContainer {
|
||||
|
@ -164,6 +165,10 @@ class DIContainer extends SimpleContainer implements IAppContainer {
|
|||
return $this->getServer()->getHTTPClientService();
|
||||
});
|
||||
|
||||
$this->registerService(IAppData::class, function (SimpleContainer $c) {
|
||||
return $this->getServer()->getAppDataDir($c->query('AppName'));
|
||||
});
|
||||
|
||||
$this->registerService('OCP\\IGroupManager', function($c) {
|
||||
return $this->getServer()->getGroupManager();
|
||||
});
|
||||
|
|
|
@ -29,10 +29,10 @@
|
|||
namespace OC;
|
||||
|
||||
use OC\User\User;
|
||||
use OCP\Files\Folder;
|
||||
use OCP\Files\File;
|
||||
use OCP\Files\NotFoundException;
|
||||
use OCP\Files\NotPermittedException;
|
||||
use OCP\Files\SimpleFS\ISimpleFile;
|
||||
use OCP\Files\SimpleFS\ISimpleFolder;
|
||||
use OCP\IAvatar;
|
||||
use OCP\IConfig;
|
||||
use OCP\IImage;
|
||||
|
@ -45,7 +45,7 @@ use OCP\ILogger;
|
|||
*/
|
||||
|
||||
class Avatar implements IAvatar {
|
||||
/** @var Folder */
|
||||
/** @var ISimpleFolder */
|
||||
private $folder;
|
||||
/** @var IL10N */
|
||||
private $l;
|
||||
|
@ -59,13 +59,13 @@ class Avatar implements IAvatar {
|
|||
/**
|
||||
* constructor
|
||||
*
|
||||
* @param Folder $folder The folder where the avatars are
|
||||
* @param ISimpleFolder $folder The folder where the avatars are
|
||||
* @param IL10N $l
|
||||
* @param User $user
|
||||
* @param ILogger $logger
|
||||
* @param IConfig $config
|
||||
*/
|
||||
public function __construct(Folder $folder,
|
||||
public function __construct(ISimpleFolder $folder,
|
||||
IL10N $l,
|
||||
$user,
|
||||
ILogger $logger,
|
||||
|
@ -98,7 +98,8 @@ class Avatar implements IAvatar {
|
|||
* @return bool
|
||||
*/
|
||||
public function exists() {
|
||||
return $this->folder->nodeExists('avatar.jpg') || $this->folder->nodeExists('avatar.png');
|
||||
|
||||
return $this->folder->fileExists('avatar.jpg') || $this->folder->fileExists('avatar.png');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -170,15 +171,15 @@ class Avatar implements IAvatar {
|
|||
}
|
||||
|
||||
try {
|
||||
$file = $this->folder->get($path);
|
||||
$file = $this->folder->getFile($path);
|
||||
} catch (NotFoundException $e) {
|
||||
if ($size <= 0) {
|
||||
throw new NotFoundException;
|
||||
}
|
||||
|
||||
$avatar = new OC_Image();
|
||||
/** @var File $file */
|
||||
$file = $this->folder->get('avatar.' . $ext);
|
||||
/** @var ISimpleFile $file */
|
||||
$file = $this->folder->getFile('avatar.' . $ext);
|
||||
$avatar->loadFromData($file->getContent());
|
||||
if ($size !== -1) {
|
||||
$avatar->resize($size);
|
||||
|
@ -201,9 +202,9 @@ class Avatar implements IAvatar {
|
|||
* @throws NotFoundException
|
||||
*/
|
||||
private function getExtension() {
|
||||
if ($this->folder->nodeExists('avatar.jpg')) {
|
||||
if ($this->folder->fileExists('avatar.jpg')) {
|
||||
return 'jpg';
|
||||
} elseif ($this->folder->nodeExists('avatar.png')) {
|
||||
} elseif ($this->folder->fileExists('avatar.png')) {
|
||||
return 'png';
|
||||
}
|
||||
throw new NotFoundException;
|
||||
|
|
|
@ -27,13 +27,12 @@
|
|||
|
||||
namespace OC;
|
||||
|
||||
use OCP\Files\Folder;
|
||||
use OCP\Files\IAppData;
|
||||
use OCP\Files\NotFoundException;
|
||||
use OCP\IAvatarManager;
|
||||
use OCP\IConfig;
|
||||
use OCP\ILogger;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Files\IRootFolder;
|
||||
use OCP\IL10N;
|
||||
|
||||
/**
|
||||
|
@ -44,8 +43,8 @@ class AvatarManager implements IAvatarManager {
|
|||
/** @var IUserManager */
|
||||
private $userManager;
|
||||
|
||||
/** @var IRootFolder */
|
||||
private $rootFolder;
|
||||
/** @var IAppData */
|
||||
private $appData;
|
||||
|
||||
/** @var IL10N */
|
||||
private $l;
|
||||
|
@ -60,19 +59,19 @@ class AvatarManager implements IAvatarManager {
|
|||
* AvatarManager constructor.
|
||||
*
|
||||
* @param IUserManager $userManager
|
||||
* @param IRootFolder $rootFolder
|
||||
* @param IAppData $appData
|
||||
* @param IL10N $l
|
||||
* @param ILogger $logger
|
||||
* @param IConfig $config
|
||||
*/
|
||||
public function __construct(
|
||||
IUserManager $userManager,
|
||||
IRootFolder $rootFolder,
|
||||
IAppData $appData,
|
||||
IL10N $l,
|
||||
ILogger $logger,
|
||||
IConfig $config) {
|
||||
$this->userManager = $userManager;
|
||||
$this->rootFolder = $rootFolder;
|
||||
$this->appData = $appData;
|
||||
$this->l = $l;
|
||||
$this->logger = $logger;
|
||||
$this->config = $config;
|
||||
|
@ -95,20 +94,12 @@ class AvatarManager implements IAvatarManager {
|
|||
// sanitize userID - fixes casing issue (needed for the filesystem stuff that is done below)
|
||||
$userId = $user->getUID();
|
||||
|
||||
/*
|
||||
* Fix for #22119
|
||||
* Basically we do not want to copy the skeleton folder.
|
||||
*
|
||||
* For unit test purposes this is ignored when run in PHPUnit.
|
||||
*/
|
||||
if(!defined('PHPUNIT_RUN')) {
|
||||
\OC\Files\Filesystem::initMountPoints($userId);
|
||||
try {
|
||||
$folder = $this->appData->getFolder($userId);
|
||||
} catch (NotFoundException $e) {
|
||||
$folder = $this->appData->newFolder($userId);
|
||||
}
|
||||
|
||||
$dir = '/' . $userId;
|
||||
/** @var Folder $folder */
|
||||
$folder = $this->rootFolder->get($dir);
|
||||
|
||||
return new Avatar($folder, $this->l, $user, $this->logger, $this->config);
|
||||
}
|
||||
}
|
||||
|
|
131
lib/private/Files/AppData/AppData.php
Normal file
131
lib/private/Files/AppData/AppData.php
Normal file
|
@ -0,0 +1,131 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OC\Files\AppData;
|
||||
|
||||
use OC\Files\SimpleFS\SimpleFolder;
|
||||
use OCP\Files\IAppData;
|
||||
use OCP\Files\IRootFolder;
|
||||
use OCP\Files\Folder;
|
||||
use OC\SystemConfig;
|
||||
use OCP\Files\Node;
|
||||
use OCP\Files\NotFoundException;
|
||||
use OCP\Files\NotPermittedException;
|
||||
|
||||
class AppData implements IAppData {
|
||||
|
||||
/** @var IRootFolder */
|
||||
private $rootFolder;
|
||||
|
||||
/** @var SystemConfig */
|
||||
private $config;
|
||||
|
||||
/** @var string */
|
||||
private $appId;
|
||||
|
||||
/** @var Folder */
|
||||
private $folder;
|
||||
|
||||
/**
|
||||
* AppData constructor.
|
||||
*
|
||||
* @param IRootFolder $rootFolder
|
||||
* @param SystemConfig $systemConfig
|
||||
* @param string $appId
|
||||
*/
|
||||
public function __construct(IRootFolder $rootFolder,
|
||||
SystemConfig $systemConfig,
|
||||
$appId) {
|
||||
|
||||
$this->rootFolder = $rootFolder;
|
||||
$this->config = $systemConfig;
|
||||
$this->appId = $appId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Folder
|
||||
* @throws \RuntimeException
|
||||
*/
|
||||
private function getAppDataFolder() {
|
||||
if ($this->folder === null) {
|
||||
$instanceId = $this->config->getValue('instanceid', null);
|
||||
if ($instanceId === null) {
|
||||
throw new \RuntimeException('no instance id!');
|
||||
}
|
||||
|
||||
$name = 'appdata_' . $instanceId;
|
||||
|
||||
try {
|
||||
$appDataFolder = $this->rootFolder->get($name);
|
||||
} catch (NotFoundException $e) {
|
||||
try {
|
||||
$appDataFolder = $this->rootFolder->newFolder($name);
|
||||
} catch (NotPermittedException $e) {
|
||||
throw new \RuntimeException('Could not get appdata folder');
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$appDataFolder = $appDataFolder->get($this->appId);
|
||||
} catch (NotFoundException $e) {
|
||||
try {
|
||||
$appDataFolder = $appDataFolder->newFolder($this->appId);
|
||||
} catch (NotPermittedException $e) {
|
||||
throw new \RuntimeException('Could not get appdata folder for ' . $this->appId);
|
||||
}
|
||||
}
|
||||
|
||||
$this->folder = $appDataFolder;
|
||||
}
|
||||
|
||||
return $this->folder;
|
||||
}
|
||||
|
||||
public function getFolder($name) {
|
||||
$node = $this->getAppDataFolder()->get($name);
|
||||
|
||||
/** @var Folder $node */
|
||||
return new SimpleFolder($node);
|
||||
}
|
||||
|
||||
public function newFolder($name) {
|
||||
$folder = $this->getAppDataFolder()->newFolder($name);
|
||||
|
||||
return new SimpleFolder($folder);
|
||||
}
|
||||
|
||||
public function getDirectoryListing() {
|
||||
$listing = $this->getAppDataFolder()->getDirectoryListing();
|
||||
|
||||
$fileListing = array_map(function(Node $folder) {
|
||||
if ($folder instanceof Folder) {
|
||||
return new SimpleFolder($folder);
|
||||
}
|
||||
return null;
|
||||
}, $listing);
|
||||
|
||||
$fileListing = array_filter($fileListing);
|
||||
|
||||
return array_values($fileListing);
|
||||
}
|
||||
}
|
50
lib/private/Files/AppData/Factory.php
Normal file
50
lib/private/Files/AppData/Factory.php
Normal file
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace OC\Files\AppData;
|
||||
|
||||
use OC\SystemConfig;
|
||||
use OCP\Files\IRootFolder;
|
||||
|
||||
class Factory {
|
||||
|
||||
/** @var IRootFolder */
|
||||
private $rootFolder;
|
||||
|
||||
/** @var SystemConfig */
|
||||
private $config;
|
||||
|
||||
public function __construct(IRootFolder $rootFolder,
|
||||
SystemConfig $systemConfig) {
|
||||
|
||||
$this->rootFolder = $rootFolder;
|
||||
$this->config = $systemConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $appId
|
||||
* @return AppData
|
||||
*/
|
||||
public function get($appId) {
|
||||
return new AppData($this->rootFolder, $this->config, $appId);
|
||||
}
|
||||
}
|
115
lib/private/Files/SimpleFS/SimpleFile.php
Normal file
115
lib/private/Files/SimpleFS/SimpleFile.php
Normal file
|
@ -0,0 +1,115 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace OC\Files\SimpleFS;
|
||||
|
||||
use OCP\Files\File;
|
||||
use OCP\Files\NotPermittedException;
|
||||
use OCP\Files\SimpleFS\ISimpleFile;
|
||||
|
||||
class SimpleFile implements ISimpleFile {
|
||||
|
||||
/** @var File $file */
|
||||
private $file;
|
||||
|
||||
/**
|
||||
* File constructor.
|
||||
*
|
||||
* @param File $file
|
||||
*/
|
||||
public function __construct(File $file) {
|
||||
$this->file = $file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName() {
|
||||
return $this->file->getName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the size in bytes
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getSize() {
|
||||
return $this->file->getSize();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the ETag
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getETag() {
|
||||
return $this->file->getEtag();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the last modification time
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getMTime() {
|
||||
return $this->file->getMTime();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the content
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getContent() {
|
||||
return $this->file->getContent();
|
||||
}
|
||||
|
||||
/**
|
||||
* Overwrite the file
|
||||
*
|
||||
* @param string $data
|
||||
* @throws NotPermittedException
|
||||
*/
|
||||
public function putContent($data) {
|
||||
$this->file->putContent($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the file
|
||||
*
|
||||
* @throws NotPermittedException
|
||||
*/
|
||||
public function delete() {
|
||||
$this->file->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the MimeType
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getMimeType() {
|
||||
return $this->file->getMimeType();
|
||||
}
|
||||
}
|
87
lib/private/Files/SimpleFS/SimpleFolder.php
Normal file
87
lib/private/Files/SimpleFS/SimpleFolder.php
Normal file
|
@ -0,0 +1,87 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace OC\Files\SimpleFS;
|
||||
|
||||
use OCP\Files\File;
|
||||
use OCP\Files\Folder;
|
||||
use OCP\Files\Node;
|
||||
use OCP\Files\NotFoundException;
|
||||
use OCP\Files\SimpleFS\ISimpleFolder;
|
||||
|
||||
class SimpleFolder implements ISimpleFolder {
|
||||
|
||||
/** @var Folder */
|
||||
private $folder;
|
||||
|
||||
/**
|
||||
* Folder constructor.
|
||||
*
|
||||
* @param Folder $folder
|
||||
*/
|
||||
public function __construct(Folder $folder) {
|
||||
$this->folder = $folder;
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return $this->folder->getName();
|
||||
}
|
||||
|
||||
public function getDirectoryListing() {
|
||||
$listing = $this->folder->getDirectoryListing();
|
||||
|
||||
$fileListing = array_map(function(Node $file) {
|
||||
if ($file instanceof File) {
|
||||
return new SimpleFile($file);
|
||||
}
|
||||
return null;
|
||||
}, $listing);
|
||||
|
||||
$fileListing = array_filter($fileListing);
|
||||
|
||||
return array_values($fileListing);
|
||||
}
|
||||
|
||||
public function delete() {
|
||||
$this->folder->delete();
|
||||
}
|
||||
|
||||
public function fileExists($name) {
|
||||
return $this->folder->nodeExists($name);
|
||||
}
|
||||
|
||||
public function getFile($name) {
|
||||
$file = $this->folder->get($name);
|
||||
|
||||
if (!($file instanceof File)) {
|
||||
throw new NotFoundException();
|
||||
}
|
||||
|
||||
return new SimpleFile($file);
|
||||
}
|
||||
|
||||
public function newFile($name) {
|
||||
$file = $this->folder->newFile($name);
|
||||
|
||||
return new SimpleFile($file);
|
||||
}
|
||||
}
|
|
@ -36,6 +36,7 @@ use OC\Repair\CleanTags;
|
|||
use OC\Repair\Collation;
|
||||
use OC\Repair\DropOldJobs;
|
||||
use OC\Repair\MoveUpdaterStepFile;
|
||||
use OC\Repair\NC11\MoveAvatars;
|
||||
use OC\Repair\OldGroupMembershipShares;
|
||||
use OC\Repair\RemoveGetETagEntries;
|
||||
use OC\Repair\RemoveOldShares;
|
||||
|
@ -149,6 +150,10 @@ class Repair implements IOutput{
|
|||
\OC::$server->getGroupManager()
|
||||
),
|
||||
new MoveUpdaterStepFile(\OC::$server->getConfig()),
|
||||
new MoveAvatars(
|
||||
\OC::$server->getJobList(),
|
||||
\OC::$server->getSystemConfig()
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
|
|
104
lib/private/Repair/NC11/MoveAvatarBackgroundJob.php
Normal file
104
lib/private/Repair/NC11/MoveAvatarBackgroundJob.php
Normal file
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace OC\Repair\NC11;
|
||||
|
||||
use OC\BackgroundJob\QueuedJob;
|
||||
use OCP\Files\File;
|
||||
use OCP\Files\Folder;
|
||||
use OCP\Files\IAppData;
|
||||
use OCP\Files\IRootFolder;
|
||||
use OCP\Files\NotFoundException;
|
||||
use OCP\ILogger;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserManager;
|
||||
|
||||
class MoveAvatarsBackgroundJob extends QueuedJob {
|
||||
|
||||
/** @var IUserManager */
|
||||
private $userManager;
|
||||
|
||||
/** @var IRootFolder */
|
||||
private $rootFolder;
|
||||
|
||||
/** @var IAppData */
|
||||
private $appData;
|
||||
|
||||
/** @var ILogger */
|
||||
private $logger;
|
||||
|
||||
/**
|
||||
* MoveAvatars constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->userManager = \OC::$server->getUserManager();
|
||||
$this->rootFolder = \OC::$server->getRootFolder();
|
||||
$this->logger = \OC::$server->getLogger();
|
||||
$this->appData = \OC::$server->getAppDataDir('avatar');
|
||||
}
|
||||
|
||||
public function run($arguments) {
|
||||
$this->logger->info('Started migrating avatars to AppData folder');
|
||||
$this->moveAvatars();
|
||||
$this->logger->info('All avatars migrated to AppData folder');
|
||||
}
|
||||
|
||||
private function moveAvatars() {
|
||||
$counter = 0;
|
||||
$this->userManager->callForAllUsers(function (IUser $user) use ($counter) {
|
||||
if ($user->getLastLogin() !== 0) {
|
||||
$uid = $user->getUID();
|
||||
|
||||
\OC\Files\Filesystem::initMountPoints($uid);
|
||||
/** @var Folder $userFolder */
|
||||
$userFolder = $this->rootFolder->get($uid);
|
||||
|
||||
try {
|
||||
$userData = $this->appData->getFolder($uid);
|
||||
} catch (NotFoundException $e) {
|
||||
$userData = $this->appData->newFolder($uid);
|
||||
}
|
||||
|
||||
|
||||
$regex = '/^avatar\.([0-9]+\.)?(jpg|png)$/';
|
||||
$avatars = $userFolder->getDirectoryListing();
|
||||
|
||||
foreach ($avatars as $avatar) {
|
||||
/** @var File $avatar */
|
||||
if (preg_match($regex, $avatar->getName())) {
|
||||
/*
|
||||
* This is not the most effective but it is the most abstract way
|
||||
* to handle this. Avatars should be small anyways.
|
||||
*/
|
||||
$newAvatar = $userData->newFile($avatar->getName());
|
||||
$newAvatar->putContent($avatar->getContent());
|
||||
$avatar->delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
$counter++;
|
||||
if ($counter % 100) {
|
||||
$this->logger->info('{amount} avatars migrated', ['amount' => $counter]);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
64
lib/private/Repair/NC11/MoveAvatars.php
Normal file
64
lib/private/Repair/NC11/MoveAvatars.php
Normal file
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace OC\Repair\NC11;
|
||||
|
||||
use OC\SystemConfig;
|
||||
use OCP\BackgroundJob\IJobList;
|
||||
use OCP\Migration\IOutput;
|
||||
use OCP\Migration\IRepairStep;
|
||||
|
||||
class MoveAvatars implements IRepairStep {
|
||||
|
||||
/** @var IJobList */
|
||||
private $jobList;
|
||||
|
||||
/** @var SystemConfig */
|
||||
private $systemConfig;
|
||||
|
||||
/**
|
||||
* MoveAvatars constructor.
|
||||
*
|
||||
* @param IJobList $jobList
|
||||
* @param SystemConfig $systemConfig
|
||||
*/
|
||||
public function __construct(IJobList $jobList,
|
||||
SystemConfig $systemConfig) {
|
||||
$this->jobList = $jobList;
|
||||
$this->systemConfig = $systemConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getName() {
|
||||
return 'Add mover avatar background job';
|
||||
}
|
||||
|
||||
public function run(IOutput $output) {
|
||||
if ($this->systemConfig->getValue('enable_avatars', true) === false) {
|
||||
$output->info('Avatars are disabled');
|
||||
} else {
|
||||
$this->jobList->add(MoveAvatarsBackgroundJob::class);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -359,7 +359,7 @@ class Server extends ServerContainer implements IServerContainer {
|
|||
$this->registerService('AvatarManager', function (Server $c) {
|
||||
return new AvatarManager(
|
||||
$c->getUserManager(),
|
||||
$c->getRootFolder(),
|
||||
$c->getAppDataDir('avatar'),
|
||||
$c->getL10N('lib'),
|
||||
$c->getLogger(),
|
||||
$c->getConfig()
|
||||
|
@ -742,6 +742,12 @@ class Server extends ServerContainer implements IServerContainer {
|
|||
);
|
||||
return $manager;
|
||||
});
|
||||
$this->registerService(\OC\Files\AppData\Factory::class, function (Server $c) {
|
||||
return new \OC\Files\AppData\Factory(
|
||||
$c->getRootFolder(),
|
||||
$c->getSystemConfig()
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -876,6 +882,7 @@ class Server extends ServerContainer implements IServerContainer {
|
|||
* Returns an app-specific view in ownClouds data directory
|
||||
*
|
||||
* @return \OCP\Files\Folder
|
||||
* @deprecated since 9.2.0 use IAppData
|
||||
*/
|
||||
public function getAppFolder() {
|
||||
$dir = '/' . \OC_App::getCurrentApp();
|
||||
|
@ -1456,4 +1463,13 @@ class Server extends ServerContainer implements IServerContainer {
|
|||
public function getSettingsManager() {
|
||||
return $this->query('SettingsManager');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \OCP\Files\IAppData
|
||||
*/
|
||||
public function getAppDataDir($app) {
|
||||
/** @var \OC\Files\AppData\Factory $factory */
|
||||
$factory = $this->query(\OC\Files\AppData\Factory::class);
|
||||
return $factory->get($app);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -311,10 +311,20 @@ class OC_Util {
|
|||
*
|
||||
* @param String $userId
|
||||
* @param \OCP\Files\Folder $userDirectory
|
||||
* @throws \RuntimeException
|
||||
*/
|
||||
public static function copySkeleton($userId, \OCP\Files\Folder $userDirectory) {
|
||||
|
||||
$skeletonDirectory = \OCP\Config::getSystemValue('skeletondirectory', \OC::$SERVERROOT . '/core/skeleton');
|
||||
$skeletonDirectory = \OC::$server->getConfig()->getSystemValue('skeletondirectory', \OC::$SERVERROOT . '/core/skeleton');
|
||||
$instanceId = \OC::$server->getConfig()->getSystemValue('instanceid', '');
|
||||
|
||||
if ($instanceId === null) {
|
||||
throw new \RuntimeException('no instance id!');
|
||||
}
|
||||
$appdata = 'appdata_' . $instanceId;
|
||||
if ($userId === $appdata) {
|
||||
throw new \RuntimeException('username is reserved name: ' . $appdata);
|
||||
}
|
||||
|
||||
if (!empty($skeletonDirectory)) {
|
||||
\OCP\Util::writeLog(
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
namespace OCP\AppFramework\Http;
|
||||
|
||||
use OCP\AppFramework\Http;
|
||||
use OCP\Files\File;
|
||||
|
||||
/**
|
||||
* Class FileDisplayResponse
|
||||
|
@ -33,18 +32,18 @@ use OCP\Files\File;
|
|||
*/
|
||||
class FileDisplayResponse extends Response implements ICallbackResponse {
|
||||
|
||||
/** @var File */
|
||||
/** @var \OCP\Files\File|\OCP\Files\SimpleFS\ISimpleFile */
|
||||
private $file;
|
||||
|
||||
/**
|
||||
* FileDisplayResponse constructor.
|
||||
*
|
||||
* @param File $file
|
||||
* @param \OCP\Files\File|\OCP\Files\SimpleFS\ISimpleFile $file
|
||||
* @param int $statusCode
|
||||
* @param array $headers
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function __construct(File $file, $statusCode=Http::STATUS_OK,
|
||||
public function __construct($file, $statusCode=Http::STATUS_OK,
|
||||
$headers=[]) {
|
||||
$this->file = $file;
|
||||
$this->setStatus($statusCode);
|
||||
|
|
36
lib/public/Files/IAppData.php
Normal file
36
lib/public/Files/IAppData.php
Normal file
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace OCP\Files;
|
||||
|
||||
use OCP\Files\SimpleFS\ISimpleRoot;
|
||||
|
||||
/**
|
||||
* Interface IAppData
|
||||
*
|
||||
* @package OCP\Files
|
||||
* @since 9.2.0
|
||||
* @internal This interface is experimental and might change for NC12
|
||||
*/
|
||||
interface IAppData extends ISimpleRoot {
|
||||
|
||||
}
|
100
lib/public/Files/SimpleFS/ISimpleFile.php
Normal file
100
lib/public/Files/SimpleFS/ISimpleFile.php
Normal file
|
@ -0,0 +1,100 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2016 Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace OCP\Files\SimpleFS;
|
||||
|
||||
use OCP\Files\NotPermittedException;
|
||||
|
||||
/**
|
||||
* Interface ISimpleFile
|
||||
*
|
||||
* @package OCP\Files\SimpleFS
|
||||
* @since 9.2.0
|
||||
* @internal This interface is experimental and might change for NC12
|
||||
*/
|
||||
interface ISimpleFile {
|
||||
|
||||
/**
|
||||
* Get the name
|
||||
*
|
||||
* @return string
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function getName();
|
||||
|
||||
/**
|
||||
* Get the size in bytes
|
||||
*
|
||||
* @return int
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function getSize();
|
||||
|
||||
/**
|
||||
* Get the ETag
|
||||
*
|
||||
* @return string
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function getETag();
|
||||
|
||||
/**
|
||||
* Get the last modification time
|
||||
*
|
||||
* @return int
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function getMTime();
|
||||
|
||||
/**
|
||||
* Get the content
|
||||
*
|
||||
* @return string
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function getContent();
|
||||
|
||||
/**
|
||||
* Overwrite the file
|
||||
*
|
||||
* @param string $data
|
||||
* @throws NotPermittedException
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function putContent($data);
|
||||
|
||||
/**
|
||||
* Delete the file
|
||||
*
|
||||
* @throws NotPermittedException
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function delete();
|
||||
|
||||
/**
|
||||
* Get the MimeType
|
||||
*
|
||||
* @return string
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function getMimeType();
|
||||
}
|
88
lib/public/Files/SimpleFS/ISimpleFolder.php
Normal file
88
lib/public/Files/SimpleFS/ISimpleFolder.php
Normal file
|
@ -0,0 +1,88 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2016 Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace OCP\Files\SimpleFS;
|
||||
|
||||
use OCP\Files\NotFoundException;
|
||||
use OCP\Files\NotPermittedException;
|
||||
|
||||
/**
|
||||
* Interface ISimpleFolder
|
||||
*
|
||||
* @package OCP\Files\SimpleFS
|
||||
* @since 9.2.0
|
||||
* @internal This interface is experimental and might change for NC12
|
||||
*/
|
||||
interface ISimpleFolder {
|
||||
/**
|
||||
* Get all the files in a folder
|
||||
*
|
||||
* @return ISimpleFile[]
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function getDirectoryListing();
|
||||
|
||||
/**
|
||||
* Check if a file with $name exists
|
||||
*
|
||||
* @param string $name
|
||||
* @return bool
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function fileExists($name);
|
||||
|
||||
/**
|
||||
* Get the file named $name from the folder
|
||||
*
|
||||
* @param string $name
|
||||
* @return ISimpleFile
|
||||
* @throws NotFoundException
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function getFile($name);
|
||||
|
||||
/**
|
||||
* Creates a new file with $name in the folder
|
||||
*
|
||||
* @param string $name
|
||||
* @return ISimpleFile
|
||||
* @throws NotPermittedException
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function newFile($name);
|
||||
|
||||
/**
|
||||
* Remove the folder and all the files in it
|
||||
*
|
||||
* @throws NotPermittedException
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function delete();
|
||||
|
||||
/**
|
||||
* Get the folder name
|
||||
*
|
||||
* @return string
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function getName();
|
||||
}
|
67
lib/public/Files/SimpleFS/ISimpleRoot.php
Normal file
67
lib/public/Files/SimpleFS/ISimpleRoot.php
Normal file
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2016 Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace OCP\Files\SimpleFS;
|
||||
|
||||
use OCP\Files\NotFoundException;
|
||||
use OCP\Files\NotPermittedException;
|
||||
|
||||
/**
|
||||
* Interface ISimpleRoot
|
||||
*
|
||||
* @package OCP\Files\SimpleFS
|
||||
* @since 9.2.0
|
||||
* @internal This interface is experimental and might change for NC12
|
||||
*/
|
||||
interface ISimpleRoot {
|
||||
/**
|
||||
* Get the folder with name $name
|
||||
*
|
||||
* @param string $name
|
||||
* @return ISimpleFolder
|
||||
* @throws NotFoundException
|
||||
* @throws \RuntimeException
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function getFolder($name);
|
||||
|
||||
/**
|
||||
* Get all the Folders
|
||||
*
|
||||
* @return ISimpleFolder[]
|
||||
* @throws NotFoundException
|
||||
* @throws \RuntimeException
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function getDirectoryListing();
|
||||
|
||||
/**
|
||||
* Create a new folder named $name
|
||||
*
|
||||
* @param string $name
|
||||
* @return ISimpleFolder
|
||||
* @throws NotPermittedException
|
||||
* @throws \RuntimeException
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function newFolder($name);
|
||||
}
|
|
@ -115,6 +115,7 @@ interface IServerContainer {
|
|||
*
|
||||
* @return \OCP\Files\Folder
|
||||
* @since 6.0.0
|
||||
* @deprecated since 9.2.0 use IAppData
|
||||
*/
|
||||
public function getAppFolder();
|
||||
|
||||
|
|
|
@ -26,8 +26,8 @@ namespace Test;
|
|||
|
||||
use OC\Avatar;
|
||||
use OC\AvatarManager;
|
||||
use OCP\Files\Folder;
|
||||
use OCP\Files\IRootFolder;
|
||||
use OCP\Files\IAppData;
|
||||
use OCP\Files\SimpleFS\ISimpleFolder;
|
||||
use OCP\IConfig;
|
||||
use OCP\IL10N;
|
||||
use OCP\ILogger;
|
||||
|
@ -40,8 +40,8 @@ use OCP\IUserManager;
|
|||
class AvatarManagerTest extends \Test\TestCase {
|
||||
/** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $userManager;
|
||||
/** @var IRootFolder|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $rootFolder;
|
||||
/** @var IAppData|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $appData;
|
||||
/** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $l10n;
|
||||
/** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
|
||||
|
@ -55,14 +55,14 @@ class AvatarManagerTest extends \Test\TestCase {
|
|||
parent::setUp();
|
||||
|
||||
$this->userManager = $this->createMock(IUserManager::class);
|
||||
$this->rootFolder = $this->createMock(IRootFolder::class);
|
||||
$this->appData = $this->createMock(IAppData::class);
|
||||
$this->l10n = $this->createMock(IL10N::class);
|
||||
$this->logger = $this->createMock(ILogger::class);
|
||||
$this->config = $this->createMock(IConfig::class);
|
||||
|
||||
$this->avatarManager = new AvatarManager(
|
||||
$this->userManager,
|
||||
$this->rootFolder,
|
||||
$this->appData,
|
||||
$this->l10n,
|
||||
$this->logger,
|
||||
$this->config
|
||||
|
@ -94,11 +94,11 @@ class AvatarManagerTest extends \Test\TestCase {
|
|||
->method('get')
|
||||
->with('valid-user')
|
||||
->willReturn($user);
|
||||
$folder = $this->createMock(Folder::class);
|
||||
$this->rootFolder
|
||||
$folder = $this->createMock(ISimpleFolder::class);
|
||||
$this->appData
|
||||
->expects($this->once())
|
||||
->method('get')
|
||||
->with('/valid-user')
|
||||
->method('getFolder')
|
||||
->with('valid-user')
|
||||
->willReturn($folder);
|
||||
|
||||
$expected = new Avatar($folder, $this->l10n, $user, $this->logger, $this->config);;
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
|
||||
namespace Test;
|
||||
|
||||
use OC\Files\SimpleFS\SimpleFolder;
|
||||
use OC\User\User;
|
||||
use OCP\Files\File;
|
||||
use OCP\Files\Folder;
|
||||
use OCP\IConfig;
|
||||
|
@ -30,11 +32,11 @@ class AvatarTest extends \Test\TestCase {
|
|||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->folder = $this->createMock(Folder::class);
|
||||
$this->folder = $this->createMock(SimpleFolder::class);
|
||||
/** @var \OCP\IL10N | \PHPUnit_Framework_MockObject_MockObject $l */
|
||||
$l = $this->createMock(IL10N::class);
|
||||
$l->method('t')->will($this->returnArgument(0));
|
||||
$this->user = $this->getMockBuilder('OC\User\User')->disableOriginalConstructor()->getMock();
|
||||
$this->user = $this->createMock(User::class);
|
||||
$this->config = $this->createMock(IConfig::class);
|
||||
|
||||
$this->avatar = new \OC\Avatar(
|
||||
|
@ -51,7 +53,7 @@ class AvatarTest extends \Test\TestCase {
|
|||
}
|
||||
|
||||
public function testGetAvatarSizeMatch() {
|
||||
$this->folder->method('nodeExists')
|
||||
$this->folder->method('fileExists')
|
||||
->will($this->returnValueMap([
|
||||
['avatar.jpg', true],
|
||||
['avatar.128.jpg', true],
|
||||
|
@ -61,13 +63,13 @@ class AvatarTest extends \Test\TestCase {
|
|||
|
||||
$file = $this->createMock(File::class);
|
||||
$file->method('getContent')->willReturn($expected->data());
|
||||
$this->folder->method('get')->with('avatar.128.jpg')->willReturn($file);
|
||||
$this->folder->method('getFile')->with('avatar.128.jpg')->willReturn($file);
|
||||
|
||||
$this->assertEquals($expected->data(), $this->avatar->get(128)->data());
|
||||
}
|
||||
|
||||
public function testGetAvatarSizeMinusOne() {
|
||||
$this->folder->method('nodeExists')
|
||||
$this->folder->method('fileExists')
|
||||
->will($this->returnValueMap([
|
||||
['avatar.jpg', true],
|
||||
]));
|
||||
|
@ -76,13 +78,13 @@ class AvatarTest extends \Test\TestCase {
|
|||
|
||||
$file = $this->createMock(File::class);
|
||||
$file->method('getContent')->willReturn($expected->data());
|
||||
$this->folder->method('get')->with('avatar.jpg')->willReturn($file);
|
||||
$this->folder->method('getFile')->with('avatar.jpg')->willReturn($file);
|
||||
|
||||
$this->assertEquals($expected->data(), $this->avatar->get(-1)->data());
|
||||
}
|
||||
|
||||
public function testGetAvatarNoSizeMatch() {
|
||||
$this->folder->method('nodeExists')
|
||||
$this->folder->method('fileExists')
|
||||
->will($this->returnValueMap([
|
||||
['avatar.png', true],
|
||||
['avatar.32.png', false],
|
||||
|
@ -95,7 +97,7 @@ class AvatarTest extends \Test\TestCase {
|
|||
$file = $this->createMock(File::class);
|
||||
$file->method('getContent')->willReturn($expected->data());
|
||||
|
||||
$this->folder->method('get')
|
||||
$this->folder->method('getFile')
|
||||
->will($this->returnCallback(
|
||||
function($path) use ($file) {
|
||||
if ($path === 'avatar.png') {
|
||||
|
@ -126,7 +128,7 @@ class AvatarTest extends \Test\TestCase {
|
|||
}
|
||||
|
||||
public function testExiststJPG() {
|
||||
$this->folder->method('nodeExists')
|
||||
$this->folder->method('fileExists')
|
||||
->will($this->returnValueMap([
|
||||
['avatar.jpg', true],
|
||||
['avatar.png', false],
|
||||
|
@ -135,7 +137,7 @@ class AvatarTest extends \Test\TestCase {
|
|||
}
|
||||
|
||||
public function testExistsPNG() {
|
||||
$this->folder->method('nodeExists')
|
||||
$this->folder->method('fileExists')
|
||||
->will($this->returnValueMap([
|
||||
['avatar.jpg', false],
|
||||
['avatar.png', true],
|
||||
|
|
121
tests/lib/Files/AppData/AppDataTest.php
Normal file
121
tests/lib/Files/AppData/AppDataTest.php
Normal file
|
@ -0,0 +1,121 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace Test\Files\AppData;
|
||||
|
||||
use OC\Files\AppData\AppData;
|
||||
use OC\SystemConfig;
|
||||
use OCP\Files\File;
|
||||
use OCP\Files\Folder;
|
||||
use OCP\Files\IAppData;
|
||||
use OCP\Files\IRootFolder;
|
||||
use OCP\Files\Node;
|
||||
use OCP\Files\SimpleFS\ISimpleFolder;
|
||||
|
||||
class AppDataTest extends \Test\TestCase {
|
||||
/** @var IRootFolder|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $rootFolder;
|
||||
|
||||
/** @var SystemConfig|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $systemConfig;
|
||||
|
||||
/** @var IAppData */
|
||||
private $appData;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->rootFolder = $this->createMock(IRootFolder::class);
|
||||
$this->systemConfig = $this->createMock(SystemConfig::class);
|
||||
$this->appData = new AppData($this->rootFolder, $this->systemConfig, 'myApp');
|
||||
|
||||
$this->systemConfig->expects($this->any())
|
||||
->method('getValue')
|
||||
->with('instanceid', null)
|
||||
->willReturn('iid');
|
||||
}
|
||||
|
||||
private function setupAppFolder() {
|
||||
$dataFolder = $this->createMock(Folder::class);
|
||||
$appFolder = $this->createMock(Folder::class);
|
||||
|
||||
$this->rootFolder->expects($this->once())
|
||||
->method('get')
|
||||
->with($this->equalTo('appdata_iid'))
|
||||
->willReturn($dataFolder);
|
||||
$dataFolder->expects($this->once())
|
||||
->method('get')
|
||||
->with($this->equalTo('myApp'))
|
||||
->willReturn($appFolder);
|
||||
|
||||
return [$dataFolder, $appFolder];
|
||||
}
|
||||
|
||||
public function testGetFolder() {
|
||||
$folders = $this->setupAppFolder();
|
||||
$appFolder = $folders[1];
|
||||
|
||||
$folder = $this->createMock(Folder::class);
|
||||
|
||||
$appFolder->expects($this->once())
|
||||
->method('get')
|
||||
->with($this->equalTo('folder'))
|
||||
->willReturn($folder);
|
||||
|
||||
$result = $this->appData->getFolder('folder');
|
||||
$this->assertInstanceOf(ISimpleFolder::class, $result);
|
||||
}
|
||||
|
||||
public function testNewFolder() {
|
||||
$folders = $this->setupAppFolder();
|
||||
$appFolder = $folders[1];
|
||||
|
||||
$folder = $this->createMock(Folder::class);
|
||||
|
||||
$appFolder->expects($this->once())
|
||||
->method('newFolder')
|
||||
->with($this->equalTo('folder'))
|
||||
->willReturn($folder);
|
||||
|
||||
$result = $this->appData->newFolder('folder');
|
||||
$this->assertInstanceOf(ISimpleFolder::class, $result);
|
||||
}
|
||||
|
||||
public function testGetDirectoryListing() {
|
||||
$folders = $this->setupAppFolder();
|
||||
$appFolder = $folders[1];
|
||||
|
||||
$file = $this->createMock(File::class);
|
||||
$folder = $this->createMock(Folder::class);
|
||||
$node = $this->createMock(Node::class);
|
||||
|
||||
$appFolder->expects($this->once())
|
||||
->method('getDirectoryListing')
|
||||
->willReturn([$file, $folder, $node]);
|
||||
|
||||
$result = $this->appData->getDirectoryListing();
|
||||
|
||||
$this->assertCount(1, $result);
|
||||
$this->assertInstanceOf(ISimpleFolder::class, $result[0]);
|
||||
}
|
||||
|
||||
}
|
55
tests/lib/Files/AppData/FactoryTest.php
Normal file
55
tests/lib/Files/AppData/FactoryTest.php
Normal file
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace Test\Files\AppData;
|
||||
|
||||
use OC\Files\AppData\Factory;
|
||||
use OC\SystemConfig;
|
||||
use OCP\Files\IRootFolder;
|
||||
|
||||
class FactoryTest extends \Test\TestCase {
|
||||
/** @var IRootFolder|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $rootFolder;
|
||||
|
||||
/** @var SystemConfig|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $systemConfig;
|
||||
|
||||
/** @var Factory */
|
||||
private $factory;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->rootFolder = $this->createMock(IRootFolder::class);
|
||||
$this->systemConfig = $this->createMock(SystemConfig::class);
|
||||
$this->factory = new Factory($this->rootFolder, $this->systemConfig);
|
||||
}
|
||||
|
||||
public function testGet() {
|
||||
$this->rootFolder->expects($this->never())
|
||||
->method($this->anything());
|
||||
$this->systemConfig->expects($this->never())
|
||||
->method($this->anything());
|
||||
|
||||
$this->factory->get('foo');
|
||||
}
|
||||
}
|
104
tests/lib/Files/SimpleFS/SimpleFileTest.php
Normal file
104
tests/lib/Files/SimpleFS/SimpleFileTest.php
Normal file
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace Test\File\SimpleFS;
|
||||
|
||||
use OC\Files\SimpleFS\SimpleFile;
|
||||
use OCP\Files\File;
|
||||
|
||||
class SimpleFileTest extends \Test\TestCase {
|
||||
/** @var File|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $file;
|
||||
|
||||
/** @var SimpleFile */
|
||||
private $simpleFile;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->file = $this->createMock(File::class);
|
||||
$this->simpleFile = new SimpleFile($this->file);
|
||||
}
|
||||
|
||||
public function testGetName() {
|
||||
$this->file->expects($this->once())
|
||||
->method('getName')
|
||||
->willReturn('myname');
|
||||
|
||||
$this->assertEquals('myname', $this->simpleFile->getName());
|
||||
}
|
||||
|
||||
public function testGetSize() {
|
||||
$this->file->expects($this->once())
|
||||
->method('getSize')
|
||||
->willReturn(42);
|
||||
|
||||
$this->assertEquals(42, $this->simpleFile->getSize());
|
||||
}
|
||||
|
||||
public function testGetETag() {
|
||||
$this->file->expects($this->once())
|
||||
->method('getETag')
|
||||
->willReturn('etag');
|
||||
|
||||
$this->assertEquals('etag', $this->simpleFile->getETag());
|
||||
}
|
||||
|
||||
public function testGetMTime() {
|
||||
$this->file->expects($this->once())
|
||||
->method('getMTime')
|
||||
->willReturn(101);
|
||||
|
||||
$this->assertEquals(101, $this->simpleFile->getMTime());
|
||||
}
|
||||
|
||||
public function testGetContent() {
|
||||
$this->file->expects($this->once())
|
||||
->method('getContent')
|
||||
->willReturn('foo');
|
||||
|
||||
$this->assertEquals('foo', $this->simpleFile->getContent());
|
||||
}
|
||||
|
||||
public function testPutContent() {
|
||||
$this->file->expects($this->once())
|
||||
->method('putContent')
|
||||
->with($this->equalTo('bar'));
|
||||
|
||||
$this->simpleFile->putContent('bar');
|
||||
}
|
||||
|
||||
public function testDelete() {
|
||||
$this->file->expects($this->once())
|
||||
->method('delete');
|
||||
|
||||
$this->simpleFile->delete();
|
||||
}
|
||||
|
||||
public function testGetMimeType() {
|
||||
$this->file->expects($this->once())
|
||||
->method('getMimeType')
|
||||
->willReturn('app/awesome');
|
||||
|
||||
$this->assertEquals('app/awesome', $this->simpleFile->getMimeType());
|
||||
}
|
||||
}
|
138
tests/lib/Files/SimpleFS/SimpleFolderTest.php
Normal file
138
tests/lib/Files/SimpleFS/SimpleFolderTest.php
Normal file
|
@ -0,0 +1,138 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace Test\File\SimpleFS;
|
||||
|
||||
use OC\Files\SimpleFS\SimpleFolder;
|
||||
use OCP\Files\File;
|
||||
use OCP\Files\Folder;
|
||||
use OCP\Files\Node;
|
||||
use OCP\Files\NotFoundException;
|
||||
use OCP\Files\SimpleFS\ISimpleFile;
|
||||
|
||||
class SimpleFolderTest extends \Test\TestCase {
|
||||
/** @var Folder|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $folder;
|
||||
|
||||
/** @var SimpleFolder */
|
||||
private $simpleFolder;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->folder = $this->createMock(Folder::class);
|
||||
$this->simpleFolder = new SimpleFolder($this->folder);
|
||||
}
|
||||
|
||||
public function testGetName() {
|
||||
$this->folder->expects($this->once())
|
||||
->method('getName')
|
||||
->willReturn('myname');
|
||||
|
||||
$this->assertEquals('myname', $this->simpleFolder->getName());
|
||||
}
|
||||
|
||||
public function testDelete() {
|
||||
$this->folder->expects($this->once())
|
||||
->method('delete');
|
||||
|
||||
$this->simpleFolder->delete();
|
||||
}
|
||||
|
||||
public function dataFileExists() {
|
||||
return [
|
||||
[true],
|
||||
[false],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataFileExists
|
||||
* @param bool $exists
|
||||
*/
|
||||
public function testFileExists($exists) {
|
||||
$this->folder->expects($this->once())
|
||||
->method('nodeExists')
|
||||
->with($this->equalTo('file'))
|
||||
->willReturn($exists);
|
||||
|
||||
$this->assertEquals($exists, $this->simpleFolder->fileExists('file'));
|
||||
}
|
||||
|
||||
public function dataGetFile() {
|
||||
return [
|
||||
[File::class, false],
|
||||
[Folder::class, true],
|
||||
[Node::class, true],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataGetFile
|
||||
* @param string $class
|
||||
* @param bool $exception
|
||||
*/
|
||||
public function testGetFile($class, $exception) {
|
||||
$node = $this->createMock($class);
|
||||
|
||||
$this->folder->expects($this->once())
|
||||
->method('get')
|
||||
->with($this->equalTo('file'))
|
||||
->willReturn($node);
|
||||
|
||||
try {
|
||||
$result = $this->simpleFolder->getFile('file');
|
||||
$this->assertFalse($exception);
|
||||
$this->assertInstanceOf(ISimpleFile::class, $result);
|
||||
} catch (NotFoundException $e) {
|
||||
$this->assertTrue($exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function testNewFile() {
|
||||
$file = $this->createMock(File::class);
|
||||
|
||||
$this->folder->expects($this->once())
|
||||
->method('newFile')
|
||||
->with($this->equalTo('file'))
|
||||
->willReturn($file);
|
||||
|
||||
$result = $this->simpleFolder->newFile('file');
|
||||
$this->assertInstanceOf(ISimpleFile::class, $result);
|
||||
}
|
||||
|
||||
public function testGetDirectoryListing() {
|
||||
$file = $this->createMock(File::class);
|
||||
$folder = $this->createMock(Folder::class);
|
||||
$node = $this->createMock(Node::class);
|
||||
|
||||
$this->folder->expects($this->once())
|
||||
->method('getDirectoryListing')
|
||||
->willReturn([$file, $folder, $node]);
|
||||
|
||||
$result = $this->simpleFolder->getDirectoryListing();
|
||||
|
||||
$this->assertCount(1, $result);
|
||||
$this->assertInstanceOf(ISimpleFile::class, $result[0]);
|
||||
}
|
||||
|
||||
}
|
|
@ -25,7 +25,7 @@
|
|||
// We only can count up. The 4. digit is only for the internal patchlevel to trigger DB upgrades
|
||||
// between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel
|
||||
// when updating major/minor version number.
|
||||
$OC_Version = array(9, 2, 0, 3);
|
||||
$OC_Version = array(9, 2, 0, 4);
|
||||
|
||||
// The human readable string
|
||||
$OC_VersionString = '11.0 alpha';
|
||||
|
|
Loading…
Reference in a new issue