*/
public function setBackground(string $type = 'default', string $value = ''): JSONResponse {
$currentVersion = (int)$this->config->getUserValue($this->userId, Application::APP_ID, 'backgroundVersion', '0');
+
try {
switch ($type) {
case 'shipped':
} catch (\Throwable $e) {
return new JSONResponse(['error' => $e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR);
}
+
$currentVersion++;
$this->config->setUserValue($this->userId, Application::APP_ID, 'backgroundVersion', (string)$currentVersion);
- // FIXME replace with user-specific cachebuster increase https://github.com/nextcloud/server/issues/34472
- $this->themingDefaults->increaseCacheBuster();
+
return new JSONResponse([
'type' => $type,
'value' => $value,
- 'version' => $this->config->getUserValue($this->userId, Application::APP_ID, 'backgroundVersion', $currentVersion)
+ 'version' => $currentVersion,
]);
}
}
IURLGenerator $urlGenerator,
ICacheFactory $cacheFactory,
ILogger $logger,
- ITempManager $tempManager
- ) {
+ ITempManager $tempManager) {
$this->config = $config;
- $this->appData = $appData;
$this->urlGenerator = $urlGenerator;
$this->cacheFactory = $cacheFactory;
$this->logger = $logger;
$this->tempManager = $tempManager;
+ $this->appData = $appData;
}
public function getImageUrl(string $key, bool $useSvg = true): string {
*/
public function getImage(string $key, bool $useSvg = true): ISimpleFile {
$logo = $this->config->getAppValue('theming', $key . 'Mime', '');
- $folder = $this->appData->getFolder('images');
+ $folder = $this->getRootFolder()->getFolder('images');
if ($logo === '' || !$folder->fileExists($key)) {
throw new NotFoundException();
}
public function getCacheFolder(): ISimpleFolder {
$cacheBusterValue = $this->config->getAppValue('theming', 'cachebuster', '0');
try {
- $folder = $this->appData->getFolder($cacheBusterValue);
+ $folder = $this->getRootFolder()->getFolder($cacheBusterValue);
} catch (NotFoundException $e) {
- $folder = $this->appData->newFolder($cacheBusterValue);
+ $folder = $this->getRootFolder()->newFolder($cacheBusterValue);
$this->cleanup();
}
return $folder;
public function delete(string $key): void {
/* ignore exceptions, since we don't want to fail hard if something goes wrong during cleanup */
try {
- $file = $this->appData->getFolder('images')->getFile($key);
+ $file = $this->getRootFolder()->getFolder('images')->getFile($key);
$file->delete();
} catch (NotFoundException $e) {
} catch (NotPermittedException $e) {
}
try {
- $file = $this->appData->getFolder('images')->getFile($key . '.png');
+ $file = $this->getRootFolder()->getFolder('images')->getFile($key . '.png');
$file->delete();
} catch (NotFoundException $e) {
} catch (NotPermittedException $e) {
$this->delete($key);
try {
- $folder = $this->appData->getFolder('images');
+ $folder = $this->getRootFolder()->getFolder('images');
} catch (NotFoundException $e) {
- $folder = $this->appData->newFolder('images');
+ $folder = $this->getRootFolder()->newFolder('images');
}
$target = $folder->newFile($key);
*/
public function cleanup() {
$currentFolder = $this->getCacheFolder();
- $folders = $this->appData->getDirectoryListing();
+ $folders = $this->getRootFolder()->getDirectoryListing();
foreach ($folders as $folder) {
if ($folder->getName() !== 'images' && $folder->getName() !== $currentFolder->getName()) {
$folder->delete();
$cache->set('shouldReplaceIcons', $value);
return $value;
}
+
+ private function getRootFolder(): ISimpleFolder {
+ try {
+ return $this->appData->getFolder('global');
+ } catch (NotFoundException $e) {
+ return $this->appData->newFolder('global');
+ }
+ }
}
$this->initialState->provideInitialState(
'backgroundVersion',
- $this->config->getUserValue($userId, Application::APP_ID, 'backgroundVersion', 0),
+ (int)$this->config->getUserValue($userId, Application::APP_ID, 'backgroundVersion', '0'),
);
$this->initialState->provideInitialState(
private string $userId;
private IAppDataFactory $appDataFactory;
- public function __construct(
- IRootFolder $rootFolder,
- IAppDataFactory $appDataFactory,
- IConfig $config,
- ?string $userId
- ) {
+ public function __construct(IRootFolder $rootFolder,
+ IAppData $appData,
+ IConfig $config,
+ ?string $userId,
+ IAppDataFactory $appDataFactory) {
if ($userId === null) {
return;
}
+
$this->rootFolder = $rootFolder;
- $this->appData = $appDataFactory->get(Application::APP_ID);
$this->config = $config;
$this->userId = $userId;
+ $this->appData = $appData;
$this->appDataFactory = $appDataFactory;
}
public function setFileBackground($path): void {
$this->config->setUserValue($this->userId, Application::APP_ID, 'background', 'custom');
$userFolder = $this->rootFolder->getUserFolder($this->userId);
+
/** @var File $file */
$file = $userFolder->get($path);
$image = new \OCP\Image();
+
if ($image->loadFromFileHandle($file->fopen('r')) === false) {
throw new InvalidArgumentException('Invalid image file');
}
+
$this->getAppDataFolder()->newFile('background.jpg', $file->fopen('r'));
}
}
/**
+ * Storing the data in appdata/theming/users/USERID
+ *
* @return ISimpleFolder
* @throws NotPermittedException
*/
private function getAppDataFolder(): ISimpleFolder {
try {
- return $this->appData->getFolder($this->userId);
+ $rootFolder = $this->appData->getFolder('users');
+ } catch (NotFoundException $e) {
+ $rootFolder = $this->appData->newFolder('users');
+ }
+ try {
+ return $rootFolder->getFolder($this->userId);
} catch (NotFoundException $e) {
- return $this->appData->newFolder($this->userId);
+ return $rootFolder->newFolder($this->userId);
}
}
}
this.updateGlobalStyles()
this.$emit('update:background')
},
+
updateGlobalStyles() {
// Override primary-invert-if-bright and color-primary-text if background is set
const isBackgroundBright = shippedBackgroundList[this.background]?.theming === 'dark'
return new SimpleFile($file);
}
}
+
+ public function getFolder(string $name): ISimpleFolder {
+ $folder = $this->folder->get($name);
+
+ if (!($folder instanceof Folder)) {
+ throw new NotFoundException();
+ }
+
+ return new SimpleFolder($folder);
+ }
+
+ public function newFolder(string $path): ISimpleFolder {
+ $folder = $this->folder->newFolder($path);
+ return new SimpleFolder($folder);
+ }
}