Skip to content

Commit d56a3d4

Browse files
committed
feat(filters): Add a focused filter
This filter shows all activity related to files from your home. More should be added later. Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
1 parent 1e083ed commit d56a3d4

3 files changed

Lines changed: 85 additions & 1 deletion

File tree

appinfo/info.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
<activity>
6262
<filters>
6363
<filter>OCA\Activity\Filter\AllFilter</filter>
64+
<filter>OCA\Activity\Filter\FocusedFilter</filter>
6465
<filter>OCA\Activity\Filter\SelfFilter</filter>
6566
<filter>OCA\Activity\Filter\ByFilter</filter>
6667
</filters>

lib/Data.php

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ public function get(GroupHelper $groupHelper, UserSettings $userSettings, string
292292

293293
$query = $this->connection->getQueryBuilder();
294294
$query->select('*')
295-
->from('activity');
295+
->from('activity', 'a');
296296

297297
$this->applyStreamConditions($query, $userSettings, $user, $filter, $activeFilter, $objectType, $objectId, $search);
298298

@@ -362,6 +362,30 @@ private function applyStreamConditions(
362362
} elseif ($filter === 'filter') {
363363
$query->andWhere($query->expr()->eq('object_type', $query->createNamedParameter($objectType)));
364364
$query->andWhere($query->expr()->eq('object_id', $query->createNamedParameter($objectId)));
365+
} elseif ($filter === 'focused') {
366+
// Only activity related to files owned by the user
367+
$query->leftJoin('a', 'filecache', 'f',
368+
$query->expr()->andX(
369+
$query->expr()->eq('a.object_type', $query->createNamedParameter('files')),
370+
$query->expr()->eq('a.object_id', 'f.fileid'),
371+
));
372+
$query->leftJoin('f', 'mounts', 'm',
373+
$query->expr()->andX(
374+
$query->expr()->eq('a.object_type', $query->createNamedParameter('files')),
375+
$query->expr()->eq('f.storage', 'm.storage_id'),
376+
));
377+
// Filter out our own activity
378+
$query->andWhere($query->expr()->neq('user', $query->createNamedParameter($user)));
379+
$query->andWhere(
380+
$query->expr()->orX(
381+
// Affected object is one of our files
382+
$query->expr()->eq('m.mount_point', $query->createNamedParameter('/' . $user . '/')),
383+
// There is no affected object, so the activity affects our user directly
384+
$query->expr()->eq('object_type', $query->createNamedParameter('')),
385+
// Show all sharing related events
386+
$query->expr()->eq('app', $query->createNamedParameter('files_sharing')),
387+
)
388+
);
365389
}
366390

367391
if ($activeFilter instanceof IFilter) {

lib/Filter/FocusedFilter.php

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
7+
* SPDX-License-Identifier: AGPL-3.0-or-later
8+
*/
9+
10+
namespace OCA\Activity\Filter;
11+
12+
use OCP\Activity\IFilter;
13+
use OCP\IL10N;
14+
use OCP\IURLGenerator;
15+
16+
class FocusedFilter implements IFilter {
17+
public function __construct(
18+
protected IL10N $l,
19+
protected IURLGenerator $url,
20+
) {
21+
}
22+
23+
#[\Override]
24+
public function getIdentifier(): string {
25+
return 'focused';
26+
}
27+
28+
#[\Override]
29+
public function getName(): string {
30+
return $this->l->t('Focused');
31+
}
32+
33+
#[\Override]
34+
public function getPriority(): int {
35+
return 1;
36+
}
37+
38+
#[\Override]
39+
public function getIcon(): string {
40+
return $this->url->getAbsoluteURL($this->url->imagePath('activity', 'activity-dark.svg'));
41+
}
42+
43+
/**
44+
* @param string[] $types
45+
* @return string[] An array of allowed apps from which activities should be displayed
46+
*/
47+
#[\Override]
48+
public function filterTypes(array $types): array {
49+
return $types;
50+
}
51+
52+
/**
53+
* @return string[] An array of allowed apps from which activities should be displayed
54+
*/
55+
#[\Override]
56+
public function allowedApps(): array {
57+
return [];
58+
}
59+
}

0 commit comments

Comments
 (0)