summaryrefslogtreecommitdiffstats
path: root/lib/Service
diff options
context:
space:
mode:
authorMaxence Lange <maxence@artificial-owl.com>2019-01-06 12:13:05 -0100
committerMaxence Lange <maxence@artificial-owl.com>2019-02-05 15:10:24 -0100
commit833d19617b8fc15baf651b280b3b3be71d935ba2 (patch)
treee8529509cb63d0d9e4df9a27031eb396e79bedea /lib/Service
parent3ef7737d14dad684825a040c2e42a1295bb33058 (diff)
new Search endpoint
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
Diffstat (limited to 'lib/Service')
-rw-r--r--lib/Service/HashtagService.php21
-rw-r--r--lib/Service/SearchService.php190
2 files changed, 211 insertions, 0 deletions
diff --git a/lib/Service/HashtagService.php b/lib/Service/HashtagService.php
index 14dcd4b4..59bb551a 100644
--- a/lib/Service/HashtagService.php
+++ b/lib/Service/HashtagService.php
@@ -124,6 +124,27 @@ class HashtagService {
/**
+ * @param string $hashtag
+ *
+ * @return array
+ * @throws HashtagDoesNotExistException
+ */
+ public function getHashtag(string $hashtag): array {
+ return $this->hashtagsRequest->getHashtag($hashtag);
+ }
+
+
+ /**
+ * @param string $hashtag
+ *
+ * @return array
+ */
+ public function searchHashtags(string $hashtag): array {
+ return $this->hashtagsRequest->searchHashtags($hashtag);
+ }
+
+
+ /**
* @param int $timestamp
*
* @return array
diff --git a/lib/Service/SearchService.php b/lib/Service/SearchService.php
new file mode 100644
index 00000000..e30d9b81
--- /dev/null
+++ b/lib/Service/SearchService.php
@@ -0,0 +1,190 @@
+<?php
+declare(strict_types=1);
+
+
+/**
+ * Nextcloud - Social Support
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ * @copyright 2018, Maxence Lange <maxence@artificial-owl.com>
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OCA\Social\Service;
+
+
+use daita\MySmallPhpTools\Traits\TArrayTools;
+use Exception;
+
+
+class SearchService {
+
+
+ use TArrayTools;
+
+
+ const SEARCH_ACCOUNTS = 1;
+ const SEARCH_HASHTAGS = 2;
+ const SEARCH_CONTENT = 4;
+ const SEARCH_ALL = 7;
+
+
+ /** @var CacheActorService */
+ private $cacheActorService;
+
+ /** @var HashtagService */
+ private $hashtagService;
+
+ /** @var ConfigService */
+ private $configService;
+
+ /** @var MiscService */
+ private $miscService;
+
+
+ /**
+ * ImportService constructor.
+ *
+ * @param CacheActorService $cacheActorService
+ * @param HashtagService $hashtagService
+ * @param ConfigService $configService
+ * @param MiscService $miscService
+ */
+ public function __construct(
+ CacheActorService $cacheActorService, HashtagService $hashtagService,
+ ConfigService $configService, MiscService $miscService
+ ) {
+ $this->cacheActorService = $cacheActorService;
+ $this->hashtagService = $hashtagService;
+ $this->configService = $configService;
+ $this->miscService = $miscService;
+ }
+
+
+ /**
+ * @param string $search
+ *
+ * @return array
+ */
+ public function searchAccounts(string $search): array {
+ $result = [
+ 'exact' => null,
+ 'result' => []
+ ];
+
+ $type = $this->getTypeFromSearch($search);
+ if ($search === '' || !$type & self::SEARCH_ACCOUNTS) {
+ return $result;
+ }
+
+ if (substr($search, 0, 1) === '@') {
+ $search = substr($search, 1);
+ }
+
+ try {
+ $exact = $this->cacheActorService->getFromAccount($search);
+ $exact->setCompleteDetails(true);
+ $result['exact'] = $exact;
+ } catch (Exception $e) {
+ }
+
+ try {
+ $accounts = $this->cacheActorService->searchCachedAccounts($search);
+ $result['result'] = $accounts;
+ } catch (Exception $e) {
+ }
+
+ return $result;
+ }
+
+
+ /**
+ * @param string $search
+ *
+ * @return array
+ */
+ public function searchHashtags(string $search): array {
+ $result = [
+ 'exact' => null,
+ 'result' => []
+ ];
+
+ $type = $this->getTypeFromSearch($search);
+ if ($search === '' || !$type & self::SEARCH_HASHTAGS) {
+ return $result;
+ }
+
+ try {
+ $exact = $this->hashtagService->getHashtag($search);
+ $result['exact'] = $exact;
+ } catch (Exception $e) {
+ }
+
+ try {
+ $hashtags = $this->hashtagService->searchHashtags($search);
+ $result['result'] = $hashtags;
+ } catch (Exception $e) {
+ }
+
+ return $result;
+ }
+
+
+ /**
+ * @param string $search
+ *
+ * @return array
+ */
+ public function searchStreamContent(string $search): array {
+ $result = [];
+
+ $type = $this->getTypeFromSearch($search);
+ if ($search === '' || !$type & self::SEARCH_CONTENT) {
+ return $result;
+ }
+
+ return $result;
+ }
+
+
+ /**
+ * @param string $search
+ *
+ * @return int
+ */
+ private function getTypeFromSearch(string $search): int {
+ $char = substr($search, 0, 1);
+ switch ($char) {
+ case '@':
+ return self::SEARCH_ACCOUNTS;
+ break;
+
+ case '#':
+ return self::SEARCH_HASHTAGS;
+ break;
+
+ default:
+ return self::SEARCH_ALL;
+ }
+ }
+
+}
+