import streamlit as st import google.generativeai as genai from db.mongodb import save_file_to_mongodb, fetch_file_from_mongodb, detect_file_type from powerpoint.xml_handling import ( extract_text_from_xml, update_xml_with_translated_text_mongodb, ppt_to_xml_mongodb ) from translate.translator import translate_text_dict from powerpoint.pptx_object import create_translated_ppt from excel.excel_translate import translate_xlsx, translate_csv from word.word_translate import translate_docx import dotenv import os dotenv.load_dotenv(".env") # Cấu hình API key api_key = os.getenv("GEMINI_API_KEY") genai.configure(api_key=api_key) model = genai.GenerativeModel("gemini-1.5-flash") # Giao diện Streamlit st.title("Upload PPTX to MongoDB") # st.set_option("server.fileUploader.allowMediaFiles", True) uploaded_file = st.file_uploader("Chọn file") file_name_input = st.text_input("Tên file để lưu (không cần .pptx)", value="") final_pptx_id = None # Biến lưu ID file sau khi xử lý if uploaded_file is not None: if st.button("Upload"): file_type = detect_file_type(uploaded_file) st.write(f"Detected file type: {file_type}") if file_type == "PPTX": file_id = save_file_to_mongodb(uploaded_file=uploaded_file, file_name=file_name_input) st.write(f"File ID: {file_id}") xml_file_id = ppt_to_xml_mongodb(file_id) text_dict = extract_text_from_xml(file_id=xml_file_id) translated_dict = translate_text_dict(text_dict, source_lang="VietNamese", target_lang="English", gemini_api=api_key) final_xml_id = update_xml_with_translated_text_mongodb(xml_file_id, translated_dict) st.write(f"Final XML ID: {final_xml_id}") # Lưu ID file PPTX cuối cùng final_pptx_id = create_translated_ppt( db_name="ppt", original_ppt_id=file_id, translated_xml_id=final_xml_id, output_collection="final_pptx" ) st.write(f"Final PPTX ID: {final_pptx_id}") # Hiển thị ảnh slide trước khi tải xuống if final_pptx_id: st.write("✅ File đã sẵn sàng để tải xuống!") pptx_io, pptx_filename = fetch_file_from_mongodb("ppt", "final_pptx", final_pptx_id) if pptx_io: # Nút tải file sau khi xem trước st.download_button( label="Click to Download", data=pptx_io.getvalue(), # Chuyển thành bytes để tải về file_name=pptx_filename, mime="application/vnd.openxmlformats-officedocument.presentationml.presentation" ) else: st.error("❌ Không thể tải xuống file. Kiểm tra lại ID hoặc thử lại sau.") elif file_type == "Excel": file_id = save_file_to_mongodb(uploaded_file=uploaded_file, db_name="excel", collection_name="root_file", file_name=file_name_input, file_tail=".xlsx") st.write(f"File ID: {file_id}") final_id = translate_xlsx(file_id=file_id, from_lang="en", target_lang="vi", gemini_api=api_key) st.write(f"Final Excel ID: {final_id}") if final_id: st.write("✅ File đã sẵn sàng để tải xuống!") excel_io, excel_filename = fetch_file_from_mongodb("excel", "final_file", final_id) if excel_io: st.download_button( label="Click to Download", data=excel_io.getvalue(), file_name=excel_filename, mime="application/vnd.ms-excel" ) else: st.error("❌ Không thể tải xuống file. Kiểm tra lại ID hoặc thử lại sau.") elif file_type == "CSV": file_id = save_file_to_mongodb(uploaded_file=uploaded_file, db_name="csv", collection_name="root_file", file_name=file_name_input, file_tail=".csv") st.write(f"File ID: {file_id}") final_id = translate_csv(file_id=file_id, source_lang="en", target_lang="vi", gemini_api=api_key) st.write(f"Final CSV ID: {final_id}") if final_id: st.write("✅ File đã sẵn sàng để tải xuống!") csv_io, csv_filename = fetch_file_from_mongodb("csv", "final_file", final_id) if csv_io: st.download_button( label="Click to Download", data=csv_io.getvalue(), file_name=csv_filename, mime="text/csv" ) else: st.error("❌ Không thể tải xuống file. Kiểm tra lại ID hoặc thử lại sau.") elif file_type == "Word": file_id = save_file_to_mongodb(uploaded_file=uploaded_file, db_name="word", collection_name="root_file", file_name=file_name_input, file_tail=".docx") st.write(f"File ID: {file_id}") final_id = translate_docx(file_id=file_id, source_lang="en", target_lang="vi") st.write(f"Final CSV ID: {final_id}") if final_id: st.write("✅ File đã sẵn sàng để tải xuống!") docx_io, docx_filename = fetch_file_from_mongodb("word", "final_file", final_id) if docx_io: st.download_button( label="Click to Download", data=docx_io.getvalue(), file_name=docx_filename, mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document" ) else: st.error("❌ Không thể tải xuống file. Kiểm tra lại ID hoặc thử lại sau.")