update h-feed entries that have changed

This commit is contained in:
Kyle Mahan 2015-02-10 00:42:02 +00:00
parent a9f36d8e7d
commit 27e5ebd47d
5 changed files with 46 additions and 30 deletions

View file

@ -5,4 +5,4 @@ threads=2
socket=/tmp/woodwind.sock
chmod-socket=666
module=woodwind.wsgi
pidfile=/tmp/woodwind.pid
#pidfile=/tmp/woodwind.pid

View file

@ -159,40 +159,40 @@ def process_html_feed_for_new_entries(session, feed):
mf2py.Parser(url=feed.feed).to_dict(), feed.feed)
hfeed = parsed.get('entries', [])
all_uids = [e.get('uid') or e.get('url') for e in hfeed]
if all_uids:
preexisting = set(row[0] for row in session.query(Entry.uid)
.filter(Entry.uid.in_(all_uids))
.filter(Entry.feed == feed))
else:
preexisting = set()
# logger.debug('preexisting urls: %r', preexisting)
for hentry in hfeed:
permalink = url = hentry.get('url')
uid = hentry.get('uid') or url
if not uid or uid in preexisting:
if not uid:
continue
entry = session.query(Entry)\
.filter(Entry.feed == feed)\
.filter(Entry.uid == uid).first()
# hentry = mf2util.interpret(mf2py.Parser(url=url).to_dict(), url)
# permalink = hentry.get('url') or url
# uid = hentry.get('uid') or uid
entry = Entry(
feed=feed,
published=hentry.get('published') or now,
updated=hentry.get('updated'),
uid=uid,
permalink=permalink,
retrieved=now,
title=hentry.get('name'),
content=hentry.get('content'),
author_name=hentry.get('author', {}).get('name'),
author_photo=hentry.get('author', {}).get('photo')
or fallback_photo(feed.origin),
author_url=hentry.get('author', {}).get('url'))
session.add(entry)
name = hentry.get('name')
content = hentry.get('content')
if not entry:
entry = Entry(feed=feed, uid=uid, retrieved=now)
session.add(entry)
entry.published = hentry.get('published') or entry.published or now
entry.updated = hentry.get('updated') or entry.updated
entry.permalink = permalink
if content:
entry.title = name
entry.content = content
else:
entry.title = None
entry.content = name
entry.author_name = hentry.get('author', {}).get('name')
entry.author_photo = hentry.get('author', {}).get('photo') or fallback_photo(feed.origin)
entry.author_url = hentry.get('author', {}).get('url')
session.commit()
logger.debug('saved entry: %s', entry.permalink)
yield entry

View file

@ -50,7 +50,7 @@
{% if entries %}
<div class="pager">
<a id="older-link" href="{{ url_for(request.endpoint, page=page+1)}}">Older</a>
<a id="older-link" href="{{ url_for_other_page(page=page+1) }}">Older</a>
</div>
{% endif %}

View file

@ -16,6 +16,7 @@
{% for feed in feeds %}
<article>
<form style="display:inline"
action="{{ url_for('.edit_feed') }}" method="POST">
<input type="hidden" name="id" value="{{ feed.id }}"/>
@ -35,6 +36,8 @@
<input type="hidden" name="id" value="{{ feed.id }}"/>
<button type="submit">Delete</button>
</form>
<br/>
<a href="{{ url_for('.index', feed=feed.id) }}">View posts from this feed</a>
</article>
{% endfor %}

View file

@ -21,7 +21,11 @@ def index():
if flask_login.current_user.is_authenticated():
per_page = flask.current_app.config.get('PER_PAGE', 30)
offset = (page - 1) * per_page
feed_ids = set(f.id for f in flask_login.current_user.feeds)
if 'feed' in flask.request.args:
feed_ids = [int(flask.request.args.get('feed'))]
else:
feed_ids = set(f.id for f in flask_login.current_user.feeds)
if feed_ids:
entries = Entry.query.filter(Entry.feed_id.in_(feed_ids))\
.order_by(Entry.published.desc())\
@ -73,7 +77,7 @@ def settings():
@views.route('/update_feed', methods=['POST'])
@flask_login.login_required
def update_feed():
feed_id = flask.request.args.get('id')
feed_id = flask.request.form.get('id')
tasks.update_feed.delay(feed_id)
return flask.redirect(flask.url_for('.feeds'))
@ -301,3 +305,12 @@ def find_possible_feeds(origin):
'type': 'xml',
})
return feeds
@views.app_template_global()
def url_for_other_page(page):
"""http://flask.pocoo.org/snippets/44/#URL+Generation+Helper
"""
args = flask.request.view_args.copy()
args['page'] = page
return flask.url_for(flask.request.endpoint, **args)