summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Schaal <daniel@schaal.email>2016-10-01 08:34:40 +0200
committerBernhard Posselt <BernhardPosselt@users.noreply.github.com>2016-10-01 08:34:40 +0200
commite45511f6ba5a53a137538e4647148aa749009233 (patch)
treec4f1265f1129556f09d6fb2b110325e9958f2d99
parentf46ed33ea553bc45cff973150f69227da13baace (diff)
Add updatedDate to item model (#43)
* Update picoFeed to 0.1.25 * Add updated_date to database * Add updatedDate to item model * Bump version to 9.0.5 * Check for updatedDate when updating a feed * Fix unit test to check for newer updatedDate
-rw-r--r--appinfo/database.xml7
-rw-r--r--appinfo/info.xml2
-rw-r--r--composer.json2
-rw-r--r--lib/Db/Item.php6
-rw-r--r--lib/Fetcher/FeedFetcher.php3
-rw-r--r--lib/Service/FeedService.php3
-rw-r--r--tests/Unit/Controller/ExportControllerTest.php4
-rw-r--r--tests/Unit/Db/ItemTest.php9
-rw-r--r--tests/Unit/Fetcher/FeedFetcherTest.php12
-rw-r--r--tests/Unit/Service/FeedServiceTest.php4
10 files changed, 42 insertions, 10 deletions
diff --git a/appinfo/database.xml b/appinfo/database.xml
index 8c1b4ae95..5ea1ed13c 100644
--- a/appinfo/database.xml
+++ b/appinfo/database.xml
@@ -329,6 +329,13 @@
<notnull>false</notnull>
</field>
<field>
+ <name>updated_date</name>
+ <type>integer</type>
+ <length>8</length>
+ <unsigned>true</unsigned>
+ <notnull>false</notnull>
+ </field>
+ <field>
<name>body</name>
<type>clob</type>
<notnull>false</notnull>
diff --git a/appinfo/info.xml b/appinfo/info.xml
index 73a6301a8..d1e311bd9 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -8,7 +8,7 @@
Before you update to a new version, [check the changelog](https://github.com/nextcloud/news/blob/master/CHANGELOG.md) to avoid surprises.
**Important**: To enable feed updates you will need to enable either [Nextcloud system cron](https://docs.nextcloud.com/server/10/admin_manual/configuration_server/background_jobs_configuration.html#cron) or use [an updater](https://github.com/owncloud/news-updater) which uses the built in update API and disable cron updates. More information can be found [in the README](https://github.com/nextcloud/news).]]></description>
- <version>9.0.4</version>
+ <version>9.0.5</version>
<licence>agpl</licence>
<author>Bernhard Posselt</author>
<author>Alessandro Cosentino</author>
diff --git a/composer.json b/composer.json
index 155867c07..1bcc263d5 100644
--- a/composer.json
+++ b/composer.json
@@ -30,7 +30,7 @@
},
"require": {
"ezyang/htmlpurifier": "4.7",
- "fguillot/picofeed": "0.1.23",
+ "fguillot/picofeed": "0.1.25",
"pear/net_url2": "2.2",
"riimu/kit-pathjoin": "1.1.2"
}
diff --git a/lib/Db/Item.php b/lib/Db/Item.php
index 943002c32..f19843c8e 100644
--- a/lib/Db/Item.php
+++ b/lib/Db/Item.php
@@ -57,6 +57,7 @@ class Item extends Entity implements IAPI, \JsonSerializable {
protected $title;
protected $author;
protected $pubDate;
+ protected $updatedDate;
protected $body;
protected $enclosureMime;
protected $enclosureLink;
@@ -69,6 +70,7 @@ class Item extends Entity implements IAPI, \JsonSerializable {
public function __construct() {
$this->addType('pubDate', 'integer');
+ $this->addType('updatedDate', 'integer');
$this->addType('feedId', 'integer');
$this->addType('status', 'integer');
$this->addType('rtl', 'boolean');
@@ -122,6 +124,7 @@ class Item extends Entity implements IAPI, \JsonSerializable {
'title' => $this->getTitle(),
'author' => $this->getAuthor(),
'pubDate' => $this->getPubDate(),
+ 'updatedDate' => $this->getUpdatedDate(),
'body' => $this->getBody(),
'enclosureMime' => $this->getEnclosureMime(),
'enclosureLink' => $this->getEnclosureLink(),
@@ -144,6 +147,7 @@ class Item extends Entity implements IAPI, \JsonSerializable {
'title' => $this->getTitle(),
'author' => $this->getAuthor(),
'pubDate' => $this->getPubDate(),
+ 'updatedDate' => $this->getUpdatedDate(),
'body' => $this->getBody(),
'enclosureMime' => $this->getEnclosureMime(),
'enclosureLink' => $this->getEnclosureLink(),
@@ -164,6 +168,7 @@ class Item extends Entity implements IAPI, \JsonSerializable {
'title' => $this->getTitle(),
'author' => $this->getAuthor(),
'pubDate' => $this->getPubDate(),
+ 'updatedDate' => $this->getUpdatedDate(),
'body' => $this->getBody(),
'enclosureMime' => $this->getEnclosureMime(),
'enclosureLink' => $this->getEnclosureLink(),
@@ -186,6 +191,7 @@ class Item extends Entity implements IAPI, \JsonSerializable {
$item->setTitle($import['title']);
$item->setAuthor($import['author']);
$item->setPubDate($import['pubDate']);
+ $item->setUpdatedDate($import['updatedDate']);
$item->setBody($import['body']);
$item->setEnclosureMime($import['enclosureMime']);
$item->setEnclosureLink($import['enclosureLink']);
diff --git a/lib/Fetcher/FeedFetcher.php b/lib/Fetcher/FeedFetcher.php
index 9336d6914..194a927f9 100644
--- a/lib/Fetcher/FeedFetcher.php
+++ b/lib/Fetcher/FeedFetcher.php
@@ -240,7 +240,8 @@ class FeedFetcher implements IFeedFetcher {
$item->setUrl($parsedItem->getUrl());
$item->setGuid($parsedItem->getId());
$item->setGuidHash($item->getGuid());
- $item->setPubDate($parsedItem->getDate()->getTimestamp());
+ $item->setPubDate($parsedItem->getPublishedDate()->getTimestamp());
+ $item->setUpdatedDate($parsedItem->getUpdatedDate()->getTimestamp());
$item->setRtl($this->determineRtl($parsedItem, $parsedFeed));
// unescape content because angularjs helps against XSS
diff --git a/lib/Service/FeedService.php b/lib/Service/FeedService.php
index c1c1aa64a..f17b759e3 100644
--- a/lib/Service/FeedService.php
+++ b/lib/Service/FeedService.php
@@ -246,7 +246,7 @@ class FeedService extends Service {
// in case of update
if ($forceUpdate ||
- $item->getPubDate() > $dbItem->getPubDate()) {
+ $item->getUpdatedDate() > $dbItem->getUpdatedDate()) {
$dbItem->setTitle($item->getTitle());
$dbItem->setUrl($item->getUrl());
@@ -255,6 +255,7 @@ class FeedService extends Service {
$dbItem->setRtl($item->getRtl());
$dbItem->setLastModified($item->getLastModified());
$dbItem->setPubDate($item->getPubDate());
+ $dbItem->setUpdatedDate($item->getUpdatedDate());
$dbItem->setEnclosureMime($item->getEnclosureMime());
$dbItem->setEnclosureLink($item->getEnclosureLink());
$dbItem->setBody(
diff --git a/tests/Unit/Controller/ExportControllerTest.php b/tests/Unit/Controller/ExportControllerTest.php
index 89dcb0198..42fb2ac85 100644
--- a/tests/Unit/Controller/ExportControllerTest.php
+++ b/tests/Unit/Controller/ExportControllerTest.php
@@ -119,10 +119,10 @@ class ExportControllerTest extends \PHPUnit_Framework_TestCase {
);
$this->assertEquals('[{"guid":null,"url":null,"title":null,' .
- '"author":null,"pubDate":null,"body":null,"enclosureMime":null,' .
+ '"author":null,"pubDate":null,"updatedDate":null,"body":null,"enclosureMime":null,' .
'"enclosureLink":null,"unread":false,"starred":false,' .
'"feedLink":"http:\/\/goo","rtl":null},{"guid":null,"url":null,' .
- '"title":null,"author":null,"pubDate":null,"body":null,' .
+ '"title":null,"author":null,"pubDate":null,"updatedDate":null,"body":null,' .
'"enclosureMime":null,"enclosureLink":null,"unread":false,' .
'"starred":false,"feedLink":"http:\/\/gee","rtl":null}]',
$return->render());
diff --git a/tests/Unit/Db/ItemTest.php b/tests/Unit/Db/ItemTest.php
index bdc0793a2..f26cf6ff9 100644
--- a/tests/Unit/Db/ItemTest.php
+++ b/tests/Unit/Db/ItemTest.php
@@ -61,6 +61,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase {
$item->setTitle('title');
$item->setAuthor('author');
$item->setPubDate(123);
+ $item->setUpdatedDate(234);
$item->setBody('body');
$item->setEnclosureMime('audio/ogg');
$item->setEnclosureLink('enclink');
@@ -81,6 +82,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase {
'title' => 'title',
'author' => 'author',
'pubDate' => 123,
+ 'updatedDate' => 234,
'body' => 'body',
'enclosureMime' => 'audio/ogg',
'enclosureLink' => 'enclink',
@@ -104,6 +106,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase {
$item->setTitle('title');
$item->setAuthor('author');
$item->setPubDate(123);
+ $item->setUpdatedDate(234);
$item->setBody('<body><div>this is a test</body>');
$item->setEnclosureMime('audio/ogg');
$item->setEnclosureLink('enclink');
@@ -123,6 +126,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase {
'title' => 'title',
'author' => 'author',
'pubDate' => 123,
+ 'updatedDate' => 234,
'body' => '<body><div>this is a test</body>',
'enclosureMime' => 'audio/ogg',
'enclosureLink' => 'enclink',
@@ -145,6 +149,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase {
$item->setTitle('title');
$item->setAuthor('author');
$item->setPubDate(123);
+ $item->setUpdatedDate(234);
$item->setBody('body');
$item->setEnclosureMime('audio/ogg');
$item->setEnclosureLink('enclink');
@@ -165,6 +170,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase {
'title' => 'title',
'author' => 'author',
'pubDate' => 123,
+ 'updatedDate' => 234,
'body' => 'body',
'enclosureMime' => 'audio/ogg',
'enclosureLink' => 'enclink',
@@ -184,6 +190,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase {
$item->setTitle('title');
$item->setAuthor('author');
$item->setPubDate(123);
+ $item->setUpdatedDate(234);
$item->setBody('body');
$item->setEnclosureMime('audio/ogg');
$item->setEnclosureLink('enclink');
@@ -221,6 +228,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase {
'title' => $item->getTitle(),
'author' => $item->getAuthor(),
'pubDate' => $item->getPubDate(),
+ 'updatedDate' => $item->getUpdatedDate(),
'body' => $item->getBody(),
'enclosureMime' => $item->getEnclosureMime(),
'enclosureLink' => $item->getEnclosureLink(),
@@ -244,6 +252,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase {
'title' => $item->getTitle(),
'author' => $item->getAuthor(),
'pubDate' => $item->getPubDate(),
+ 'updatedDate' => $item->getUpdatedDate(),
'body' => $item->getBody(),
'enclosureMime' => $item->getEnclosureMime(),
'enclosureLink' => $item->getEnclosureLink(),
diff --git a/tests/Unit/Fetcher/FeedFetcherTest.php b/tests/Unit/Fetcher/FeedFetcherTest.php
index 5266f0708..930cf4c99 100644
--- a/tests/Unit/Fetcher/FeedFetcherTest.php
+++ b/tests/Unit/Fetcher/FeedFetcherTest.php
@@ -38,6 +38,7 @@ class FeedFetcherTest extends \PHPUnit_Framework_TestCase {
private $title;
private $guid;
private $pub;
+ private $updated;
private $body;
private $author;
private $enclosureLink;
@@ -110,6 +111,7 @@ class FeedFetcherTest extends \PHPUnit_Framework_TestCase {
$this->body2 = 'let the bodies hit the floor ' .
'<a target="_blank" href="test">test</a>';
$this->pub = 23111;
+ $this->updated = 23444;
$this->author = '&lt;boogieman';
$this->enclosureLink = 'http://enclosure.you';
@@ -209,11 +211,15 @@ class FeedFetcherTest extends \PHPUnit_Framework_TestCase {
$item = new Item();
date_default_timezone_set('America/Los_Angeles');
- $date = new \DateTime();
- $date->setTimestamp($this->pub);
- $this->expectItem('getDate', $date);
+
+ $pubdate = \Datetime::createFromFormat('U',$this->pub);
+ $this->expectItem('getPublishedDate', $pubdate);
$item->setPubDate($this->pub);
+ $update = \Datetime::createFromFormat('U',$this->updated);
+ $this->expectItem('getUpdatedDate', $update);
+ $item->setUpdatedDate($this->updated);
+
$item->setStatus(0);
$item->setUnread();
$item->setUrl($this->permalink);
diff --git a/tests/Unit/Service/FeedServiceTest.php b/tests/Unit/Service/FeedServiceTest.php
index 99cd9b11b..68d25df9e 100644
--- a/tests/Unit/Service/FeedServiceTest.php
+++ b/tests/Unit/Service/FeedServiceTest.php
@@ -384,6 +384,7 @@ class FeedServiceTest extends \PHPUnit_Framework_TestCase {
$item->setGuidHash(md5('hi'));
$item->setFeedId(3);
$item->setPubDate(2);
+ $item->setUpdatedDate(2);
$item->setTitle('hey');
$item->setAuthor('aut');
$item->setBody('new');
@@ -396,6 +397,7 @@ class FeedServiceTest extends \PHPUnit_Framework_TestCase {
$item->setGuidHash(md5('hi'));
$item->setFeedId(3);
$item->setPubDate(1);
+ $item->setUpdatedDate(1);
$item->setTitle('ho');
$item->setAuthor('auto');
$item->setBody('old');
@@ -403,7 +405,7 @@ class FeedServiceTest extends \PHPUnit_Framework_TestCase {
return $item;
}
- public function testUpdateUpdatesWhenPubdateIsNewer() {
+ public function testUpdateUpdatesWhenUpdateddateIsNewer() {
$feed = $this->createUpdateFeed();
$item = $this->createUpdateItem();
$item2 = $this->createUpdateItem2();