private BrowsingFile GetEntityFromPath(string path) { string[] items = path.Split('\\'); BrowsingFile parent = Model.Root.Where(n => n.Name == items[0]).FirstOrDefault(); if (string.IsNullOrEmpty(path)) { //Just the root return(null); } else { for (int i = 1; i < items.Length; i++) { var search = parent.Items.Where(n => n.Name == items[i]).FirstOrDefault(); if (null == search) { return(null); } else { parent = search; } } } return(parent); }
private void Download() { for (int i = 0; i < bvm.LastSelectedEntity.Count; i++) { BrowsingFile ent = bvm.LastSelectedEntity[i]; model.DownloadQueue.List.Add(new DownloadRequest { Added = DateTime.Now, FullPath = ent.FullPath, IsFolder = ent.IsFolder, Size = ent.Size, State = DownloadRequestState.None, ClientID = client.ID, Nickname = client.Nickname }); if (bvm.LastSelectedEntity.Count == 1) { bvm.Status = "Queued download of: " + ent.FullPath; } else { bvm.Status = "Queued " + bvm.LastSelectedEntity.Count + " downloads."; } } }
private void PopulateAsync(object o) { var fse = o as BrowsingFile; if (null != fse) { var c = new Client(model.LocalNode); var cmd = new BrowseVerb(shareInfo); cmd.Path = fse.FullPath; cmd.NoCache = bvm.NoCache; if (c.Execute(cmd, client)) { SafeObservableStatic.Dispatcher.Invoke(DispatcherPriority.Normal, new Action( delegate { bvm.Status = "Download complete (" + cmd.Results.Count + ")."; fse.IsPopulated = true; fse.ClearItems(); foreach (BrowsingFile result in cmd.Results) { result.Path = fse.FullPath; fse.AddItem(result); } bvm.CurrentItem = fse; bvm.IsBusy = false; } )); } } else { var c = new Client(model.LocalNode); var cmd = new BrowseVerb(shareInfo); cmd.NoCache = bvm.NoCache; if (c.Execute(cmd, client)) { SafeObservableStatic.Dispatcher.Invoke(DispatcherPriority.Normal, new Action( delegate { bvm.Status = "Download complete (" + cmd.Results.Count + ")."; var ent = new BrowsingFile(); foreach (BrowsingFile result in cmd.Results) { bvm.Root.Add(result); ent.AddItem(result); } ent.IsPopulated = true; bvm.CurrentItem = ent; bvm.IsBusy = false; } )); } } }
/// <summary> /// A BreadcrumbItem needs to populate it's Items. This can be due to the fact that a new BreadcrumbItem is selected, and thus /// it's Items must be populated to determine whether this BreadcrumbItem show a dropdown button, /// or when the Path property of the BreadcrumbBar is changed and therefore the Breadcrumbs must be populated from the new path. /// </summary> private void BreadcrumbBar_PopulateItems(object sender, Odyssey.Controls.BreadcrumbItemEventArgs e) { BreadcrumbItem item = e.Item; BrowsingFile fse = item.Data as BrowsingFile; if (item.Data == root) { if (item.Items.Count == 0) { foreach (var i in Model.Root) { item.Items.Add(i); } } return; } if (item.Items.Contains(fake) || item.Items.Count == 0) { if (fse == root) { if (fse.IsPopulated) { item.Items.Clear(); foreach (var i in root.Folders) { item.Items.Add(i); } } else { //Add a fake one so we get the selection image item.Items.Add(fake); } } else { if (fse.IsPopulated) { item.Items.Clear(); foreach (var i in fse.Folders) { item.Items.Add(i); } } else { //Add a fake one so we get the selection image item.Items.Add(fake); } } } }
private void TreeViewItem_Expanded(object sender, RoutedEventArgs e) { if (ignoreFolderTreeEvents) { return; } System.Windows.Controls.TreeViewItem src = e.OriginalSource as System.Windows.Controls.TreeViewItem; BrowsingFile ent = src.DataContext as BrowsingFile; Model.CurrentPath = ent.FullPath; }
private void Populate(string ent) { ent = ent.Replace('/', '\\'); bvm.IsBusy = true; if (string.IsNullOrEmpty(ent)) { bvm.Root.Clear(); ThreadPool.QueueUserWorkItem(PopulateAsync, null); return; } string[] items = ent.Split('\\'); BrowsingFile parent = bvm.Root.Where(n => n.Name == items[0]).FirstOrDefault(); if (string.IsNullOrEmpty(ent)) { //Just the root bvm.CurrentItem = parent; } else { for (int i = 1; i < items.Length; i++) { BrowsingFile search = parent.Items.Where(n => n.Name == items[i]).FirstOrDefault(); if (null == search) { var fse = new BrowsingFile(); fse.FullPath = ent; parent.Items.Add(fse); parent = fse; } else { parent = search; } } } if (!parent.IsPopulated || bvm.NoCache) { parent.ClearItems(); ThreadPool.QueueUserWorkItem(PopulateAsync, parent); } else { bvm.CurrentItem = parent; bvm.IsBusy = false; } }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { string filename = string.Empty; if (value is SearchResult) { SearchResult v = value as SearchResult; if (v.IsFolder) { return("/Fap.Presentation;component/Images/folder.png"); } return((object)IconService.GetIcon(v.FileName)); } else if (value is BrowsingFile) { //TODO:uncomment BrowsingFile fse = value as BrowsingFile; filename = fse.Name; if (fse.IsFolder) { return("/Fap.Presentation;component/Images/folder.png"); } } else if (value is DownloadRequest) { DownloadRequest dl = value as DownloadRequest; filename = dl.FileName; if (dl.IsFolder) { return("/Fap.Presentation;component/Images/folder.png"); } } else if (value is TransferLog) { TransferLog log = value as TransferLog; filename = log.Filename; } if (string.IsNullOrEmpty(filename)) { return(string.Empty); } return((object)IconService.GetIcon(filename)); }
private void foldersTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e) { if (ignoreFolderTreeEvents) { return; } BrowsingFile ent = e.NewValue as BrowsingFile; if (null == Model.LastSelectedEntity) { Model.LastSelectedEntity = new List <BrowsingFile>(); } Model.LastSelectedEntity.Clear(); if (null != ent) { Model.LastSelectedEntity.Add(ent); Model.CurrentPath = ent.FullPath; } }
/// <summary> /// The dropdown menu of a BreadcrumbItem was pressed, so delete the current folders, and repopulate the folders /// to ensure actual data. /// </summary> private void bar_BreadcrumbItemDropDownOpened(object sender, BreadcrumbItemEventArgs e) { BreadcrumbItem item = e.Item; BrowsingFile ent = item.Data as BrowsingFile; if (null != ent) { item.Items.Clear(); if (ent.IsPopulated) { foreach (var i in ent.Items) { if (i.IsFolder) { item.Items.Add(i); } } } } }
private void listView2_MouseDoubleClick(object sender, MouseButtonEventArgs e) { BrowsingFile item = listView2.SelectedItem as BrowsingFile; if (null != item && null != Model) { if (item.IsFolder) { //Open the sub folder Model.CurrentPath = item.FullPath; var container = foldersTree.ContainerFromItem(item); if (container != null) { container.IsExpanded = true; } } else { Model.LastSelectedEntity = new List <BrowsingFile>(); Model.LastSelectedEntity.Add(item); Model.Download.Execute(null); } } }
/// <summary> /// Create a new download queue item based on a url. Takes URLs in the format fap://NodeID/path/to/file /// </summary> /// <param name="url"></param> public void AddDownloadURL(string url) { string parentDir = Utility.DecodeURL(url); //Strip protocol if (parentDir.StartsWith("fap://", StringComparison.InvariantCultureIgnoreCase)) { parentDir = parentDir.Substring(6); } int index = parentDir.LastIndexOf('/'); if (index == -1) { LogManager.GetLogger("faplog").Error("Unable to add download as an invalid url as passed!"); } else { string fileName = parentDir.Substring(index + 1); parentDir = parentDir.Substring(0, index); string nodeId = parentDir.Substring(0, parentDir.IndexOf('/')); parentDir = parentDir.Substring(nodeId.Length + 1); Node node = network.Nodes.Where(n => n.ID == nodeId).FirstOrDefault(); if (null == node) { //Node not found LogManager.GetLogger("faplog").Error("Unable to add download as node {0} was not found!", nodeId); } else { //Node found - browse to get info var verb = new BrowseVerb(null); verb.NoCache = false; verb.Path = parentDir; var client = new Client(LocalNode); if (client.Execute(verb, node)) { BrowsingFile remoteFile = verb.Results.Where(f => f.Name == fileName).FirstOrDefault(); if (null != remoteFile) { downloadQueue.List.Add(new DownloadRequest { Added = DateTime.Now, FullPath = parentDir + "/" + remoteFile.Name, IsFolder = remoteFile.IsFolder, Size = remoteFile.Size, LocalPath = null, State = DownloadRequestState.None, ClientID = node.ID, Nickname = node.Nickname }); } else { LogManager.GetLogger("faplog").Error( "Unable to add download as {0} was not found on the remote server!", fileName); } } else { LogManager.GetLogger("faplog").Error("Unable to add download as node {0} was not accessible!", nodeId); } } } }