Exemple #1
0
 public void UpdateCmisTree(RootFolder root)
 {
     lock (lockCmisStore)
     {
         TreeIter iter;
         if (CmisStore.GetIterFirst (out iter))
         {
             do
             {
                 string name = CmisStore.GetValue (iter, (int)Column.ColumnName) as string;
                 if (name == null)
                 {
                     Console.WriteLine ("UpdateCmisTree GetValue Error");
                     return;
                 }
                 if (name == root.Name)
                 {
                     UpdateCmisTreeNode (iter, root);
                     return;
                 }
             } while (CmisStore.IterNext(ref iter));
         }
         iter = CmisStore.AppendNode ();
         UpdateCmisTreeNode (iter, root);
         return;
     }
 }
 /// <summary>
 /// Get the selected folder list
 /// </summary>
 /// <returns></returns>
 public static List<string> GetSelectedFolder(RootFolder repo)
 {
     List<string> result = new List<string>();
     foreach (Folder child in repo.Children)
     {
         result.AddRange(Folder.GetSelectedFolder(child));
     }
     return result;
 }
        public override void AwakeFromNib() {
            base.AwakeFromNib();

            bool firstRepo = true;
            this.Repositories = new List<RootFolder>();
            Loader = new Dictionary<string, AsyncNodeLoader>();
            foreach (var repository in Controller.repositories) {
                RootFolder repo = new RootFolder() {
                    Name = repository.Name,
                    Id = repository.Id,
                    Address = this.Controller.saved_address.ToString()
                };
                this.Repositories.Add(repo);
                if (firstRepo) {
                    repo.Selected = true;
                    firstRepo = false;
                } else {
                    repo.Selected = false;
                }

                CmisRepoCredentials cred = new CmisRepoCredentials() {
                    UserName = this.Controller.saved_user,
                    Password = this.Controller.saved_password,
                    Address = this.Controller.saved_address,
                    RepoId = repository.Id
                };
                //  GUI workaround to remove ignore folder {{
                //AsyncNodeLoader asyncLoader = new AsyncNodeLoader(repo, cred, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate);
                //Loader.Add(repo.Id, asyncLoader);
                repo.Status = LoadingStatus.DONE;
                //  GUI workaround to remove ignore folder }}

            }

            this.DataSource = new CmisTree.CmisTreeDataSource(this.Repositories);
            this.DataDelegate = new OutlineViewDelegate ();
            Outline.DataSource = this.DataSource;
            Outline.Delegate = this.DataDelegate;

            ContinueButton.Enabled = this.Repositories.Count > 0;
//            ContinueButton.KeyEquivalent = "\r";

            this.BackButton.Title = Properties_Resources.Back;
            this.CancelButton.Title = Properties_Resources.Cancel;
            this.ContinueButton.Title = Properties_Resources.Continue;

            this.InsertEvent();

            //  must be called after InsertEvent()
            //  GUI workaround to remove ignore folder {{
            //foreach (RootFolder repo in Repositories) {
            //    Loader [repo.Id].Load (repo);
            //}
            //  GUI workaround to remove ignore folder }}
        }
        public override void AwakeFromNib ()
        {
            base.AwakeFromNib ();

            bool firstRepo = true;
            Repositories = new List<RootFolder>();
            Loader = new Dictionary<string,AsyncNodeLoader> ();
            foreach (KeyValuePair<String, String> repository in Controller.repositories)
            {
                RootFolder repo = new RootFolder() {
                    Name = repository.Value,
                    Id = repository.Key,
                    Address = Controller.saved_address.ToString()
                };
                Repositories.Add(repo);
                if (firstRepo)
                {
                    repo.Selected = true;
                    firstRepo = false;
                }
                else
                {
                    repo.Selected = false;
                }
                CmisRepoCredentials cred = new CmisRepoCredentials()
                {
                    UserName = Controller.saved_user,
                    Password = Controller.saved_password,
                    Address = Controller.saved_address,
                    RepoId = repository.Key
                };
                AsyncNodeLoader asyncLoader = new AsyncNodeLoader(repo, cred, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate);
                Loader.Add(repo.Id, asyncLoader);
            }

            DataSource = new CmisTree.CmisTreeDataSource(Repositories);
            DataDelegate = new OutlineViewDelegate ();
            Outline.DataSource = DataSource;
            Outline.Delegate = DataDelegate;

            ContinueButton.Enabled = (Repositories.Count > 0);
//            ContinueButton.KeyEquivalent = "\r";

            this.BackButton.Title = Properties_Resources.Back;
            this.CancelButton.Title = Properties_Resources.Cancel;
            this.ContinueButton.Title = Properties_Resources.Continue;

            InsertEvent ();

            //  must be called after InsertEvent()
            foreach (RootFolder repo in Repositories) {
                Loader [repo.Id].Load (repo);
            }
        }
 public void UpdateCmisTree(RootFolder root)
 {
     lock (LockRepositories) {
         for (int i = 0; i < Repositories.Count; ++i) {
             if (Repositories [i].Name == root.Name) {
                 Repositories [i] = new NSCmisTree (root);
                 return;
             }
         }
         Repositories.Add (new NSCmisTree (root));
     }
 }
Exemple #6
0
 /// <summary>
 /// This class can be used to load children nodes asynchronous in another thread
 /// </summary>
 /// <param name="root">The repository Node</param>
 /// <param name="credentials">The server crendentials to load children for the given Cmis Repo</param>
 /// <param name="method">Function for loading nodes</param>
 public AsyncNodeLoader(RootFolder root, CmisRepoCredentials credentials, LoadChildrenDelegate method, CheckChildrenDelegate check)
 {
     this.root = root;
     repoCredentials = credentials;
     this.actualNode = null;
     this.worker = new BackgroundWorker();
     this.method = method;
     this.check = check;
     this.worker.WorkerReportsProgress = false;
     this.worker.WorkerSupportsCancellation = true;
     this.worker.DoWork += new DoWorkEventHandler(DoWork);
     this.worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Finished);
 }
Exemple #7
0
        public static RootFolder Import(XDocument opml)
        {
            var root = new RootFolder();
            var opmlElement = opml.Element("opml");

            if (opmlElement != null)
            {
                var element = opmlElement.Element("body");

                if (element != null)
                {
                    var topLevel = element.Elements("outline");

                    foreach (var outlineElement in topLevel)
                    {
                        if (outlineElement.HasElements)
                        {
                            root.AddFolder(new Folder
                                {
                                    Name = outlineElement.Attribute("title").Value,
                                    Feeds = (from feed in outlineElement.Elements("outline")
                                             select new Feed(new Uri(feed.Attribute("xmlUrl").Value),
                                                      feed.Attribute("title").Value,
                                                      new Uri(feed.Attribute("htmlUrl").Value)
                                                 ))
                                });
                        }
                        else
                        {
                            root.AddFeed(
                                new Feed(new Uri(outlineElement.Attribute("xmlUrl").Value),
                                         outlineElement.Attribute("title").Value,
                                         new Uri(outlineElement.Attribute("htmlUrl").Value))
                                );
                        }
                    }

                    return root;
                }
            }

            return new RootFolder();
        }
Exemple #8
0
 public Project FindProjectByName(string name)
 {
     return(RootFolder.FindProjectByName(name));
 }
Exemple #9
0
        /// <summary>
        /// Create the UI
        /// </summary>
        private void CreateEdit()
        {
            CmisTreeStore cmisStore = new CmisTreeStore();

            Gtk.TreeView treeView = new Gtk.TreeView(cmisStore.CmisStore);

            RootFolder root = new RootFolder()
            {
                Name    = this.Name,
                Id      = credentials.RepoId,
                Address = credentials.Address.ToString()
            };

            IgnoredFolderLoader.AddIgnoredFolderToRootNode(root, Ignores);
            LocalFolderLoader.AddLocalFolderToRootNode(root, localPath);

            AsyncNodeLoader asyncLoader = new AsyncNodeLoader(root, credentials, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate);

            asyncLoader.UpdateNodeEvent += delegate {
                cmisStore.UpdateCmisTree(root);
            };
            cmisStore.UpdateCmisTree(root);
            asyncLoader.Load(root);

            Header = CmisSync.Properties_Resources.EditTitle;

            VBox layout_vertical = new VBox(false, 12);

            Controller.CloseWindowEvent += delegate
            {
                asyncLoader.Cancel();
            };

            Button cancel_button = new Button(CmisSync.Properties_Resources.Cancel);

            cancel_button.Clicked += delegate {
                Close();
            };

            Button finish_button = new Button(CmisSync.Properties_Resources.SaveChanges);

            finish_button.Clicked += delegate {
                Ignores = NodeModelUtils.GetIgnoredFolder(root);
                Controller.SaveFolder();
                Close();
            };

            Gtk.TreeIter iter;
            treeView.HeadersVisible = false;
            treeView.Selection.Mode = SelectionMode.Single;

            TreeViewColumn column = new TreeViewColumn();

            column.Title = "Name";
            CellRendererToggle renderToggle = new CellRendererToggle();

            column.PackStart(renderToggle, false);
            renderToggle.Activatable = true;
            column.AddAttribute(renderToggle, "active", (int)CmisTreeStore.Column.ColumnSelected);
            column.AddAttribute(renderToggle, "inconsistent", (int)CmisTreeStore.Column.ColumnSelectedThreeState);
            column.AddAttribute(renderToggle, "radio", (int)CmisTreeStore.Column.ColumnRoot);
            renderToggle.Toggled += delegate(object render, ToggledArgs args) {
                TreeIter iterToggled;
                if (!cmisStore.CmisStore.GetIterFromString(out iterToggled, args.Path))
                {
                    Console.WriteLine("Toggled GetIter Error " + args.Path);
                    return;
                }

                Node node = cmisStore.CmisStore.GetValue(iterToggled, (int)CmisTreeStore.Column.ColumnNode) as Node;
                if (node == null)
                {
                    Console.WriteLine("Toggled GetValue Error " + args.Path);
                    return;
                }

                if (node.Parent == null)
                {
                    node.Selected = true;
                }
                else
                {
                    if (node.Selected == false)
                    {
                        node.Selected = true;
                    }
                    else
                    {
                        node.Selected = false;
                    }
                }
                cmisStore.UpdateCmisTree(root);
            };
            CellRendererText renderText = new CellRendererText();

            column.PackStart(renderText, false);
            column.SetAttributes(renderText, "text", (int)CmisTreeStore.Column.ColumnName);
            column.Expand = true;
            treeView.AppendColumn(column);

            treeView.AppendColumn("Status", new StatusCellRenderer(), "text", (int)CmisTreeStore.Column.ColumnStatus);

            treeView.RowExpanded += delegate(object o, RowExpandedArgs args) {
                Node node = cmisStore.CmisStore.GetValue(args.Iter, (int)CmisTreeStore.Column.ColumnNode) as Node;
                asyncLoader.Load(node);
            };

            ScrolledWindow sw = new ScrolledWindow()
            {
                ShadowType = Gtk.ShadowType.In
            };

            sw.Add(treeView);

            layout_vertical.PackStart(new Label(""), false, false, 0);
            layout_vertical.PackStart(sw, true, true, 0);
            Add(layout_vertical);
            AddButton(cancel_button);
            AddButton(finish_button);

            finish_button.GrabDefault();

            this.ShowAll();
        }
Exemple #10
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="Root"></param>
 public void CreateRoot(RootFolder Root)
 {
     _db.RootFolders.Add(Root);
     _db.SaveChanges();
 }
Exemple #11
0
        private void ShowAdd2Page()
        {
            CmisTreeStore cmisStore = new CmisTreeStore();

            Gtk.TreeView treeView = new Gtk.TreeView(cmisStore);

            bool firstRepo = true;
            List <RootFolder> repositories = new List <RootFolder>();
            Dictionary <string, AsyncNodeLoader> loader = new Dictionary <string, AsyncNodeLoader> ();

            foreach (KeyValuePair <String, String> repository in Controller.repositories)
            {
                RootFolder root = new RootFolder()
                {
                    Name    = repository.Value,
                    Id      = repository.Key,
                    Address = Controller.saved_address.ToString()
                };
                if (firstRepo)
                {
                    root.Selected = true;
                    firstRepo     = false;
                }
                else
                {
                    root.Selected = false;
                }
                repositories.Add(root);
                CmisRepoCredentials cred = new CmisRepoCredentials()
                {
                    UserName = Controller.saved_user,
                    Password = Controller.saved_password,
                    Address  = Controller.saved_address,
                    RepoId   = repository.Key
                };
                AsyncNodeLoader asyncLoader = new AsyncNodeLoader(root, cred, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate);
                asyncLoader.UpdateNodeEvent += delegate {
                    cmisStore.UpdateCmisTree(root);
                };
                cmisStore.UpdateCmisTree(root);
                //  GUI workaround to remove ignore folder {{
                //asyncLoader.Load (root);
                //loader.Add (root.Id, asyncLoader);
                //  GUI workaround to remove ignore folder }}
            }

            Header = Properties_Resources.Which;

            VBox layout_vertical = new VBox(false, 12);

            Button cancel_button = new Button(cancelText);

            cancel_button.Clicked += delegate {
                foreach (AsyncNodeLoader task in loader.Values)
                {
                    task.Cancel();
                }
                Controller.PageCancelled();
            };

            Button continue_button = new Button(continueText)
            {
                Sensitive = (repositories.Count > 0)
            };

            continue_button.Clicked += delegate {
                RootFolder root = repositories.Find(x => (x.Selected != false));
                if (root != null)
                {
                    foreach (AsyncNodeLoader task in loader.Values)
                    {
                        task.Cancel();
                    }
                    Controller.saved_repository = root.Id;
                    List <string> ignored  = NodeModelUtils.GetIgnoredFolder(root);
                    List <string> selected = NodeModelUtils.GetSelectedFolder(root);
                    Controller.Add2PageCompleted(root.Id, root.Path, ignored.ToArray(), selected.ToArray());
                }
            };

            Button back_button = new Button(backText)
            {
                Sensitive = true
            };

            back_button.Clicked += delegate {
                foreach (AsyncNodeLoader task in loader.Values)
                {
                    task.Cancel();
                }
                Controller.BackToPage1();
            };

            treeView.HeadersVisible = false;
            treeView.Selection.Mode = SelectionMode.Single;

            TreeViewColumn column = new TreeViewColumn();

            column.Title = "Name";
            CellRendererToggle renderToggle = new CellRendererToggle();

            column.PackStart(renderToggle, false);
            renderToggle.Activatable = true;
            column.AddAttribute(renderToggle, "active", (int)CmisTreeStore.Column.ColumnSelected);
            column.AddAttribute(renderToggle, "inconsistent", (int)CmisTreeStore.Column.ColumnSelectedThreeState);
            column.AddAttribute(renderToggle, "radio", (int)CmisTreeStore.Column.ColumnRoot);
            renderToggle.Toggled += delegate(object render, ToggledArgs args) {
                TreeIter iterToggled;
                if (!cmisStore.GetIterFromString(out iterToggled, args.Path))
                {
                    Console.WriteLine("Toggled GetIter Error " + args.Path);
                    return;
                }

                Node node = cmisStore.GetValue(iterToggled, (int)CmisTreeStore.Column.ColumnNode) as Node;
                if (node == null)
                {
                    Console.WriteLine("Toggled GetValue Error " + args.Path);
                    return;
                }

                RootFolder selectedRoot = repositories.Find(x => (x.Selected != false));
                Node       parent       = node;
                while (parent.Parent != null)
                {
                    parent = parent.Parent;
                }
                RootFolder root = parent as RootFolder;
                if (root != selectedRoot)
                {
                    selectedRoot.Selected = false;
                    cmisStore.UpdateCmisTree(selectedRoot);
                }

                if (node.Parent == null)
                {
                    node.Selected = true;
                }
                else
                {
                    if (node.Selected == false)
                    {
                        node.Selected = true;
                    }
                    else
                    {
                        node.Selected = false;
                    }
                }
                cmisStore.UpdateCmisTree(root);
            };
            CellRendererText renderText = new CellRendererText();

            column.PackStart(renderText, false);
            column.SetAttributes(renderText, "text", (int)CmisTreeStore.Column.ColumnName);
            column.Expand = true;
            treeView.AppendColumn(column);

            //  GUI workaround to remove ignore folder {{
            //treeView.AppendColumn ("Status", new StatusCellRenderer (), "text", (int)CmisTreeStore.Column.ColumnStatus);
            //  GUI workaround to remove ignore folder }}

            treeView.RowExpanded += delegate(object o, RowExpandedArgs args) {
                Node node   = cmisStore.GetValue(args.Iter, (int)CmisTreeStore.Column.ColumnNode) as Node;
                Node parent = node;
                while (parent.Parent != null)
                {
                    parent = parent.Parent;
                }
                RootFolder root = parent as RootFolder;
                loader[root.Id].Load(node);
            };

            ScrolledWindow sw = new ScrolledWindow()
            {
                ShadowType = Gtk.ShadowType.In
            };

            sw.Add(treeView);

            layout_vertical.PackStart(new Label(""), false, false, 0);
            layout_vertical.PackStart(sw, true, true, 0);
            Add(layout_vertical);
            AddButton(back_button);
            AddButton(cancel_button);
            AddButton(continue_button);

            if (repositories.Count > 0)
            {
                continue_button.GrabDefault();
                continue_button.GrabFocus();
            }
            else
            {
                back_button.GrabDefault();
                back_button.GrabFocus();
            }
        }
Exemple #12
0
 private void AddContentFolderExecute(string folderName)
 {
     RootFolder.AddFolder(folderName);
 }
Exemple #13
0
        public void RequestSubDirs(TreeViewFolderBrowserHelper helper, TreeNodePath parent, TreeViewCancelEventArgs e)
        {
            if (parent.Path == null)
            {
                return;
            }

            if (parent.Path == "")
            {
                rootFolder = RootFolder.None;
            }

            string sql             = string.Empty;
            bool   createDummyNode = true;
            string nodeTag;

            // We have a Special folder, when we are at the root level
            if (parent.IsSpecialFolder)
            {
                rootFolder = RootFolder.None;
            }

            if (rootFolder == RootFolder.None)
            {
                switch ((string)parent.Tag)
                {
                case "artist":
                    rootFolder = RootFolder.Artist;
                    sql        = SQL_STMT_ARTIST;
                    break;

                case "albumartist":
                    rootFolder = RootFolder.AlbumArtist;
                    sql        = SQL_STMT_ALBUMARTIST;
                    break;

                case "album":
                    rootFolder      = RootFolder.Album;
                    sql             = SQL_STMT_ALBUM;
                    createDummyNode = false;
                    break;

                case "genre":
                    rootFolder = RootFolder.Genre;
                    sql        = SQL_STMT_GENRE;
                    break;
                }
            }
            else if (rootFolder == RootFolder.Artist)
            {
                sql             = string.Format(SQL_STMT_ARTISTSEARCH, Util.RemoveInvalidChars(parent.Path));
                isRootFolder    = false;
                createDummyNode = false;
            }
            else if (rootFolder == RootFolder.AlbumArtist)
            {
                sql             = string.Format(SQL_STMT_ALBUMARTISTSEARCH, Util.RemoveInvalidChars(parent.Path));
                isRootFolder    = false;
                createDummyNode = false;
            }
            else if (rootFolder == RootFolder.Genre)
            {
                isRootFolder = false;
                string[] searchString = (parent.Tag as string).Split('\\');
                if (searchString.GetLength(0) == 2)
                {
                    sql             = string.Format(SQL_STMT_GENREARTISTSEARCH, Util.RemoveInvalidChars(parent.Path));
                    createDummyNode = true;
                }
                else
                {
                    sql = string.Format(SQL_STMT_GENREARTISTALBUMSEARCH, Util.RemoveInvalidChars(searchString[1]),
                                        Util.RemoveInvalidChars(parent.Path));
                    createDummyNode = false;
                }
            }

            string connection = string.Format(@"Data Source={0}", Options.MainSettings.MediaPortalDatabase);

            try
            {
                SQLiteConnection conn = new SQLiteConnection(connection);
                conn.Open();
                using (SQLiteCommand cmd = new SQLiteCommand())
                {
                    cmd.Connection  = conn;
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = sql;
                    log.Debug("TreeViewBrowser: Executing sql: {0}", sql);
                    using (SQLiteDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            string       dbValue = reader.GetString(0);
                            TreeNodePath newNode = CreateTreeNode(helper, dbValue, dbValue, createDummyNode, false, false);
                            if (isRootFolder)
                            {
                                nodeTag = (string)parent.Tag;
                            }
                            else
                            {
                                nodeTag = string.Format(@"{0}\{1}", parent.Tag, dbValue);
                            }
                            newNode.Tag = nodeTag;
                            parent.Nodes.Add(newNode);
                        }
                    }
                }
                conn.Close();
            }
            catch (Exception ex)
            {
                log.Error("TreeViewBrowser: Error executing sql: {0}", ex.Message);
            }
        }
Exemple #14
0
 public IEnumerable <IArchiveFileEntry> GetFiles()
 {
     return(RootFolder.EnumerateFiles(true));
 }
Exemple #15
0
 public override void Dispose()
 {
     base.Dispose();
     RootFolder.Dispose();
     Counters.SolutionsLoaded--;
 }
Exemple #16
0
 protected override BuildResult OnBuild(IProgressMonitor monitor, ConfigurationSelector configuration)
 {
     return(RootFolder.Build(monitor, configuration));
 }
Exemple #17
0
 public override Project GetProjectContainingFile(FilePath fileName)
 {
     return(RootFolder.GetProjectContainingFile(fileName));
 }
Exemple #18
0
 public override IEnumerable <Project> GetProjectsContainingFile(FilePath fileName)
 {
     return(RootFolder.GetProjectsContainingFile(fileName));
 }
Exemple #19
0
 public ReadOnlyCollection <Project> GetAllProjectsWithTopologicalSort(ConfigurationSelector configuration)
 {
     return(RootFolder.GetAllProjectsWithTopologicalSort(configuration));
 }
Exemple #20
0
 public ReadOnlyCollection <T> GetAllSolutionItemsWithTopologicalSort <T> (ConfigurationSelector configuration) where T : SolutionItem
 {
     return(RootFolder.GetAllItemsWithTopologicalSort <T> (configuration));
 }
Exemple #21
0
 public override ReadOnlyCollection <T> GetAllSolutionItems <T> ()
 {
     return(RootFolder.GetAllItems <T> ());
 }
Exemple #22
0
        /// <summary>
        /// Create the UI
        /// </summary>
        private void CreateEdit()
        {
            RootFolder repo = new RootFolder()
            {
                Name    = FolderName,
                Id      = credentials.RepoId,
                Address = credentials.Address.ToString()
            };

            repo.Selected = true;
            IgnoredFolderLoader.AddIgnoredFolderToRootNode(repo, Ignores);
            LocalFolderLoader.AddLocalFolderToRootNode(repo, localPath);
            List <RootFolder> repos = new List <RootFolder>();

            repos.Add(repo);

            OutlineViewDelegate DataDelegate = new OutlineViewDelegate();

            CmisTree.CmisTreeDataSource DataSource = new CmisTree.CmisTreeDataSource(repos);

            CmisOutlineController OutlineController = new CmisOutlineController(DataSource, DataDelegate);

            AsyncNodeLoader asyncLoader = new AsyncNodeLoader(repo, credentials, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate);

            asyncLoader.UpdateNodeEvent += delegate {
                InvokeOnMainThread(delegate {
                    DataSource.UpdateCmisTree(repo);
                    NSOutlineView view = OutlineController.OutlineView();
                    for (int i = 0; i < view.RowCount; ++i)
                    {
                        view.ReloadItem(view.ItemAtRow(i));
                    }
                });
            };
            asyncLoader.Load(repo);

            DataDelegate.ItemExpanded += delegate(NSNotification notification)
            {
                InvokeOnMainThread(delegate {
                    NSCmisTree cmis = notification.UserInfo["NSObject"] as NSCmisTree;
                    if (cmis == null)
                    {
                        Console.WriteLine("ItemExpanded Error");
                        return;
                    }

                    NSCmisTree cmisRoot = cmis;
                    while (cmisRoot.Parent != null)
                    {
                        cmisRoot = cmisRoot.Parent;
                    }
                    if (repo.Name != cmisRoot.Name)
                    {
                        Console.WriteLine("ItemExpanded find root Error");
                        return;
                    }

                    Node node = cmis.GetNode(repo);
                    if (node == null)
                    {
                        Console.WriteLine("ItemExpanded find node Error");
                        return;
                    }
                    asyncLoader.Load(node);
                });
            };
            DataSource.SelectedEvent += delegate(NSCmisTree cmis, int selected) {
                InvokeOnMainThread(delegate {
                    Node node = cmis.GetNode(repo);
                    if (node == null)
                    {
                        Console.WriteLine("SelectedEvent find node Error");
                    }
                    node.Selected = (selected != 0);
                    DataSource.UpdateCmisTree(repo);

                    NSOutlineView view = OutlineController.OutlineView();
                    for (int i = 0; i < view.RowCount; ++i)
                    {
                        try{
                            view.ReloadItem(view.ItemAtRow(i));
                        }catch (Exception e) {
                            Console.WriteLine(e);
                        }
                    }
                });
            };

            OutlineController.View.Frame = new RectangleF(190, 60, 400, 240);
            ContentView.AddSubview(OutlineController.View);

            Controller.CloseWindowEvent += delegate
            {
                asyncLoader.Cancel();
            };

            Controller.OpenWindowEvent += delegate
            {
                InvokeOnMainThread(delegate {
                    OrderFrontRegardless();
                });
            };


            NSButton finish_button = new NSButton()
            {
                Title = Properties_Resources.SaveChanges,
            };

            NSButton cancel_button = new NSButton()
            {
                Title = Properties_Resources.DiscardChanges
            };

            Buttons.Add(finish_button);
            Buttons.Add(cancel_button);

            finish_button.Activated += delegate
            {
                Ignores = NodeModelUtils.GetIgnoredFolder(repo);
                Controller.SaveFolder();
                InvokeOnMainThread(delegate {
                    PerformClose(this);
                });
            };

            cancel_button.Activated += delegate
            {
                InvokeOnMainThread(delegate {
                    PerformClose(this);
                });
            };

            this.Header      = Properties_Resources.EditTitle;
            this.Description = "";
            this.ShowAll();
        }
Exemple #23
0
 protected override void OnClean(IProgressMonitor monitor, ConfigurationSelector configuration)
 {
     RootFolder.Clean(monitor, configuration);
 }
        private void AddContentFolderExecute(string folderName)
        {
            DiagnosticsClient.TrackEvent("PackageViewModel_AddContentFolderExecute");

            RootFolder.AddFolder(folderName);
        }
Exemple #25
0
        void ShowFolderSeletionPage()
        {
            Header = Properties_Resources.Which;
            Description = "";
            bool firstRepo = true;
            Repositories = new List<RootFolder>();
            Loader = new Dictionary<string,AsyncNodeLoader> ();
            foreach (KeyValuePair<String, String> repository in Controller.repositories)
            {
                RootFolder repo = new RootFolder() {
                    Name = repository.Value,
                    Id = repository.Key,
                    Address = Controller.saved_address.ToString()
                };
                Repositories.Add(repo);
                if (firstRepo)
                {
                    repo.Selected = true;
                    firstRepo = false;
                }
                else
                {
                    repo.Selected = false;
                }
                CmisRepoCredentials cred = new CmisRepoCredentials()
                {
                    UserName = Controller.saved_user,
                    Password = Controller.saved_password,
                    Address = Controller.saved_address,
                    RepoId = repository.Key
                };
                AsyncNodeLoader asyncLoader = new AsyncNodeLoader(repo, cred, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate);
                asyncLoader.UpdateNodeEvent += delegate {
                    InvokeOnMainThread(delegate {
                        DataSource.UpdateCmisTree(repo);
                        NSOutlineView view = OutlineController.OutlineView();
                        for (int i = 0; i < view.RowCount; ++i) {
                            view.ReloadItem(view.ItemAtRow(i));
                        }
                    });
                };
                asyncLoader.Load(repo);
                Loader.Add(repo.Id, asyncLoader);
            }
            DataSource = new CmisTree.CmisTreeDataSource(Repositories);
            DataSource.SelectedEvent += delegate (NSCmisTree cmis, int selected) {
                InvokeOnMainThread(delegate {
                    RootFolder selectedRoot = null;
                    foreach (RootFolder root in Repositories) {
                        Node node = cmis.GetNode(root);
                        if (node != null) {
                            if (node.Parent == null && node.Selected == false) {
                                selectedRoot = root;
                            }
                            node.Selected = (selected != 0);
                            DataSource.UpdateCmisTree(root);
                        }
                    }

                    NSOutlineView view = OutlineController.OutlineView();
                    if (selectedRoot != null) {
                        foreach (RootFolder root in Repositories) {
                            if (root != selectedRoot) {
                                root.Selected = false;
                                DataSource.UpdateCmisTree(root);
                            }
                        }
                        view.ReloadData();
                    } else {
                        for (int i = 0; i < view.RowCount; ++i) {
                            view.ReloadItem(view.ItemAtRow(i));
                        }
                    }
                });
            };
            DataDelegate = new OutlineViewDelegate ();
            OutlineController = new CmisOutlineController (DataSource,DataDelegate);
            ContinueButton = new NSButton() {
                Title = Properties_Resources.Continue,
                Enabled = (Repositories.Count > 0)
            };
            CancelButton = new NSButton() {
                Title = Properties_Resources.Cancel
            };
            NSButton BackButton = new NSButton() {
                Title = Properties_Resources.Back
            };
//            DataDelegate.SelectionChanged += delegate
//            {
//                InvokeOnMainThread(delegate {
//                    NSOutlineView view = OutlineController.OutlineView();
//                    if (view.SelectedRow >= 0) {
//                        ContinueButton.Enabled = true;
//                    } else {
//                        ContinueButton.Enabled = false;
//                    }
//                });
//            };
            DataDelegate.ItemExpanded += delegate(NSNotification notification)
            {
                InvokeOnMainThread(delegate {
                    NSCmisTree cmis = notification.UserInfo["NSObject"] as NSCmisTree;
                    if (cmis == null) {
                        Console.WriteLine("ItemExpanded Error");
                        return;
                    }

                    NSCmisTree cmisRoot = cmis;
                    while (cmisRoot.Parent != null) {
                        cmisRoot = cmisRoot.Parent;
                    }
                    RootFolder root = Repositories.Find(x=>x.Name.Equals(cmisRoot.Name));
                    if (root == null) {
                        Console.WriteLine("ItemExpanded find root Error");
                        return;
                    }

                    Node node = cmis.GetNode(root);
                    if (node == null) {
                        Console.WriteLine("ItemExpanded find node Error");
                        return;
                    }
                    Loader[root.Id].Load(node);
                });
            };
            ContinueButton.Activated += delegate
            {
                InvokeOnMainThread(delegate {
                    NSOutlineView view = OutlineController.OutlineView();
//                    NSCmisTree cmis = (NSCmisTree)(view.ItemAtRow(view.SelectedRow));
//                    while (cmis.Parent != null)
//                        cmis = cmis.Parent;
//                    RootFolder root = Repositories.Find(x=>x.Name.Equals(cmis.Name));
                    RootFolder root = Repositories.Find(x=>(x.Selected != false));
                    if (root != null)
                    {
                        foreach (AsyncNodeLoader task in Loader.Values)
                            task.Cancel();
                        Controller.saved_repository = root.Id;
                        List<string> ignored = NodeModelUtils.GetIgnoredFolder(root);
                        List<string> selected = NodeModelUtils.GetSelectedFolder(root);
                        Controller.Add2PageCompleted(root.Id, root.Path, ignored.ToArray(), selected.ToArray());
                    }
                });
            };
            CancelButton.Activated += delegate
            {
                InvokeOnMainThread(delegate
                {
                    foreach (AsyncNodeLoader task in Loader.Values)
                        task.Cancel();
                    Controller.PageCancelled();
                });
            };
            BackButton.Activated += delegate
            {
                InvokeOnMainThread(delegate
                {
                    foreach (AsyncNodeLoader task in Loader.Values)
                        task.Cancel();
                    Controller.BackToPage1();
                });
            };

            OutlineController.View.Frame = new RectangleF (190, 60, 400, 240);
            ContentView.AddSubview(OutlineController.View);
            Buttons.Add(ContinueButton);
            Buttons.Add(BackButton);
            Buttons.Add(CancelButton);
        }
Exemple #26
0
 public IEnumerable <IArchiveFilesystemEntry> GetFilesystemEntries()
 {
     return(RootFolder.EnumerateChildren(true));
 }
 /// <summary>
 /// Merges the sub folder of the given path to the given Repo Node
 /// </summary>
 /// <param name="repo"></param>
 /// <param name="localPath"></param>
 public static void AddLocalFolderToRootNode(RootFolder repo, string localPath)
 {
     List<Node> children = CreateNodesFromLocalFolder(localPath, repo);
     AsyncNodeLoader.MergeFolderTrees(repo, children);
 }
Exemple #28
0
 public DubSolution()
 {
     RootFolder.AddItem(ExternalDepFolder);
 }
        public void BuildAccount_FileCount_Test()
        {
            // Arrange
            User owner = new User {
                Role = UserRole.Owner, Email = "*****@*****.**", Name = "Joe Bloggs", Username = "******"
            };
            User son = new User {
                Role = UserRole.AccreditedParty, Email = "*****@*****.**", Name = "Sunny Bloggs", Username = "******"
            };
            User daughter = new User {
                Role = UserRole.AccreditedParty, Email = "*****@*****.**", Name = "Dorothy Bloggs", Username = "******"
            };

            RootFolder rootFolder = new RootFolder
            {
                Contents = new List <FileStructureEntity>
                {
                    new ChildFolder
                    {
                        Name            = "Public Photos",
                        AuthorisedUsers = new List <User> {
                            son, daughter
                        },
                        Contents = new List <FileStructureEntity>
                        {
                            new File {
                                Name = "Public Photo1.jpg", Text = "photo 1 here"
                            },
                            new File {
                                Name = "Public Photo2.jpg", Text = "photo 2 here"
                            },
                            new File {
                                Name = "Public Photo3.jpg", Text = "photo 3 here"
                            },
                        }
                    },
                    new ChildFolder
                    {
                        Name            = "Public Documents",
                        AuthorisedUsers = new List <User> {
                            son, daughter
                        },
                        Contents = new List <FileStructureEntity>
                        {
                            new File {
                                Name = "Public Document1.doc", Text = "Document 1 here"
                            },
                            new File {
                                Name = "Public Document2.doc", Text = "Document 2 here"
                            },
                        }
                    },
                    new ChildFolder
                    {
                        Name            = "Private Photos for Daughter",
                        AuthorisedUsers = new List <User> {
                            daughter
                        },
                        Contents = new List <FileStructureEntity>
                        {
                            new File {
                                Name = "Private Photo1.jpg", Text = "photo 1 here"
                            },
                            new File {
                                Name = "Private Photo2.jpg", Text = "photo 2 here"
                            },
                            new File {
                                Name = "Private Photo3.jpg", Text = "photo 3 here"
                            },
                            new File {
                                Name = "Private Photo4.jpg", Text = "photo 4 here"
                            },
                            new File {
                                Name = "Private Photo5.jpg", Text = "photo 5 here"
                            },
                        }
                    },
                    new ChildFolder
                    {
                        Name            = "Private Documents for Son",
                        AuthorisedUsers = new List <User> {
                            son
                        },
                        Contents = new List <FileStructureEntity>
                        {
                            new File {
                                Name = "Private Document1.doc", Text = "Document 1 here"
                            },
                            new File {
                                Name = "Private Document2.doc", Text = "Document 2 here"
                            },
                            new File {
                                Name = "Private Document3.doc", Text = "Document 3 here"
                            },
                        }
                    },
                }
            };


            // Act
            Account account = new Account {
                Owner = owner, RootFolder = rootFolder
            };

            // Assert
            Assert.AreEqual(account.GetFileCount(owner), 13);
            Assert.AreEqual(account.GetFileCount(son), 8);
            Assert.AreEqual(account.GetFileCount(daughter), 10);
        }
Exemple #30
0
        public void AddDraggedAndDroppedFiles(PackageFolder folder, string[] fileNames)
        {
            if (folder == null)
            {
                bool?rememberedAnswer = null;

                for (int i = 0; i < fileNames.Length; i++)
                {
                    string file = fileNames[i];
                    if (File.Exists(file))
                    {
                        bool movingFile;

                        PackageFolder targetFolder;
                        string        guessFolderName = FileHelper.GuessFolderNameFromFile(file);

                        if (rememberedAnswer == null)
                        {
                            // ask user if he wants to move file
                            Tuple <bool?, bool> answer = UIServices.ConfirmMoveFile(
                                Path.GetFileName(file),
                                guessFolderName, fileNames.Length - i - 1);

                            if (answer.Item1 == null)
                            {
                                // user presses Cancel
                                break;
                            }

                            movingFile = (bool)answer.Item1;
                            if (answer.Item2)
                            {
                                rememberedAnswer = answer.Item1;
                            }
                        }
                        else
                        {
                            movingFile = (bool)rememberedAnswer;
                        }

                        if (movingFile)
                        {
                            if (RootFolder.ContainsFolder(guessFolderName))
                            {
                                targetFolder = (PackageFolder)RootFolder[guessFolderName];
                            }
                            else
                            {
                                targetFolder = RootFolder.AddFolder(guessFolderName);
                            }
                        }
                        else
                        {
                            targetFolder = RootFolder;
                        }

                        targetFolder.AddFile(file, isTempFile: false);
                    }
                    else if (Directory.Exists(file))
                    {
                        RootFolder.AddPhysicalFolder(file);
                    }
                }
            }
            else
            {
                foreach (string file in fileNames)
                {
                    if (File.Exists(file))
                    {
                        folder.AddFile(file, isTempFile: false);
                    }
                    else if (Directory.Exists(file))
                    {
                        folder.AddPhysicalFolder(file);
                    }
                }
            }
        }
        public override void AwakeFromNib ()
        {
            base.AwakeFromNib ();

            this.SideSplashView.Image = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "side-splash.png")) {
                Size = new SizeF (150, 482)
            };

            this.Header.StringValue = Properties_Resources.EditTitle;

            Repo = new RootFolder()
            {
                Name = FolderName,
                Id = credentials.RepoId,
                Address = credentials.Address.ToString()
            };
            Repo.Selected = true;
            IgnoredFolderLoader.AddIgnoredFolderToRootNode(Repo, Ignores);
            LocalFolderLoader.AddLocalFolderToRootNode(Repo, localPath);
            List<RootFolder> repos = new List<RootFolder>();
            repos.Add(Repo);

            Loader = new AsyncNodeLoader(Repo, credentials, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate);

            CancelButton.Title = Properties_Resources.DiscardChanges;
            FinishButton.Title = Properties_Resources.SaveChanges;

            DataDelegate = new OutlineViewDelegate ();
            DataSource = new CmisTree.CmisTreeDataSource(repos);
            Outline.DataSource = DataSource;
            Outline.Delegate = DataDelegate;

            Controller.CloseWindowEvent += delegate
            {
                Loader.Cancel();
                this.Window.PerformClose (this);
                this.Dispose();
            };

            InsertEvent ();

            //  must be called after InsertEvent()
            Loader.Load(Repo);
        }
Exemple #32
0
        public void SetPathChecked(IEnumerable <string> list, bool isChecked = true)
        {
            if (list.IsNullOrEmpty() || this.RootFolder.IsNull()) //this.RootFolder.IsLoading
            {
                return;
            }

            IsChecking = true;
            int totalItems      = list.Count();
            int checkProcessing = 0;

            Action action = () =>
            {
                int       i       = 0;
                const int timeout = 60;
                //Add timeout for checking mask view can't be removed
                // minutes
                while (true)
                {
                    Thread.Sleep(1 * 1000);
                    if (!IsChecking)
                    {
                        return;
                    }
                    if (i++ > timeout)
                    {
                        if (IsChecking)
                        {
                            IsChecking = false;
                        }
                        return;
                    }
                }
            };

            action.BeginInvoke((ar) => action.EndInvoke(ar), action);

            foreach (string path in list)
            {
                ///Maybe change explore factory during checking
                if (RootFolder.IsNull())
                {
                    IsChecking = false;
                    break;
                }

                this.RootFolder.GetItemAsync(path, (file) =>
                {
                    checkProcessing++;
                    LogHelper.DebugFormat("/**** set checked index:{0}, total:{1}", checkProcessing, totalItems);
                    if (checkProcessing == totalItems)
                    {
                        IsChecking = false;
                    }
                    if (!file.IsNull())
                    {
                        file.IsChecked = isChecked;
#if DEBUG
                        //if (file is CloudFile || file is CloudFolder)
                        //{
                        //    LogHelper.DebugFormat("/++++ set checked path:{0}", file.FolderPath + file.Name);
                        //}
                        //else
                        //{
                        //    LogHelper.DebugFormat("/++++ set checked path:{0}", file.FullPath);
                        //}
#endif
                    }
                });
            }
        }
Exemple #33
0
 /// <summary>
 /// Initialises a new instance of the RootFolderPathChangedEventArgs class
 /// </summary>
 /// <param name="rootFolder">Root folder whose path changed</param>
 /// <param name="previousPath">Previous path of the root folder</param>
 public RootFolderPathChangedEventArgs(RootFolder rootFolder, IntelligentString previousPath)
     : base(rootFolder)
 {
     this.previousPath = previousPath;
 }
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            bool firstRepo = true;

            Repositories = new List <RootFolder>();
            Loader       = new Dictionary <string, AsyncNodeLoader> ();
            foreach (KeyValuePair <String, String> repository in Controller.repositories)
            {
                RootFolder repo = new RootFolder()
                {
                    Name    = repository.Value,
                    Id      = repository.Key,
                    Address = Controller.saved_address.ToString()
                };
                Repositories.Add(repo);
                if (firstRepo)
                {
                    repo.Selected = true;
                    firstRepo     = false;
                }
                else
                {
                    repo.Selected = false;
                }
                CmisRepoCredentials cred = new CmisRepoCredentials()
                {
                    UserName = Controller.saved_user,
                    Password = Controller.saved_password,
                    Address  = Controller.saved_address,
                    RepoId   = repository.Key
                };
                //  GUI workaround to remove ignore folder {{
                //AsyncNodeLoader asyncLoader = new AsyncNodeLoader(repo, cred, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate);
                //Loader.Add(repo.Id, asyncLoader);
                repo.Status = LoadingStatus.DONE;
                //  GUI workaround to remove ignore folder }}
            }

            DataSource         = new CmisTree.CmisTreeDataSource(Repositories);
            DataDelegate       = new OutlineViewDelegate();
            Outline.DataSource = DataSource;
            Outline.Delegate   = DataDelegate;

            ContinueButton.Enabled = (Repositories.Count > 0);
//            ContinueButton.KeyEquivalent = "\r";

            this.BackButton.Title     = Properties_Resources.Back;
            this.CancelButton.Title   = Properties_Resources.Cancel;
            this.ContinueButton.Title = Properties_Resources.Continue;

            InsertEvent();

            //  must be called after InsertEvent()
            //  GUI workaround to remove ignore folder {{
            //foreach (RootFolder repo in Repositories) {
            //    Loader [repo.Id].Load (repo);
            //}
            //  GUI workaround to remove ignore folder }}
        }
 public CloudLandmarkAutoBookPayloadProvider(ICloudStorage cloudStorage, AWSSettings awsSettings, RootFolder baseLocalFolder) : base(baseLocalFolder)
 {
     _cloudStorage = cloudStorage;
     _awsSettings  = awsSettings;
 }
Exemple #36
0
        private void ShowAdd2Page()
        {
            CmisTreeStore cmisStore = new CmisTreeStore ();
            Gtk.TreeView treeView = new Gtk.TreeView (cmisStore.CmisStore);

            bool firstRepo = true;
            List<RootFolder> repositories = new List<RootFolder>();
            Dictionary<string,AsyncNodeLoader> loader = new Dictionary<string, AsyncNodeLoader> ();
            foreach (KeyValuePair<String, String> repository in Controller.repositories)
            {
                RootFolder root = new RootFolder () {
                    Name = repository.Value,
                    Id = repository.Key,
                    Address = Controller.saved_address.ToString()
                };
                if (firstRepo)
                {
                    root.Selected = true;
                    firstRepo = false;
                }
                else
                {
                    root.Selected = false;
                }
                repositories.Add (root);
                CmisRepoCredentials cred = new CmisRepoCredentials () {
                    UserName = Controller.saved_user,
                    Password = Controller.saved_password,
                    Address = Controller.saved_address,
                    RepoId = repository.Key
                };
                AsyncNodeLoader asyncLoader = new AsyncNodeLoader (root, cred, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate);
                asyncLoader.UpdateNodeEvent += delegate {
                    cmisStore.UpdateCmisTree(root);
                };
                cmisStore.UpdateCmisTree (root);
                asyncLoader.Load (root);
                loader.Add (root.Id, asyncLoader);
            }

            Header = CmisSync.Properties_Resources.Which;

            VBox layout_vertical   = new VBox (false, 12);

            Button cancel_button = new Button (cancelText);
            cancel_button.Clicked += delegate {
                foreach (AsyncNodeLoader task in loader.Values)
                    task.Cancel();
                Controller.PageCancelled ();
            };

            Button continue_button = new Button (continueText)
            {
                Sensitive = (repositories.Count > 0)
            };

            continue_button.Clicked += delegate {
                RootFolder root = repositories.Find (x => (x.Selected != false));
                if (root != null)
                {
                    foreach (AsyncNodeLoader task in loader.Values)
                        task.Cancel();
                    Controller.saved_repository = root.Id;
                    List<string> ignored = NodeModelUtils.GetIgnoredFolder(root);
                    List<string> selected = NodeModelUtils.GetSelectedFolder(root);
                    Controller.Add2PageCompleted (root.Id, root.Path, ignored.ToArray(), selected.ToArray());
                }
            };

            Button back_button = new Button (backText)
            {
                Sensitive = true
            };

            back_button.Clicked += delegate {
                foreach (AsyncNodeLoader task in loader.Values)
                    task.Cancel();
                Controller.BackToPage1();
            };

            Gtk.TreeIter iter;
            treeView.HeadersVisible = false;
            treeView.Selection.Mode = SelectionMode.Single;

            TreeViewColumn column = new TreeViewColumn ();
            column.Title = "Name";
            CellRendererToggle renderToggle = new CellRendererToggle ();
            column.PackStart (renderToggle, false);
            renderToggle.Activatable = true;
            column.AddAttribute (renderToggle, "active", (int)CmisTreeStore.Column.ColumnSelected);
            column.AddAttribute (renderToggle, "inconsistent", (int)CmisTreeStore.Column.ColumnSelectedThreeState);
            column.AddAttribute (renderToggle, "radio", (int)CmisTreeStore.Column.ColumnRoot);
            renderToggle.Toggled += delegate (object render, ToggledArgs args) {
                TreeIter iterToggled;
                if (! cmisStore.CmisStore.GetIterFromString (out iterToggled, args.Path))
                {
                    Console.WriteLine("Toggled GetIter Error " + args.Path);
                    return;
                }

                Node node = cmisStore.CmisStore.GetValue(iterToggled,(int)CmisTreeStore.Column.ColumnNode) as Node;
                if (node == null)
                {
                    Console.WriteLine("Toggled GetValue Error " + args.Path);
                    return;
                }

                RootFolder selectedRoot = repositories.Find (x => (x.Selected != false));
                Node parent = node;
                while (parent.Parent != null)
                {
                    parent = parent.Parent;
                }
                RootFolder root = parent as RootFolder;
                if (root != selectedRoot)
                {
                    selectedRoot.Selected = false;
                    cmisStore.UpdateCmisTree(selectedRoot);
                }

                if (node.Parent == null)
                {
                    node.Selected = true;
                }
                else
                {
                    if (node.Selected == false)
                    {
                        node.Selected = true;
                    }
                    else
                    {
                        node.Selected = false;
                    }
                }
                cmisStore.UpdateCmisTree(root);
            };
            CellRendererText renderText = new CellRendererText ();
            column.PackStart (renderText, false);
            column.SetAttributes (renderText, "text", (int)CmisTreeStore.Column.ColumnName);
            column.Expand = true;
            treeView.AppendColumn (column);

            treeView.AppendColumn ("Status", new StatusCellRenderer (), "text", (int)CmisTreeStore.Column.ColumnStatus);

            treeView.RowExpanded += delegate (object o, RowExpandedArgs args) {
                Node node = cmisStore.CmisStore.GetValue(args.Iter, (int)CmisTreeStore.Column.ColumnNode) as Node;
                Node parent = node;
                while (parent.Parent != null)
                {
                    parent = parent.Parent;
                }
                RootFolder root = parent as RootFolder;
                loader[root.Id].Load(node);
            };

            ScrolledWindow sw = new ScrolledWindow() {
                ShadowType = Gtk.ShadowType.In
            };
            sw.Add(treeView);

            layout_vertical.PackStart (new Label(""), false, false, 0);
            layout_vertical.PackStart (sw, true, true, 0);
            Add(layout_vertical);
            AddButton(back_button);
            AddButton(cancel_button);
            AddButton(continue_button);

            if (repositories.Count > 0)
            {
                continue_button.GrabDefault ();
                continue_button.GrabFocus ();
            }
            else
            {
                back_button.GrabDefault ();
                back_button.GrabFocus ();
            }
        }
Exemple #37
0
 public override SolutionEntityItem FindSolutionItem(string fileName)
 {
     return(RootFolder.FindSolutionItem(fileName));
 }
Exemple #38
0
        /// <summary>
        /// Create the UI
        /// </summary>
        private void CreateEdit()
        {
            CmisTreeStore cmisStore = new CmisTreeStore ();
            Gtk.TreeView treeView = new Gtk.TreeView (cmisStore.CmisStore);

            RootFolder root = new RootFolder () {
                Name = this.Name,
                Id = credentials.RepoId,
                Address = credentials.Address.ToString()
            };
            IgnoredFolderLoader.AddIgnoredFolderToRootNode(root, Ignores);
            LocalFolderLoader.AddLocalFolderToRootNode(root, localPath);

            AsyncNodeLoader asyncLoader = new AsyncNodeLoader (root, credentials, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate);
            asyncLoader.UpdateNodeEvent += delegate {
                cmisStore.UpdateCmisTree(root);
            };
            cmisStore.UpdateCmisTree (root);
            asyncLoader.Load (root);

            Header = CmisSync.Properties_Resources.EditTitle;

            VBox layout_vertical   = new VBox (false, 12);

            Controller.CloseWindowEvent += delegate
            {
                asyncLoader.Cancel();
            };

            Button cancel_button = new Button (CmisSync.Properties_Resources.Cancel);
            cancel_button.Clicked += delegate {
                Close();
            };

            Button finish_button = new Button (CmisSync.Properties_Resources.SaveChanges);
            finish_button.Clicked += delegate {
                Ignores = NodeModelUtils.GetIgnoredFolder(root);
                Controller.SaveFolder();
                Close();
            };

            Gtk.TreeIter iter;
            treeView.HeadersVisible = false;
            treeView.Selection.Mode = SelectionMode.Single;

            TreeViewColumn column = new TreeViewColumn ();
            column.Title = "Name";
            CellRendererToggle renderToggle = new CellRendererToggle ();
            column.PackStart (renderToggle, false);
            renderToggle.Activatable = true;
            column.AddAttribute (renderToggle, "active", (int)CmisTreeStore.Column.ColumnSelected);
            column.AddAttribute (renderToggle, "inconsistent", (int)CmisTreeStore.Column.ColumnSelectedThreeState);
            column.AddAttribute (renderToggle, "radio", (int)CmisTreeStore.Column.ColumnRoot);
            renderToggle.Toggled += delegate (object render, ToggledArgs args) {
                TreeIter iterToggled;
                if (! cmisStore.CmisStore.GetIterFromString (out iterToggled, args.Path))
                {
                    Console.WriteLine("Toggled GetIter Error " + args.Path);
                    return;
                }

                Node node = cmisStore.CmisStore.GetValue(iterToggled,(int)CmisTreeStore.Column.ColumnNode) as Node;
                if (node == null)
                {
                    Console.WriteLine("Toggled GetValue Error " + args.Path);
                    return;
                }

                if (node.Parent == null)
                {
                    node.Selected = true;
                }
                else
                {
                    if (node.Selected == false)
                    {
                        node.Selected = true;
                    }
                    else
                    {
                        node.Selected = false;
                    }
                }
                cmisStore.UpdateCmisTree(root);
            };
            CellRendererText renderText = new CellRendererText ();
            column.PackStart (renderText, false);
            column.SetAttributes (renderText, "text", (int)CmisTreeStore.Column.ColumnName);
            column.Expand = true;
            treeView.AppendColumn (column);

            treeView.AppendColumn ("Status", new StatusCellRenderer (), "text", (int)CmisTreeStore.Column.ColumnStatus);

            treeView.RowExpanded += delegate (object o, RowExpandedArgs args) {
                Node node = cmisStore.CmisStore.GetValue(args.Iter, (int)CmisTreeStore.Column.ColumnNode) as Node;
                asyncLoader.Load(node);
            };

            ScrolledWindow sw = new ScrolledWindow() {
                ShadowType = Gtk.ShadowType.In
            };
            sw.Add(treeView);

            layout_vertical.PackStart (new Label(""), false, false, 0);
            layout_vertical.PackStart (sw, true, true, 0);
            Add(layout_vertical);
            AddButton(cancel_button);
            AddButton(finish_button);

            finish_button.GrabDefault ();

            this.ShowAll();
        }
        public void RequestSubDirs(TreeViewFolderBrowserHelper helper, TreeNodePath parent, TreeViewCancelEventArgs e)
        {
            if (parent.Path == null)
              {
            return;
              }

              if (parent.Path == "")
              {
            rootFolder = RootFolder.None;
              }

              string sql = string.Empty;
              bool createDummyNode = true;
              string nodeTag;

              // We have a Special folder, when we are at the root level
              if (parent.IsSpecialFolder)
              {
            rootFolder = RootFolder.None;
              }

              if (rootFolder == RootFolder.None)
              {
            switch ((string)parent.Tag)
            {
              case "artist":
            rootFolder = RootFolder.Artist;
            sql = SQL_STMT_ARTIST;
            break;

              case "albumartist":
            rootFolder = RootFolder.AlbumArtist;
            sql = SQL_STMT_ALBUMARTIST;
            break;

              case "album":
            rootFolder = RootFolder.Album;
            sql = SQL_STMT_ALBUM;
            createDummyNode = false;
            break;

              case "genre":
            rootFolder = RootFolder.Genre;
            sql = SQL_STMT_GENRE;
            break;
            }
              }
              else if (rootFolder == RootFolder.Artist)
              {
            sql = string.Format(SQL_STMT_ARTISTSEARCH, Util.RemoveInvalidChars(parent.Path));
            isRootFolder = false;
            createDummyNode = false;
              }
              else if (rootFolder == RootFolder.AlbumArtist)
              {
            sql = string.Format(SQL_STMT_ALBUMARTISTSEARCH, Util.RemoveInvalidChars(parent.Path));
            isRootFolder = false;
            createDummyNode = false;
              }
              else if (rootFolder == RootFolder.Genre)
              {
            isRootFolder = false;
            string[] searchString = (parent.Tag as string).Split('\\');
            if (searchString.GetLength(0) == 2)
            {
              sql = string.Format(SQL_STMT_GENREARTISTSEARCH, Util.RemoveInvalidChars(parent.Path));
              createDummyNode = true;
            }
            else
            {
              sql = string.Format(SQL_STMT_GENREARTISTALBUMSEARCH, Util.RemoveInvalidChars(searchString[1]),
                              Util.RemoveInvalidChars(parent.Path));
              createDummyNode = false;
            }
              }

              string connection = string.Format(@"Data Source={0}", Options.MainSettings.MediaPortalDatabase);
              try
              {
            SQLiteConnection conn = new SQLiteConnection(connection);
            conn.Open();
            using (SQLiteCommand cmd = new SQLiteCommand())
            {
              cmd.Connection = conn;
              cmd.CommandType = CommandType.Text;
              cmd.CommandText = sql;
              log.Debug("TreeViewBrowser: Executing sql: {0}", sql);
              using (SQLiteDataReader reader = cmd.ExecuteReader())
              {
            while (reader.Read())
            {
              string dbValue = reader.GetString(0);
              TreeNodePath newNode = CreateTreeNode(helper, dbValue, dbValue, createDummyNode, false, false);
              if (isRootFolder)
              {
                nodeTag = (string)parent.Tag;
              }
              else
              {
                nodeTag = string.Format(@"{0}\{1}", parent.Tag, dbValue);
              }
              newNode.Tag = nodeTag;
              parent.Nodes.Add(newNode);
            }
              }
            }
            conn.Close();
              }
              catch (Exception ex)
              {
            log.Error("TreeViewBrowser: Error executing sql: {0}", ex.Message);
              }
        }
Exemple #40
0
        private void LoadAddSelectRepoWPF()
        {
            // UI elements.
            Header = Properties_Resources.Which;

            // A tree allowing the user to browse CMIS repositories/folders.
            System.Uri resourceTreeLocater            = new System.Uri("/DataSpaceSync;component/FolderTreeMVC/TreeView.xaml", System.UriKind.Relative);
            System.Windows.Controls.TreeView treeView = System.Windows.Application.LoadComponent(resourceTreeLocater) as TreeView;

            ObservableCollection <RootFolder> repos = new ObservableCollection <RootFolder>();

            loader = new Dictionary <string, AsyncNodeLoader>();
            // Some CMIS servers hold several repositories (ex:Nuxeo). Show one root per repository.
            bool firstRepo = true;

            foreach (KeyValuePair <String, String> repository in Controller.repositories)
            {
                RootFolder repo = new RootFolder()
                {
                    Name    = repository.Value,
                    Id      = repository.Key,
                    Address = Controller.saved_address.ToString()
                };
                repos.Add(repo);
                if (firstRepo)
                {
                    repo.Selected = true;
                    firstRepo     = false;
                }
                else
                {
                    repo.Selected = false;
                }
                CmisRepoCredentials cred = new CmisRepoCredentials()
                {
                    UserName = Controller.saved_user,
                    Password = Controller.saved_password,
                    Address  = Controller.saved_address,
                    RepoId   = repository.Key
                };
                AsyncNodeLoader asyncLoader = new AsyncNodeLoader(repo, cred, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate);
                //  GUI workaround to remove ignore folder {{
                //asyncLoader.Load(repo);
                //loader.Add(repo.Id, asyncLoader);
                repo.Status = LoadingStatus.DONE;
                //  GUI workaround to remove ignore folder }}
            }
            treeView.DataContext = repos;
            treeView.AddHandler(TreeViewItem.ExpandedEvent, new RoutedEventHandler(delegate(object sender, RoutedEventArgs e)
            {
                TreeViewItem expandedItem = e.OriginalSource as TreeViewItem;
                Node expandedNode         = expandedItem.Header as Folder;
                if (expandedNode != null)
                {
                    Node parent = expandedNode.Parent;
                    while (parent is Folder)
                    {
                        parent = parent.Parent;
                    }
                    if (parent is RootFolder)
                    {
                        AsyncNodeLoader l;
                        RootFolder r = parent as RootFolder;
                        if (loader.TryGetValue(r.Id, out l))
                        {
                            l.Load(expandedNode);
                        }
                    }
                }
            }));

            ContentCanvas.Children.Add(treeView);
            Canvas.SetTop(treeView, 70);
            Canvas.SetLeft(treeView, 185);

            System.Uri  resourceLocater = new System.Uri("/DataSpaceSync;component/SetupAddSelectRepoWPF.xaml", System.UriKind.Relative);
            UserControl LoadXAML        = Application.LoadComponent(resourceLocater) as UserControl;

            back_button     = LoadXAML.FindName("back_button") as Button;
            continue_button = LoadXAML.FindName("continue_button") as Button;
            cancel_button   = LoadXAML.FindName("cancel_button") as Button;

            continue_button.IsEnabled = !firstRepo;

            ContentCanvas.Children.Add(LoadXAML);

            // Actions
            cancel_button.Click += delegate
            {
                SelectRepoCancelAction();
                Controller.PageCancelled();
            };

            continue_button.Click += delegate
            {
                List <string>  ignored        = new List <string>();
                List <string>  selectedFolder = new List <string>();
                ItemCollection items          = treeView.Items;
                RootFolder     selectedRepo   = null;
                foreach (var item in items)
                {
                    RootFolder repo = item as RootFolder;
                    if (repo != null)
                    {
                        if (repo.Selected != false)
                        {
                            selectedRepo = repo;
                            break;
                        }
                    }
                }
                if (selectedRepo != null)
                {
                    ignored.AddRange(NodeModelUtils.GetIgnoredFolder(selectedRepo));
                    selectedFolder.AddRange(NodeModelUtils.GetSelectedFolder(selectedRepo));
                    Controller.saved_repository  = selectedRepo.Id;
                    Controller.saved_remote_path = selectedRepo.Path;
                    SelectRepoCancelAction();
                    Controller.Add2PageCompleted(
                        Controller.saved_repository, Controller.saved_remote_path, ignored.ToArray(), selectedFolder.ToArray());
                }
                else
                {
                    return;
                }
            };

            back_button.Click += delegate
            {
                SelectRepoCancelAction();
                Controller.BackToPage1();
            };
        }
Exemple #41
0
 /// <summary>
 /// Initialises a new instance of the RootFolderEventArgs class
 /// </summary>
 /// <param name="rootFolder">Root folder being passed to the event</param>
 public RootFolderEventArgs(RootFolder rootFolder)
 {
     this.rootFolder = rootFolder;
 }
Exemple #42
0
 protected LandmarkAutoBookPayloadProviderBase(RootFolder baseLocalFolder) => _baseLocalFolder = baseLocalFolder;
 /// <summary>
 /// Merges the given ignored folders as children to the given root folder node
 /// </summary>
 /// <param name="root"></param>
 /// <param name="ignoredFolder"></param>
 public static void AddIgnoredFolderToRootNode(RootFolder root, List<string> ignoredFolder)
 {
     AsyncNodeLoader.MergeFolderTrees(root, CreateNodesFormIgnoredFolders(ignoredFolder));
 }
Exemple #44
0
        /// <summary>
        /// Create the UI
        /// </summary>
        private void CreateEdit()
        {
            RootFolder repo = new RootFolder()
            {
                Name = FolderName,
                Id = credentials.RepoId,
                Address = credentials.Address.ToString()
            };
            repo.Selected = true;
            IgnoredFolderLoader.AddIgnoredFolderToRootNode(repo, Ignores);
            LocalFolderLoader.AddLocalFolderToRootNode(repo, localPath);
            List<RootFolder> repos = new List<RootFolder>();
            repos.Add(repo);

            OutlineViewDelegate DataDelegate = new OutlineViewDelegate ();
            CmisTree.CmisTreeDataSource DataSource = new CmisTree.CmisTreeDataSource(repos);

            CmisOutlineController OutlineController = new CmisOutlineController (DataSource, DataDelegate);

            AsyncNodeLoader asyncLoader = new AsyncNodeLoader(repo, credentials, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate);
            asyncLoader.UpdateNodeEvent += delegate {
                InvokeOnMainThread(delegate {
                    DataSource.UpdateCmisTree(repo);
                    NSOutlineView view = OutlineController.OutlineView();
                    for (int i = 0; i < view.RowCount; ++i) {
                        view.ReloadItem(view.ItemAtRow(i));
                    }
                });
            };
            asyncLoader.Load(repo);

            DataDelegate.ItemExpanded += delegate(NSNotification notification)
            {
                InvokeOnMainThread(delegate {
                    NSCmisTree cmis = notification.UserInfo["NSObject"] as NSCmisTree;
                    if (cmis == null) {
                        Console.WriteLine("ItemExpanded Error");
                        return;
                    }

                    NSCmisTree cmisRoot = cmis;
                    while (cmisRoot.Parent != null) {
                        cmisRoot = cmisRoot.Parent;
                    }
                    if (repo.Name != cmisRoot.Name) {
                        Console.WriteLine("ItemExpanded find root Error");
                        return;
                    }

                    Node node = cmis.GetNode(repo);
                    if (node == null) {
                        Console.WriteLine("ItemExpanded find node Error");
                        return;
                    }
                    asyncLoader.Load(node);
                });
            };
            DataSource.SelectedEvent += delegate (NSCmisTree cmis, int selected) {
                InvokeOnMainThread(delegate {
                    Node node = cmis.GetNode(repo);
                    if (node == null) {
                        Console.WriteLine("SelectedEvent find node Error");
                    }
                    node.Selected = (selected != 0);
                    DataSource.UpdateCmisTree(repo);

                    NSOutlineView view = OutlineController.OutlineView();
                    for (int i = 0; i < view.RowCount; ++i) {
                        try{
                            view.ReloadItem(view.ItemAtRow(i));
                        }catch(Exception e) {
                            Console.WriteLine(e);
                        }
                    }
                });
            };

            OutlineController.View.Frame = new RectangleF (190, 60, 400, 240);
            ContentView.AddSubview (OutlineController.View);

            Controller.CloseWindowEvent += delegate
            {
                asyncLoader.Cancel();
            };

            Controller.OpenWindowEvent += delegate
            {
                InvokeOnMainThread (delegate {
                    OrderFrontRegardless ();
                });
            };


            NSButton finish_button = new NSButton()
            {
                Title = Properties_Resources.SaveChanges,
            };

            NSButton cancel_button = new NSButton()
            {
                Title = Properties_Resources.DiscardChanges
            };

            Buttons.Add(finish_button);
            Buttons.Add(cancel_button);

            finish_button.Activated += delegate
            {
                Ignores = NodeModelUtils.GetIgnoredFolder(repo);
                Controller.SaveFolder();
                InvokeOnMainThread (delegate {
                    PerformClose (this);
                });
            };

            cancel_button.Activated += delegate
            {
                InvokeOnMainThread (delegate {
                    PerformClose (this);
                });
            };

            this.Header = Properties_Resources.EditTitle;
            this.Description = "";
            this.ShowAll();
        }
 internal IEnumerable <IPackageFile> GetFiles()
 {
     return(RootFolder.GetFiles());
 }
        public override void AwakeFromNib ()
        {
            base.AwakeFromNib ();

            this.SideSplashView.Image = new NSImage (UIHelpers.GetImagePathname ("side-splash")) {
                Size = new SizeF (150, 482)
            };

            this.Header.StringValue = Properties_Resources.EditTitle;

            Repo = new RootFolder()
            {
                Name = FolderName,
                Id = Credentials.RepoId,
                Address = Credentials.Address.ToString()
            };
            Repo.Selected = true;
            IgnoredFolderLoader.AddIgnoredFolderToRootNode(Repo, Ignores);
            LocalFolderLoader.AddLocalFolderToRootNode(Repo, localPath);
            List<RootFolder> repos = new List<RootFolder>();
            repos.Add(Repo);

            Loader = new AsyncNodeLoader(Repo, Credentials, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate);

            CancelButton.Title = Properties_Resources.DiscardChanges;
            FinishButton.Title = Properties_Resources.SaveChanges;

            DataDelegate = new OutlineViewDelegate ();
            DataSource = new CmisTree.CmisTreeDataSource(repos);
            Outline.DataSource = DataSource;
            Outline.Delegate = DataDelegate;

            this.AddressLabel.StringValue = Properties_Resources.CmisWebAddress;
            this.UserLabel.StringValue = Properties_Resources.User;
            this.PasswordLabel.StringValue = Properties_Resources.Password;

            this.AddressText.StringValue = Credentials.Address.ToString ();
            this.UserText.StringValue = Credentials.UserName;
            this.PasswordText.StringValue = Credentials.Password.ToString ();
            this.AddressText.Enabled = false;
            this.UserText.Enabled = false;
            this.LoginStatusProgress.IsDisplayedWhenStopped = false;
            this.LoginStatusLabel.Hidden = true;
            this.FolderTab.Label = Properties_Resources.AddingFolder;
            this.CredentialsTab.Label = Properties_Resources.Credentials;
            switch (this.type) {
            case EditType.EditFolder:
                TabView.SelectAt (0);
                break;
            case EditType.EditCredentials:
                TabView.SelectAt (1);
                break;
            default:
                TabView.SelectAt (0);
                break;
            }
            //  GUI workaround to remove ignore folder {{
            this.TabView.Remove (this.FolderTab);
            //  GUI workaround to remove ignore folder }}

            Controller.CloseWindowEvent += delegate
            {
                Loader.Cancel();
                this.Window.PerformClose (this);
                this.Dispose();
            };

            InsertEvent ();

            //  must be called after InsertEvent()
            Loader.Load(Repo);
            lock(loginLock)
                isClosed = false;

            OnPasswordChanged (this);
        }
Exemple #47
0
        private void LoadAddSelectRepoWPF() {
            // UI elements.
            Header = Properties_Resources.Which;

            // A tree allowing the user to browse CMIS repositories/folders.
            System.Uri resourceTreeLocater = new System.Uri("/DataSpaceSync;component/FolderTreeMVC/TreeView.xaml", System.UriKind.Relative);
            System.Windows.Controls.TreeView treeView = System.Windows.Application.LoadComponent(resourceTreeLocater) as TreeView;

            ObservableCollection<RootFolder> repos = new ObservableCollection<RootFolder>();
            loader = new Dictionary<string, AsyncNodeLoader>();
            // Some CMIS servers hold several repositories (ex:Nuxeo). Show one root per repository.
            bool firstRepo = true;
            foreach (var repository in Controller.repositories) {
                RootFolder repo = new RootFolder() {
                    Name = repository.Name,
                    Id = repository.Id,
                    Address = Controller.saved_address.ToString()
                };
                repos.Add(repo);
                if (firstRepo) {
                    repo.Selected = true;
                    firstRepo = false;
                } else {
                    repo.Selected = false;
                }

                CmisRepoCredentials cred = new CmisRepoCredentials() {
                    UserName = Controller.saved_user,
                    Password = Controller.saved_password,
                    Address = Controller.saved_address,
                    Binding = Controller.saved_binding,
                    RepoId = repository.Id
                };
                AsyncNodeLoader asyncLoader = new AsyncNodeLoader(repo, cred, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate);
                //  GUI workaround to remove ignore folder {{
                //asyncLoader.Load(repo);
                //loader.Add(repo.Id, asyncLoader);
                repo.Status = LoadingStatus.DONE;
                //  GUI workaround to remove ignore folder }}
            }

            treeView.DataContext = repos;
            treeView.AddHandler(TreeViewItem.ExpandedEvent, new RoutedEventHandler(delegate(object sender, RoutedEventArgs e) {
                TreeViewItem expandedItem = e.OriginalSource as TreeViewItem;
                Node expandedNode = expandedItem.Header as Folder;
                if (expandedNode != null) {
                    Node parent = expandedNode.Parent;
                    while (parent is Folder) {
                        parent = parent.Parent;
                    }

                    if (parent is RootFolder) {
                        AsyncNodeLoader l;
                        RootFolder r = parent as RootFolder;
                        if (loader.TryGetValue(r.Id, out l)) {
                            l.Load(expandedNode);
                        }
                    }
                }
            }));

            ContentCanvas.Children.Add(treeView);
            Canvas.SetTop(treeView, 70);
            Canvas.SetLeft(treeView, 185);

            System.Uri resourceLocater = new System.Uri("/DataSpaceSync;component/SetupAddSelectRepoWPF.xaml", System.UriKind.Relative);
            UserControl LoadXAML = Application.LoadComponent(resourceLocater) as UserControl;

            back_button = LoadXAML.FindName("back_button") as Button;
            continue_button = LoadXAML.FindName("continue_button") as Button;
            cancel_button = LoadXAML.FindName("cancel_button") as Button;

            continue_button.IsEnabled = !firstRepo;

            ContentCanvas.Children.Add(LoadXAML);

            // Actions
            cancel_button.Click += delegate {
                SelectRepoCancelAction();
                Controller.PageCancelled();
            };

            continue_button.Click += delegate {
                List<string> ignored = new List<string>();
                List<string> selectedFolder = new List<string>();
                ItemCollection items = treeView.Items;
                RootFolder selectedRepo = null;
                foreach (var item in items) {
                    RootFolder repo = item as RootFolder;
                    if (repo != null) {
                        if (repo.Selected != false) {
                            selectedRepo = repo;
                            break;
                        }
                    }
                }

                if (selectedRepo != null) {
                    ignored.AddRange(NodeModelUtils.GetIgnoredFolder(selectedRepo));
                    selectedFolder.AddRange(NodeModelUtils.GetSelectedFolder(selectedRepo));
                    Controller.saved_repository = selectedRepo.Id;
                    Controller.saved_remote_path = selectedRepo.Path;
                    SelectRepoCancelAction();
                    Controller.Add2PageCompleted(
                        Controller.saved_repository, Controller.saved_remote_path, ignored.ToArray(), selectedFolder.ToArray());
                } else {
                    return;
                }
            };

            back_button.Click += delegate {
                SelectRepoCancelAction();
                Controller.BackToPage1();
            };
        }