Skip to content
Snippets Groups Projects
Commit d796c438 authored by Roeland Jago Douma's avatar Roeland Jago Douma
Browse files

[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.
parent 1d932e4c
No related branches found
No related tags found
No related merge requests found
...@@ -31,6 +31,7 @@ namespace OC; ...@@ -31,6 +31,7 @@ namespace OC;
use OCP\Files\Folder; use OCP\Files\Folder;
use OCP\Files\File; use OCP\Files\File;
use OCP\Files\NotFoundException;
use OCP\IL10N; use OCP\IL10N;
use OC_Image; use OC_Image;
...@@ -62,28 +63,14 @@ class Avatar implements \OCP\IAvatar { ...@@ -62,28 +63,14 @@ class Avatar implements \OCP\IAvatar {
* @return boolean|\OCP\IImage containing the avatar or false if there's no image * @return boolean|\OCP\IImage containing the avatar or false if there's no image
*/ */
public function get ($size = 64) { public function get ($size = 64) {
if ($this->folder->nodeExists('avatar.jpg')) { try {
$ext = 'jpg'; $file = $this->getFile($size);
} elseif ($this->folder->nodeExists('avatar.png')) { } catch (NotFoundException $e) {
$ext = 'png';
} else {
return false; return false;
} }
$avatar = new OC_Image(); $avatar = new OC_Image();
if ($this->folder->nodeExists('avatar.' . $size . '.' . $ext)) { $avatar->loadFromData($file->getContent());
/** @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());
}
return $avatar; return $avatar;
} }
...@@ -144,4 +131,50 @@ class Avatar implements \OCP\IAvatar { ...@@ -144,4 +131,50 @@ class Avatar implements \OCP\IAvatar {
$this->folder->get('avatar.png')->delete(); $this->folder->get('avatar.png')->delete();
} catch (\OCP\Files\NotFoundException $e) {} } 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;
}
} }
...@@ -24,6 +24,8 @@ ...@@ -24,6 +24,8 @@
*/ */
namespace OCP; namespace OCP;
use OCP\Files\File;
use OCP\Files\NotFoundException;
/** /**
* This class provides avatar functionality * This class provides avatar functionality
...@@ -64,4 +66,13 @@ interface IAvatar { ...@@ -64,4 +66,13 @@ interface IAvatar {
* @since 6.0.0 * @since 6.0.0
*/ */
public function remove(); public function remove();
/**
* Get the file of the avatar
* @param int $size
* @return File
* @throws NotFoundException
* @since 9.0.0
*/
public function getFile($size);
} }
...@@ -60,12 +60,25 @@ class AvatarTest extends \Test\TestCase { ...@@ -60,12 +60,25 @@ class AvatarTest extends \Test\TestCase {
$file = $this->getMock('\OCP\Files\File'); $file = $this->getMock('\OCP\Files\File');
$file->method('getContent')->willReturn($expected->data()); $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 = $this->getMock('\OCP\Files\File');
$newFile->expects($this->once()) $newFile->expects($this->once())
->method('putContent') ->method('putContent')
->with($expected2->data()); ->with($expected2->data());
$newFile->expects($this->once())
->method('getContent')
->willReturn($expected2->data());
$this->folder->expects($this->once()) $this->folder->expects($this->once())
->method('newFile') ->method('newFile')
->with('avatar.32.png') ->with('avatar.32.png')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment