示例#1
0
        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);
        }
示例#2
0
        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.";
                }
            }
        }
示例#3
0
        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;
                    }
                                                               ));
                }
            }
        }
示例#4
0
        /// <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);
                    }
                }
            }
        }
示例#5
0
        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;
        }
示例#6
0
        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;
            }
        }
示例#7
0
        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));
        }
示例#8
0
        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;
            }
        }
示例#9
0
        /// <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);
                        }
                    }
                }
            }
        }
示例#10
0
        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);
                }
            }
        }
示例#11
0
        /// <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);
                    }
                }
            }
        }