SnowFlash383935 commited on
Commit
4be4e7c
·
verified ·
1 Parent(s): ad523a8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -15
app.py CHANGED
@@ -5,7 +5,7 @@ import zlib
5
  def load_and_display_info(gameFilePath: str):
6
  """Загружает файл и возвращает game.title + game объект для дальнейшей обработки"""
7
  if gameFilePath is None:
8
- return "", "", None, gr.update(interactive=False)
9
 
10
  try:
11
  with open(gameFilePath, "rb") as f:
@@ -14,19 +14,31 @@ def load_and_display_info(gameFilePath: str):
14
  game = fanl_yp.decode.decode(data)
15
  title = getattr(game, 'title', 'Название не найдено')
16
 
17
- # Генерация списка блокируемых ID
18
- indexOffset = 0
19
- removable_locks_info = "Removable lock IDs:\n"
 
 
20
  for objectContainer in game.objectContainers:
21
  if objectContainer.headerReader.hasVoxels():
22
- removable_locks_info += f" {indexOffset} {objectContainer.name}\n"
23
- indexOffset += 1
24
 
25
- info_text = f"IndexOffset: {indexOffset}\n\n{removable_locks_info}"
 
 
 
 
 
 
 
 
 
 
26
 
27
- return title, info_text, game, gr.update(interactive=True)
28
  except Exception as e:
29
- return f"Ошибка загрузки файла: {str(e)}", "", None, gr.update(interactive=False)
30
 
31
  def process_save_file(game_obj, original_path: str):
32
  """Обрабатывает сохранение и возвращает путь к новому файлу"""
@@ -43,7 +55,7 @@ def process_save_file(game_obj, original_path: str):
43
 
44
  def clear_handler():
45
  """Обработчик очистки файла"""
46
- return "", "", None, gr.update(interactive=False)
47
 
48
  with gr.Blocks() as demo:
49
  gr.Markdown("## Обработка сохранений игры")
@@ -52,7 +64,9 @@ with gr.Blocks() as demo:
52
  file_input = gr.File(label="Загрузите файл сохранения", file_types=None)
53
 
54
  title_output = gr.Textbox(label="Информация о сохранении", interactive=False)
55
- info_output = gr.Textbox(label="Детальная информация", interactive=False, lines=10)
 
 
56
 
57
  process_button = gr.Button("Обработать сохранение", interactive=False)
58
 
@@ -61,11 +75,11 @@ with gr.Blocks() as demo:
61
  # Скрытое состояние для хранения объекта game между вызовами
62
  game_state = gr.State()
63
 
64
- # Когда файл загружен — обновляем текстовые поля и разблокируем кнопку
65
  file_input.upload(
66
  fn=load_and_display_info,
67
  inputs=file_input,
68
- outputs=[title_output, info_output, game_state, process_button],
69
  queue=False
70
  )
71
 
@@ -73,7 +87,7 @@ with gr.Blocks() as demo:
73
  file_input.clear(
74
  fn=clear_handler,
75
  inputs=None,
76
- outputs=[title_output, info_output, game_state, process_button],
77
  queue=False
78
  )
79
 
@@ -86,4 +100,3 @@ with gr.Blocks() as demo:
86
 
87
  if __name__ == "__main__":
88
  demo.launch()
89
-
 
5
  def load_and_display_info(gameFilePath: str):
6
  """Загружает файл и возвращает game.title + game объект для дальнейшей обработки"""
7
  if gameFilePath is None:
8
+ return "", "", gr.update(interactive=False), gr.update(visible=False)
9
 
10
  try:
11
  with open(gameFilePath, "rb") as f:
 
14
  game = fanl_yp.decode.decode(data)
15
  title = getattr(game, 'title', 'Название не найдено')
16
 
17
+ # Генерация списка removable lock IDs
18
+ indexOffset = getattr(game, 'indexOffset', 0)
19
+ removable_locks = []
20
+ offset = indexOffset
21
+
22
  for objectContainer in game.objectContainers:
23
  if objectContainer.headerReader.hasVoxels():
24
+ removable_locks.append(f"{offset} {objectContainer.name}")
25
+ offset += 1
26
 
27
+ if removable_locks:
28
+ locks_html = "<div style='background-color: #f0f0f0; padding: 10px; border-radius: 5px;'>"
29
+ locks_html += f"<h4>Removable lock IDs (IndexOffset: {indexOffset}):</h4>"
30
+ locks_html += "<ul>"
31
+ for lock in removable_locks:
32
+ locks_html += f"<li>{lock}</li>"
33
+ locks_html += "</ul></div>"
34
+ else:
35
+ locks_html = "<div style='background-color: #f0f0f0; padding: 10px; border-radius: 5px;'>" \
36
+ f"<h4>Removable lock IDs (IndexOffset: {indexOffset}):</h4>" \
37
+ "<p>Нет доступных элементов для удаления</p></div>"
38
 
39
+ return title, locks_html, gr.update(interactive=True), gr.update(visible=True)
40
  except Exception as e:
41
+ return f"Ошибка загрузки файла: {str(e)}", "", gr.update(interactive=False), gr.update(visible=False)
42
 
43
  def process_save_file(game_obj, original_path: str):
44
  """Обрабатывает сохранение и возвращает путь к новому файлу"""
 
55
 
56
  def clear_handler():
57
  """Обработчик очистки файла"""
58
+ return "", "", gr.update(interactive=False), gr.update(visible=False)
59
 
60
  with gr.Blocks() as demo:
61
  gr.Markdown("## Обработка сохранений игры")
 
64
  file_input = gr.File(label="Загрузите файл сохранения", file_types=None)
65
 
66
  title_output = gr.Textbox(label="Информация о сохранении", interactive=False)
67
+
68
+ # HTML компонент для отображения списка removable lock IDs
69
+ locks_output = gr.HTML(visible=False)
70
 
71
  process_button = gr.Button("Обработать сохранение", interactive=False)
72
 
 
75
  # Скрытое состояние для хранения объекта game между вызовами
76
  game_state = gr.State()
77
 
78
+ # Когда файл загружен — обновляем текстовое поле и разблокируем кнопку
79
  file_input.upload(
80
  fn=load_and_display_info,
81
  inputs=file_input,
82
+ outputs=[title_output, locks_output, process_button, locks_output],
83
  queue=False
84
  )
85
 
 
87
  file_input.clear(
88
  fn=clear_handler,
89
  inputs=None,
90
+ outputs=[title_output, locks_output, process_button, locks_output],
91
  queue=False
92
  )
93
 
 
100
 
101
  if __name__ == "__main__":
102
  demo.launch()