/// <summary> /// Query:取得目錄內容 /// </summary> /// <param name="level">目錄階層</param> private void GetCatalog(int level) { lvwClassify.ItemsSource = null; lvwClassify.Items.Clear(); // display mode switch btn if (level == 6) { btnListView.Visibility = Visibility.Visible; btnTileView.Visibility = Visibility.Visible; } else { btnListView.Visibility = Visibility.Hidden; btnTileView.Visibility = Visibility.Hidden; } // 取得各階層資料 dynamic classify = null; switch (level) { case 1: classify = GetLv1Catalog(); break; case 2: classify = GetLv2Catalog(); break; case 3: classify = GetLv3Catalog(); break; case 4: classify = GetLv4Catalog(); break; case 5: classify = GetFileCatalog(); break; case 6: classify = GetFileList(); break; } ApiHelper api = new ApiHelper(); List<string> remoteFolderFullPathList = api.Dir(_ftpPath).ToList(); Dictionary<string, string> remoteFileList = new Dictionary<string, string>(); foreach (var item in remoteFolderFullPathList) { remoteFileList.Add(item.Substring(item.LastIndexOf('/') + 1), item); } System.Collections.ObjectModel.ObservableCollection<FileInfo> fileCollection = new System.Collections.ObjectModel.ObservableCollection<FileInfo>(); foreach (var classifyItem in classify) { if (remoteFileList.ContainsKey(classifyItem.Name)) { Dictionary<string, string> dicInfo = new Dictionary<string, string>(); dicInfo.Add("Id", classifyItem.Id.ToString()); dicInfo.Add("Name", classifyItem.Name); dicInfo.Add("NickName", classifyItem.NickName); if (_isTileView || level < 6) { bool isImageFile = false; lvwClassify.View = lvwClassify.FindResource("TileView") as ViewBase; BitmapImage bitmap = new BitmapImage(); bitmap.BeginInit(); bitmap.CacheOption = BitmapCacheOption.OnLoad; if (level < 6) { bitmap.UriSource = new Uri(@"pack://application:,,,/WFTP;component/Icons/folder.ico"); } else { ExtensionHelper helper = new ExtensionHelper(); string iconPath = helper.GetIconPath( System.IO.Path.GetExtension(classifyItem.NickName)); if (iconPath != "img.ico") { bitmap.UriSource = new Uri(iconPath); } else { isImageFile = true; bitmap.UriSource = new Uri(String.Format(GlobalHelper.ApiThumb, remoteFileList[classifyItem.Name])); } } bitmap.EndInit(); Image img = new Image(); if (!isImageFile) { img.Width = 60; img.Height = 60; } else { img.Width = 120; img.Height = 120; } img.Source = bitmap; Tile tile = new Tile(); tile.FontFamily = new FontFamily("Microsoft JhengHei"); tile.Width = 120; tile.Height = 120; tile.Margin = new Thickness(5); tile.Content = img; if (level < 6) { if (level == 4) { tile.Count = classifyItem.Counts.ToString(); } else { tile.Count = Convert.ToString(api.GetCount(_ftpPath + dicInfo["Name"])); } } else { tile.Count = ""; } tile.Tag = dicInfo; ToolTip tip = new ToolTip(); tip.Content = dicInfo["NickName"]; tile.ToolTip = tip; tile.Click += new RoutedEventHandler(tile_Click); tile.MouseDoubleClick += new MouseButtonEventHandler(tile_MouseDoubleClick); if (tile.Count == "0") { tile.Background = new SolidColorBrush(Color.FromRgb(255, 93, 93)); } if (isImageFile) { tile.Background = new SolidColorBrush(Color.FromArgb(0, 0, 0, 0)); } else { tile.Title = dicInfo["NickName"].Length > 12 ? String.Format("{0}…", dicInfo["NickName"].Substring(0, 11)) : dicInfo["NickName"]; } lvwClassify.Items.Add(tile); } else { lvwClassify.View = lvwClassify.FindResource("ListView") as ViewBase; fileCollection.Add(new FileInfo { FileName = classifyItem.Name, FilePath = remoteFileList[classifyItem.Name], FileId = classifyItem.Id }); } } } if (!_isTileView && level == 6) { lvwClassify.ItemsSource = fileCollection; } }
/// <summary> /// Query:效能改善: 延遲載入 /// </summary> /// <param name="level">選擇到的層級才載入</param> public void GetBreadcrumbBarPath(int level) { WFTPDbContext db = new WFTPDbContext(); // Get remote folder list ApiHelper api = new ApiHelper(); List<string> remoteFolderList = api.Dir(_ftpPath, true).ToList(); switch (level) { case 2: var lv2 = from company in db.Lv2Customers where company.ClassifyId == _catalogLevelId[1] orderby company.CompanyNickName select company; string expr = String.Format("/bc/bc[@id={0}]", _catalogLevelId[1]); XmlNode xndClassify = _xdoc.SelectSingleNode(expr); if (xndClassify.ChildNodes.Count > 0) { XPathNavigator navigator = _xdoc.CreateNavigator(); XPathNavigator first = navigator.SelectSingleNode(expr + "/bc[1]"); XPathNavigator last = navigator.SelectSingleNode(expr + "/bc[last()]"); navigator.MoveTo(first); navigator.DeleteRange(last); } foreach (var company in lv2) { if (!remoteFolderList.Contains(company.CompanyName)) continue; XmlElement xelCompany = _xdoc.CreateElement("bc"); xelCompany.SetAttribute("title", company.CompanyNickName); xelCompany.SetAttribute("id", company.CompanyId.ToString()); xndClassify.AppendChild(xelCompany); } break; case 3: var lv3 = from branch in db.Lv3CustomerBranches where branch.CompanyId == _catalogLevelId[2] orderby branch.BranchNickName select branch; expr = String.Format("/bc/bc[@id={0}]/bc[@id={1}]", _catalogLevelId[1], _catalogLevelId[2]); XmlNode xndCompany = _xdoc.SelectSingleNode(expr); if (xndCompany.ChildNodes.Count > 0) { XPathNavigator navigator = _xdoc.CreateNavigator(); XPathNavigator first = navigator.SelectSingleNode(expr + "/bc[1]"); XPathNavigator last = navigator.SelectSingleNode(expr + "/bc[last()]"); navigator.MoveTo(first); navigator.DeleteRange(last); } foreach (var branch in lv3) { if (!remoteFolderList.Contains(branch.BranchName)) continue; XmlElement xelBranch = _xdoc.CreateElement("bc"); xelBranch.SetAttribute("title", branch.BranchNickName); xelBranch.SetAttribute("id", branch.BranchId.ToString()); xndCompany.AppendChild(xelBranch); } break; case 4: var lv4 = from line in db.Lv4Lines where line.BranchId == _catalogLevelId[3] orderby line.LineNickName select line; expr = String.Format("/bc/bc[@id={0}]/bc[@id={1}]/bc[@id={2}]", _catalogLevelId[1], _catalogLevelId[2], _catalogLevelId[3]); XmlNode xndBranch = _xdoc.SelectSingleNode(expr); if (xndBranch.ChildNodes.Count > 0) { XPathNavigator navigator = _xdoc.CreateNavigator(); XPathNavigator first = navigator.SelectSingleNode(expr + "/bc[1]"); XPathNavigator last = navigator.SelectSingleNode(expr + "/bc[last()]"); navigator.MoveTo(first); navigator.DeleteRange(last); } foreach (var line in lv4) { if (!remoteFolderList.Contains(line.LineName)) continue; XmlElement xelLine = _xdoc.CreateElement("bc"); xelLine.SetAttribute("title", line.LineNickName); xelLine.SetAttribute("id", line.LineId.ToString()); xndBranch.AppendChild(xelLine); } break; case 5: var lv5 = from category in db.Lv5FileCategorys orderby category.ClassNickName select category; expr = String.Format("/bc/bc[@id={0}]/bc[@id={1}]/bc[@id={2}]/bc[@id={3}]", _catalogLevelId[1], _catalogLevelId[2], _catalogLevelId[3], _catalogLevelId[4]); XmlNode xndLine = _xdoc.SelectSingleNode(expr); if (xndLine.ChildNodes.Count > 0) { // nothing. } else { foreach (var category in lv5) { XmlElement xelCategory = _xdoc.CreateElement("bc"); xelCategory.SetAttribute("title", category.ClassNickName); xelCategory.SetAttribute("id", category.FileCategoryId.ToString()); xndLine.AppendChild(xelCategory); } } break; } }
/// <summary> /// 取得目錄內容 /// </summary> /// <param name="level">目錄階層</param> /// <param name="id">關聯 ID</param> private void GetCatalog(int level) { dynamic classify = null; switch (level) { case 1: classify = GetLv1Catalog(); break; case 2: classify = GetLv2Catalog(); break; case 3: classify = GetLv3Catalog(); break; case 4: classify = GetLv4Catalog(); break; case 5: classify = GetFileCatalog(); break; } ApiHelper api = new ApiHelper(); List<string> remoteFolderFullPathList = api.Dir(_ftpPath).ToList(); Dictionary<string, string> remoteFileList = new Dictionary<string, string>(); foreach (var item in remoteFolderFullPathList) { remoteFileList.Add(item.Substring(item.LastIndexOf('/') + 1), item); } }