diff options
-rw-r--r-- | appinfo/database.xml | 24 | ||||
-rw-r--r-- | lib/itemmapper.php | 60 |
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; } |