summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--appinfo/database.xml24
-rw-r--r--lib/itemmapper.php60
2 files changed, 59 insertions, 25 deletions
diff --git a/appinfo/database.xml b/appinfo/database.xml
index 7ef656da3..9e543adc2 100644
--- a/appinfo/database.xml
+++ b/appinfo/database.xml
@@ -16,7 +16,7 @@
<length>4</length>
</field>
<field>
- <name>parentid</name>
+ <name>parent_id</name>
<type>integer</type>
<notnull>false</notnull>
<length>4</length>
@@ -28,7 +28,7 @@
<length>100</length>
</field>
<field>
- <name>userid</name>
+ <name>user_id</name>
<type>text</type>
<default></default>
<notnull>true</notnull>
@@ -43,6 +43,12 @@
<sorting>descending</sorting>
</field>
</index>
+ <index>
+ <name>user_id</name>
+ <field>
+ <name>user_id</name>
+ </field>
+ </index>
</declaration>
</table>
@@ -86,7 +92,7 @@
<length>4</length>
</field>
<field>
- <name>folderid</name>
+ <name>folder_id</name>
<type>integer</type>
<notnull>true</notnull>
<length>4</length>
@@ -124,7 +130,8 @@
<autoincrement>1</autoincrement>
<length>4</length>
</field>
- <field>
+ <field></field>
+
<name>guid</name>
<type>text</type>
<notnull>true</notnull>
@@ -151,6 +158,11 @@
<type>text</type>
<length>4000</length>
</field>
+ <field>
+ <name>status</name>
+ <type>integer</type>
+ <length>1<length>
+ </field>
<index>
<name>item_id</name>
@@ -165,7 +177,9 @@
<unique>true</unique>
<field>
<name>guid</name>
- <sorting>descending</sorting>
+ </field>
+ <field>
+ <name>feed_id</name>
</field>
</index>
</declaration>
diff --git a/lib/itemmapper.php b/lib/itemmapper.php
index 65f1eb2e2..09ebd6f09 100644
--- a/lib/itemmapper.php
+++ b/lib/itemmapper.php
@@ -47,35 +47,55 @@ class OC_News_ItemMapper {
return $items;
}
+ public function findIdFromGuid($guid, $feedid){
+ $stmt = OCP\DB::prepare('
+ SELECT * FROM ' . self::tableName . '
+ WHERE guid = ?
+ AND feedid = ?
+ ');
+ $result = $stmt->execute(array($guid, $feedid));
+ $row = $result->fetchRow();
+ $id = null;
+ if ($row != null){
+ $id = $row['id'];
+ }
+ return $id;
+ }
+
/**
* @brief Save the feed and all its items into the database
* @returns The id of the feed in the database table.
*/
public function insert(OC_News_Item $item, $feedid){
$guid = $item->getGuid();
- $title = $item->getTitle();
- $query = OCP\DB::prepare('
- INSERT INTO ' . self::tableName .
- '(url, title, guid, feedid)
- VALUES (?, ?, ?, ?)
- ');
+ $itemid = $this->findIdFromGuid($guid, $feedid);
+
+ if ($itemid == null){
+ $title = $item->getTitle();
+
+ $query = OCP\DB::prepare('
+ INSERT INTO ' . self::tableName .
+ '(url, title, guid, feedid)
+ VALUES (?, ?, ?, ?)
+ ');
- if(empty($title)) {
- $l = OC_L10N::get('news');
- $title = $l->t('no title');
- }
+ if(empty($title)) {
+ $l = OC_L10N::get('news');
+ $title = $l->t('no title');
+ }
- $params=array(
- htmlspecialchars_decode($item->getUrl()),
- htmlspecialchars_decode($title),
- $guid,
- $feedid
- );
-
- $query->execute($params);
-
- $itemid = OCP\DB::insertid(self::tableName);
+ $params=array(
+ htmlspecialchars_decode($item->getUrl()),
+ htmlspecialchars_decode($title),
+ $guid,
+ $feedid
+ );
+
+ $query->execute($params);
+
+ $itemid = OCP\DB::insertid(self::tableName);
+ }
$item->setId($itemid);
return $itemid;
}