mastodon-BDSM/BDSM/views.py

110 lines
3.6 KiB
Python

#!/usr/bin/env python3
import os
from flask import render_template, request, url_for, redirect, flash
from BDSM import app, db
from BDSM.models import Media, Settings, Toot
from BDSM.toot import app_register, archive_toot
from mastodon import Mastodon
@app.route('/', methods=['GET', 'POST'])
def index():
page = request.args.get('page', 1, type=int)
toots_ = Toot.query.order_by(Toot.created_at.desc()).paginate(page, per_page=50)
toots = []
for toot in toots_.items:
if toot.content == None:
continue
if toot.media_list != "":
toot.medias = []
#media_list "1111,2222,333,"
media_list = toot.media_list[:-1].split(",")
for media_id in media_list:
media = Media.query.get(int(media_id))
if media != None:
toot.medias.append(media)
toots.append(toot)
return render_template('view.html', toots=toots, pagination=toots_)
@app.route('/settings', methods=['GET', 'POST'])
def settings():
if request.method == 'POST':
account = request.form['account']
timezone = request.form['timezone']
if not account or len(account) > 30:
flash('无效输入')
return redirect(url_for('settings'))
settings = Settings.query.first()
if settings == None:
settings = Settings(account=account, timezone=timezone)
db.session.add(settings)
else:
settings.account = account
settings.timezone = timezone
db.session.commit()
flash('设置已修改')
return redirect(url_for('settings'))
settings = Settings.query.first()
app_init = os.path.isfile('pyBDSM_clientcred.secret') and os.path.isfile('user.secret')
if settings == None:
flash('请输入相关设置!')
return render_template('settings.html',settings=settings, app_init=app_init)
@app.route('/register', methods=['GET', 'POST'])
def register():
settings = Settings.query.first()
if settings == None:
flash('请先输入用户名!')
return redirect(url_for('settings'))
else:
account = settings.account[1:]
username, domain = account.split("@")
url = "https://" + domain
if request.method == 'POST':
token = request.form['token'].rstrip()
mastodon = Mastodon(client_id='pyBDSM_clientcred.secret', api_base_url=url)
mastodon.log_in(code=token, to_file='user.secret', scopes=['read'])
if os.path.isfile('user.secret'):
flash('应用已授权!')
return redirect(url_for('settings'))
if not os.path.isfile('pyBDSM_clientcred.secret'):
app_register(url)
if not os.path.isfile('user.secret'):
mastodon = Mastodon(client_id='pyBDSM_clientcred.secret', api_base_url=url)
url = mastodon.auth_request_url(client_id='pyBDSM_clientcred.secret', scopes=['read'])
return render_template('register.html',url=url)
flash('已授权过!')
return redirect(url_for('settings'))
@app.route('/archive', methods=['GET', 'POST'])
def archive():
settings = Settings.query.first()
if settings == None:
return redirect(url_for('settings'))
elif len(Toot.query.all()) > 0:
flash('现暂不支持重复存档!') #TODO
return redirect(url_for('index'))
else:
account = settings.account[1:]
username, domain = account.split("@")
url = "https://" + domain
archive_toot(url)
flash('存档完成……大概!')
return redirect(url_for('index'))