diff options
| author | 2014-02-04 22:56:46 -0500 | |
|---|---|---|
| committer | 2014-02-04 22:56:46 -0500 | |
| commit | aa63f9f64fbf01039bf5b766263dbc18a1ebbd4c (patch) | |
| tree | c31e1cf633dfeb0a67f5a51427ae567c7550b955 | |
| parent | a201450b5817af23a57e8c68569c24ed5451b7ef (diff) | |
| parent | 575d0002cc3839760f0a389eb4af8cd7d23b74c6 (diff) | |
Merge branch 'dev' into shortcuts
Ajoute le défilement automatique de l'article quand le partage est sélectionné.
Conflicts:
p/scripts/main.js
| -rw-r--r-- | CHANGELOG | 1 | ||||
| -rw-r--r-- | README.md | 1 | ||||
| -rwxr-xr-x | app/Controllers/feedController.php | 9 | ||||
| -rw-r--r-- | app/Models/Feed.php | 2 | ||||
| -rw-r--r-- | lib/SimplePie/SimplePie.php | 29 | ||||
| -rw-r--r-- | p/scripts/main.js | 25 |
6 files changed, 56 insertions, 11 deletions
@@ -3,6 +3,7 @@ ## 2014-0x-xx FreshRSS 0.8 * Mise à jour des flux plus rapide grâce à une meilleure utilisation du cache + * Utilisation d’une signature MD5 du contenu intéressant pour les flux n’implémentant pas les requêtes conditionnelles ## 2014-01-29 FreshRSS 0.7 @@ -80,6 +80,7 @@ mysqldump -u utilisateur -p --databases freshrss > freshrss.sql * [php-http-304](http://alexandre.alapetite.fr/doc-alex/php-http-304/) * [jQuery](http://jquery.com/) * [keyboard_shortcuts](http://www.openjs.com/scripts/events/keyboard_shortcuts/) +* [flotr2](http://www.humblesoftware.com/flotr2) ## Uniquement pour certaines options * [bcrypt.js](https://github.com/dcodeIO/bcrypt.js) diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index cf9c993d5..918f007fd 100755 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -14,15 +14,15 @@ class FreshRSS_feed_Controller extends Minz_ActionController { ); } } - - $this->catDAO = new FreshRSS_CategoryDAO (); - $this->catDAO->checkDefault (); } public function addAction () { @set_time_limit(300); if (Minz_Request::isPost ()) { + $this->catDAO = new FreshRSS_CategoryDAO (); + $this->catDAO->checkDefault (); + $url = Minz_Request::param ('url_rss'); $cat = Minz_Request::param ('category', false); if ($cat === false) { @@ -309,6 +309,9 @@ class FreshRSS_feed_Controller extends Minz_ActionController { public function massiveImportAction () { @set_time_limit(300); + $this->catDAO = new FreshRSS_CategoryDAO (); + $this->catDAO->checkDefault (); + $entryDAO = new FreshRSS_EntryDAO (); $feedDAO = new FreshRSS_FeedDAO (); diff --git a/app/Models/Feed.php b/app/Models/Feed.php index 366c04c67..c71fb41ae 100644 --- a/app/Models/Feed.php +++ b/app/Models/Feed.php @@ -218,7 +218,7 @@ class FreshRSS_Feed extends Minz_Model { } if (($mtime === true) || ($mtime > $this->lastUpdate)) { - syslog(LOG_DEBUG, 'FreshRSS no cache ' . $mtime . ' > ' . $this->lastUpdate); + syslog(LOG_DEBUG, 'FreshRSS no cache ' . $mtime . ' > ' . $this->lastUpdate . ' for ' . $subscribe_url); $this->loadEntries($feed); // et on charge les articles du flux } else { syslog(LOG_DEBUG, 'FreshRSS use cache for ' . $subscribe_url); diff --git a/lib/SimplePie/SimplePie.php b/lib/SimplePie/SimplePie.php index fe01d382e..a23b2b830 100644 --- a/lib/SimplePie/SimplePie.php +++ b/lib/SimplePie/SimplePie.php @@ -1212,6 +1212,10 @@ class SimplePie $this->item_limit = (int) $limit; } + function cleanMd5($rss) { //FreshRSS + return md5(preg_replace(array('#<(lastBuildDate|pubDate|updated|feedDate|dc:date|slash:comments)>[^<]+</\\1>#', '#<!--.+?-->#s'), '', $rss)); + } + /** * Initialize the feed object * @@ -1305,6 +1309,10 @@ class SimplePie } list($headers, $sniffed) = $fetched; + + if (isset($this->data['md5'])) { //FreshRSS + $md5 = $this->data['md5']; + } } // Set up array of possible encodings @@ -1387,6 +1395,7 @@ class SimplePie } $this->data['build'] = SIMPLEPIE_BUILD; $this->data['mtime'] = time(); //FreshRSS + $this->data['md5'] = empty($md5) ? $this->cleanMd5($this->raw_data) : $md5; //FreshRSS // Cache the file if caching is enabled if ($cache && !$cache->save($this)) @@ -1462,7 +1471,7 @@ class SimplePie elseif ($cache->mtime() + $this->cache_duration < time()) { // If we have last-modified and/or etag set - if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag'])) + //if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag'])) //FreshRSS removed { $headers = array( 'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1', @@ -1476,7 +1485,7 @@ class SimplePie $headers['if-none-match'] = $this->data['headers']['etag']; } - $file = $this->registry->create('File', array($this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen)); + $file = $this->registry->create('File', array($this->feed_url, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen)); //FreshRSS if ($file->success) { @@ -1488,7 +1497,20 @@ class SimplePie } else { - unset($file); + $this->error = $file->error; //FreshRSS + return !empty($this->data); //FreshRSS + //unset($file); //FreshRSS removed + } + } + { //FreshRSS + $md5 = $this->cleanMd5($file->body); + if ($this->data['md5'] === $md5) { + syslog(LOG_DEBUG, 'SimplePie MD5 cache match for ' . $this->feed_url); + $cache->touch(); + return true; //Content unchanged even though server did not send a 304 + } else { + syslog(LOG_DEBUG, 'SimplePie MD5 cache no match for ' . $this->feed_url); + $this->data['md5'] = $md5; } } } @@ -1557,6 +1579,7 @@ class SimplePie { $this->data = array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD); $this->data['mtime'] = time(); //FreshRSS + $this->data['md5'] = empty($md5) ? $this->cleanMd5($file->body) : $md5; //FreshRSS if (!$cache->save($this)) { trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); diff --git a/p/scripts/main.js b/p/scripts/main.js index e9d6c40da..5a4fb5fb8 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -20,6 +20,16 @@ function redirect(url, new_tab) { } } +function needsScroll($elem) { + var $win = $(window), + winTop = $win.scrollTop(), + winHeight = $win.height(), + winBottom = winTop + winHeight, + elemTop = $elem.offset().top, + elemBottom = elemTop + $elem.outerHeight(); + return (elemTop < winTop || elemBottom > winBottom) ? elemTop - (winHeight / 2) : 0; +} + function str2int(str) { if (str == '') { return 0; @@ -172,12 +182,14 @@ function mark_favorite(active) { } function toggleContent(new_active, old_active) { - old_active.removeClass("active").removeClass("current"); + old_active.removeClass("active"); if (new_active.length === 0) { return; } + old_active.removeClass("current"); + if (does_lazyload) { new_active.find('img[data-original], iframe[data-original]').each(function () { this.setAttribute('src', this.getAttribute('data-original')); @@ -322,6 +334,11 @@ function auto_share(key) { } // Display the share div window.location.hash = share.attr('id'); + // Force scrolling to the share div + var scroll = needsScroll(share.closest('.bottom')); + if (scroll !== 0) { + $('html,body').scrollTop(scroll); + } // Force the key value if there is only one action, so we can trigger it automatically if (shares.length === 1) { key = 1; @@ -553,7 +570,7 @@ function init_shortcuts() { function init_stream(divStream) { divStream.on('click', '.flux_header', function (e) { //flux_header_toggle - if ($(e.target).closest('.item.website > a').length > 0) { + if ($(e.target).closest('.item.website, .item.link').length > 0) { return; } var old_active = $(".flux.current"), @@ -580,7 +597,7 @@ function init_stream(divStream) { return false; }); - divStream.on('click', '.item.title>a', function (e) { + divStream.on('click', '.item.title > a', function (e) { if (e.ctrlKey) { return true; //Allow default control-click behaviour such as open in backround-tab } @@ -593,7 +610,7 @@ function init_stream(divStream) { }); if (auto_mark_site) { - divStream.on('click', '.flux .link a', function () { + divStream.on('click', '.flux .link > a', function () { mark_read($(this).parent().parent().parent(), true); }); } |
