def on_ui_tabs()

in Stable-Diffusion-UI-Agones/sd-webui/extensions/simple-files/scripts/simple_files.py [0:0]


def on_ui_tabs():
  with gr.Blocks(analytics_enabled=False) as ui_component:

    cde = gr.State(["."])
    selected_files = gr.State([])

    history = gr.State(["PLACEHOLDER"])

    with gr.Row():
      cwd = gr.Textbox(initcwd, label="Dir", elem_id="simple_fb_path")
      upload = gr.Files(file_count="multiple")
    with gr.Row():
      with gr.Column(scale=2):
        with gr.Row():
          navi_back = gr.Button(label="Back", value="Back")
          navi_forward = gr.Button(label="Forward", value="Forward")
        with gr.Row():
          sortbytime = gr.Checkbox(label="Sort By Time")
          reverse = gr.Checkbox(label="Reverse")
        with gr.Row():
          fm = gr.Dataset(components=[gr.HTML(visible=False)], samples=[[normalize_de("./")]], type="index", label="")
      with gr.Column(scale=1):
        with gr.Row():
          finfo = gr.Files(value=None, interactive=False, visible=True)
        with gr.Row():
          clear_selected = gr.Button(value="Clear")
        with gr.Row():
          zip_file_name = gr.Textbox(value = "all.zip", label="Generate Zip Filename:", interactive=True)
          gen_zip_button = gr.Button(value="Generate Zip")
        with gr.Row():
          download_file = gr.File(value=None, interactive=False, visible=True)

    def goto_with_hist(hist, path, selected, sortbytime, reverse):
      gt = gotodir(path, selected, sortbytime, reverse)
      *_, new_path = gt
      if hist[0] == new_path:
        new_hist = hist
      else:
        new_hist = [new_path] + hist
      return new_hist, *gt

    def hist_back_forward(button, hist, path, selected, sortbytime, reverse):
      if button == "Forward":
        if hist[-1] == "PLACEHOLDER":
          return hist, *gotodir(path, selected, sortbytime, reverse)
        new_hist = [hist[-1]] + hist[0:-1]
        new_path = new_hist[0]
      else:
        if len(hist) <= 1 or hist[1] == "PLACEHOLDER":
          return hist, *gotodir(path, selected, sortbytime, reverse)
        new_hist = hist[1:]+[hist[0]]
        new_path = new_hist[0]
      return new_hist, *gotodir(new_path, selected, sortbytime, reverse)

    def gotodir(path, selected, sortbytime, reverse):
      if os.path.isdir(path):
        c = [x for x in listdirentries(path, sortbytime, reverse)]
        f_info = None
        newpath = path
      else:
        newpath = os.path.dirname(path)
        c = [x for x in listdirentries(newpath, sortbytime, reverse)]
        if path in selected:
          selected.remove(path)
          f_info = selected
        else:
          f_info = selected + [path]

      new_selected = selected if f_info is None else f_info

      contents = [[normalize_de("../")]]
      for x in c:
        if os.path.isdir(os.path.join(newpath, x)):
          contents.append([normalize_de(f"{x}/")])
        else:
          contents.append([normalize_de(x)])
      return contents, [".."] + c, new_selected, f_info, newpath

    def fm_click(history, dir_entry, cde, cwd, selected, sortbytime, reverse):
      tmp_cwd = os.path.realpath(os.path.join(cwd, cde[dir_entry]))
      return goto_with_hist(history, tmp_cwd, selected, sortbytime, reverse)


    def process_zip(f, zip_file_name):
      commonbase = os.path.commonpath(f)
      tmpzipname = os.path.join("/tmp", zip_file_name)
      with zipfile.ZipFile(tmpzipname, "x") as z:
        for i in f:
          with z.open(i.replace(commonbase, "", 1), "w") as dst:
            with open(i, "rb") as src:
              shutil.copyfileobj(src, dst)

      return tmpzipname

    def process_upload(fl, cwd, sl, sortbytime, reverse):
      for f in fl:
        filename = os.path.basename(f.name)
        targetfn = os.path.join(cwd, filename)
        shutil.copyfile(f.name, targetfn)
      return gotodir(cwd, [], sortbytime, reverse)

    output_group = [fm, cde, selected_files, finfo, cwd]
    input_group = [cwd, selected_files, sortbytime, reverse]
    cwd.submit(goto_with_hist,
               inputs=[history] + input_group,
               outputs=[history] + output_group)

    navi_back.click(hist_back_forward,
                    inputs=[navi_back, history] + input_group,
                    outputs=[history] + output_group)
    navi_forward.click(hist_back_forward,
                    inputs=[navi_forward, history] + input_group,
                    outputs=[history] + output_group)

    fm.click(fm_click,
             inputs=[history, fm, cde] + input_group,
             outputs=[history] + output_group)
    upload.upload(process_upload,
                  inputs=[upload] + input_group,
                  outputs=output_group)
    sortbytime.change(gotodir,
                      inputs=input_group,
                      outputs=output_group)
    reverse.change(gotodir,
                   inputs=input_group,
                   outputs=output_group)
    clear_selected.click(fn = lambda: ([], []), outputs=[selected_files, finfo])
    zip_file_name.submit(fn = process_zip,
                         inputs=[selected_files, zip_file_name],
                         outputs=[download_file])
    gen_zip_button.click(fn = process_zip,
                         inputs=[selected_files, zip_file_name],
                         outputs=[download_file])
    return [(ui_component, "Simple File Manager", "simple_fm_tab")]