users to posts many-to-many so we don't have lots of duplicate posts
This commit is contained in:
parent
8dd5b2ea1a
commit
85f1e9bc96
4 changed files with 28 additions and 21 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,3 +2,4 @@
|
||||||
.sass-cacheconfig.py
|
.sass-cacheconfig.py
|
||||||
celerybeat-schedule
|
celerybeat-schedule
|
||||||
.sass-cache
|
.sass-cache
|
||||||
|
__pycache__
|
||||||
|
|
|
@ -8,6 +8,13 @@ bleach.ALLOWED_ATTRIBUTES.update({
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
users_to_feeds = db.Table(
|
||||||
|
'users_to_feeds', db.Model.metadata,
|
||||||
|
db.Column('user_id', db.Integer, db.ForeignKey('user.id'), index=True),
|
||||||
|
db.Column('feed_id', db.Integer, db.ForeignKey('feed.id'), index=True))
|
||||||
|
|
||||||
|
|
||||||
class User(db.Model):
|
class User(db.Model):
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
domain = db.Column(db.String(256))
|
domain = db.Column(db.String(256))
|
||||||
|
@ -38,8 +45,7 @@ class User(db.Model):
|
||||||
|
|
||||||
class Feed(db.Model):
|
class Feed(db.Model):
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
user_id = db.Column(db.Integer, db.ForeignKey(User.id))
|
users = db.relationship(User, secondary='users_to_feeds', backref='feeds')
|
||||||
user = db.relationship(User, backref='feeds')
|
|
||||||
# the name of this feed
|
# the name of this feed
|
||||||
name = db.Column(db.String(256))
|
name = db.Column(db.String(256))
|
||||||
# url that we subscribed to; periodically check if the feed url
|
# url that we subscribed to; periodically check if the feed url
|
||||||
|
|
|
@ -32,7 +32,7 @@ $(attachListeners);
|
||||||
{% block header %}
|
{% block header %}
|
||||||
{% if current_user.is_authenticated() %}
|
{% if current_user.is_authenticated() %}
|
||||||
<form action="{{ url_for('.subscribe') }}" method="POST">
|
<form action="{{ url_for('.subscribe') }}" method="POST">
|
||||||
<input type="text" id="origin" name="origin" placeholder="Feed URL" />
|
<input type="url" id="origin" name="origin" placeholder="Feed URL" />
|
||||||
<button type="submit" id="subscribe">Subscribe</button>
|
<button type="submit" id="subscribe">Subscribe</button>
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -36,7 +36,7 @@ def install():
|
||||||
|
|
||||||
@ui.route('/feeds')
|
@ui.route('/feeds')
|
||||||
def feeds():
|
def feeds():
|
||||||
feeds = Feed.query.filter(Feed.user == flask_login.current_user).all()
|
feeds = flask_login.current_user.feeds
|
||||||
return flask.render_template('feeds.jinja2', feeds=feeds)
|
return flask.render_template('feeds.jinja2', feeds=feeds)
|
||||||
|
|
||||||
|
|
||||||
|
@ -142,7 +142,8 @@ def subscribe():
|
||||||
|
|
||||||
|
|
||||||
def add_subscription(origin, feed_url, type):
|
def add_subscription(origin, feed_url, type):
|
||||||
feed = None
|
feed = Feed.query.filter_by(feed=feed_url, type=type).first()
|
||||||
|
if not feed:
|
||||||
if type == 'html':
|
if type == 'html':
|
||||||
flask.current_app.logger.debug('mf2py parsing %s', feed_url)
|
flask.current_app.logger.debug('mf2py parsing %s', feed_url)
|
||||||
parsed = mf2util.interpret_feed(mf2py.parse(url=feed_url), feed_url)
|
parsed = mf2util.interpret_feed(mf2py.parse(url=feed_url), feed_url)
|
||||||
|
@ -150,16 +151,15 @@ def add_subscription(origin, feed_url, type):
|
||||||
if not name or len(name) > 140:
|
if not name or len(name) > 140:
|
||||||
p = urllib.parse.urlparse(origin)
|
p = urllib.parse.urlparse(origin)
|
||||||
name = p.netloc + p.path
|
name = p.netloc + p.path
|
||||||
feed = Feed(user=flask_login.current_user, name=name,
|
feed = Feed(name=name, origin=origin, feed=feed_url, type=type)
|
||||||
origin=origin, feed=feed_url, type=type)
|
|
||||||
elif type == 'xml':
|
elif type == 'xml':
|
||||||
flask.current_app.logger.debug('feedparser parsing %s', feed_url)
|
flask.current_app.logger.debug('feedparser parsing %s', feed_url)
|
||||||
parsed = feedparser.parse(feed_url)
|
parsed = feedparser.parse(feed_url)
|
||||||
feed = Feed(user=flask_login.current_user,
|
feed = Feed(name=parsed.feed and parsed.feed.title,
|
||||||
name=parsed.feed and parsed.feed.title,
|
|
||||||
origin=origin, feed=feed_url, type=type)
|
origin=origin, feed=feed_url, type=type)
|
||||||
if feed:
|
if feed:
|
||||||
db.session.add(feed)
|
db.session.add(feed)
|
||||||
|
flask_login.current_user.feeds.append(feed)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
# go ahead and update the fed
|
# go ahead and update the fed
|
||||||
tasks.update_feed.delay(feed.id)
|
tasks.update_feed.delay(feed.id)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue