Beispiel #1
0
        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;
 }
Beispiel #3
0
        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();
        }
Beispiel #5
0
        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);
        }