| | import base64 |
| | import hashlib |
| | import requests |
| | import os |
| | import streamlit as st |
| |
|
| | BOOKSHINE_HOST = 'https://api.bookshine.at' |
| | BOOKSHINE_PORT = '4690' |
| | PASSWORDS = [p.lower() for p in os.environ.get("PASSWORDS", "").split(",")] |
| |
|
| | PITCH_EMBED = """<iframe src="https://pitch.com/embed/38e99a83-1de6-4866-a515-dd3954c473e5" allow="fullscreen" allowfullscreen="" width="560" height="368" style="border:0"></iframe>""" |
| |
|
| | def password_is_correct(password): |
| | return password.lower() in PASSWORDS |
| |
|
| | def process_docx(uploaded_file): |
| | |
| | encoded_file = base64.b64encode(uploaded_file.read()).decode('utf-8') |
| |
|
| | payload = { |
| | "filename": uploaded_file.name, |
| | "attachment_b64": encoded_file, |
| | "include_diff": True, |
| | "include_docx": True, |
| | "include_commas": True, |
| | "is_demo": False, |
| | } |
| |
|
| | response = requests.post(f'{BOOKSHINE_HOST}:{BOOKSHINE_PORT}/process_md', json=payload) |
| |
|
| | |
| | if response.ok: |
| | response = response.json() |
| |
|
| | |
| | decoded_file = base64.b64decode(response['docx']) |
| | out_name = uploaded_file.name.replace('.docx', '-bookshine.docx') |
| | st.download_button('✅ Korrigierten Umbruch herunterladen', data=decoded_file, file_name=out_name) |
| |
|
| | |
| | diff = response["diff"].replace("¶", " ") |
| | diff = diff.replace("<ins>", "<ins style='background-color: #c8e6c9; text-decoration: underline;'>") |
| | st.write(diff, unsafe_allow_html=True) |
| | else: |
| | st.error('Es ist ein Fehler aufgetreten') |
| | return |
| |
|
| |
|
| | def process_pdf(uploaded_file): |
| | |
| | encoded_file = base64.b64encode(uploaded_file.read()).decode('utf-8') |
| |
|
| | |
| | md5 = hashlib.md5(encoded_file.encode()).hexdigest() |
| |
|
| | payload = { |
| | "attachment_id": md5, |
| | "attachment_b64": encoded_file, |
| | } |
| |
|
| | response = requests.post(f'{BOOKSHINE_HOST}:{BOOKSHINE_PORT}/process_umbruch', json=payload) |
| |
|
| | |
| | if response.ok: |
| | response = response.json() |
| | |
| | b64 = response['annotated'] |
| | decoded_file = base64.b64decode(b64) |
| | out_name = uploaded_file.name.replace('.pdf', '-bookshine.pdf') |
| | st.download_button('✅ Report herunterladen', data=decoded_file, file_name=out_name) |
| |
|
| | |
| | pdf_display = f'<iframe src="data:application/pdf;base64,{b64}" width="800" height="800" type="application/pdf"></iframe>' |
| | st.write(pdf_display, unsafe_allow_html=True) |
| | else: |
| | st.error('Es ist ein Fehler aufgetreten') |
| |
|
| |
|
| | def main(): |
| | st.write("<div><span style='margin-left: 250px; font-size: 5em; color: black;'>❧</span> </div>", unsafe_allow_html=True) |
| |
|
| | st.write(PITCH_EMBED, unsafe_allow_html=True) |
| |
|
| | st.markdown("<br/>", unsafe_allow_html=True) |
| |
|
| | st.subheader('Überzeugen Sie sich selbst') |
| |
|
| | if "in_progress" not in st.session_state: |
| | st.session_state.in_progress = False |
| |
|
| | |
| |
|
| | uploaded_file = st.file_uploader('Manuskript (.docx) oder Umbruch (.pdf) hochladen', type=['docx', 'pdf'], accept_multiple_files=False) |
| |
|
| | if not uploaded_file: |
| | return |
| |
|
| | password = st.text_input("Zugriffscode").lower() |
| |
|
| | process_button_name = "✨ Manuskript korrigieren" |
| | if uploaded_file.name.endswith('.pdf'): |
| | process_button_name = "✨ Umbruch prüfen" |
| |
|
| | def set_in_progress(): |
| | st.session_state.in_progress = True |
| |
|
| | |
| | if st.button(process_button_name, on_click=set_in_progress, disabled=not password_is_correct(password) or st.session_state.in_progress): |
| | with st.spinner('Datei wird verarbeitet …'): |
| | if uploaded_file.name.endswith('.docx'): |
| | process_docx(uploaded_file) |
| | elif uploaded_file.name.endswith('.pdf'): |
| | process_pdf(uploaded_file) |
| | else: |
| | st.warning('Bitte laden Sie eine Datei des Typs .docx oder .pdf hoch.') |
| | st.session_state.in_progress = False |
| |
|
| | if not password_is_correct(password): |
| | st.error('**Zugriffscode ist falsch.** Wenn Sie Bookshine testen wollen, aber keinen Zugriffscode haben, schreiben Sie einfach eine formlose E-Mail an alexander.seifert@gmail.com mit dem Betreff `Bookshine Zugriffscode`.') |
| |
|
| | if __name__ == '__main__': |
| | main() |
| |
|