Exemple #1
0
        public TreeNode CreateNode(DatabaseDirectory databaseDirectory)
        {
            var dirNode = new TreeNode(databaseDirectory.name_Folder);

            dirNode.Tag                = databaseDirectory;
            dirNode.ImageIndex         = 0;
            dirNode.SelectedImageIndex = 0;
            //add tag for dirNode

            foreach (var directory in databaseDirectory.GetDirectories())
            {
                dirNode.Nodes.Add(CreateNode(directory));
            }

            foreach (var file in databaseDirectory.GetFiles())
            {
                var a = new TreeNode(file.name_file);
                a.Tag                = file;
                a.ImageIndex         = 2;
                a.SelectedImageIndex = 2;
                dirNode.Nodes.Add(a);
            }

            return(dirNode);
        }
        public DatabaseDirectory CreateNode(DataRow nodeRow, Connector connector)
        {
            var dirNode = new DatabaseDirectory(
                Convert.ToInt32(nodeRow["id_folder"]),
                nodeRow["name_folder"].ToString(),
                Convert.ToInt32(nodeRow["parent_folder"])
                );


            //Add and client_created_by  = clientID
            var childFoldersDataTable = connector.ExecuteSelectQuery(
                string.Format("select * from Folders where parent_folder = {0} and created_by_client = {1}",
                              nodeRow["id_folder"], _clientID)
                );
            var childFilesDataTable = connector.ExecuteSelectQuery(
                string.Format("select * from Files where parent_folder = {0} and created_by_client = {1}",
                              nodeRow["id_folder"], _clientID)
                );

            foreach (DataRow row in childFoldersDataTable.Rows)
            {
                dirNode.FoldersList.Add(CreateNode(row, connector));
            }

            foreach (DataRow row in childFilesDataTable.Rows)
            {
                dirNode.FilesList.Add(DatabaseDirectory.AddFile(row));
            }

            return(dirNode);
        }
Exemple #3
0
        private void SetOfflineTree()
        {
            _rootDirectory = new DatabaseDirectory(clientID: _client._clientID);

            _rootDirectory = _rootDirectory.CreateNode(
                _sqLiteConnector.ExecuteSelectQuery("select * from Folders where id_folder = 1").Rows[0],
                _sqLiteConnector
                );

            _formInterface.DrawTree(_rootDirectory, isOnline: false);
        }
Exemple #4
0
 public void DrawTree(DatabaseDirectory root, bool isOnline)
 {
     //get root node
     if (isOnline)
     {
         _onlineTree.Nodes.Clear();
         _onlineTree.Nodes.Add(CreateNode(root));
     }
     else
     {
         _offlineTree.Nodes.Clear();
         _offlineTree.Nodes.Add(CreateNode(root));
     }
 }
Exemple #5
0
        public void AddFolder(string name, DatabaseDirectory parentDirectory)
        {
            //check if folder name already exists within same parent folder
            string countQuery = string.Format("select count(*) from Folders where name_folder = '{0}' and parent_folder = {1}", name,
                                              parentDirectory.id_folder);


            if ((ConnectivityState)_connectivityStateEnum == ConnectivityState.Offline)
            {
                int a = _sqLiteConnector.ExecuteScalarQuery(countQuery);

                //throw exception or write function to check validity in sqlserver/lite
                if (a != 0)
                {
                    MessageBox.Show("Name already exists, please change it.");
                    return;
                }

                string insertOfflineQuery = String.Format("insert into Folders (name_folder, parent_folder, created_by_client, is_synced) values('{0}', {1}, {2}, {3})",
                                                          name, parentDirectory.id_folder, _client._clientID, 0);

                _sqLiteConnector.ExecuteInsertQuery(insertOfflineQuery);

                SetOfflineTree();
            }//=======================================================================================================================================================================
            else if ((ConnectivityState)_connectivityStateEnum == ConnectivityState.Online)
            {
                //check if sqlite has no synced items

                try
                {
                    int a = _sqlServerConnector.ExecuteScalarQuery(countQuery);

                    if (a != 0)
                    {
                        MessageBox.Show("Name already exists, please change it.");
                        return;
                    }

                    string insertOnlineQuery = String.Format("insert into Folders (id_folder, name_folder, parent_folder, created_by_client) values(next value for id_folder_seq, '{0}', {1}, {2})",
                                                             name, parentDirectory.id_folder, _client._clientID);

                    _sqlServerConnector.ExecuteInsertQuery(insertOnlineQuery);
                    //get last id of inserted record
                    int newId = _sqlServerConnector.ExecuteScalarQuery("SELECT MAX(id_folder) FROM Folders");

                    string insertOfflineQuery = String.Format("insert into Folders (id_folder, name_folder, parent_folder, created_by_client, is_synced) values({0}, '{1}', {2}, {3}, {4})",
                                                              newId, name, parentDirectory.id_folder, _client._clientID, 1);

                    _sqLiteConnector.ExecuteInsertQuery(insertOfflineQuery);

                    SetOnlineTree();
                }
                catch (Exception e)
                {
                    MessageBox.Show("Cannot connect in SQL Server.");

                    _connectivityStateEnum = ConnectivityState.Offline;
                    SetOfflineTree();
                    _formInterface.EnableOnlineTree(isEnabled: false);
                    _formInterface.EnableOfflineTree(isEnabled: true);
                    _formInterface.PassOffline();
                    _timeManager.ContinueScheduler();
                }
            }
            _formInterface.ExpandTrees();
        }
Exemple #6
0
        public void InitializeEngine(FormInterface formInterface)
        {
            _formInterface   = formInterface;
            _sqLiteConnector = new SQLiteConnector(_sqLiteConnString);
            _formInterface   = formInterface;



            _timeManager = new SyncTimeManager();
            _timeManager.Init(this);



            SetConnectivityState();
            DatabaseDirectory.SetConnectors(_sqlServerConnector, _sqLiteConnector);


            _formInterface.SetCorrStatus((ConnectivityState)_connectivityStateEnum);

            //_client = new Client(_sqlServerConnector, _sqLiteConnector, _connectivityStateEnum);


            //Debug:
            _client = new Client(_sqlServerConnector, _sqLiteConnector, _connectivityStateEnum);
            _timeManager.RescheduleFromCronExpr(_client._cronExpression);

            if ((ConnectivityState)_connectivityStateEnum == ConnectivityState.Offline)
            {
                if (_client.IsSet)
                {
                    //start last set schedule by client (cronExpr from sqlite)
                    string cronExpr = _client.GetCron();

                    //_timeManager.RescheduleFromCronExpr(cronExpr);
                    _timeManager.StartScheduler(2);

                    //set interface depending on cronExpression
                    _formInterface.SetConfigInterfaceCron(cronExpr);
                }
                else
                {
                    //no sync for him
                }


                //disables interface for changing jobs

                //todo code for tree:
                SetOfflineTree();
                _formInterface.EnableOfflineTree(true);
                _formInterface.EnableOnlineTree(false);

                //throw new Exception("not yet configured");
            }
            else if ((ConnectivityState)_connectivityStateEnum == ConnectivityState.Online)
            {
                //launch job from cronExpr
                string cronExpr = _client.GetCron();
                //_timeManager.RescheduleFromCronExpr(cronExpr);
                _timeManager.StartScheduler(2);

                //Enable formInterface for change of cronEpxr


                //todo code to load tree
                int nonSyncedFiles   = _sqLiteConnector.ExecuteScalarQuery("SELECT COUNT(*) FROM Files WHERE is_synced = 0");
                int nonSyncedFolders = _sqLiteConnector.ExecuteScalarQuery("SELECT COUNT(*) FROM Folders WHERE is_synced = 0");

                if (nonSyncedFolders != 0 || nonSyncedFiles != 0)
                {
                    //formInterface --> disable sqlserver tree and enable sqlite tree
                    _formInterface.EnableOnlineTree(isEnabled: false);
                    _formInterface.EnableOfflineTree(isEnabled: true);

                    SetOnlineTree();
                    SetOfflineTree();

                    //bug prompt to sync and lock database if accepted to sync ??
                }
                else
                {
                    _formInterface.EnableOnlineTree(isEnabled: true);
                    _formInterface.EnableOfflineTree(isEnabled: false);
                    SetOnlineTree();
                }
            }
        }
Exemple #7
0
        private void btnAddFolder_Click(object sender, EventArgs e)
        {
            DatabaseDirectory selectedDir = new DatabaseDirectory(-1, "null", -1);

            string promptValue = Prompt.ShowDialog("New folder name :", "New Folder...");


            if (onlineTView.Enabled)
            {
                try
                {
                    if (typeof(DatabaseDirectory) == onlineTView.SelectedNode.Tag.GetType())
                    {
                        selectedDir = (DatabaseDirectory)onlineTView.SelectedNode.Tag;
                    }
                    else if (typeof(DatabaseFile) == onlineTView.SelectedNode.Tag.GetType())
                    {
                        selectedDir = (DatabaseDirectory)onlineTView.SelectedNode.Parent.Tag;
                    }
                }
                catch (NullReferenceException ne)
                {
                    //if no folder was selected, select root
                    selectedDir = (DatabaseDirectory)onlineTView.Nodes[0].Tag;
                }
            }
            else if (offlineTView.Enabled)
            {
                try
                {
                    if (typeof(DatabaseDirectory) == offlineTView.SelectedNode.Tag.GetType())
                    {
                        selectedDir = (DatabaseDirectory)offlineTView.SelectedNode.Tag;
                    }
                    else if (typeof(DatabaseFile) == offlineTView.SelectedNode.Tag.GetType())
                    {
                        selectedDir = (DatabaseDirectory)offlineTView.SelectedNode.Parent.Tag;
                    }
                }
                catch (NullReferenceException ne)
                {
                    //if no folder was selected, select root
                    selectedDir = (DatabaseDirectory)offlineTView.Nodes[0].Tag;
                }
            }

            //===========================================================================
            //FOR DEBUGING
            //string c = $"selected file : id : {selectedFile.id_file}, name : {selectedFile.name_file}, path : {selectedFile.path_file}, parent : {selectedFile.parent_folder}";
            //string a = $"selected folder : id : {selectedDir.id_folder}, name : {selectedDir.name_Folder}, parent : {selectedDir.parent_folder}";

            //Debug.WriteLine(c);
            //Debug.WriteLine(a);
            //===========================================================================


            if (promptValue == "")
            {
            }
            else
            {
                try
                {
                    if (selectedDir.id_folder != -1)
                    {
                        _engine.AddFolder(promptValue, selectedDir);
                    }
                }
                catch (Exception exception)
                {
                }
            }

            /* used to "close" app
             * this.WindowState = FormWindowState.Minimized;
             * this.FormBorderStyle = FormBorderStyle.SizableToolWindow;
             * this.ShowInTaskbar = false;
             */
        }
Exemple #8
0
        private void btnAddFile_Click(object sender, EventArgs e)
        {
            DatabaseDirectory selectedDir = new DatabaseDirectory(-1, "null", -1);


            if (onlineTView.Enabled)
            {
                try
                {
                    if (typeof(DatabaseDirectory) == onlineTView.SelectedNode.Tag.GetType())
                    {
                        selectedDir = (DatabaseDirectory)onlineTView.SelectedNode.Tag;
                    }
                    else if (typeof(DatabaseFile) == onlineTView.SelectedNode.Tag.GetType())
                    {
                        selectedDir = (DatabaseDirectory)onlineTView.SelectedNode.Parent.Tag;
                    }
                }
                catch (NullReferenceException ne)
                {
                    //if no folder was selected, select root
                    selectedDir = (DatabaseDirectory)onlineTView.Nodes[0].Tag;
                }
            }
            else if (offlineTView.Enabled)
            {
                try
                {
                    if (typeof(DatabaseDirectory) == offlineTView.SelectedNode.Tag.GetType())
                    {
                        selectedDir = (DatabaseDirectory)offlineTView.SelectedNode.Tag;
                    }
                    else if (typeof(DatabaseFile) == offlineTView.SelectedNode.Tag.GetType())
                    {
                        selectedDir = (DatabaseDirectory)offlineTView.SelectedNode.Parent.Tag;
                    }
                }
                catch (NullReferenceException ne)
                {
                    //if no folder was selected, select root
                    selectedDir = (DatabaseDirectory)offlineTView.Nodes[0].Tag;
                }
            }



            //===========================================

            OpenFileDialog file = new OpenFileDialog();

            if (file.ShowDialog() == DialogResult.OK)
            {
                if (selectedDir.id_folder != -1)
                {
                    _engine.AddFile(file.SafeFileName, file.FileName, selectedDir);
                }
            }


            //===========================================
        }