diff options
author | Roeland Jago Douma <rullzer@owncloud.com> | 2015-12-16 20:26:00 +0100 |
---|---|---|
committer | Roeland Jago Douma <rullzer@owncloud.com> | 2015-12-16 20:29:02 +0100 |
commit | d796c43841f5f22e39af76e2c11d60335e985738 (patch) | |
tree | e3ea078843b5e20230f546d782ef61e67b331e3f | |
parent | 1d932e4c98d7a08d9e34e85112b77dc76ca65482 (diff) | |
download | nextcloud-server-d796c43841f5f22e39af76e2c11d60335e985738.tar.gz nextcloud-server-d796c43841f5f22e39af76e2c11d60335e985738.zip |
[Avatars] Add function to get the Node of the avatar
Since we usually just get the avatar and stream the content to the users
there is no need to first create an image in memory.
-rw-r--r-- | lib/private/avatar.php | 69 | ||||
-rw-r--r-- | lib/public/iavatar.php | 11 | ||||
-rw-r--r-- | tests/lib/avatartest.php | 15 |
3 files changed, 76 insertions, 19 deletions
diff --git a/lib/private/avatar.php b/lib/private/avatar.php index 37a813f3ff8..c87facd25da 100644 --- a/lib/private/avatar.php +++ b/lib/private/avatar.php @@ -31,6 +31,7 @@ namespace OC; use OCP\Files\Folder; use OCP\Files\File; +use OCP\Files\NotFoundException; use OCP\IL10N; use OC_Image; @@ -62,28 +63,14 @@ class Avatar implements \OCP\IAvatar { * @return boolean|\OCP\IImage containing the avatar or false if there's no image */ public function get ($size = 64) { - if ($this->folder->nodeExists('avatar.jpg')) { - $ext = 'jpg'; - } elseif ($this->folder->nodeExists('avatar.png')) { - $ext = 'png'; - } else { + try { + $file = $this->getFile($size); + } catch (NotFoundException $e) { return false; } $avatar = new OC_Image(); - if ($this->folder->nodeExists('avatar.' . $size . '.' . $ext)) { - /** @var File $node */ - $node = $this->folder->get('avatar.' . $size . '.' . $ext); - $avatar->loadFromData($node->getContent()); - } else { - /** @var File $node */ - $node = $this->folder->get('avatar.' . $ext); - $avatar->loadFromData($node->getContent()); - if ($size > 0) { - $avatar->resize($size); - } - $this->folder->newFile('avatar.' . $size . '.' . $ext)->putContent($avatar->data()); - } + $avatar->loadFromData($file->getContent()); return $avatar; } @@ -144,4 +131,50 @@ class Avatar implements \OCP\IAvatar { $this->folder->get('avatar.png')->delete(); } catch (\OCP\Files\NotFoundException $e) {} } + + /** + * Get the File of an avatar of size $size. + * + * @param int $size + * @return File + * @throws NotFoundException + */ + public function getFile($size) { + $ext = $this->getExtention(); + + $path = 'avatar.' . $size . '.' . $ext; + + try { + $file = $this->folder->get($path); + } catch (NotFoundException $e) { + if ($size <= 0) { + throw new NotFoundException; + } + + $avatar = new OC_Image(); + /** @var File $file */ + $file = $this->folder->get('avatar.' . $ext); + $avatar->loadFromData($file->getContent()); + $avatar->resize($size); + $file = $this->folder->newFile($path); + $file->putContent($avatar->data()); + } + + return $file; + } + + /** + * Get the extention of the avatar. If there is no avatar throw Exception + * + * @return string + * @throws NotFoundException + */ + private function getExtention() { + if ($this->folder->nodeExists('avatar.jpg')) { + return 'jpg'; + } elseif ($this->folder->nodeExists('avatar.png')) { + return 'png'; + } + throw new NotFoundException; + } } diff --git a/lib/public/iavatar.php b/lib/public/iavatar.php index fc29212a599..3d92d00b83d 100644 --- a/lib/public/iavatar.php +++ b/lib/public/iavatar.php @@ -24,6 +24,8 @@ */ namespace OCP; +use OCP\Files\File; +use OCP\Files\NotFoundException; /** * This class provides avatar functionality @@ -64,4 +66,13 @@ interface IAvatar { * @since 6.0.0 */ public function remove(); + + /** + * Get the file of the avatar + * @param int $size + * @return File + * @throws NotFoundException + * @since 9.0.0 + */ + public function getFile($size); } diff --git a/tests/lib/avatartest.php b/tests/lib/avatartest.php index 49e8be98c83..3d77a282a7d 100644 --- a/tests/lib/avatartest.php +++ b/tests/lib/avatartest.php @@ -60,12 +60,25 @@ class AvatarTest extends \Test\TestCase { $file = $this->getMock('\OCP\Files\File'); $file->method('getContent')->willReturn($expected->data()); - $this->folder->method('get')->with('avatar.png')->willReturn($file); + + $this->folder->method('get') + ->will($this->returnCallback( + function($path) use ($file) { + if ($path === 'avatar.png') { + return $file; + } else { + throw new \OCP\Files\NotFoundException; + } + } + )); $newFile = $this->getMock('\OCP\Files\File'); $newFile->expects($this->once()) ->method('putContent') ->with($expected2->data()); + $newFile->expects($this->once()) + ->method('getContent') + ->willReturn($expected2->data()); $this->folder->expects($this->once()) ->method('newFile') ->with('avatar.32.png') |