Compare commits

..

No commits in common. "a7729b29b0c46082d61271f0cdfd24ee5587037c" and "b59e65bf46b724a283dc2f07ad681170553dce43" have entirely different histories.

5 changed files with 36 additions and 45 deletions

View File

@ -5,7 +5,7 @@ on:
push: push:
branches: branches:
- main - main
- "ci-*" - 'ci-*'
env: env:
APP_NAME: gpoddersync APP_NAME: gpoddersync
@ -18,9 +18,9 @@ jobs:
# do not stop on another job's failure # do not stop on another job's failure
fail-fast: false fail-fast: false
matrix: matrix:
php-versions: ["8.1", "8.2"] php-versions: ['8.1', '8.2']
databases: ["sqlite"] databases: ['sqlite']
server-versions: ["stable27", "stable28", "stable29", "stable30"] server-versions: ['stable27', 'stable28', 'stable29']
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }} name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
@ -75,9 +75,9 @@ jobs:
# do not stop on another job's failure # do not stop on another job's failure
fail-fast: false fail-fast: false
matrix: matrix:
php-versions: ["8.1", "8.2"] php-versions: ['8.1', '8.2']
databases: ["mysql"] databases: ['mysql']
server-versions: ["stable27", "stable28", "stable29", "stable30"] server-versions: ['stable27', 'stable28', 'stable29']
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }} name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
@ -141,9 +141,9 @@ jobs:
# do not stop on another job's failure # do not stop on another job's failure
fail-fast: false fail-fast: false
matrix: matrix:
php-versions: ["8.1", "8.2"] php-versions: ['8.1', '8.2']
databases: ["pgsql"] databases: ['pgsql']
server-versions: ["stable27", "stable28", "stable29", "stable30"] server-versions: ['stable27', 'stable28', 'stable29']
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }} name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}

View File

@ -1,8 +1,4 @@
# Changelog # Changelog
## 3.10.0 - 2024-09-23
### Changed
- Add support for Nextcloud 30
## 3.9.0 - 2024-05-21 ## 3.9.0 - 2024-05-21
### Changed ### Changed
- Add support for Nextcloud 29 - Add support for Nextcloud 29
@ -30,12 +26,12 @@
## 3.7.3 - 2023-02-24 ## 3.7.3 - 2023-02-24
### Fixed ### Fixed
- If EpisodeAction is updated with new episode url and there is a conflicting EpisodeAction with that same episode url the later will be deleted - If EpisodeAction is updated with new episode url and there is a conflicting EpisodeAction with that same episode url the later will be deleted
## 3.7.2 - 2023-02-24 ## 3.7.2 - 2023-02-24
### Fixed ### Fixed
- EpisodeActions are explicitly searched in database by guid. Episode url is used as fallback. Combined search produces multiple results thus broke synchronization - EpisodeActions are explicitly searched in database by guid. Episode url is used as fallback. Combined search produces multiple results thus broke synchronization
## 3.7.1 - 2022-11-11 ## 3.7.1 - 2022-11-11
### Fixed ### Fixed
@ -127,3 +123,4 @@
## 1.0.7 2021-07-13 ## 1.0.7 2021-07-13
### Changed ### Changed
- accept only arrays on subscription change endpoint (thanks https://github.com/mattsches) - accept only arrays on subscription change endpoint (thanks https://github.com/mattsches)

View File

@ -8,7 +8,6 @@ Nextcloud app that replicates basic gpodder.net api to sync podcast consumer app
| [KDE Kasts](https://apps.kde.org/de/kasts/) | Supported since version 21.12 | | [KDE Kasts](https://apps.kde.org/de/kasts/) | Supported since version 21.12 |
| [Podcast Merlin](https://github.com/yoyoooooooooo/Podcast-Merlin--Nextcloud-Gpodder-Client-For-Windows) | Full sync support podcast client for Windows | | [Podcast Merlin](https://github.com/yoyoooooooooo/Podcast-Merlin--Nextcloud-Gpodder-Client-For-Windows) | Full sync support podcast client for Windows |
| [RePod](https://apps.nextcloud.com/apps/repod) | Nextcloud app for playing and managing podcasts with sync support | | [RePod](https://apps.nextcloud.com/apps/repod) | Nextcloud app for playing and managing podcasts with sync support |
| [Cardo](https://cardo-podcast.github.io/#/cardo) | Podcast client with sync support, for Windows, Mac and Linux |
| ~~[Garmin Podcasts](https://lucasasselli.github.io/garmin-podcasts/)~~ | Repository archived, app is [no longer available](https://apps.garmin.com/en-US/apps/b5b85600-0625-43b6-89e9-1245bd44532c) | | ~~[Garmin Podcasts](https://lucasasselli.github.io/garmin-podcasts/)~~ | Repository archived, app is [no longer available](https://apps.garmin.com/en-US/apps/b5b85600-0625-43b6-89e9-1245bd44532c) |
### Installation ### Installation
Either from the official Nextcloud app store ([link to app page](https://apps.nextcloud.com/apps/gpoddersync)) or by downloading the [latest release](https://github.com/thrillfall/nextcloud-gpodder/releases/latest) and extracting it into your Nextcloud apps/ directory. Either from the official Nextcloud app store ([link to app page](https://apps.nextcloud.com/apps/gpoddersync)) or by downloading the [latest release](https://github.com/thrillfall/nextcloud-gpodder/releases/latest) and extracting it into your Nextcloud apps/ directory.

View File

@ -5,7 +5,7 @@
<name>GPodder Sync</name> <name>GPodder Sync</name>
<summary>replicate basic GPodder.net API</summary> <summary>replicate basic GPodder.net API</summary>
<description><![CDATA[Expose GPodder API to sync podcast consumer apps like AntennaPod]]></description> <description><![CDATA[Expose GPodder API to sync podcast consumer apps like AntennaPod]]></description>
<version>3.10.0</version> <version>3.9.0</version>
<licence>agpl</licence> <licence>agpl</licence>
<author mail="thrillfall@disroot.org">Thrillfall</author> <author mail="thrillfall@disroot.org">Thrillfall</author>
<namespace>GPodderSync</namespace> <namespace>GPodderSync</namespace>
@ -18,7 +18,7 @@
</documentation> </documentation>
<dependencies> <dependencies>
<php min-version="8.1"/> <php min-version="8.1"/>
<nextcloud min-version="27" max-version="30"/> <nextcloud min-version="27" max-version="29"/>
</dependencies> </dependencies>
<repair-steps> <repair-steps>
<post-migration> <post-migration>

View File

@ -5,21 +5,21 @@ namespace OCA\GPodderSync\Migration;
use OCP\IDBConnection; use OCP\IDBConnection;
use OCP\Migration\IOutput; use OCP\Migration\IOutput;
use DateTime; use Safe\DateTime;
class TimestampMigration implements \OCP\Migration\IRepairStep class TimestampMigration implements \OCP\Migration\IRepairStep
{ {
private IDBConnection $db; private IDBConnection $db;
public function __construct(IDBConnection $db) public function __construct(IDBConnection $db)
{ {
$this->db = $db; $this->db = $db;
} }
/** /**
* @inheritDoc * @inheritDoc
*/ */
public function getName(): string public function getName() : string
{ {
return "Migrate timestamp values to integer to store unix epoch"; return "Migrate timestamp values to integer to store unix epoch";
} }
@ -29,27 +29,22 @@ class TimestampMigration implements \OCP\Migration\IRepairStep
*/ */
public function run(IOutput $output) public function run(IOutput $output)
{ {
$queryTimestamps = $queryTimestamps = 'SELECT id, timestamp FROM `*PREFIX*gpodder_episode_action` WHERE timestamp_epoch = 0';
"SELECT id, timestamp FROM `*PREFIX*gpodder_episode_action` WHERE timestamp_epoch = 0"; $timestamps = $this->db->executeQuery($queryTimestamps)->fetchAll();
$timestamps = $this->db->executeQuery($queryTimestamps)->fetchAll();
$result = 0; $result = 0;
foreach ($timestamps as $timestamp) { foreach ($timestamps as $timestamp) {
$timestampEpoch = (new DateTime($timestamp["timestamp"]))->format( $timestampEpoch = (new DateTime($timestamp["timestamp"]))->format("U");
"U" $sql = 'UPDATE `*PREFIX*gpodder_episode_action` '
); . 'SET `timestamp_epoch` = ' . $timestampEpoch . ' '
$sql = . 'WHERE `id` = ' . $timestamp["id"];
"UPDATE `*PREFIX*gpodder_episode_action` " .
"SET `timestamp_epoch` = " .
$timestampEpoch .
" " .
"WHERE `id` = " .
$timestamp["id"];
$result += $this->db->executeUpdate($sql); $result += $this->db->executeUpdate($sql);
}
return $result; }
return $result;
} }
} }