<?php
-
/**
- * @file src/Model/ItemDeliveryData.php
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @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\Model;
// New delivery fields with virtual field name in item fields
'queue_count' => 'delivery_queue_count',
'queue_done' => 'delivery_queue_done',
+ 'queue_failed' => 'delivery_queue_failed',
];
+ const ACTIVITYPUB = 1;
+ const DFRN = 2;
+ const LEGACY_DFRN = 3;
+ const DIASPORA = 4;
+ const OSTATUS = 5;
+ const MAIL = 6;
+
/**
* Extract delivery data from the provided item fields
*
* Avoids racing condition between multiple delivery threads.
*
* @param integer $item_id
+ * @param integer $protocol
+ * @return bool
+ * @throws \Exception
+ */
+ public static function incrementQueueDone($item_id, $protocol = 0)
+ {
+ $sql = '';
+
+ switch ($protocol) {
+ case self::ACTIVITYPUB:
+ $sql = ", `activitypub` = `activitypub` + 1";
+ break;
+ case self::DFRN:
+ $sql = ", `dfrn` = `dfrn` + 1";
+ break;
+ case self::LEGACY_DFRN:
+ $sql = ", `legacy_dfrn` = `legacy_dfrn` + 1";
+ break;
+ case self::DIASPORA:
+ $sql = ", `diaspora` = `diaspora` + 1";
+ break;
+ case self::OSTATUS:
+ $sql = ", `ostatus` = `ostatus` + 1";
+ break;
+ }
+
+ return DBA::e('UPDATE `item-delivery-data` SET `queue_done` = `queue_done` + 1' . $sql . ' WHERE `iid` = ?', $item_id);
+ }
+
+ /**
+ * Increments the queue_failed for the given item ID.
+ *
+ * Avoids racing condition between multiple delivery threads.
+ *
+ * @param integer $item_id
+ * @return bool
+ * @throws \Exception
+ */
+ public static function incrementQueueFailed($item_id)
+ {
+ return DBA::e('UPDATE `item-delivery-data` SET `queue_failed` = `queue_failed` + 1 WHERE `iid` = ?', $item_id);
+ }
+
+ /**
+ * Increments the queue_count for the given item ID.
+ *
+ * @param integer $item_id
+ * @param integer $increment
* @return bool
* @throws \Exception
*/
- public static function incrementQueueDone($item_id)
+ public static function incrementQueueCount(int $item_id, int $increment = 1)
{
- return DBA::e('UPDATE `item-delivery-data` SET `queue_done` = `queue_done` + 1 WHERE `iid` = ?', $item_id);
+ return DBA::e('UPDATE `item-delivery-data` SET `queue_count` = `queue_count` + ? WHERE `iid` = ?', $increment, $item_id);
}
/**