PIVOT 1.1.0
This commit is contained in:
commit
8a53234eb6
161 files changed
+31109
No files matched your search
@@ -0,0 +1,84 @@
|
||||
"""Google › E-mails met een label verplaatsen of kopiëren naar een andere mailbox."""
|
||||
from flask import Blueprint, render_template, request, redirect, url_for, flash, session, jsonify
|
||||
|
||||
from blueprints.auth import login_required
|
||||
from rechten import recht_vereist, log
|
||||
from services import gmail_label_service as gl
|
||||
from services.gmail_delegation_service import GmailDelegationService, DelegationError
|
||||
|
||||
gmail_labels_bp = Blueprint('gmail_labels', __name__)
|
||||
|
||||
|
||||
def _mailbox(waarde):
|
||||
"""E-mailadres → {'email', 'naam', ...} via Google (hoofdadres, ook als er een alias ingegeven werd)."""
|
||||
return GmailDelegationService().resolve_user(waarde)
|
||||
|
||||
|
||||
@gmail_labels_bp.route('/', methods=['GET'])
|
||||
@login_required
|
||||
@recht_vereist('gmail_labels')
|
||||
def overzicht():
|
||||
bron_in = (request.args.get('bron') or '').strip()
|
||||
doel_in = (request.args.get('doel') or '').strip()
|
||||
label_id = (request.args.get('label') or '').strip()
|
||||
bron = doel = None
|
||||
labels, fout, gekozen = [], None, None
|
||||
if bron_in:
|
||||
try:
|
||||
bron = _mailbox(bron_in)
|
||||
labels = gl.labels(bron['email'])
|
||||
gekozen = next((l for l in labels if l['id'] == label_id), None)
|
||||
except (DelegationError, gl.LabelFout) as e:
|
||||
fout = str(e)
|
||||
except Exception as e:
|
||||
fout = gl.vriendelijk(e)
|
||||
if doel_in and not fout:
|
||||
try:
|
||||
doel = _mailbox(doel_in)
|
||||
if bron and doel['email'] == bron['email']:
|
||||
fout, doel = "De doelmailbox moet een andere mailbox zijn dan de bronmailbox.", None
|
||||
except DelegationError as e:
|
||||
fout = str(e)
|
||||
try:
|
||||
geschiedenis = gl.geschiedenis()
|
||||
except Exception:
|
||||
geschiedenis = []
|
||||
return render_template('gmail_labels.html', bron_in=bron_in, doel_in=doel_in, bron=bron, doel=doel,
|
||||
labels=labels, gekozen=gekozen, fout=fout, status=gl.LabelVerplaatser().status,
|
||||
geschiedenis=geschiedenis, scope=gl.SCOPE)
|
||||
|
||||
|
||||
@gmail_labels_bp.route('/start', methods=['POST'])
|
||||
@login_required
|
||||
@recht_vereist('gmail_labels')
|
||||
def start():
|
||||
f = request.form
|
||||
terug = dict(bron=f.get('bron'), doel=f.get('doel'), label=f.get('label'))
|
||||
modus = 'verplaatsen' if f.get('modus') == 'verplaatsen' else 'kopieren'
|
||||
try:
|
||||
bron, doel = _mailbox(f.get('bron')), _mailbox(f.get('doel'))
|
||||
if bron['email'] == doel['email']:
|
||||
raise DelegationError("De doelmailbox moet een andere mailbox zijn dan de bronmailbox.")
|
||||
label = next((l for l in gl.labels(bron['email']) if l['id'] == f.get('label')), None)
|
||||
if not label:
|
||||
raise gl.LabelFout("Dat label bestaat niet (meer) in de bronmailbox.")
|
||||
except (DelegationError, gl.LabelFout) as e:
|
||||
flash(str(e), "error")
|
||||
return redirect(url_for('gmail_labels.overzicht', **terug))
|
||||
door = session.get('naam') or session.get('user')
|
||||
if gl.LabelVerplaatser().start(bron['email'], label['id'], label['naam'], doel['email'], modus, door):
|
||||
log(f"Gmail: label '{label['naam']}' {modus} van {bron['email']} naar {doel['email']}")
|
||||
flash(f"Gestart: de berichten met label '{label['naam']}' worden {'verplaatst' if modus == 'verplaatsen' else 'gekopieerd'} "
|
||||
f"naar {doel['email']}. Je mag deze pagina sluiten; het gaat verder op de achtergrond.", "info")
|
||||
else:
|
||||
flash("Er loopt al een opdracht. Wacht tot die klaar is.", "warning")
|
||||
return redirect(url_for('gmail_labels.overzicht', **terug))
|
||||
|
||||
|
||||
@gmail_labels_bp.route('/status.json', methods=['GET'])
|
||||
@login_required
|
||||
@recht_vereist('gmail_labels')
|
||||
def status():
|
||||
s = gl.LabelVerplaatser().status
|
||||
return jsonify({k: s.get(k) for k in ('bezig', 'voortgang', 'totaal', 'gelukt', 'overgeslagen', 'fouten', 'fout',
|
||||
'resultaat', 'opdracht', 'foutvoorbeelden')})
|
||||
Reference in new issue
Block a user