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))])
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)
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'))])
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
def fetch(fid: int): fanfic = session.query(Fanfic).filter(Fanfic.id == fid).first() fetch_chapters(fanfic) return redirect(url_for('show', fid=fid))
def refresh(fid: int): fanfic = session.query(Fanfic).filter(Fanfic.id == fid).first() update_metadata(fanfic) return redirect(url_for('show', fid=fid))