OC.L10N.register( "dav", { "Calendar" : "Календарь", "Todos" : "Задачи", "Personal" : "Личное", "{actor} created calendar {calendar}" : "{actor} создал(а) календарь «{calendar}»", "You created calendar {calendar}" : "Вы создали календарь «{calendar}»", "{actor} deleted calendar {calendar}" : "{actor} удалил(а) календарь «{calendar}»", "You deleted calendar {calendar}" : "Вы удалили календарь «{calendar}»", "{actor} updated calendar {calendar}" : "{actor} обновил(а) календарь «{calendar}»", "You updated calendar {calendar}" : "Вы обновили календарь «{calendar}»", "You shared calendar {calendar} as public link" : "Вы предоставили общий доступ к календарю «{calendar}» созданием общедоступной ссылки", "You removed public link for calendar {calendar}" : "Вы удалили общедоступную ссылку на календарь «{calendar}»", "{actor} shared calendar {calendar} with you" : "{actor} предоставил(а) вам общий доступ к календарю «{calendar}»", "You shared calendar {calendar} with {user}" : "Вы предоставили пользователю {user} общий доступ к календарю «{calendar}»", "{actor} shared calendar {calendar} with {user}" : "{actor} предоставил(а) пользователю {user} общий доступ к календарю «{calendar}»", "{actor} unshared calendar {calendar} from you" : "{actor} закрыл(а) вам доступ к календарю «{calendar}»", "You unshared calendar {calendar} from {user}" : "Вы закрыли пользователю {user} доступ к календарю «{calendar}»", "{actor} unshared calendar {calendar} from {user}" : "{actor} закрыл(а) пользователю {user} доступ к календарю «{calendar}»", "{actor} unshared calendar {calendar} from themselves" : "{actor} закрыл(а) себе доступ к календарю «{calendar}»", "You shared calendar {calendar} with group {group}" : "Вы предоставили группе {group} общий доступ к календарю «{calendar}»", "{actor} shared calendar {calendar} with group {group}" : "{actor} предоставил(а) группе {group} общий доступ к календарю «{calendar}»", "You unshared calendar {calendar} from group {group}" : "Вы закрыли группе {group} общий доступ к календарю «{calendar}»", "{actor} unshared calendar {calendar} from group {group}" : "{actor} закрыл(а) группе {group} общий доступ к календарю «{calendar}»", "{actor} created event {event} in calendar {calendar}" : "{actor} создал(а) событие «{event}» в календаре «{calendar}»", "You created event {event} in calendar {calendar}" : "Вы создали событие «{event}» в календаре «{calendar}»", "{actor} deleted event {event} from calendar {calendar}" : "{actor} удалил(а) событие «{event}» из календаря «{calendar}»", "You deleted event {event} from calendar {calendar}" : "Вы удалили событие «{event}» из календаря «{calendar}»", "{actor} updated event {event} in calendar {calendar}" : "{actor} обновил(а) событие «{event}» в календаре «{calendar}»", "You updated event {event} in calendar {calendar}" : "Вы обновили событие «{event}» в календаре «{calendar}»", "Busy" : "Занято", "{actor} created todo {todo} in list {calendar}" : "{actor} создал(а) задачу «{todo}» в списке «{calendar}»", "You created todo {todo} in list {calendar}" : "Вы создали задачу «{todo}» в списке «{calendar}»", "{actor} deleted todo {todo} from list {calendar}" : "{actor} удалил(а) задачу «{todo}» из списка «{calendar}»", "You deleted todo {todo} from list {calendar}" : "Вы удалили задачу «{todo}» из списка «{calendar}»", "{actor} updated todo {todo} in list {calendar}" : "{actor} обновил(а) задачу «{todo}» из списка «{calendar}»", "You updated todo {todo} in list {calendar}" : "Вы обновили задачу «{todo}» из списка «{calendar}»", "{actor} solved todo {todo} in list {calendar}" : "{actor} завершил(а) задачу «{todo}» из списка «{calendar}»", "You solved todo {todo} in list {calendar}" : "Вы завершили задачу «{todo}» из списка «{calendar}»", "{actor} reopened todo {todo} in list {calendar}" : "{actor} повторно(а) открыл задачу «{todo}» из списка «{calendar}»", "You reopened todo {todo} in list {calendar}" : "Вы повторно открыли задачу «{todo}» из списка «{calendar}»", "A calendar was modified" : "Календарь был изменен", "A calendar event was modified" : "Событие календаря была изменено", "A calendar todo was modified" : "Задача календаря была изменена", "Death of %s" : "Смерть %s", "Contact birthdays" : "Дни рождения контакта", "Calendar:" : "Календарь:", "Date:" : "Дата:", "Where:" : "Где:", "Description:" : "Описание:", "Untitled event" : "Событие без названия", "_%n year_::_%n years_" : ["%n год","%n года","%n лет","%n лет"], "_%n month_::_%n months_" : ["%n месяц","%n месяца","%n месяцев","%n месяцев"], "_%n day_::_%n days_" : ["%n день","%n дня","%n дней","%n дней"], "_%n hour_::_%n hours_" : ["%n час","%n часа","%n часов","%n часов"], "_%n minute_::_%n minutes_" : ["%n минута","%n минуты","%n минут","%n минут"], "%s (in %s)" : "%s (в %s)", "%s (%s ago)" : "%s (%s назад)", "Calendar: %s" : "Календарь: %s", "Date: %s" : "Дата: %s", "Description: %s" : "Описание: %s", "Where: %s" : "Где: %s", "%1$s via %2$s" : "%1$sчерез %2$s", "Invitation canceled" : "Приглашение отменено", "Hello %s," : "Привет, %s!", "The meeting »%1$s« with %2$s was canceled." : "Встреча «%1$s» с %2$s отменена.", "Invitation updated" : "Приглашение обновлено", "The meeting »%1$s« with %2$s was updated." : "Встреча «%1$s» с %2$s обновлена.", "%1$s invited you to »%2$s«" : "%1$sприглашает вас в »%2$s«", "When:" : "Когда:", "Link:" : "Ссылка:", "Accept" : "Принять", "Decline" : "Отклонить", "More options …" : "Дополнительные параметры…", "More options at %s" : "Дополнительные параметры на %s", "Contacts" : "Контакты", "Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Ваш %s должен быть настроен на использование протокола HTTPS, чтобы можно было использовать CalDAV и CardDAV на iOS/macOS.", "Configures a CalDAV account" : "Настройка аккаунта CalDAV", "Configures a CardDAV account" : "Настройка аккаунта CardDAV", "WebDAV" : "WebDAV", "WebDAV endpoint" : "точка подключения WebDAV", "Technical details" : "Технические подробности", "Remote Address: %s" : "Удаленный адрес: %s", "Request ID: %s" : "ID запроса: %s", "There was an error updating your attendance status." : "Ошибка обновления статуса участия.", "Please contact the organizer directly." : "Обратитесь к организатору напрямую.", "Are you accepting the invitation?" : "Принять приглашение?", "Tentative" : "Под вопросом", "Save" : "Сохранить", "Your attendance was updated successfully." : "Статус участия обновлён.", "Calendar server" : "Сервер календаря", "Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Также установите {calendarappstoreopen}приложение Calendar{linkclose}, или {calendardocopen}подключите ваш ПК и мобильное устройство для синхронизации ↗{linkclose}.", "Send invitations to attendees" : "Отправить приглашения", "Please make sure to properly set up {emailopen}the email server{linkclose}." : "Проверьте правильность настройки {emailopen}почтового сервера{linkclose}.", "Automatically generate a birthday calendar" : "Создавать календарь дней рождения автоматически", "Birthday calendars will be generated by a background job." : "Календари дней рождения будут создаваться фоновым процессом.", "Hence they will not be available immediately after enabling but will show up after some time." : "И поэтому они станут доступны не моментально, а через некоторое время.", "Send notifications for events" : "Отправлять уведомления о событиях", "Notifications will be send through background jobs, so these need to happen often enough." : "Уведомления будут отправляться через фоновые задания, поэтому они должны выполняться достаточно часто.", "Enable notifications for events via push" : "Включить уведомления о событиях с помощью push", "Please make sure to properly set up the email settings above." : "Проверьте правильность заданных выше параметров электронной почты." }, "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); Nextcloud server, a safe home for all your data: https://github.com/nextcloud/serverwww-data
summaryrefslogtreecommitdiffstats
path: root/lib/private/Preview/BackgroundCleanupJob.php
blob: 25bf354e28b9e79e86393913046225fabfbe9c54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
declare(strict_types=1);
/**
 * @copyright Copyright (c) 2018, Roeland Jago Douma <roeland@famdouma.nl>
 *
 * @author Roeland Jago Douma <roeland@famdouma.nl>
 *
 * @license AGPL-3.0
 *
 * This code is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License, version 3,
 * as published by the Free Software Foundation.
 *
 * 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, version 3,
 * along with this program.  If not, see <http://www.gnu.org/licenses/>
 *
 */

namespace OC\Preview;

use OC\BackgroundJob\TimedJob;
use OC\Files\AppData\Factory;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
use OCP\IDBConnection;

class BackgroundCleanupJob extends TimedJob {

	/** @var IDBConnection */
	private $connection;

	/** @var Factory */
	private $appDataFactory;

	/** @var bool */
	private $isCLI;

	public function __construct(IDBConnection $connection,
								Factory $appDataFactory,
								bool $isCLI) {
		// Run at most once an hour
		$this->setInterval(3600);

		$this->connection = $connection;
		$this->appDataFactory = $appDataFactory;
		$this->isCLI = $isCLI;
	}

	public function run($argument) {
		$previews = $this->appDataFactory->get('preview');

		$previewFodlerId = $previews->getId();

		$qb = $this->connection->getQueryBuilder();
		$qb->select('a.name')
			->from('filecache', 'a')
			->leftJoin('a', 'filecache', 'b', $qb->expr()->eq(
				$qb->expr()->castColumn('a.name', IQueryBuilder::PARAM_INT), 'b.fileid'
			))
			->where(
				$qb->expr()->isNull('b.fileid')
			)->andWhere(
				$qb->expr()->eq('a.parent', $qb->createNamedParameter($previewFodlerId))
			);

		if (!$this->isCLI) {
			$qb->setMaxResults(10);
		}

		$cursor = $qb->execute();

		while ($row = $cursor->fetch()) {
			try {
				$preview = $previews->getFolder($row['name']);
				$preview->delete();
			} catch (NotFoundException $e) {
				// continue
			} catch (NotPermittedException $e) {
				// continue
			}
		}

		$cursor->closeCursor();
	}
}