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
|
socket=/tmp/woodwind.sock
|
||||||
chmod-socket=666
|
chmod-socket=666
|
||||||
module=woodwind.wsgi
|
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)
|
mf2py.Parser(url=feed.feed).to_dict(), feed.feed)
|
||||||
hfeed = parsed.get('entries', [])
|
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:
|
for hentry in hfeed:
|
||||||
permalink = url = hentry.get('url')
|
permalink = url = hentry.get('url')
|
||||||
uid = hentry.get('uid') or url
|
uid = hentry.get('uid') or url
|
||||||
|
if not uid:
|
||||||
if not uid or uid in preexisting:
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
entry = session.query(Entry)\
|
||||||
|
.filter(Entry.feed == feed)\
|
||||||
|
.filter(Entry.uid == uid).first()
|
||||||
|
|
||||||
# hentry = mf2util.interpret(mf2py.Parser(url=url).to_dict(), url)
|
# hentry = mf2util.interpret(mf2py.Parser(url=url).to_dict(), url)
|
||||||
# permalink = hentry.get('url') or url
|
# permalink = hentry.get('url') or url
|
||||||
# uid = hentry.get('uid') or uid
|
# uid = hentry.get('uid') or uid
|
||||||
entry = Entry(
|
|
||||||
feed=feed,
|
name = hentry.get('name')
|
||||||
published=hentry.get('published') or now,
|
content = hentry.get('content')
|
||||||
updated=hentry.get('updated'),
|
|
||||||
uid=uid,
|
if not entry:
|
||||||
permalink=permalink,
|
entry = Entry(feed=feed, uid=uid, retrieved=now)
|
||||||
retrieved=now,
|
session.add(entry)
|
||||||
title=hentry.get('name'),
|
|
||||||
content=hentry.get('content'),
|
entry.published = hentry.get('published') or entry.published or now
|
||||||
author_name=hentry.get('author', {}).get('name'),
|
entry.updated = hentry.get('updated') or entry.updated
|
||||||
author_photo=hentry.get('author', {}).get('photo')
|
entry.permalink = permalink
|
||||||
or fallback_photo(feed.origin),
|
if content:
|
||||||
author_url=hentry.get('author', {}).get('url'))
|
entry.title = name
|
||||||
session.add(entry)
|
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()
|
session.commit()
|
||||||
logger.debug('saved entry: %s', entry.permalink)
|
logger.debug('saved entry: %s', entry.permalink)
|
||||||
yield entry
|
yield entry
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
|
|
||||||
{% if entries %}
|
{% if entries %}
|
||||||
<div class="pager">
|
<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>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
{% for feed in feeds %}
|
{% for feed in feeds %}
|
||||||
<article>
|
<article>
|
||||||
|
|
||||||
<form style="display:inline"
|
<form style="display:inline"
|
||||||
action="{{ url_for('.edit_feed') }}" method="POST">
|
action="{{ url_for('.edit_feed') }}" method="POST">
|
||||||
<input type="hidden" name="id" value="{{ feed.id }}"/>
|
<input type="hidden" name="id" value="{{ feed.id }}"/>
|
||||||
|
@ -35,6 +36,8 @@
|
||||||
<input type="hidden" name="id" value="{{ feed.id }}"/>
|
<input type="hidden" name="id" value="{{ feed.id }}"/>
|
||||||
<button type="submit">Delete</button>
|
<button type="submit">Delete</button>
|
||||||
</form>
|
</form>
|
||||||
|
<br/>
|
||||||
|
<a href="{{ url_for('.index', feed=feed.id) }}">View posts from this feed</a>
|
||||||
</article>
|
</article>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,11 @@ def index():
|
||||||
if flask_login.current_user.is_authenticated():
|
if flask_login.current_user.is_authenticated():
|
||||||
per_page = flask.current_app.config.get('PER_PAGE', 30)
|
per_page = flask.current_app.config.get('PER_PAGE', 30)
|
||||||
offset = (page - 1) * per_page
|
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:
|
if feed_ids:
|
||||||
entries = Entry.query.filter(Entry.feed_id.in_(feed_ids))\
|
entries = Entry.query.filter(Entry.feed_id.in_(feed_ids))\
|
||||||
.order_by(Entry.published.desc())\
|
.order_by(Entry.published.desc())\
|
||||||
|
@ -73,7 +77,7 @@ def settings():
|
||||||
@views.route('/update_feed', methods=['POST'])
|
@views.route('/update_feed', methods=['POST'])
|
||||||
@flask_login.login_required
|
@flask_login.login_required
|
||||||
def update_feed():
|
def update_feed():
|
||||||
feed_id = flask.request.args.get('id')
|
feed_id = flask.request.form.get('id')
|
||||||
tasks.update_feed.delay(feed_id)
|
tasks.update_feed.delay(feed_id)
|
||||||
return flask.redirect(flask.url_for('.feeds'))
|
return flask.redirect(flask.url_for('.feeds'))
|
||||||
|
|
||||||
|
@ -301,3 +305,12 @@ def find_possible_feeds(origin):
|
||||||
'type': 'xml',
|
'type': 'xml',
|
||||||
})
|
})
|
||||||
return feeds
|
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