public async Task <List <CtFileItem> > GetSubList(string name) { DirectoryInfo folder = new DirectoryInfo(Path.Combine(GetDocumentsPath(), name.Replace("\\", "/"))); if (folder != null) { List <CtFileItem> items = new List <CtFileItem>(); foreach (DirectoryInfo item in folder.GetDirectories()) { CtFileItem fitem = new CtFileItem(); fitem.Name = item.Name; fitem.ShortName = Path.Combine(name, item.Name); fitem.FullName = item.FullName; fitem.CreationTime = item.CreationTime; fitem.IsDirectory = true; items.Add(fitem); } foreach (FileInfo item in folder.GetFiles()) { CtFileItem fitem = new CtFileItem(); fitem.Name = item.Name; fitem.ShortName = Path.Combine(name, item.Name); fitem.FullName = item.FullName; fitem.CreationTime = item.CreationTime; fitem.Length = item.Length; fitem.IsDirectory = false; items.Add(fitem); } return(items); } return(null); }
private void NewFolder_Clicked(object sender, EventArgs e) { renameMode = false; renameFolder = null; foldernameentry.Text = string.Empty; overlay.IsVisible = true; }
public async Task <List <CtFileItem> > GetSubList(string name) { StorageFolder folder = name.Length == 0 ? StorageFolder : await StorageFolder.GetFolderAsync(name); if (folder != null) { List <CtFileItem> items = new List <CtFileItem>(); foreach (IStorageItem item in await folder.GetItemsAsync()) { CtFileItem fitem = new CtFileItem(); fitem.Name = item.Name; fitem.FullName = Path.Combine(StorageFolder.Path, name, item.Name); if (item.IsOfType(StorageItemTypes.File)) { fitem.IsDirectory = false; } else { fitem.IsDirectory = true; } items.Add(fitem); } return(items); } return(null); }
public async Task RenameFolder(CtFileItem item, string newname) { string src = item.ShortName; string dest = Path.Combine(CurrentDirectory, newname); await fileService.MoveDirectory(src, dest); await UpdateDirectory(); }
public async Task <string> GetTagsDirectoryForDownload(string name, string directoryName) { var items = await fileService.GetSubList(directoryName); var files = items.FindAll(i => !i.IsDirectory); var directories = items.FindAll(i => i.IsDirectory).OrderBy(j => j.Name.Length).ToArray(); var directoryOthers = directories.SingleOrDefault(i => i.Name == "others"); var i___ = name.IndexOf("__"); var i_dot = name.LastIndexOf("."); if (0 < i___ && 0 <= i_dot && i___ < i_dot) { var i_tagstrlen = i_dot - i___; var str_tags = name.Substring(i___ + 2, i_tagstrlen).Replace("+", " ").Replace("-colon-", "#"); var strl_tags = str_tags.Split('_').ToArray(); CtFileItem matchedDirectory = null; bool matchFlag = false; foreach (var dir in directories) { var strl_dirtags = dir.Name.Replace(", ", ",").Split(','); var rest = strl_tags.Any(i => strl_dirtags.Contains(i)); if (rest) { if (matchedDirectory == null) { matchedDirectory = dir; matchFlag = true; } else { matchedDirectory = null; break; } } } if (!matchFlag && directoryOthers != null) { matchedDirectory = directoryOthers; } if (matchedDirectory != null) { var res = await GetTagsDirectoryForDownload(name, matchedDirectory.ShortName); return(res); } else { var res = directoryName; return(res); } } return(string.Empty); }
public bool DeleteFile(CtFileItem fileItem) { try { File.Delete(fileItem.FullName); return(true); } catch { return(false); } }
public async void OpenFile(CtFileItem fileItem) { Stream stream = await fileService.GetReadFileStream(fileItem.ShortName); if (stream != null) { ImageSource source = ImageSource.FromStream(() => stream); if (source != null) { await CurrentPage.Navigation.PushAsync(new ImagePage(source)); } } }
public async Task <int> GetSubItemNumber(CtFileItem fileItem) { try { var subs = await fileService.GetSubList(fileItem.ShortName); return(subs.Count); } catch { return(-1); } }
public bool DeleteFolder(CtFileItem fileItem) { try { if (Directory.Exists(fileItem.FullName)) { Directory.Delete(fileItem.FullName, true); } return(true); } catch { return(false); } }
private async void listView_ItemTapped(object sender, ItemTappedEventArgs e) { CtFileItem item = (CtFileItem)e.Item; if (item.Name == "/") { await viewModel.BackDirectory(); } else { if (item.IsDirectory) { string[] menus = new string[] { "열기", "이름 바꾸기", "삭제" }; string select1 = await DisplayActionSheet(item.Name, "취소", null, menus); switch (select1) { case "열기": await viewModel.MoveDirectory(item.Name); break; case "이름 바꾸기": renameMode = true; renameFolder = item; foldernameentry.Text = item.Name; overlay.IsVisible = true; break; case "삭제": if (await DisplayAlert("알림", "폴더를 지우시겠습니까?", "확인", "취소")) { var number = await viewModel.GetSubItemNumber(item); if (0 < number) { if (await DisplayAlert("알림", $"{number}개의 하위항목이 존재합니다. 정말로 폴더를 지우시겠습니까?", "확인", "취소")) { viewModel.DeleteFolder(item); await viewModel.UpdateDirectory(); } } else if (number < 0) { await DisplayAlert("알림", "오류 발생", "확인"); } else { viewModel.DeleteFolder(item); await viewModel.UpdateDirectory(); } } else { return; } break; } } else { string[] menus = new string[] { "열기", "삭제" }; string select1 = await DisplayActionSheet(item.Name, "취소", null, menus); switch (select1) { case "열기": viewModel.OpenFile(item); break; case "삭제": if (await DisplayAlert("알림", "파일을 지우시겠습니까?", "확인", "취소")) { viewModel.DeleteFile(item); await viewModel.UpdateDirectory(); } else { return; } break; } } } }
public async Task DirectoryImageClassify(string directoryName) { var items = await fileService.GetSubList(directoryName); var files = items.FindAll(i => !i.IsDirectory); var directories = items.FindAll(i => i.IsDirectory).OrderBy(j => j.Name.Length).ToArray(); var directoryOthers = directories.SingleOrDefault(i => i.Name == "others"); int index = 0, count = files.Count; foreach (var file in files) { var i___ = file.Name.IndexOf("__"); var i_dot = file.Name.LastIndexOf("."); if (0 < i___ && 0 <= i_dot && i___ < i_dot) { var i_tagstrlen = i_dot - i___; var str_tags = file.Name.Substring(i___ + 2, i_tagstrlen).Replace("+", " ").Replace("-colon-", "#"); var strl_tags = str_tags.Split('_').ToArray(); CtFileItem matchedDirectory = null; bool matchFlag = false; foreach (var dir in directories) { var strl_dirtags = dir.Name.Replace(", ", ",").Split(','); //var rest = strl_dirtags.Except(strl_tags).Any(); var rest = strl_tags.Any(i => strl_dirtags.Contains(i)); if (rest) { if (matchedDirectory == null) { matchedDirectory = dir; matchFlag = true; } else { matchedDirectory = null; break; } } } if (matchedDirectory != null) { var src = file.FullName; var dest = Path.Combine(matchedDirectory.FullName, file.Name); if (File.Exists(src) && !File.Exists(dest)) { File.Move(src, dest); DependencyService.Get <IMedia>().UpdateGallery(dest); } } else if (!matchFlag && directoryOthers != null) { var src = file.FullName; var dest = Path.Combine(directoryOthers.FullName, file.Name); if (File.Exists(src) && !File.Exists(dest)) { File.Move(src, dest); DependencyService.Get <IMedia>().UpdateGallery(dest); } } } SetProgressBarValue(++index, count); } foreach (var dir in directories) { await DirectoryImageClassify(dir.ShortName); } }
public bool ExistFile(CtFileItem fileItem) { var res = File.Exists(fileItem.FullName); return(res); }