Exemplo n.º 1
0
        public override FolderMetadata LoadFolderMetadata(string currId, SourceOption option)
        {
            string opt            = (option == SourceOption.SOURCE_ID_NOT_EQUALS) ? " <> " : " = ";
            var    folderMetadata = new FolderMetadata(currId, this.RootPath);

            var db = new SQLiteAccess(Path.Combine(this.StoragePath, Configuration.DATABASE_NAME), false);

            using (SqliteConnection con = db.NewSQLiteConnection())
            {
                if (con == null)
                {
                    throw new DatabaseException(String.Format(m_ResourceManager.GetString("err_somethingNotFound"), Path.Combine(this.StoragePath, Configuration.DATABASE_NAME)));
                }

                string cmdText = "SELECT * FROM " + Configuration.TLB_FOLDERMETADATA +
                                 " WHERE " + Configuration.COL_SOURCE_ID + opt + " @sourceId";
                var paramList = new SqliteParameterCollection
                {
                    new SqliteParameter("@sourceId", DbType.String)
                    {
                        Value = currId
                    }
                };
                db.ExecuteReader(cmdText, paramList, reader => folderMetadata.FolderMetadataItems.Add(
                                     new FolderMetadataItem(
                                         (string)reader[Configuration.COL_SOURCE_ID],
                                         (string)reader[Configuration.COL_FOLDER_RELATIVE_PATH],
                                         (int)reader[Configuration.COL_IS_FOLDER_EMPTY])));
            }
            return(folderMetadata);
        }
Exemplo n.º 2
0
        private void SyncEmptyFolders()
        {
            //read metadata of the current folder in file system
            FolderMetadata currentItems = MetaDataProvider.GenerateFolderMetadata(_job.SyncSource.Path, _job.SyncSource.ID, false, false, true);

            //read the folder metadata of current folder stored in database
            FolderMetadata oldCurrentItems = mdProvider.LoadFolderMetadata(_job.SyncSource.ID, SourceOption.SOURCE_ID_EQUALS);

            //read folder metadata of the other source stored in the database
            FolderMetadata otherItems = mdProvider.LoadFolderMetadata(_job.SyncSource.ID, SourceOption.SOURCE_ID_NOT_EQUALS);

            //get the difference between current folder metadata with its previous state (from previous sync session).
            FolderMetadataComparer comparer1 = new FolderMetadataComparer(oldCurrentItems, currentItems);

            //get the difference between current folder metadata with the other folder's previous metadata
            FolderMetadataComparer compare2 = new FolderMetadataComparer(currentItems, otherItems);


            FolderMetadataComparer comparer3 = new FolderMetadataComparer(oldCurrentItems.FolderMetadataItems, compare2.LeftOnly);
            FolderMetadataComparer comparer4 = new FolderMetadataComparer(compare2.RightOnly, comparer1.LeftOnly);

            List <FolderMetadataItem> temps = comparer3.Both.ToList();

            temps.Sort(new FolderMetadataItemComparer());
            temps.Reverse();

            foreach (FolderMetadataItem item in temps)
            {
                SyncExecutor.DeleteFolder(this._job.SyncSource.Path, item.RelativePath, true);
            }

            foreach (FolderMetadataItem item in comparer4.LeftOnly)
            {
                if (item.IsEmpty == 1)
                {
                    SyncExecutor.CreateFolder(this._job.SyncSource.Path, item.RelativePath);
                }
            }

            currentItems = MetaDataProvider.GenerateFolderMetadata(_job.SyncSource.Path, _job.SyncSource.ID, false,
                                                                   false, true);
            mdProvider.UpdateFolderMetadata(oldCurrentItems, currentItems, false);
        }
Exemplo n.º 3
0
        public override bool UpdateFolderMetadata(FolderMetadata oldMetadata, FolderMetadata newMetadata, bool storeOnlyEmptyFolder)
        {
            oldMetadata.FolderMetadataItems.ToList().Sort(new FolderMetadataItemComparer());
            newMetadata.FolderMetadataItems.ToList().Sort(new FolderMetadataItemComparer());

            //Find the metadata items that in the current folder only
            IEnumerable <FolderMetadataItem> newOnly =
                newMetadata.FolderMetadataItems.Where(
                    @new => !oldMetadata.FolderMetadataItems.Contains(@new, new FolderMetadataItemComparer()) &&
                    (storeOnlyEmptyFolder?Files.FileUtils.IsDirectoryEmpty(@new.AbsolutePath):true)
                    );

            //find metadata items that not in the current folder but metadata store
            IEnumerable <FolderMetadataItem> oldOnly =
                oldMetadata.FolderMetadataItems.Where(
                    old => !newMetadata.FolderMetadataItems.Contains(old, new FolderMetadataItemComparer()));

            var db = new SQLiteAccess(Path.Combine(this.StoragePath, Configuration.DATABASE_NAME), false);

            using (var con = db.NewSQLiteConnection())
            {
                if (con == null)
                {
                    throw new DatabaseException(String.Format(m_ResourceManager.GetString("err_somethingNotFound"), Path.Combine(this.StoragePath, Configuration.DATABASE_NAME)));
                }

                var transaction = (SqliteTransaction)con.BeginTransaction();
                try
                {
                    this.Add(newOnly.ToList(), con);
                    this.Delete(oldOnly.ToList(), con);
                    transaction.Commit();
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    return(false);
                }
            }
            return(true);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Function to generate folder metadata of a given folder
        /// </summary>
        /// <param name="fromPath"></param>
        /// <param name="id"></param>
        /// <param name="excludeHidden"></param>
        /// <returns></returns>
        public static FolderMetadata GenerateFolderMetadata(string fromPath, string id, bool excludeHidden, bool createIfNotExist, bool excludeNonEmpty)
        {
            if (!Directory.Exists((fromPath)) && createIfNotExist)
            {
                Directory.CreateDirectory((fromPath));
            }

            FolderMetadata folderMetadata = new FolderMetadata(id, fromPath);

            DirectoryInfo di = new DirectoryInfo(fromPath);

            DirectoryInfo[] directories = null;

            AddDirectorySecurity(fromPath);

            directories = di.GetDirectories("*.*", SearchOption.AllDirectories);

            if (directories == null)
            {
                return(new FolderMetadata(id, fromPath));
            }
            IEnumerable <DirectoryInfo> noHiddenDirectories = from dir in directories
                                                              where (
                (excludeHidden?!Files.FileUtils.IsDirectoryHidden(dir.FullName):true))
                                                              select dir;

            directories = noHiddenDirectories.ToArray <DirectoryInfo>();

            foreach (DirectoryInfo dirInfo in directories)
            {
                int isEmpty = (Files.FileUtils.IsDirectoryEmpty(dirInfo.FullName)) ? 1 : 0;
                folderMetadata.FolderMetadataItems.Add(
                    new FolderMetadataItem(id, dirInfo.FullName, fromPath, isEmpty));
            }
            return(folderMetadata);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Update folder metadata
        /// </summary>
        /// <returns></returns>
        private bool UpdateFolderMetadata(FolderMetadata oldMetadata, FolderMetadata newMetadata, SqliteConnection con)
        {
            //Find the metadata items that in the current folder only
            IEnumerable <FolderMetadataItem> newOnly =
                newMetadata.FolderMetadataItems.Where(
                    @new => !oldMetadata.FolderMetadataItems.Contains(@new, new FolderMetadataItemComparer())
                    );

            //find metadata items that not in the current folder but metadata store
            IEnumerable <FolderMetadataItem> oldOnly =
                oldMetadata.FolderMetadataItems.Where(
                    old => !newMetadata.FolderMetadataItems.Contains(old, new FolderMetadataItemComparer()));

            try
            {
                this.Add(newOnly.ToList(), con);
                this.Delete(oldOnly.ToList(), con);
            }
            catch (Exception)
            {
                return(false);
            }
            return(true);
        }
Exemplo n.º 6
0
 public Metadata(FileMetaData fileMetadata, FolderMetadata folderMetadata)
 {
     this.FileMetadata = fileMetadata;
     this.FolderMetadata = folderMetadata;
 }
Exemplo n.º 7
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="oldItems"></param>
 /// <param name="newItems"></param>
 /// <returns></returns>
 public abstract bool UpdateFolderMetadata(FolderMetadata oldItems, FolderMetadata newItems, bool storeOnlyEmptyFolder);
Exemplo n.º 8
0
 /// <summary>
 /// Provides the ...
 /// </summary>
 /// <param name="current"></param>
 /// <param name="stored"></param>
 public FolderMetadataComparer(FolderMetadata left, FolderMetadata right)
 {
     this.left  = left;
     this.right = right;
     Compare(left.FolderMetadataItems, right.FolderMetadataItems);
 }
Exemplo n.º 9
0
 public Metadata(FileMetaData fileMetadata, FolderMetadata folderMetadata)
 {
     this.FileMetadata   = fileMetadata;
     this.FolderMetadata = folderMetadata;
 }
Exemplo n.º 10
0
 /// <summary>
 /// Provides the ...
 /// </summary>
 /// <param name="current"></param>
 /// <param name="stored"></param>
 public FolderMetadataComparer(FolderMetadata left, FolderMetadata right)
 {
     this.left = left;
     this.right = right;
     Compare(left.FolderMetadataItems, right.FolderMetadataItems);
 }
Exemplo n.º 11
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="oldItems"></param>
 /// <param name="newItems"></param>
 /// <returns></returns>
 public abstract bool UpdateFolderMetadata(FolderMetadata oldItems, FolderMetadata newItems, bool storeOnlyEmptyFolder);
Exemplo n.º 12
0
        /// <summary>
        /// Function to generate folder metadata of a given folder
        /// </summary>
        /// <param name="fromPath"></param>
        /// <param name="id"></param>
        /// <param name="excludeHidden"></param>
        /// <returns></returns>
        public static FolderMetadata GenerateFolderMetadata(string fromPath, string id, bool excludeHidden, bool createIfNotExist, bool excludeNonEmpty)
        {
            if (!Directory.Exists((fromPath)) && createIfNotExist)
                Directory.CreateDirectory((fromPath));

            FolderMetadata folderMetadata = new FolderMetadata(id, fromPath);

            DirectoryInfo di = new DirectoryInfo(fromPath);
            DirectoryInfo[] directories = null;

            AddDirectorySecurity(fromPath);

            directories = di.GetDirectories("*.*", SearchOption.AllDirectories);

            if (directories == null) return new FolderMetadata( id, fromPath );
            IEnumerable<DirectoryInfo> noHiddenDirectories = from dir in directories
                                                             where (
                                                             (excludeHidden?!Files.FileUtils.IsDirectoryHidden(dir.FullName):true))
                                                             select dir;
            directories = noHiddenDirectories.ToArray<DirectoryInfo>();

            foreach (DirectoryInfo dirInfo in directories)
            {
                int isEmpty = (Files.FileUtils.IsDirectoryEmpty(dirInfo.FullName)) ? 1 : 0;
                folderMetadata.FolderMetadataItems.Add(
                    new FolderMetadataItem(id, dirInfo.FullName, fromPath, isEmpty));
            }
            return folderMetadata;
        }
Exemplo n.º 13
0
        /// <summary>
        /// Update folder metadata
        /// </summary>
        /// <returns></returns>
        private bool UpdateFolderMetadata(FolderMetadata oldMetadata, FolderMetadata newMetadata, SqliteConnection con)
        {
            //Find the metadata items that in the current folder only
            IEnumerable<FolderMetadataItem> newOnly =
                newMetadata.FolderMetadataItems.Where(
                    @new => !oldMetadata.FolderMetadataItems.Contains(@new, new FolderMetadataItemComparer())
                    );

            //find metadata items that not in the current folder but metadata store
            IEnumerable<FolderMetadataItem> oldOnly =
                oldMetadata.FolderMetadataItems.Where(
                    old => !newMetadata.FolderMetadataItems.Contains(old, new FolderMetadataItemComparer()));
            try
            {
                this.Add(newOnly.ToList(), con);
                this.Delete(oldOnly.ToList(), con);
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }
Exemplo n.º 14
0
        public override bool UpdateFolderMetadata(FolderMetadata oldMetadata, FolderMetadata newMetadata, bool storeOnlyEmptyFolder)
        {
            oldMetadata.FolderMetadataItems.ToList().Sort(new FolderMetadataItemComparer());
            newMetadata.FolderMetadataItems.ToList().Sort(new FolderMetadataItemComparer());

            //Find the metadata items that in the current folder only
            IEnumerable<FolderMetadataItem> newOnly =
                newMetadata.FolderMetadataItems.Where(
                    @new => !oldMetadata.FolderMetadataItems.Contains(@new, new FolderMetadataItemComparer())
                && (storeOnlyEmptyFolder?Files.FileUtils.IsDirectoryEmpty(@new.AbsolutePath):true)
                    );

            //find metadata items that not in the current folder but metadata store
            IEnumerable<FolderMetadataItem> oldOnly =
                oldMetadata.FolderMetadataItems.Where(
                    old => !newMetadata.FolderMetadataItems.Contains(old, new FolderMetadataItemComparer()));

            var db = new SQLiteAccess(Path.Combine(this.StoragePath, Configuration.DATABASE_NAME),false);
            using (var con = db.NewSQLiteConnection())
            {
                if (con == null)
                    throw new DatabaseException(String.Format(m_ResourceManager.GetString("err_somethingNotFound"), Path.Combine(this.StoragePath, Configuration.DATABASE_NAME)));

                var transaction = (SqliteTransaction)con.BeginTransaction();
                try
                {
                    this.Add(newOnly.ToList(), con);
                    this.Delete(oldOnly.ToList(), con);
                    transaction.Commit();
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    return false;
                }
            }
            return true;
        }
Exemplo n.º 15
0
        public override FolderMetadata LoadFolderMetadata(string currId, SourceOption option)
        {
            string opt = (option == SourceOption.SOURCE_ID_NOT_EQUALS) ? " <> " : " = ";
            var folderMetadata = new FolderMetadata(currId, this.RootPath);

            var db = new SQLiteAccess(Path.Combine(this.StoragePath, Configuration.DATABASE_NAME),false);
            using (SqliteConnection con = db.NewSQLiteConnection())
            {
                if (con == null)
                    throw new DatabaseException(String.Format(m_ResourceManager.GetString("err_somethingNotFound"), Path.Combine(this.StoragePath, Configuration.DATABASE_NAME)));

                string cmdText = "SELECT * FROM " + Configuration.TLB_FOLDERMETADATA +
                    " WHERE " + Configuration.COL_SOURCE_ID + opt + " @sourceId";
                var paramList = new SqliteParameterCollection
                                    {new SqliteParameter("@sourceId", DbType.String) {Value = currId}};
                db.ExecuteReader(cmdText, paramList, reader => folderMetadata.FolderMetadataItems.Add(
                                                                   new FolderMetadataItem(
                                                                       (string)reader[Configuration.COL_SOURCE_ID],
                                                                       (string)reader[Configuration.COL_FOLDER_RELATIVE_PATH],
                                                                       (int)reader[Configuration.COL_IS_FOLDER_EMPTY] )));
            }
            return folderMetadata;
        }