Added API calls, removed fields
This commit is contained in:
parent
fbbe9a3c1f
commit
6ea3d4aa61
9 changed files with 207 additions and 20 deletions
|
@ -523,17 +523,14 @@ CREATE TABLE IF NOT EXISTS `workerqueue` (
|
||||||
CREATE TABLE IF NOT EXISTS `delayed-post` (
|
CREATE TABLE IF NOT EXISTS `delayed-post` (
|
||||||
`id` int unsigned NOT NULL auto_increment,
|
`id` int unsigned NOT NULL auto_increment,
|
||||||
`uri` varchar(255) COMMENT 'URI of the post that will be distributed later',
|
`uri` varchar(255) COMMENT 'URI of the post that will be distributed later',
|
||||||
`title` varchar(255) COMMENT 'post title',
|
|
||||||
`body` mediumtext COMMENT 'post body content',
|
|
||||||
`private` tinyint unsigned COMMENT '0=public, 1=private, 2=unlisted',
|
|
||||||
`wid` int unsigned COMMENT 'Workerqueue id',
|
|
||||||
`uid` mediumint unsigned COMMENT 'Owner User id',
|
`uid` mediumint unsigned COMMENT 'Owner User id',
|
||||||
`delayed` datetime COMMENT 'delay time',
|
`delayed` datetime COMMENT 'delay time',
|
||||||
|
`wid` int unsigned COMMENT 'Workerqueue id',
|
||||||
PRIMARY KEY(`id`),
|
PRIMARY KEY(`id`),
|
||||||
UNIQUE INDEX `uid_uri` (`uid`,`uri`(190)),
|
UNIQUE INDEX `uid_uri` (`uid`,`uri`(190)),
|
||||||
INDEX `wid` (`wid`),
|
INDEX `wid` (`wid`),
|
||||||
FOREIGN KEY (`wid`) REFERENCES `workerqueue` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
|
FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE,
|
||||||
FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE
|
FOREIGN KEY (`wid`) REFERENCES `workerqueue` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
|
||||||
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Posts that are about to be distributed at a later time';
|
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Posts that are about to be distributed at a later time';
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
|
@ -10,12 +10,9 @@ Fields
|
||||||
| ------- | ---------------------------------------------- | ------------------ | ---- | --- | ------- | -------------- |
|
| ------- | ---------------------------------------------- | ------------------ | ---- | --- | ------- | -------------- |
|
||||||
| id | | int unsigned | NO | PRI | NULL | auto_increment |
|
| id | | int unsigned | NO | PRI | NULL | auto_increment |
|
||||||
| uri | URI of the post that will be distributed later | varchar(255) | YES | | NULL | |
|
| uri | URI of the post that will be distributed later | varchar(255) | YES | | NULL | |
|
||||||
| title | post title | varchar(255) | YES | | NULL | |
|
|
||||||
| body | post body content | mediumtext | YES | | NULL | |
|
|
||||||
| private | 0=public, 1=private, 2=unlisted | tinyint unsigned | YES | | NULL | |
|
|
||||||
| wid | Workerqueue id | int unsigned | YES | | NULL | |
|
|
||||||
| uid | Owner User id | mediumint unsigned | YES | | NULL | |
|
| uid | Owner User id | mediumint unsigned | YES | | NULL | |
|
||||||
| delayed | delay time | datetime | YES | | NULL | |
|
| delayed | delay time | datetime | YES | | NULL | |
|
||||||
|
| wid | Workerqueue id | int unsigned | YES | | NULL | |
|
||||||
|
|
||||||
Indexes
|
Indexes
|
||||||
------------
|
------------
|
||||||
|
@ -31,7 +28,7 @@ Foreign Keys
|
||||||
|
|
||||||
| Field | Target Table | Target Field |
|
| Field | Target Table | Target Field |
|
||||||
|-------|--------------|--------------|
|
|-------|--------------|--------------|
|
||||||
| wid | [workerqueue](help/database/db_workerqueue) | id |
|
|
||||||
| uid | [user](help/database/db_user) | uid |
|
| uid | [user](help/database/db_user) | uid |
|
||||||
|
| wid | [workerqueue](help/database/db_workerqueue) | id |
|
||||||
|
|
||||||
Return to [database documentation](help/database)
|
Return to [database documentation](help/database)
|
||||||
|
|
|
@ -311,6 +311,14 @@ abstract class DI
|
||||||
return self::$dice->create(Factory\Api\Mastodon\Status::class);
|
return self::$dice->create(Factory\Api\Mastodon\Status::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Factory\Api\Mastodon\ScheduledStatus
|
||||||
|
*/
|
||||||
|
public static function mstdnScheduledStatus()
|
||||||
|
{
|
||||||
|
return self::$dice->create(Factory\Api\Mastodon\ScheduledStatus::class);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Factory\Api\Mastodon\ListEntity
|
* @return Factory\Api\Mastodon\ListEntity
|
||||||
*/
|
*/
|
||||||
|
|
59
src/Factory/Api/Mastodon/ScheduledStatus.php
Normal file
59
src/Factory/Api/Mastodon/ScheduledStatus.php
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @copyright Copyright (C) 2010-2021, the Friendica project
|
||||||
|
*
|
||||||
|
* @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 <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Friendica\Factory\Api\Mastodon;
|
||||||
|
|
||||||
|
use Friendica\BaseFactory;
|
||||||
|
use Friendica\Database\Database;
|
||||||
|
use Friendica\Model\Post;
|
||||||
|
use Friendica\Network\HTTPException;
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
|
class ScheduledStatus extends BaseFactory
|
||||||
|
{
|
||||||
|
/** @var Database */
|
||||||
|
private $dba;
|
||||||
|
|
||||||
|
public function __construct(LoggerInterface $logger, Database $dba)
|
||||||
|
{
|
||||||
|
parent::__construct($logger);
|
||||||
|
$this->dba = $dba;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $id Id of the delayed post
|
||||||
|
* @param int $uid Post user
|
||||||
|
*
|
||||||
|
* @return \Friendica\Object\Api\Mastodon\ScheduledStatus
|
||||||
|
* @throws HTTPException\InternalServerErrorException
|
||||||
|
*/
|
||||||
|
public function createFromId(int $id, int $uid): \Friendica\Object\Api\Mastodon\ScheduledStatus
|
||||||
|
{
|
||||||
|
$delayed_post = $this->dba->selectFirst('delayed-post', [], ['id' => $id, 'uid' => $uid]);
|
||||||
|
if (empty($delayed_post)) {
|
||||||
|
throw new HTTPException\NotFoundException('Scheduled status with ID ' . $id . ' not found for user ' . $uid . '.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$parameters = Post\Delayed::getParametersForid($delayed_post['id']);
|
||||||
|
|
||||||
|
return new \Friendica\Object\Api\Mastodon\ScheduledStatus($delayed_post, $parameters);
|
||||||
|
}
|
||||||
|
}
|
|
@ -73,12 +73,9 @@ class Delayed
|
||||||
|
|
||||||
$delayed_post = [
|
$delayed_post = [
|
||||||
'uri' => $uri,
|
'uri' => $uri,
|
||||||
'title' => $item['title'],
|
|
||||||
'body' => $item['body'],
|
|
||||||
'private' => $item['private'],
|
|
||||||
'wid' => $wid,
|
|
||||||
'uid' => $item['uid'],
|
'uid' => $item['uid'],
|
||||||
'delayed' => $delayed,
|
'delayed' => $delayed,
|
||||||
|
'wid' => $wid,
|
||||||
];
|
];
|
||||||
|
|
||||||
return DBA::insert('delayed-post', $delayed_post, Database::INSERT_IGNORE);
|
return DBA::insert('delayed-post', $delayed_post, Database::INSERT_IGNORE);
|
||||||
|
@ -110,6 +107,40 @@ class Delayed
|
||||||
return DBA::exists('delayed-post', ['uri' => $uri, 'uid' => $uid]);
|
return DBA::exists('delayed-post', ['uri' => $uri, 'uid' => $uid]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch parameters for delayed posts
|
||||||
|
*
|
||||||
|
* @param integer $id
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getParametersForid(int $id)
|
||||||
|
{
|
||||||
|
$delayed = DBA::selectFirst('delayed-post', ['id', 'wid', 'delayed'], ['id' => $id]);
|
||||||
|
if (empty($delayed['wid'])) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$worker = DBA::selectFirst('workerqueue', ['parameter'], ['id' => $delayed['wid'], 'command' => 'DelayedPublish']);
|
||||||
|
if (empty($worker)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$parameters = json_decode($worker['parameter']);
|
||||||
|
if (empty($parameters)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'parameters' => $delayed,
|
||||||
|
'item' => $parameters[0],
|
||||||
|
'notify' => $parameters[1],
|
||||||
|
'taglist' => $parameters[2],
|
||||||
|
'attachments' => $parameters[3],
|
||||||
|
'unprepared' => $parameters[4],
|
||||||
|
'uri' => $parameters[5],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Publish a delayed post
|
* Publish a delayed post
|
||||||
*
|
*
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
namespace Friendica\Module\Api\Mastodon;
|
namespace Friendica\Module\Api\Mastodon;
|
||||||
|
|
||||||
use Friendica\Core\System;
|
use Friendica\Core\System;
|
||||||
|
use Friendica\DI;
|
||||||
use Friendica\Module\BaseApi;
|
use Friendica\Module\BaseApi;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -35,6 +36,20 @@ class ScheduledStatuses extends BaseApi
|
||||||
*/
|
*/
|
||||||
public static function rawContent(array $parameters = [])
|
public static function rawContent(array $parameters = [])
|
||||||
{
|
{
|
||||||
|
self::checkAllowedScope(self::SCOPE_READ);
|
||||||
|
$uid = self::getCurrentUserID();
|
||||||
|
|
||||||
|
if (isset($parameters['id'])) {
|
||||||
|
System::jsonExit(DI::mstdnScheduledStatus()->createFromId($parameters['id'], $uid));
|
||||||
|
}
|
||||||
|
|
||||||
|
$request = self::getRequest([
|
||||||
|
'limit' => 20, // Max number of results to return. Defaults to 20.
|
||||||
|
'max_id' => 0, // Return results older than ID
|
||||||
|
'since_id' => 0, // Return results newer than ID
|
||||||
|
'min_id' => 0, // Return results immediately newer than ID
|
||||||
|
]);
|
||||||
|
|
||||||
System::jsonExit([]);
|
System::jsonExit([]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
83
src/Object/Api/Mastodon/ScheduledStatus.php
Normal file
83
src/Object/Api/Mastodon/ScheduledStatus.php
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @copyright Copyright (C) 2010-2021, the Friendica project
|
||||||
|
*
|
||||||
|
* @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 <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Friendica\Object\Api\Mastodon;
|
||||||
|
|
||||||
|
use Friendica\BaseDataTransferObject;
|
||||||
|
use Friendica\Content\Text\BBCode;
|
||||||
|
use Friendica\Util\DateTimeFormat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class ScheduledStatus
|
||||||
|
*
|
||||||
|
* @see https://docs.joinmastodon.org/entities/scheduledstatus
|
||||||
|
*/
|
||||||
|
class ScheduledStatus extends BaseDataTransferObject
|
||||||
|
{
|
||||||
|
/** @var string */
|
||||||
|
protected $id;
|
||||||
|
/** @var string (Datetime) */
|
||||||
|
protected $scheduled_at;
|
||||||
|
/** @var array */
|
||||||
|
protected $params = [
|
||||||
|
'text' => '',
|
||||||
|
'media_ids' => null,
|
||||||
|
'sensitive' => null,
|
||||||
|
'spoiler_text' => null,
|
||||||
|
'visibility' => '',
|
||||||
|
'scheduled_at' => null,
|
||||||
|
'poll' => null,
|
||||||
|
'idempotency' => null,
|
||||||
|
'in_reply_to_id' => null,
|
||||||
|
'application_id' => ''
|
||||||
|
];
|
||||||
|
/** @var Attachment */
|
||||||
|
protected $media_attachments = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a status record from a delayed-post record.
|
||||||
|
*
|
||||||
|
* @param array $delayed_post
|
||||||
|
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||||
|
*/
|
||||||
|
public function __construct(array $delayed_post, array $parameters)
|
||||||
|
{
|
||||||
|
$visibility = ['public', 'private', 'unlisted'];
|
||||||
|
|
||||||
|
$this->id = (string)$delayed_post['uri-id'];
|
||||||
|
$this->scheduled_at = DateTimeFormat::utc($delayed_post['scheduled_at'], DateTimeFormat::JSON);
|
||||||
|
|
||||||
|
$this->params = [
|
||||||
|
'text' => BBCode::convert(BBCode::setMentionsToNicknames($parameters['item']['body'] ?? ''), false, BBCode::API),
|
||||||
|
'media_ids' => null,
|
||||||
|
'sensitive' => null,
|
||||||
|
'spoiler_text' => $parameters['item']['title'] ?? '',
|
||||||
|
'visibility' => $visibility[$parameters['item']['private']],
|
||||||
|
'scheduled_at' => $this->scheduled_at,
|
||||||
|
'poll' => null,
|
||||||
|
'idempotency' => null,
|
||||||
|
'in_reply_to_id' => null,
|
||||||
|
'application_id' => ''
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->media_attachments = [];
|
||||||
|
}
|
||||||
|
}
|
|
@ -585,12 +585,9 @@ return [
|
||||||
"fields" => [
|
"fields" => [
|
||||||
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"],
|
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"],
|
||||||
"uri" => ["type" => "varchar(255)", "comment" => "URI of the post that will be distributed later"],
|
"uri" => ["type" => "varchar(255)", "comment" => "URI of the post that will be distributed later"],
|
||||||
"title" => ["type" => "varchar(255)", "comment" => "post title"],
|
|
||||||
"body" => ["type" => "mediumtext", "comment" => "post body content"],
|
|
||||||
"private" => ["type" => "tinyint unsigned", "comment" => "0=public, 1=private, 2=unlisted"],
|
|
||||||
"wid" => ["type" => "int unsigned", "foreign" => ["workerqueue" => "id"], "comment" => "Workerqueue id"],
|
|
||||||
"uid" => ["type" => "mediumint unsigned", "foreign" => ["user" => "uid"], "comment" => "Owner User id"],
|
"uid" => ["type" => "mediumint unsigned", "foreign" => ["user" => "uid"], "comment" => "Owner User id"],
|
||||||
"delayed" => ["type" => "datetime", "comment" => "delay time"],
|
"delayed" => ["type" => "datetime", "comment" => "delay time"],
|
||||||
|
"wid" => ["type" => "int unsigned", "foreign" => ["workerqueue" => "id"], "comment" => "Workerqueue id"],
|
||||||
],
|
],
|
||||||
"indexes" => [
|
"indexes" => [
|
||||||
"PRIMARY" => ["id"],
|
"PRIMARY" => ["id"],
|
||||||
|
|
|
@ -128,7 +128,7 @@ return [
|
||||||
'/push/subscription' => [Module\Api\Mastodon\Unimplemented::class, [R::GET, R::POST, R::PUT, R::DELETE]], // not supported
|
'/push/subscription' => [Module\Api\Mastodon\Unimplemented::class, [R::GET, R::POST, R::PUT, R::DELETE]], // not supported
|
||||||
'/reports' => [Module\Api\Mastodon\Unimplemented::class, [ R::POST]], // not supported
|
'/reports' => [Module\Api\Mastodon\Unimplemented::class, [ R::POST]], // not supported
|
||||||
'/scheduled_statuses' => [Module\Api\Mastodon\ScheduledStatuses::class, [R::GET ]], // Dummy, not supported
|
'/scheduled_statuses' => [Module\Api\Mastodon\ScheduledStatuses::class, [R::GET ]], // Dummy, not supported
|
||||||
'/scheduled_statuses/{id:\d+}' => [Module\Api\Mastodon\Unimplemented::class, [R::GET, R::PUT, R::DELETE]], // not supported
|
'/scheduled_statuses/{id:\d+}' => [Module\Api\Mastodon\ScheduledStatuses::class, [R::GET, R::PUT, R::DELETE]],
|
||||||
'/statuses' => [Module\Api\Mastodon\Statuses::class, [ R::POST]],
|
'/statuses' => [Module\Api\Mastodon\Statuses::class, [ R::POST]],
|
||||||
'/statuses/{id:\d+}' => [Module\Api\Mastodon\Statuses::class, [R::GET, R::DELETE]],
|
'/statuses/{id:\d+}' => [Module\Api\Mastodon\Statuses::class, [R::GET, R::DELETE]],
|
||||||
'/statuses/{id:\d+}/card' => [Module\Api\Mastodon\Statuses\Card::class, [R::GET ]],
|
'/statuses/{id:\d+}/card' => [Module\Api\Mastodon\Statuses\Card::class, [R::GET ]],
|
||||||
|
|
Loading…
Reference in a new issue