mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2024-12-22 21:22:40 +00:00
Prototype implementation of Fever groups and feeds
This commit is contained in:
parent
9c61f967e3
commit
acb3973149
2 changed files with 64 additions and 3 deletions
|
@ -748,7 +748,7 @@ class Database {
|
|||
$q = new Query(
|
||||
"SELECT
|
||||
arsse_subscriptions.id as id,
|
||||
arsse_subscriptions.feed,
|
||||
arsse_subscriptions.feed as feed,
|
||||
url,favicon,source,folder,pinned,err_count,err_msg,order_type,added,
|
||||
arsse_feeds.updated as updated,
|
||||
topmost.top as top_folder,
|
||||
|
|
|
@ -12,9 +12,9 @@ use JKingWeb\Arsse\User;
|
|||
use JKingWeb\Arsse\Service;
|
||||
use JKingWeb\Arsse\Context\Context;
|
||||
use JKingWeb\Arsse\Misc\ValueInfo;
|
||||
use JKingWeb\Arsse\Misc\Date;
|
||||
use JKingWeb\Arsse\AbstractException;
|
||||
use JKingWeb\Arsse\Db\ExceptionInput;
|
||||
use JKingWeb\Arsse\Feed\Exception as FeedException;
|
||||
use JKingWeb\Arsse\REST\Target;
|
||||
use JKingWeb\Arsse\REST\Exception404;
|
||||
use JKingWeb\Arsse\REST\Exception405;
|
||||
|
@ -65,7 +65,19 @@ class API extends \JKingWeb\Arsse\REST\AbstractHandler {
|
|||
return $this->formatResponse($out, $xml);
|
||||
}
|
||||
// handle each possible parameter
|
||||
# do stuff
|
||||
if (array_key_exists("feeds", $inR) || array_key_exists("groups", $inR)) {
|
||||
$groupData = (array) Arsse::$db->tagSummarize(Arsse::$user->id);
|
||||
if (array_key_exists("groups", $inR)) {
|
||||
$out['groups'] = $this->getGroups($groupData);
|
||||
}
|
||||
if (array_key_exists("feeds", $inR)) {
|
||||
$out['feeds'] = $this->getFeeds();
|
||||
}
|
||||
$out['feeds_groups'] = $this->getRelationships($groupData);
|
||||
}
|
||||
if (array_key_exists("favicons", $inR)) {
|
||||
# deal with favicons
|
||||
}
|
||||
// return the result
|
||||
return $this->formatResponse($out, $xml);
|
||||
break;
|
||||
|
@ -97,4 +109,53 @@ class API extends \JKingWeb\Arsse\REST\AbstractHandler {
|
|||
Arsse::$user->id = $s['user'];
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function getFeeds(): array {
|
||||
$out = [];
|
||||
foreach (arsse::$db->subscriptionList(Arsse::$user->id) as $sub) {
|
||||
$out[] = [
|
||||
'id' => (int) $sub['id'],
|
||||
'favicon_id' => (int) ($sub['favicon'] ? $sub['feed'] : 0),
|
||||
'title' => (string) $sub['title'],
|
||||
'url' => $sub['url'],
|
||||
'site_url' => $sub['source'],
|
||||
'is_spark' => 0,
|
||||
'lat_updated_on_time' => Date::transform($sub['updated'], "unix"),
|
||||
];
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
protected function getGroups(array $data): array {
|
||||
$out = [];
|
||||
$seen = [];
|
||||
foreach ($data as $member) {
|
||||
if (!($seen[$member['id']] ?? false)) {
|
||||
$seen[$member['id']] = true;
|
||||
$out[] = [
|
||||
'id' => (int) $member['id'],
|
||||
'title' => $member['name'],
|
||||
];
|
||||
}
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
protected function getRelationships(array $data): array {
|
||||
$out = [];
|
||||
$sets = [];
|
||||
foreach ($data as $member) {
|
||||
if (!isset($sets[$member['id']])) {
|
||||
$sets[$member['id']] = [];
|
||||
}
|
||||
$sets[$member['id']][] = (int) $member['subscription'];
|
||||
}
|
||||
foreach ($sets as $id => $subs) {
|
||||
$out[] = [
|
||||
'group_id' => (int) $id,
|
||||
'feed_ids' => implode(",", $subs),
|
||||
];
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue