Beispiel #1
0
def view(fid: int, tmid: int):
    fanfic = session.query(Fanfic).filter(Fanfic.id == fid).first()
    threadmark = session.query(Threadmark).filter(
        Threadmark.post_id == tmid).first()

    prev_tm = session.query(Threadmark)\
        .filter(Threadmark.fanfic_id == fanfic.id, Threadmark.post_id < tmid)\
        .order_by(Threadmark.post_id.desc())\
        .first()

    next_tm = session.query(Threadmark) \
        .filter(Threadmark.fanfic_id == fanfic.id, Threadmark.post_id > tmid) \
        .order_by(Threadmark.post_id.asc()) \
        .first()

    adapter = create_adapter(fanfic.thread_url)
    contents = adapter.get_content(fanfic.thread_key, threadmark.post_id)

    return render_template('view.html',
                           fanfic=fanfic,
                           threadmark=threadmark,
                           contents=contents,
                           prev=prev_tm,
                           next=next_tm,
                           breadcrumbs=[('Index', url_for('index')),
                                        (fanfic.title,
                                         url_for('show', fid=fanfic.id))])
Beispiel #2
0
def index():
    if request.method == 'POST':
        thread_url = request.form['thread_url']

        create_from_thread_url(thread_url)
        return redirect(url_for('index'))

    search = request.args.get('q', None)
    sort = request.args.get('s', 'title')

    fanfics = session.query(Fanfic)

    if search:
        fanfics = fanfics.filter(
            Fanfic.title.contains(search) | Fanfic.author.contains(search))

    if sort == 'title':
        fanfics = fanfics.order_by(Fanfic.title)
    elif sort == 'author':
        fanfics = fanfics.order_by(Fanfic.author)
    elif sort == 'word-count':
        fanfics = fanfics.order_by(Fanfic.words.desc())
    elif sort == 'id':
        fanfics = fanfics.order_by(Fanfic.id)

    return render_template('index.html', fanfics=fanfics)
Beispiel #3
0
def edit(fid: int):
    fanfic = session.query(Fanfic).filter(Fanfic.id == fid).first()

    if request.method == 'POST':
        fanfic.title = request.form['title']
        fanfic.author = request.form['author']
        fanfic.words = request.form['words']
        fanfic.summary = request.form['summary']
        session.commit()
        return redirect(url_for('show', fid=fanfic.id))
    else:
        return render_template('edit.html',
                               fanfic=fanfic,
                               breadcrumbs=[('Index', url_for('index'))])
Beispiel #4
0
def show(fid: int):
    fanfic = session.query(Fanfic).filter(Fanfic.id == fid).first()

    action = request.args.get('do', 'show')
    if action == 'delete':
        session.delete(fanfic)
        session.commit()
        return redirect(url_for('index'))
    elif action == 'edit':
        return 'Not Implemented'
    else:
        threadmarks = session.query(Threadmark).filter(
            Threadmark.fanfic_id == fanfic.id).order_by(Threadmark.post_id)
        status = {
            tm.post_id: thread.has_post(fanfic.thread_key, tm.post_id)
            for tm in threadmarks
        }

        return render_template('show.html',
                               fanfic=fanfic,
                               threadmarks=threadmarks,
                               status=status,
                               breadcrumbs=[('Index', url_for('index'))])
def create_from_thread_url(thread_url):
    adapter = create_adapter(thread_url)

    canonical_url = adapter.normalize_url(thread_url)

    result = session.query(Fanfic).filter(
        Fanfic.thread_url == canonical_url).first()
    if result:
        update_metadata(result)
        return False, result
    else:
        fanfic = adapter.fetch_metadata()
        session.add(fanfic)
        session.commit()
        word_count = update_threadmarks(adapter, fanfic)
        fanfic.words = utils.or_else(word_count, fanfic.words)
        session.commit()

        return True, fanfic
Beispiel #6
0
def fetch(fid: int):
    fanfic = session.query(Fanfic).filter(Fanfic.id == fid).first()

    fetch_chapters(fanfic)

    return redirect(url_for('show', fid=fid))
Beispiel #7
0
def refresh(fid: int):
    fanfic = session.query(Fanfic).filter(Fanfic.id == fid).first()

    update_metadata(fanfic)

    return redirect(url_for('show', fid=fid))