ImPolymath commited on
Commit
e6563d5
·
1 Parent(s): de7a637

add files upload feature

Browse files
Files changed (1) hide show
  1. pages/main.py +98 -53
pages/main.py CHANGED
@@ -17,7 +17,7 @@ from typing import Tuple
17
  from typing import Union
18
  from io import BytesIO
19
  from copy import deepcopy
20
-
21
 
22
  # Third-party libraries
23
  import requests
@@ -57,6 +57,13 @@ from core.core import init_process_mode
57
  from core.moderation import api_moderation_openai_text
58
  from core.audio_isolation import isolate_audio
59
 
 
 
 
 
 
 
 
60
 
61
  def save_attachment(attachment):
62
  """Sauvegarde la pièce jointe et retourne le chemin."""
@@ -267,6 +274,18 @@ def recorder_released():
267
  def main_page():
268
  """Page principale de l'application."""
269
 
 
 
 
 
 
 
 
 
 
 
 
 
270
  # Initialisation des variables d'état de session
271
  if "ui_loaded" not in st.session_state:
272
  st.session_state["ui_loaded"] = False
@@ -364,66 +383,92 @@ def main_page():
364
  get_translation("entrez_message")
365
  )
366
 
367
- def uploaded_files__on_change():
368
- if st.session_state.uploaded_files is not None:
369
- st.session_state.edited_texts = {}
370
- st.session_state.audio_files = []
371
- for uploaded_file in st.session_state.uploaded_files:
372
- with st.container(border=True):
373
- bytes_data = uploaded_file.read()
374
- file_name = uploaded_file.name
375
- filetype = os.path.splitext(uploaded_file.name)[1].lstrip('.')
376
- if filetype in ["txt"]:
377
- st.write("**filename:**", uploaded_file.name)
378
- st.write("**filetype:**", filetype)
379
- file_content = bytes_data.decode()
380
- with st.expander("View file content"):
381
- edited_text = st.text_area(f"Edit text - {file_name}", value=file_content, key=file_name)
382
- st.session_state.edited_texts[file_name] = edited_text
383
- elif filetype in ["wav", "mp3"]:
384
- st.write(f"**Filename:** {file_name}")
385
- audio = AudioSegment.from_file(io.BytesIO(bytes_data))
386
- st.write(f"Frame rate: {audio.frame_rate}, Frame width: {audio.frame_width}, Duration: {audio.duration_seconds} seconds")
387
- st.audio(bytes_data, format=f"audio/{filetype}", autoplay=False)
388
- st.session_state.audio_files.append(audio)
389
-
390
- if len(st.session_state.uploaded_files) > 0:
391
- filetypes_uploaded_list = [ os.path.splitext(uploaded_file.name)[1].lstrip('.') for uploaded_file in st.session_state.uploaded_files ]
392
- if st.button("Submit All"):
393
- if ("txt" in filetypes_uploaded_list):
394
- # Concaténer les textes modifiés pour le traitement
395
- concatenated_text = "\n".join(st.session_state.edited_texts.values())
396
- st.write("Processing concatenated text...")
397
- # Ajoutez ici le code pour traiter le texte concaténé
398
- st.write(concatenated_text)
399
- if ( "wav" in filetypes_uploaded_list or "mp3" in filetypes_uploaded_list ):
400
- # Concaténer les fichiers audio pour le traitement
401
- concatenated_audio = sum(st.session_state.audio_files)
402
- audio_buffer = io.BytesIO()
403
- concatenated_audio.export(audio_buffer, format="wav")
404
- st.write("Processing concatenated audio...")
405
- st.audio(audio_buffer.getvalue(), format="audio/wav", autoplay=False)
406
-
407
 
408
  # Interface utilisateur pour l'upload de fichiers
409
  st.session_state.uploaded_files = st.file_uploader(
410
  "Choose files to upload",
411
  accept_multiple_files=True,
412
  type=CHAT_FILES_UPLOAD_ALLOWED_TYPES,
413
- key="chat_files_upload",
414
- on_change=uploaded_files__on_change
415
  )
416
-
417
- # Dictionnaire pour stocker le contenu modifié des fichiers
418
- if 'edited_texts' not in st.session_state:
419
- st.session_state.edited_texts = {}
420
-
421
- # Liste pour stocker les fichiers audio
422
- if 'audio_files' not in st.session_state:
423
- st.session_state.audio_files = []
424
-
425
-
426
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
427
 
428
 
429
  # Interface utilisateur pour l'enregistrement audio
 
17
  from typing import Union
18
  from io import BytesIO
19
  from copy import deepcopy
20
+ import hashlib
21
 
22
  # Third-party libraries
23
  import requests
 
57
  from core.moderation import api_moderation_openai_text
58
  from core.audio_isolation import isolate_audio
59
 
60
+ def hash_file(file):
61
+ hasher = hashlib.md5()
62
+ buf = file.read()
63
+ hasher.update(buf)
64
+ file.seek(0)
65
+ return hasher.hexdigest()
66
+
67
 
68
  def save_attachment(attachment):
69
  """Sauvegarde la pièce jointe et retourne le chemin."""
 
274
  def main_page():
275
  """Page principale de l'application."""
276
 
277
+ # Dictionnaire pour stocker les fichiers modifiés
278
+ if 'changed_uploaded_files' not in st.session_state:
279
+ st.session_state.changed_uploaded_files = {}
280
+
281
+ # Dictionnaire pour stocker le contenu modifié des fichiers
282
+ if 'edited_texts' not in st.session_state:
283
+ st.session_state.edited_texts = {}
284
+
285
+ # Liste pour stocker les fichiers audio
286
+ if 'audio_files' not in st.session_state:
287
+ st.session_state.audio_files = []
288
+
289
  # Initialisation des variables d'état de session
290
  if "ui_loaded" not in st.session_state:
291
  st.session_state["ui_loaded"] = False
 
383
  get_translation("entrez_message")
384
  )
385
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
386
 
387
  # Interface utilisateur pour l'upload de fichiers
388
  st.session_state.uploaded_files = st.file_uploader(
389
  "Choose files to upload",
390
  accept_multiple_files=True,
391
  type=CHAT_FILES_UPLOAD_ALLOWED_TYPES,
392
+ key="chat_files_upload"
 
393
  )
 
 
 
 
 
 
 
 
 
 
394
 
395
+ if st.session_state.uploaded_files is not None:
396
+ new_uploaded_files_hashes = []
397
+ for file in st.session_state.uploaded_files:
398
+ uploaded_file_hash = hash_file(file)
399
+ new_uploaded_files_hashes.append(uploaded_file_hash)
400
+ if uploaded_file_hash not in st.session_state.changed_uploaded_files.keys():
401
+ uploaded_file_name = file.name
402
+ uploaded_file_type = os.path.splitext(file.name)[1].lstrip('.')
403
+ st.session_state.changed_uploaded_files[uploaded_file_hash] = {
404
+ "name": uploaded_file_name,
405
+ "type": uploaded_file_type,
406
+ "bytes_data": file.read()
407
+ }
408
+ changed_uploaded_files = {}
409
+ for file_hash in st.session_state.changed_uploaded_files.keys():
410
+ if file_hash in new_uploaded_files_hashes:
411
+ changed_uploaded_files[file_hash] = st.session_state.changed_uploaded_files[file_hash]
412
+ st.session_state.changed_uploaded_files = changed_uploaded_files
413
+
414
+ for key, value in st.session_state.changed_uploaded_files.items():
415
+ with st.container(border=True):
416
+ if value["type"] in ["txt"]:
417
+ st.write(f"**filename:** {value['name']}")
418
+
419
+ #st.session_state.edited_texts = {}
420
+ #st.session_state.audio_files = []
421
+ #for uploaded_file in st.session_state.uploaded_files:
422
+ # with st.container(border=True):
423
+ # bytes_data = uploaded_file.read()
424
+ # file_name = uploaded_file.name
425
+ # filetype = os.path.splitext(uploaded_file.name)[1].lstrip('.')
426
+ # if filetype in ["txt"]:
427
+ # st.write("**filename:**", uploaded_file.name)
428
+ # st.write("**filetype:**", filetype)
429
+ # file_content = bytes_data.decode()
430
+ #with st.expander("View file content"):
431
+ # edited_text = st.text_area(f"Edit text - {file_name}", value=file_content, key=file_name)
432
+ # st.session_state.edited_texts[file_name] = edited_text
433
+ #elif filetype in ["wav", "mp3"]:
434
+ # st.write(f"**Filename:** {file_name}")
435
+ # audio = AudioSegment.from_file(io.BytesIO(bytes_data))
436
+ # st.write(f"Frame rate: {audio.frame_rate}, Frame width: {audio.frame_width}, Duration: {audio.duration_seconds} seconds")
437
+ # st.audio(bytes_data, format=f"audio/{filetype}", autoplay=False)
438
+ # st.session_state.audio_files.append(audio)
439
+
440
+
441
+ # Afficher et modifier le contenu de chaque fichier texte
442
+ #for file_name, edited_text in st.session_state.edited_texts.items():
443
+ # with st.container():
444
+ # st.write(f"**Filename:** {file_name}")
445
+ # with st.expander("View and edit file content"):
446
+ # edited_text = st.text_area(f"Edit text - {file_name}", value=edited_text, key=file_name)
447
+ # st.session_state.edited_texts[file_name] = edited_text
448
+
449
+ # Afficher les fichiers audio
450
+ #for audio in st.session_state.audio_files:
451
+ # with st.container():
452
+ # st.write(f"Frame rate: {audio.frame_rate}, Frame width: {audio.frame_width}, Duration: {audio.duration_seconds} seconds")
453
+ # audio_buffer = io.BytesIO()
454
+ # audio.export(audio_buffer, format="wav")
455
+ # st.audio(audio_buffer.getvalue(), format="audio/wav", autoplay=False)
456
+
457
+ # Concaténer les textes modifiés pour le traitement
458
+ #if st.button("Submit All Texts"):
459
+ # concatenated_text = "\n".join(st.session_state.edited_texts.values())
460
+ # st.write("Processing concatenated text...")
461
+ # # Ajoutez ici le code pour traiter le texte concaténé
462
+ # st.write(concatenated_text)
463
+
464
+ # Concaténer les fichiers audio pour le traitement
465
+ #if st.button("Submit All Audios"):
466
+ ## if st.session_state.audio_files:
467
+ # concatenated_audio = sum(st.session_state.audio_files)
468
+ # audio_buffer = io.BytesIO()
469
+ # concatenated_audio.export(audio_buffer, format="mp3")
470
+ # st.write("Processing concatenated audio...")
471
+ # st.audio(audio_buffer.getvalue(), format="audio/mp3", autoplay=False)
472
 
473
 
474
  # Interface utilisateur pour l'enregistrement audio