From 74d5feb67a6e05b900c19574303c94325d75e4a7 Mon Sep 17 00:00:00 2001 From: RickyDane Date: Sun, 25 Feb 2024 21:00:32 +0100 Subject: [PATCH 1/9] saving --- src-tauri/src/main.rs | 91 ++++++++++++- src-tauri/src/utils.rs | 110 ++++++++++++++- ui/index.html | 14 +- ui/main_logic.js | 302 +++++++++++++++++++++++++++-------------- ui/style.css | 52 ++++--- 5 files changed, 441 insertions(+), 128 deletions(-) diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 0489c6f..fea6e68 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -29,7 +29,7 @@ use unrar::Archive; use zip_extensions::*; mod utils; use sysinfo::Disks; -use utils::{copy_to, count_entries, dbg_log, err_log, wng_log, COPY_COUNTER, TO_COPY_COUNTER}; +use utils::{copy_to, count_entries, dbg_log, err_log, format_bytes, wng_log, DirWalker, DirWalkerEntry, COPY_COUNTER, TO_COPY_COUNTER}; #[allow(unused_imports)] use rayon::prelude::*; mod applications; @@ -39,6 +39,8 @@ static mut HOSTNAME: String = String::new(); static mut USERNAME: String = String::new(); static mut PASSWORD: String = String::new(); +static mut ISCANCELED: bool = false; + fn main() { tauri::Builder::default() .setup(|app| { @@ -80,7 +82,9 @@ fn main() { arr_delete_items, arr_compress_items, get_installed_apps, - open_with + open_with, + find_duplicates, + cancel_operation ]) .plugin(tauri_plugin_drag::init()) .run(tauri::generate_context!()) @@ -306,8 +310,8 @@ fn alert_not_found_dir(_x: std::io::Error) -> ReadDir { } #[tauri::command] -async fn open_dir(_path: String) -> Vec { - let _ = set_current_dir(_path); +async fn open_dir(path: String) -> Vec { + let _ = set_current_dir(&path); return list_dirs().await; } @@ -989,3 +993,82 @@ async fn get_installed_apps() -> Vec<(String, String)>{ async fn open_with(file_path: String, app_path: String) { open_file_with(PathBuf::from(file_path), PathBuf::from(app_path)); } + +#[tauri::command] +async fn find_duplicates(app_window: Window, path: String, depth: u32) -> Vec> { + let files = DirWalker::new() + .depth(depth) + .run(&path) + .get_items(); + let mut seen_items: Vec = Vec::new(); + let mut duplicates: Vec> = Vec::new(); + for item in files.into_par_iter().collect::>() { + unsafe { + if ISCANCELED { + break; + } + } + let seen_item = seen_items.iter().find(|x| x.is_file == true && x.file_name == item.file_name && x.size == item.size); + if *&seen_item.is_some() { + for mut arr_duplicate in duplicates.clone() { + for item in arr_duplicate.clone() { + if item.file_name == seen_item.unwrap().file_name && item.size == seen_item.unwrap().size { + arr_duplicate.push(item.clone()); + } + else { + duplicates.push(vec![seen_item.unwrap().clone(), item.clone()]); + } + } + } + if duplicates.len() == 0 { + duplicates.push(vec![seen_item.unwrap().clone(), item]); + } + } + else { + seen_items.push(item); + } + } + unsafe { + ISCANCELED = false; + } + for arr_items in duplicates.clone() { + let mut inner_html = String::new(); + let mut js_query = String::new()+" + var duplicate = document.createElement('div'); + duplicate.setAttribute('itempaneside', ''); + duplicate.setAttribute('itemisdir', '0'); + duplicate.setAttribute('itemext', ''); + duplicate.setAttribute('isftp', '0'); + duplicate.className = 'list-item'; + "; + for (idx, item) in arr_items.clone().iter().enumerate() { + inner_html.push_str(&(String::new()+" +
+
+

Name: "+&item.file_name+"

+

Path: "+&item.path+"

+

"+&format_bytes(item.size)+"

+
+ +
+ ")); + js_query.push_str(&(String::new()+" + duplicate.setAttribute('"+&format!("itempath-{}", idx)+"', '"+&item.path+"'); + ")); + } + js_query.push_str(&(String::new()+" + duplicate.innerHTML = `"+&inner_html+"`; + duplicate.oncontextmenu = (e) => showExtraContextMenu(e, duplicate); + document.querySelector('.duplicates-list').append(duplicate); + ")); + let _ = app_window.eval(&js_query); + } + duplicates +} + +#[tauri::command] +async fn cancel_operation() { + unsafe { + ISCANCELED = true; + } +} diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index 2aa81bc..e7bb68b 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -1,9 +1,12 @@ -use std::{fs::{self, File}, io::{BufReader, BufWriter, Read, Write}}; +use std::{fmt::Debug, fs::{self, File}, io::{BufReader, BufWriter, Read, Write}}; use chrono::prelude::*; use color_print::cprintln; +use serde::Serialize; use stopwatch::Stopwatch; use tauri::Window; +use crate::ISCANCELED; + pub static mut COPY_COUNTER: f32 = 0.0; pub static mut TO_COPY_COUNTER: f32 = 0.0; @@ -113,3 +116,108 @@ pub fn update_progressbar_2(app_window: &Window, progress: f32, file_name: &str) pub fn calc_transfer_speed(file_size: f64, time: f64) -> f64 { (file_size / time) / 1024.0 / 1024.0 } + +#[derive(Clone)] +#[derive(Debug)] +#[derive(Serialize)] +pub struct DirWalkerEntry { + pub file_name: String, + pub path: String, + pub depth: u32, + pub is_dir: bool, + pub is_file: bool, + pub size: u64 +} + +pub struct DirWalker { + pub items: Vec, + pub depth: u32 +} + +impl DirWalker { + pub fn new() -> DirWalker { + DirWalker { + items: Vec::new(), + depth: 0 + } + } + + pub fn run(&mut self, path: &str) -> &mut Self { + self.walk(path, 0); + self + } + + pub fn walk(&mut self, path: &str, depth: u32) { + if self.depth > 0 && depth > self.depth { + return; + } + for entry in fs::read_dir(path).unwrap() { + unsafe { + if ISCANCELED { + return; + } + } + let item = entry.unwrap(); + if item.file_name().to_str().unwrap().starts_with(".") { + continue; + } + let path = item.path(); + if !fs::metadata(&path).is_ok() { + continue; + } + if path.is_dir() { + self.items.push(DirWalkerEntry { + file_name: item.file_name().to_str().unwrap().to_string(), + path: path.to_str().unwrap().to_string(), + depth: depth, + is_dir: true, + is_file: false, + size: 0, + }); + self.walk(path.to_str().unwrap(), depth + 1); + } + else { + self.items.push(DirWalkerEntry { + file_name: item.file_name().to_str().unwrap().to_string(), + path: path.to_str().unwrap().to_string(), + depth: depth, + is_dir: false, + is_file: true, + size: fs::metadata(&path).unwrap().len() + }); + } + } + } + + pub fn depth(&mut self, depth: u32) -> &mut Self { + self.depth = depth; + self + } + + pub fn get_items(&self) -> Vec { + (*self.items).to_vec() + } +} + +pub fn format_bytes(bytes: u64) -> String { + let kb = bytes / 1024; + let mb = kb / 1024; + let gb = mb / 1024; + let tb = gb / 1024; + + if tb > 0 { + format!("{:.2} TB", tb as f32) + } + else if gb > 0 { + format!("{:.2} GB", gb as f32) + } + else if mb > 0 { + format!("{:.2} MB", mb as f32) + } + else if kb > 0 { + format!("{:.2} KB", kb as f32) + } + else { + format!("{:.2} B", bytes as f32) + } +} diff --git a/ui/index.html b/ui/index.html index d451220..3da3d9e 100644 --- a/ui/index.html +++ b/ui/index.html @@ -80,9 +80,10 @@ -
-
-

Full - Search

-
-
-

Search input

- -

File content

- -

Max count of search results (0 = off)

- -

Search depth (0 = off)

- -
- - +
+ + +
diff --git a/ui/main_logic.js b/ui/main_logic.js index 4f16e45..46a0219 100644 --- a/ui/main_logic.js +++ b/ui/main_logic.js @@ -122,15 +122,19 @@ document.querySelector(".search-bar-input").addEventListener("keyup", (e) => { }); /* Quicksearch for dual pane view */ - -document.querySelectorAll(".trigger-for-full-search").forEach(item => item.addEventListener("keyup", (e) => { +document.querySelector(".fullsearch-search-button").onclick = async () => { + if (IsFullSearching == false) { + await startFullSearch(); + } +}; +document.querySelectorAll(".trigger-for-full-search").forEach(item => item.addEventListener("keyup", async (e) => { if (e.keyCode === 13 && IsFullSearching == false) { - startFullSearch(); + await startFullSearch(); } }) ); -function startFullSearch() { +async function startFullSearch() { IsFullSearching = true; let fileName = document.querySelector(".full-dualpane-search-input").value; let maxItems = parseInt(document.querySelector(".full-search-max-items-input").value); @@ -139,7 +143,7 @@ function startFullSearch() { searchDepth = searchDepth >= 1 ? searchDepth : 9999999; let fileContent = document.querySelector(".full-dualpane-search-file-content-input").value; console.log(fileName, maxItems, searchDepth, false, fileContent); - searchFor(fileName, maxItems, searchDepth, false, fileContent); + await searchFor(fileName, maxItems, searchDepth, false, fileContent); } document.addEventListener("keyup", (e) => { @@ -806,7 +810,7 @@ async function showItems(items, dualPaneSide = "") { itemButton.className = "item-button directory-entry"; let itemButtonList = document.createElement("div"); itemButtonList.innerHTML = ` - +

${item.name}

@@ -1904,7 +1908,8 @@ function goUp(isSwitched = false, toFirst = false) { selectedItemIndex = 0; element = LeftPaneItemCollection.querySelectorAll(".item-link")[0]; LeftPaneItemIndex = selectedItemIndex; - } else if (SelectedItemPaneSide == "right") { + } + else if (SelectedItemPaneSide == "right") { selectedItemIndex = 0; element = RightPaneItemCollection.querySelectorAll(".item-link")[0]; RightPaneItemIndex = selectedItemIndex; @@ -1934,7 +1939,8 @@ function goUp(isSwitched = false, toFirst = false) { document.querySelector(".dual-pane-right").scrollTop -= 36; } } - } else { + } + else { if (SelectedItemPaneSide == "right") { RightPaneItemIndex = 0; element = RightPaneItemCollection.querySelectorAll(".item-link")[0]; diff --git a/ui/style.css b/ui/style.css index aec8c46..518bab7 100644 --- a/ui/style.css +++ b/ui/style.css @@ -960,6 +960,15 @@ label { animation: spin 1s linear infinite; } +.preloader-small-invert { + width: 16px; + height: 16px; + border: 2px solid var(--transparentColorActive); + border-top: 2px solid white !important; + border-radius: 50%; + animation: spin 1s linear infinite; +} + .context-menu { width: 150px; height: fit-content; @@ -1238,6 +1247,12 @@ label { border-top: 1px solid var(--tertiaryColor); background-color: var(--secondaryColor); } +.popup-body-col-section { + display: flex; + flex-flow: column; + gap: 5px; + padding: 5px; +} .find-duplicates-popup { width: 50%; height: fit-content; From c46397ba6bbedd68f6031af3b6de70b3cb5b851a Mon Sep 17 00:00:00 2001 From: RickyDane Date: Sat, 2 Mar 2024 09:42:06 +0100 Subject: [PATCH 4/9] saving for merge --- ui/index.html | 6 +++--- ui/main_logic.js | 36 +++++++++++++++++++++++------------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/ui/index.html b/ui/index.html index fa09dcf..bc3c270 100644 --- a/ui/index.html +++ b/ui/index.html @@ -134,11 +134,11 @@

Extra options

- - Extra options -
- -
")); + if item.file_name.ends_with("jpg") + || item.file_name.ends_with("jpeg") + || item.file_name.ends_with("png") + || item.file_name.ends_with("gif") + || item.file_name.ends_with("svg") + { + inner_html.push_str(&(String::new()+" + +
+ ")); + } + else { + inner_html.push_str(&(String::new()+" +
+ ")); + } js_query.push_str(&(String::new()+" duplicate"+var_idx+".setAttribute('"+&format!("itempath-{}", idx)+"', '"+&item.path+"'); ")); diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index 7ae1641..8cd1ba4 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -1,6 +1,7 @@ -use std::{fmt::Debug, fs::{self, File}, io::{BufReader, BufWriter, Read, Write}}; +use std::{fmt::Debug, fs::{self, File, Metadata}, io::{BufReader, BufWriter, Read, Write}}; use chrono::prelude::*; use color_print::cprintln; +use rayon::iter::{IntoParallelIterator, IntoParallelRefIterator}; use serde::Serialize; use stopwatch::Stopwatch; use tauri::Window; @@ -168,7 +169,7 @@ impl DirWalker { depth: depth, is_dir: true, is_file: false, - size: 0, + size: 0 }); self.walk(path.to_str().unwrap(), depth + 1); } @@ -190,6 +191,18 @@ impl DirWalker { self } + pub fn ext(&mut self, extensions: Vec<&str>) -> &mut Self { + self.items = self.items.clone().into_iter().filter(|item| { + for ext in &extensions { + if item.file_name.ends_with(ext) { + return true; + } + } + false + }).collect(); + self + } + pub fn get_items(&self) -> Vec { (*self.items).to_vec() } diff --git a/ui/main_logic.js b/ui/main_logic.js index 60fff24..c99402e 100644 --- a/ui/main_logic.js +++ b/ui/main_logic.js @@ -1752,20 +1752,17 @@ async function openItem(element, dualPaneSide, shortcutDirPath = null) { if (IsItemPreviewOpen == false && isDir == 1) { // Open directory await invoke("open_dir", { path }).then(async (items) => { - await showItems(items, dualPaneSide); - if (IsDualPaneEnabled == true && dualPaneSide != "" && dualPaneSide != null) { - if (ViewMode == "miller") { - await removeExcessMillerCols(parseInt(millerCol)); - selectItem(element); - await addMillerCol(millerCol); - await setMillerColActive(null, millerCol); - await setCurrentDir(element.getAttribute("itempath")); - } - await showItems(items, dualPaneSide, millerCol); - if (IsDualPaneEnabled == true && dualPaneSide != "") { - // document.querySelector(".tab-container-" + CurrentActiveTab).innerHTML = ""; // Disabled tab functionality - goUp(false, true); - } + if (ViewMode == "miller") { + console.log(millerCol); + await removeExcessMillerCols(parseInt(millerCol)); + await addMillerCol(millerCol); + await setMillerColActive(null, millerCol); + await setCurrentDir(element.getAttribute("itempath")); + } + await showItems(items, dualPaneSide, millerCol); + if (IsDualPaneEnabled == true && dualPaneSide != "") { + // document.querySelector(".tab-container-" + CurrentActiveTab).innerHTML = ""; // Disabled tab functionality + goUp(false, true); } }); } @@ -2867,8 +2864,8 @@ function showFindDuplicates(item) { document.querySelector("body").append(popup); document.querySelector(".duplicates-search-depth-input").addEventListener("focus", () => IsInputFocused = true); document.querySelector(".duplicates-search-depth-input").addEventListener("blur", () => IsInputFocused = false); - document.querySelector(".duplicate-button-run").addEventListener("click", () => { - findDuplicates(item, document.querySelector(".duplicates-search-depth-input").value); + document.querySelector(".duplicate-button-run").addEventListener("click", async () => { + await findDuplicates(item, document.querySelector(".duplicates-search-depth-input").value); }); } @@ -2879,7 +2876,7 @@ function closeFindDuplicatesPopup() { } async function findDuplicates(item, depth) { - showLoadingPopup("Duplicates are being searched for"); + showLoadingPopup("Searching for duplicates ..."); document.querySelector(".list").innerHTML = ""; ContextMenu.style.display = "none"; await invoke("find_duplicates", { appWindow: appWindow, path: item.getAttribute("itempath"), depth: parseInt(depth) }); diff --git a/ui/style.css b/ui/style.css index 0de2faa..5bb62bb 100644 --- a/ui/style.css +++ b/ui/style.css @@ -1127,7 +1127,7 @@ label { height: fit-content; box-shadow: 0px 0px 10px 1px var(--transparentColorActive); padding-bottom: 10px; - z-index: 99; + z-index: 999 !important; } .loading-popup > h4 { padding: 10px; @@ -1286,6 +1286,12 @@ label { flex-flow: column; gap: 5px; } +.duplicate-item > div > div > h4 { + width: calc(100% - 20px); + text-overflow: ellipsis; + word-break: break-all; + overflow: hidden; +} /* List */ From 003fec697035e58248684d078d8aba74310e9951 Mon Sep 17 00:00:00 2001 From: RickyDane Date: Sat, 2 Mar 2024 20:04:36 +0100 Subject: [PATCH 8/9] Version 0.4.0 | search for duplicates --- package.json | 2 +- src-tauri/Cargo.lock | 2 +- src-tauri/Cargo.toml | 2 +- src-tauri/src/main.rs | 12 +++++++---- src-tauri/tauri.conf.json | 2 +- ui/main_logic.js | 43 ++++++++++++++++++++++++--------------- 6 files changed, 39 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index 59c4f55..b284365 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ }, "name": "rdpfx", "description": "[![publish](https://github.com/RickyDane/rdpFX/actions/workflows/main.yml/badge.svg?branch=master)](https://github.com/RickyDane/rdpFX/actions/workflows/main.yml)", - "version": "0.3.9", + "version": "0.4.0", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index adc54ae..101c611 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -84,7 +84,7 @@ checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" [[package]] name = "app" -version = "0.3.9" +version = "0.4.0" dependencies = [ "async-std", "async_ftp", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 7bf72a2..e2ef4ab 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "app" -version = "0.3.9" +version = "0.4.0" description = "A simple file explorer" authors = ["Ricky Dane Perlick"] license = "none" diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 3f40659..bc844cd 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -989,20 +989,21 @@ async fn find_duplicates(app_window: Window, path: String, depth: u32) -> Vec = Vec::new(); let mut duplicates: Vec> = Vec::new(); for item in files.into_par_iter().collect::>() { - let seen_item = seen_items.par_iter().find_any(|x| x.is_file == true && x.size == item.size && x.size > 0 && x.file_name.contains(&item.file_name.substring(0, item.file_name.len()-4))); + let seen_item = seen_items.par_iter().find_any(|x| x.is_file == true && x.size == item.size && x.size > 0 && x.file_name.contains(&item.file_name.substring(0, item.file_name.len()-3))); if *&seen_item.is_some() { if duplicates.len() == 0 { duplicates.push(vec![seen_item.unwrap().clone(), item.clone()]); } else { - let collection = duplicates.par_iter_mut().find_any(|x| x[0].size == seen_item.unwrap().size); + let collection = duplicates.par_iter_mut().find_any(|x| x[0].size == seen_item.unwrap().size && x[0].size > 0 && x[0].file_name.contains(&item.file_name.substring(0, item.file_name.len()-3))); if *&collection.is_some() { collection.unwrap().push(item.clone()); } @@ -1040,6 +1041,9 @@ async fn find_duplicates(app_window: Window, path: String, depth: u32) -> Vec diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index fc9f5f3..7d79a12 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -8,7 +8,7 @@ }, "package": { "productName": "rdpFX", - "version": "0.3.9" + "version": "0.4.0" }, "tauri": { "bundle": { diff --git a/ui/main_logic.js b/ui/main_logic.js index c99402e..0c54df6 100644 --- a/ui/main_logic.js +++ b/ui/main_logic.js @@ -2226,7 +2226,8 @@ async function switchView() { document.querySelector(".list-column-header").style.display = "none"; document.querySelector(".switch-view-button").innerHTML = ``; document.querySelector(".miller-container").style.display = "flex"; - document.querySelector(".explorer-container").style.display = "none"; + document.querySelector(".miller-column").style.display = "block"; + document.querySelector(".non-dual-pane-container").style.display = "none"; document.querySelectorAll(".item-button-list").forEach(item => { item.children[0].style.textOverflow = "ellipsis"; item.children[1].style.display = "none" @@ -2235,6 +2236,11 @@ async function switchView() { item.style.height = "calc(100vh - 95px - 30px)"; item.style.marginTop = "0"; }); + document.querySelectorAll(".directory-list").forEach((list) => { + // list.style.flexFlow = "column"; + list.style.gridTemplateColumns = "unset"; + list.style.rowGap = "2px"; + }); ViewMode = "miller"; } } @@ -2271,10 +2277,11 @@ async function switchToDualPane() { OrgViewMode = ViewMode; // disable tab functionality and show two panels side by side IsTabsEnabled = false; - ViewMode = "column"; - await switchView(); - ViewMode = "column"; IsDualPaneEnabled = true; + ViewMode = "column"; + document.querySelector(".list-column-header").style.display = "none"; + document.querySelector(".switch-view-button").innerHTML = ``; + document.querySelector(".miller-container").style.display = "none"; document.querySelector(".site-nav-bar").style.display = "none"; document.querySelector(".file-searchbar").style.display = "none"; document.querySelectorAll(".item-button").forEach((item) => (item.style.display = "none")); @@ -2294,13 +2301,15 @@ async function switchToDualPane() { document.querySelectorAll(".explorer-container").forEach((item) => { item.style.display = "none"; }); - ViewMode = "column"; + document.querySelectorAll(".item-button-list").forEach(item => { + item.children[0].style.textOverflow = "none"; + item.children[1].style.display = "block"; + }); } else { // re - enables tab functionality and show shows just one directory container IsTabsEnabled = true; IsDualPaneEnabled = false; - ViewMode = OrgViewMode; document.querySelector(".site-nav-bar").style.display = "flex"; document.querySelector(".file-searchbar").style.display = "flex"; document.querySelector(".non-dual-pane-container").style.display = "block"; @@ -2312,17 +2321,19 @@ async function switchToDualPane() { document.querySelector(".current-path").style.left = "150px"; document.querySelector(".current-path").style.width = "calc(100% - 150px)"; document.querySelector(".current-path").style.borderRadius = "0px 0px 10px 0px"; - if (ViewMode == "column") { - document.querySelector(".list-column-header").style.display = "flex"; - document.querySelector(".switch-view-button").innerHTML = ``; - document.querySelectorAll(".explorer-container").forEach((item) => { - item.style.marginTop = "35px"; - item.style.height = "calc(100vh - 135px)"; - }) - } - else { - document.querySelector(".switch-view-button").innerHTML = ``; + + switch (OrgViewMode) { + case "wrap": + ViewMode = "miller"; + break; + case "column": + ViewMode = "wrap"; + break; + case "miller": + ViewMode = "column"; + break; } + await switchView(); await listDirectories(); } await saveConfig(false); From bd85122192576af14bf5d185a75b7fa120baa0cd Mon Sep 17 00:00:00 2001 From: RickyDane Date: Sat, 2 Mar 2024 20:05:46 +0100 Subject: [PATCH 9/9] Version 0.4.0 | search for duplicates --- package.json | 2 +- src-tauri/Cargo.lock | 2 +- src-tauri/Cargo.toml | 2 +- src-tauri/tauri.conf.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index b284365..59c4f55 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ }, "name": "rdpfx", "description": "[![publish](https://github.com/RickyDane/rdpFX/actions/workflows/main.yml/badge.svg?branch=master)](https://github.com/RickyDane/rdpFX/actions/workflows/main.yml)", - "version": "0.4.0", + "version": "0.3.9", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 101c611..adc54ae 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -84,7 +84,7 @@ checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" [[package]] name = "app" -version = "0.4.0" +version = "0.3.9" dependencies = [ "async-std", "async_ftp", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index e2ef4ab..7bf72a2 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "app" -version = "0.4.0" +version = "0.3.9" description = "A simple file explorer" authors = ["Ricky Dane Perlick"] license = "none" diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 7d79a12..fc9f5f3 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -8,7 +8,7 @@ }, "package": { "productName": "rdpFX", - "version": "0.4.0" + "version": "0.3.9" }, "tauri": { "bundle": {