Esempio n. 1
0
File: ajax.py Progetto: ibz/mureader
def follow():
    feed_id = request.form['feed_id']
    affect_news = bool(int(request.form['affect_news']))
    if not bool(int(request.form['value'])):
        models.Subscription.query.filter_by(user=current_user,
                                            feed_id=feed_id).delete()
        if affect_news:
            for ue in models.UserEntry.query \
                .join(models.Entry) \
                .filter(models.UserEntry.user==current_user, models.UserEntry.liked==False, models.Entry.feed_id==feed_id):
                db.session.delete(ue)
    else:
        db.session.add(models.Subscription(user=current_user, feed_id=feed_id))
        if affect_news:
            existing_entry_ids = {
                ue.entry_id
                for ue in models.UserEntry.query.join(models.Entry).filter(
                    models.UserEntry.user == current_user, models.Entry.feed_id
                    == feed_id)
            }
            for entry in models.Feed.query.filter_by(
                    id=feed_id).first().entries:
                if entry.id not in existing_entry_ids:
                    db.session.add(
                        models.UserEntry(user=current_user, entry=entry))
    db.session.commit()
    return jsonify(ok=True)
Esempio n. 2
0
File: ajax.py Progetto: ibz/mureader
def delete():
    entry_id = request.form['entry_id']
    if bool(int(request.form['value'])):
        models.UserEntry.query.filter_by(user=current_user,
                                         entry_id=entry_id).delete()
    else:
        db.session.add(models.UserEntry(user=current_user, entry_id=entry_id))
    db.session.commit()
    return jsonify(ok=True)
Esempio n. 3
0
File: ajax.py Progetto: ibz/mureader
def like():
    entry_id = request.form['entry_id']
    user_entry = models.UserEntry.query.filter_by(user=current_user,
                                                  entry_id=entry_id).first()
    liked = bool(int(request.form['value']))
    if not user_entry:
        if liked:  # you could like an entry that is not in your feed (if you see it in somebody else's feed)
            user_entry = models.UserEntry(user=current_user, entry_id=entry_id)
        else:  # unliking a missing item should simply be ignored
            return jsonify(ok=True)
    user_entry.liked = liked
    db.session.add(user_entry)
    db.session.commit()
    return jsonify(ok=True)
Esempio n. 4
0
def follow_website():
    if request.method == 'GET':
        return render_template(
            'subscription/follow-website.html',
            user=current_user,
            form=forms.FollowWebsiteForm(),
            jwt_csrf_token=request.cookies.get('csrf_access_token'))

    url = request.form['url']
    if not '://' in url:
        url = f"http://{url}"
    while url.endswith('/'):
        url = url[:-1]

    r = requests.get(url)
    alt_links = extract_feed_links(url, r.text)
    if not alt_links:  # NOTE: here we just assumed that "no links" means this is a feed on itself
        feed_url = request.form['url']
        parsed_feed = parse_feed(feed_url)
        if not parsed_feed:
            flash(f"Cannot parse feed at: {feed_url}")
            return redirect(url_for('subscription.follow_website'))
        feed = m.Feed(url=feed_url)
        feed.update(parsed_feed)
        db.session.add(feed)
        db.session.commit()
        new_entries, updated_entries = feed.update_entries(parsed_feed)
        db.session.add(feed)
        for entry in new_entries + updated_entries:
            db.session.add(entry)
        db.session.commit()
        subscription = m.Subscription(user_id=current_user.id, feed_id=feed.id)
        db.session.add(subscription)
        db.session.commit()
        for entry in new_entries + updated_entries:
            db.session.add(m.UserEntry(user=current_user, entry=entry))
        db.session.commit()
        return redirect(url_for('subscription.follow_website'))
    else:
        form = forms.FollowFeedForm()
        form.url.choices = alt_links
        return render_template(
            'subscription/follow-website.html',
            user=current_user,
            form=form,
            jwt_csrf_token=request.cookies.get('csrf_access_token'))
Esempio n. 5
0
def fetch_feed(feed):
    print("Fetching %s" % feed.url)
    parsed_feed = parse_feed(feed.url)
    feed.update(parsed_feed)
    new_entries_count = 0
    users_count = 0
    if parsed_feed:
        new_entries, updated_entries = feed.update_entries(parsed_feed)
        for entry in new_entries + updated_entries:
            db.session.add(entry)
        if new_entries:
            new_entries_count = len(new_entries)
            for user in models.User.query.join(models.Subscription).join(models.Feed).filter(models.Subscription.feed == feed):
                users_count += 1
                print("Adding %s new entries to %s" % (new_entries_count, user.email))
                for entry in new_entries:
                    db.session.add(models.UserEntry(user=user, entry=entry))
    db.session.add(feed)
    db.session.commit()
    return new_entries_count, users_count