update h-feed entries that have changed
This commit is contained in:
parent
a9f36d8e7d
commit
27e5ebd47d
5 changed files with 46 additions and 30 deletions
|
@ -5,4 +5,4 @@ threads=2
|
|||
socket=/tmp/woodwind.sock
|
||||
chmod-socket=666
|
||||
module=woodwind.wsgi
|
||||
pidfile=/tmp/woodwind.pid
|
||||
#pidfile=/tmp/woodwind.pid
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 %}
|
||||
|
||||
|
|
|
@ -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 %}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue