|
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 [email protected] mit dem Betreff `Bookshine Zugriffscode`.') |
|
|
|
if __name__ == '__main__': |
|
main() |
|
|