# SPDX-License-Identifier: GPL-3.0-or-later from flask import Flask, render_template, request, redirect, url_for, session, send_from_directory from PIL import Image from gen_image import gen_image from printer_info import * from datetime import datetime from print import * from format_image import * from file_handler import * from colorama import Fore, Style import os generated_image_filename = "generated.png" uploaded_image_filename = "uploaded" #extention is depended on uploaded file format app = Flask(__name__) app.secret_key = "blahaj" templates = { "DNH": { "text1": { "string": "Do Not Hack", "size": 130, "pos": 0 }, "text2": { "string": "bottom text", "size": 50, "pos": 130 }, "cut": True }, "Food": { "text1": { "string": "Nickname", "size": 130, "pos": 0 }, "text2": { "string": "", "size": 50, "pos": 130 }, "cut": True } } @app.route('/', methods=['GET', 'POST']) def base(): check_for_new_user(session) return render_template('base.html') # gets triggered when the user_data folder for the user is created @new_user_handler def on_new_user(session): print(Fore.BLUE + "new user with ID:", session["ID"], Style.RESET_ALL) session["text image path"] = None session["uploaded image path"] = None session["cut"] = True session["text1"] = templates["DNH"]["text1"] session["text2"] = templates["DNH"]["text2"] session["cut"] = templates["DNH"]["cut"] @app.route('/image', methods=['GET', 'POST']) def image(): check_for_new_user(session) if request.method == 'POST': if 'image' not in request.files: return redirect(request.url) file = request.files['image'] if file.filename == '': return redirect(request.url) if file: extension = os.path.splitext(file.filename)[1] session["uploaded image path"] = uploaded_image_filename+extension filepath = get_file_path(session, session["uploaded image path"]) file.save(filepath) format_image(filepath).save(filepath) return render_template('image.html', filename=session["uploaded image path"], cut=session["cut"]) #TODO: maybe merge some stuff with text-print @app.route('/image-print', methods=['GET', 'POST']) def image_print(): check_for_new_user(session) if session["uploaded image path"] == None: print(Fore.YELLOW + "Warning, file doesn't exist" + Style.RESET_ALL) return render_template('image.html', filename=session["uploaded image path"], cut=session["cut"]) if request.method == 'POST': image = format_image_to_label(get_file_path(session, session["uploaded image path"])) print_image(image) if 'cut' in request.form: print("printing and cutting") cut_paper() session["cut"] = True; else: print("printing") session["cut"] = False; return render_template('image.html', filename=session["uploaded image path"], cut=session["cut"]) @app.route('/text-template', methods=['GET', 'POST']) def text_template(): check_for_new_user(session) if request.method == 'POST': template = templates[request.form["template"]] if request.form["template"] == "Food": template["text2"]["string"] = datetime.now().strftime('%Y-%m-%d') session["text1"] = template["text1"] session["text2"] = template["text2"] session["cut"] = template["cut"] return render_template('text.html', filename="text.png", text1=session["text1"], text2=session["text2"], cut=session["cut"]) @app.route('/text-form', methods=['GET', 'POST']) def text_form(): check_for_new_user(session) if request.method == 'POST': session["text1"] = { "string": request.form["string1"], "size": int(request.form["size1"]), "pos": int(request.form["pos1"]), } session["text2"] = { "string": request.form["string2"], "size": int(request.form["size2"]), "pos": int(request.form["pos2"]), } img = gen_image(label_width, session["text1"], session["text2"]) get_folder_path(session) session["text image path"] = generated_image_filename img.save(get_file_path(session, session["text image path"])) print() print(session["text image path"]) return render_template('text.html', filename=session["text image path"], text1=session["text1"], text2=session["text2"], cut=session["cut"]) @app.route('/text', methods=['GET', 'POST']) def text(): check_for_new_user(session) return render_template('text.html', filename=session["text image path"], text1=session["text1"], text2=session["text2"], cut=session["cut"]) @app.route('/text-print', methods=['GET', 'POST']) def text_print(): check_for_new_user(session) if request.method == 'POST': if session["text image path"] == None: print(Fore.YELLOW + "Warning, file doesn't exist" + Style.RESET_ALL) return render_template('text.html', filename=session["text image path"], text1=session["text1"], text2=session["text2"], cut=session["cut"]) image = format_image_to_label(get_file_path(session, session["text image path"])) print_image(image) if 'cut' in request.form: print("printing and cutting") cut_paper() session["cut"] = True; else: print("printing") session["cut"] = False; return render_template('text.html', filename=session["text image path"], text1=session["text1"], text2=session["text2"], cut=session["cut"]) @app.route('/user_data/') def user_data(filename): return send_from_directory(get_folder_path(session), filename) @app.route('/uploads/') def uploaded_file(filename): return redirect(url_for('static', filename='uploads/' + filename)) @app.route('/text/') def generated_file(filename): return redirect(url_for('static', filename='text/' + filename)) if __name__ == "__main__": app.run(debug=False)