From ce53e200b475675389f6903f341d99116f3ef0b7 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sat, 17 Nov 2007 13:13:08 +0100 Subject: [PATCH] add support for enclosures (closes #165) --- functions.php | 133 ++++++++++++++++++++++++++++++---- schema/ttrss_schema_mysql.sql | 1 + schema/ttrss_schema_pgsql.sql | 1 + schema/versions/mysql/26.sql | 1 + schema/versions/pgsql/26.sql | 1 + tt-rss.css | 10 +++ 6 files changed, 132 insertions(+), 15 deletions(-) diff --git a/functions.php b/functions.php index 613641b3..6f45a7fe 100644 --- a/functions.php +++ b/functions.php @@ -894,6 +894,40 @@ } } + // enclosures + + $enclosures = array(); + + if (ENABLE_SIMPLEPIE) { + $encs = $item->get_enclosures(); + + foreach ($encs as $e) { + $e_item = array( + $e->link, $e->type, $e->length); + + array_push($enclosures, $e_item); + } + + } else { + $e_ctr = $item['enclosure#']; + + if ($e_ctr > 0) { + $e_item = array($item['enclosure@url'], + $item['enclosure@type'], + $item['enclosure@length']); + + array_push($enclosures, $e_item); + + for ($i = 2; $i <= $e_ctr; $i++ ) { + $e_item = array($item["enclosure#$i@url"], + $item["enclosure#$i@type"], + $item["enclosure#$i@length"]); + array_push($enclosures, $e_item); + } + } + + } + # sanitize content // $entry_content = sanitize_rss($entry_content); @@ -960,6 +994,9 @@ ttrss_entries WHERE guid = '$entry_guid'"); + $entry_ref_id = 0; + $entry_int_id = 0; + if (db_num_rows($result) == 1) { if (defined('DAEMON_EXTENDED_DEBUG') || $_GET['xdebug']) { @@ -974,6 +1011,7 @@ 0, "date_entered")); $ref_id = db_fetch_result($result, 0, "id"); + $entry_ref_id = $ref_id; // check for user post link to main table @@ -1003,7 +1041,7 @@ // error_reporting (DEFAULT_ERROR_LEVEL); $result = db_query($link, - "SELECT ref_id FROM ttrss_user_entries WHERE + "SELECT ref_id, int_id FROM ttrss_user_entries WHERE ref_id = '$ref_id' AND owner_uid = '$owner_uid' $dupcheck_qpart"); @@ -1039,8 +1077,24 @@ (ref_id, owner_uid, feed_id, unread, last_read, marked, published) VALUES ('$ref_id', '$owner_uid', '$feed', $unread, $last_read_qpart, $marked, $published)"); + + $result = db_query($link, + "SELECT int_id FROM ttrss_user_entries WHERE + ref_id = '$ref_id' AND owner_uid = '$owner_uid' AND + feed_id = '$feed' LIMIT 1"); + + if (db_num_rows($result) == 1) { + $entry_int_id = db_fetch_result($result, 0, "int_id"); + } + } else { + $entry_ref_id = db_fetch_result($result, 0, "ref_id"); + $entry_int_id = db_fetch_result($result, 0, "int_id"); } - + + if (defined('DAEMON_EXTENDED_DEBUG') || $_GET['xdebug']) { + _debug("update_rss_feed: RID: $entry_ref_id, IID: $entry_int_id"); + } + $post_needs_update = false; if (get_pref($link, "UPDATE_POST_ON_CHECKSUM_CHANGE", $owner_uid, false) && @@ -1092,6 +1146,33 @@ db_query($link, "COMMIT"); + if (defined('DAEMON_EXTENDED_DEBUG') || $_GET['xdebug']) { + _debug("update_rss_feed: looking for enclosures..."); + } + + if (defined('DAEMON_EXTENDED_DEBUG') || $_GET['xdebug']) { + print_r($enclosures); + } + + db_query($link, "BEGIN"); + + foreach ($enclosures as $enc) { + $enc_url = db_escape_string($enc[0]); + $enc_type = db_escape_string($enc[1]); + $enc_dur = db_escape_string($enc[2]); + + $result = db_query($link, "SELECT id FROM ttrss_enclosures + WHERE content_url = '$enc_url' AND post_id = '$entry_ref_id'"); + + if (db_num_rows($result) == 0) { + db_query($link, "INSERT INTO ttrss_enclosures + (content_url, content_type, title, duration, post_id) VALUES + ('$enc_url', '$enc_type', '', '$enc_dur', '$entry_ref_id')"); + } + } + + db_query($link, "COMMIT"); + if (defined('DAEMON_EXTENDED_DEBUG') || $_GET['xdebug']) { _debug("update_rss_feed: looking for tags..."); } @@ -1147,17 +1228,6 @@ db_query($link, "BEGIN"); - $result = db_query($link, "SELECT id,int_id - FROM ttrss_entries,ttrss_user_entries - WHERE guid = '$entry_guid' - AND feed_id = '$feed' AND ref_id = id - AND owner_uid = '$owner_uid'"); - - if (db_num_rows($result) == 1) { - - $entry_id = db_fetch_result($result, 0, "id"); - $entry_int_id = db_fetch_result($result, 0, "int_id"); - foreach ($entry_tags as $tag) { $tag = sanitize_tag($tag); @@ -1178,7 +1248,7 @@ VALUES ('$owner_uid','$tag', '$entry_int_id')"); } } - } + db_query($link, "COMMIT"); } @@ -4384,7 +4454,40 @@ $line["content"] = preg_replace("/href=/i", "target=\"_new\" href=", $line["content"]); } - print $line["content"] . ""; + print $line["content"]; + + $result = db_query($link, "SELECT * FROM ttrss_enclosures WHERE + post_id = '$id'"); + + if (db_num_rows($result) > 0) { + print "
"; + + if (db_num_rows($result) == 1) { + print __("Attachment:") . " "; + } else { + print __("Attachments:") . " "; + } + + $entries = array(); + + while ($line = db_fetch_assoc($result)) { + + $url = $line["content_url"]; + + $filename = substr($url, strrpos($url, "/")+1); + + $entry = "" . + $filename . " (" . $line["content_type"] . ")" . ""; + + array_push($entries, $entry); + } + + print join(", ", $entries); + + print "
"; + } + + print ""; print ""; diff --git a/schema/ttrss_schema_mysql.sql b/schema/ttrss_schema_mysql.sql index c239d6d0..18f7e0c6 100644 --- a/schema/ttrss_schema_mysql.sql +++ b/schema/ttrss_schema_mysql.sql @@ -209,6 +209,7 @@ create table ttrss_enclosures (id serial not null primary key, content_type varchar(250) not null, post_id integer not null, title text not null, + duration text not null, index (post_id), foreign key (post_id) references ttrss_entries(id) ON DELETE cascade); diff --git a/schema/ttrss_schema_pgsql.sql b/schema/ttrss_schema_pgsql.sql index 0b9eda21..dfb32ca1 100644 --- a/schema/ttrss_schema_pgsql.sql +++ b/schema/ttrss_schema_pgsql.sql @@ -187,6 +187,7 @@ create table ttrss_enclosures (id serial not null primary key, content_url text not null, content_type varchar(250) not null, title text not null, + duration text not null, post_id integer references ttrss_entries(id) ON DELETE cascade NOT NULL); create table ttrss_prefs_types (id integer not null primary key, diff --git a/schema/versions/mysql/26.sql b/schema/versions/mysql/26.sql index 75fe2458..14d62b8c 100644 --- a/schema/versions/mysql/26.sql +++ b/schema/versions/mysql/26.sql @@ -8,6 +8,7 @@ create table ttrss_enclosures (id serial not null primary key, content_type varchar(250) not null, post_id integer not null, title text not null, + duration text not null, index (post_id), foreign key (post_id) references ttrss_entries(id) ON DELETE cascade); diff --git a/schema/versions/pgsql/26.sql b/schema/versions/pgsql/26.sql index fa1c812e..c7c1be69 100644 --- a/schema/versions/pgsql/26.sql +++ b/schema/versions/pgsql/26.sql @@ -7,6 +7,7 @@ create table ttrss_enclosures (id serial not null primary key, content_url text not null, content_type varchar(250) not null, title text not null, + duration text not null, post_id integer references ttrss_entries(id) ON DELETE cascade NOT NULL); update ttrss_version set schema_version = 26; diff --git a/tt-rss.css b/tt-rss.css index f1580b03..cd33911d 100644 --- a/tt-rss.css +++ b/tt-rss.css @@ -56,6 +56,16 @@ div.postReply div.postIcon { margin : 10px 0px 10px 10px; } +div.postReply div.postEnclosures { + border-width : 1px 0px 0px 0px; + border-style : dotted; + border-color : #c0c0c0; + font-size : 8pt; + margin-top : 1em; + padding-top : 0.2em; + color : gray; +} + div.postReply img.tagsPic { width : 16px; height : 16px; -- 2.39.5