1回だけ更新可能なOnceCellでフォルダ名をダイアログから取得 rust tauri vue

前回ダイアログを扱ったがフォルダ名をグローバルに書き出す方法がわからなかったので、最近メジャーなOneCellを使った方法で、フォルダ名をグローバルにコピーする方法をチェック。

ただし…、1回だけ更新可能だと使いずらいので別の方法を探す必要あり。

 

dj-dz.hatenablog.com

#![cfg_attr(
    all(not(debug_assertions), target_os = "windows"),
    windows_subsystem = "windows"
)]

use tauri::api::dialog;
use tauri::{CustomMenuItem, Menu, MenuItem, Submenu};
use once_cell::sync::OnceCell;

static folder_name: OnceCell<String> = OnceCell::new();

#[tauri::command]
fn open_folder_dialog(){
    dialog::FileDialogBuilder::default()
    .pick_folder(|path_buf| match path_buf {
      Some(p) => {
        folder_name.set(p.into_os_string().into_string().unwrap());
        println!("選択されたフォルダ: {}", folder_name.get().unwrap());
    }
      _ => {}
    });
}

#[tauri::command]
fn check_folder_name()
{
    println!("選択されたフォルダ!!: {}", folder_name.get().unwrap());
}

fn main() {
    tauri::Builder::default()
    .invoke_handler(tauri::generate_handler![open_folder_dialog, check_folder_name])
    .run(tauri::generate_context!())
    .expect("error while running tauri application");
}