개발/Programming RUST

tauri 개발 따라해보기 9

슈케르 2024. 12. 18. 16:47
728x90

STEP14

 

기본 기능은 완료했으니 살을 붙여보자.

앞에서 소개한 rust_search crate에는 여러가지 속성을 부여할 수 있다.

지금까지는 file search 만 구현하였으나 directory search및 hidden 파일 그리고

strict mode도 추가해보자.

 

index.html에서 hidden, strict mode를 선택할것인지 check box를 추가해보자

'id-check-hidden', 'id-check-strict'

<div class="row" name="defaultDiv">
          <input id="id-input-search-main" class="focusableInput" tabindex="0" placeholder="file or dir name" /> &nbsp;&nbsp;
          <input id="id-input-search-ext" class="focusableInput" tabindex="1" placeholder="extension" /> &nbsp;&nbsp;
          <input class="check" type="checkbox" id="id-check-hidden" name="name-check-hidden" unchecked />
          <label for="name-check-hidden">hidden file</label> &nbsp;&nbsp;
          <input class="check" type="checkbox" id="id-check-strict" name="name-check-strict" unchecked />
          <label for="name-check-strict">strict</label> &nbsp;&nbsp;
      </div>

 

main.js에도 각각의 id를 추가해준다.

let inputSearchExt = document.querySelector("#id-input-search-ext");
let inputCheckHidden = document.querySelector("#id-check-hidden");
let inputCheckStrict = document.querySelector("#id-check-strict");
let inputLocation = document.querySelector("#id-input-location");

init() 에서 inputCheckHidden과 inputCheckStrict 의 초기값도 설정해준다.

 

그리고, 가장 중요한..

Run 버튼 클릭시 hidden과 strict 속성 값을 전달해야하므로, 아래처럼 parameter를 추가해야한다.

  await invoke(callbackName, {
    locStart: inputLocation.value, inSearch: tempMain,    
    limit: Number("100"), ext: tempExt,
    depth: Number("10"), hidden: inputCheckHidden.checked, strict: inputCheckStrict.checked
  });

 

당연히 search.rs 에서도 parameter를 추가해준다.

#[tauri::command]
pub fn do_search_file(loc_start: &str, in_search: &str,
        limit: usize, ext: &str, depth: usize, hidden: bool, strict: bool)
{

 

builder에 strict, hidden 옵션에 대해서 선택 추가 가능하도록 코드를 추가한다.

        .depth(depth); // 깊이

    if strict {
        builder = builder.strict(); // 정확도
    }
    if hidden {
        builder = builder.hidden(); // hidden file
    }

    let collected: Vec<String> = builder.build().collect();

 

테스트는 디렉토리 검색 기능 추가 후 한번에 해보도록 하겠다.

 

 

STEP15

directory 검색 코드는 아래와 같다.

#[tauri::command]
pub fn do_search_dir(loc_start: &str, in_search: &str, loc_more: Vec<&str>,
                                            limit: usize, _ext: &str, depth: usize, hidden: bool, strict: bool)
{
    init();
    print!("do_search_dir\n");    
    //if in_search is '*' then change empty string
    let in_search = if in_search == "*" { "" } else { in_search };
    let mut builder = SearchBuilder::default()
        .location(loc_start) // 검색 시작 위치
        .search_input(in_search) // 찾을 파일 or DIR
        .more_locations(loc_more) // 위치 추가
        .limit(limit) // 갯수        
        .depth(depth) // 깊이
        .custom_filter(|in_search| !in_search.metadata().unwrap().is_file()); // 디렉토리만 찾기

    if strict {
        builder = builder.strict(); // 정확도
    }
    if hidden {
        builder = builder.hidden(); // hidden file
    }

    let collected: Vec<String> = builder.build().collect();

    SINGLETON_SEARCH.lock().unwrap().search_result.borrow_mut().extend(collected);
    SINGLETON_SEARCH.lock().unwrap().search_done = true;
}

 

file search와 차이점이 builder 생성시 .custom_filter 가 추가되는것밖에 없는듯하다.

https://docs.rs/rust_search/latest/rust_search/  여기를 참고하면 된다.

 

그리고, FilterExt 트레잇을 추가해준다.

use rust_search::{SearchBuilder, FilterExt};

 

lib.rs에서 event handler에 do_search_dir 추가를 잊지 말자.

 

이제 빌드 > 테스트

 

/c/Users/suker/AppData ==> AppData는 hidden directory 이다.

요놈을 검색할 수 있다면 hidden 속성과, directory 검색 기능이 모두 완료된걸로 봐도 된다.

 

 '*' 문자도 사용해서 strict mode도 잘 동작하는지 확인해보자.

 

directory와 file search를 구분하는 방법은 main.js의 run 함수에 답이 있으니 확인해보자.

 

hidden on / strict on 에서 정상적인 검색확인
strict on에서 * 문자를 섞어서 찾기 실패
strict off 시 검색 확인

 

commit : b394be1ac3489af213c700fdc3f03b4f05057072

728x90

'개발 > Programming RUST' 카테고리의 다른 글

tauri 개발 따라해보기 11  (0) 2024.12.18
tauri 개발 따라해보기 10  (0) 2024.12.18
tauri 개발 따라해보기 8  (0) 2024.12.18
tauri 개발 따라해보기 7  (0) 2024.12.17
tauri 개발 따라해보기 6  (0) 2024.12.17