Exemplo n.º 1
0
        public async static Task<bool> Synchronize(string key)
        {
            IStorageManager storageManager = StorageHelper.GetStorageManager(key);
            try
            {
                // Wait sign in before sync
                await TaskHelper.WaitSignInTask(storageManager.GetStorageName());

                // Fetching data
                if (App.ApplicationSettings.Contains(SYNC_KEYS + key))  // Fetching from SQL
                {
                    System.Diagnostics.Debug.WriteLine("Fetching From SQL");
                    using (FileObjectDataContext db = new FileObjectDataContext("isostore:/" + key + "_db.sdf"))
                    {
                        if (!db.DatabaseExists())
                        {
                            App.ApplicationSettings.Remove(SYNC_KEYS + key);
                            return await Synchronize(key);
                        }

                        var rootDB = from FileObjectSQL fos in db.FileItems where fos.ParentId.Equals(ROOT_ID) select fos;
                        List<FileObjectSQL> getSqlList = rootDB.ToList<FileObjectSQL>();
                        if (getSqlList.Count != 1) return false;
                        FileObjectSQL rootFos = getSqlList.First<FileObjectSQL>();
                        FileObject rootFolder = FileObject.ConvertToFileObject(db, ROOT_ID);

                        if (DictionaryRoot.ContainsKey(key))
                            DictionaryRoot.Remove(key);
                        DictionaryRoot.Add(key, rootFolder);

                        Stack<FileObject> stack = new Stack<FileObject>();
                        stack.Push(rootFolder);
                        if (DictionaryTree.ContainsKey(key))
                            DictionaryTree.Remove(key);
                        DictionaryTree.Add(key, stack);
                    }
                    System.Diagnostics.Debug.WriteLine("Ended Fetching From SQL");
                }
                else  // Fetching from Server
                {
                    System.Diagnostics.Debug.WriteLine("Fetching From Server");
                    FileObject rootFolder = await storageManager.Synchronize();
                    if (DictionaryRoot.ContainsKey(key))
                        DictionaryRoot.Remove(key);
                    DictionaryRoot.Add(key, rootFolder);

                    Stack<FileObject> stack = new Stack<FileObject>();
                    stack.Push(rootFolder);
                    if (DictionaryTree.ContainsKey(key))
                        DictionaryTree.Remove(key);
                    DictionaryTree.Add(key, stack);

                    System.Diagnostics.Debug.WriteLine("Ended Fetching From Server");
                    // Saving to SQL job
                    using (FileObjectDataContext db = new FileObjectDataContext("isostore:/" + key + "_db.sdf"))
                    {
                        if (db.DatabaseExists())
                            db.DeleteDatabase();
                        db.CreateDatabase();

                        List<FileObjectSQL> sqlList = new List<FileObjectSQL>();

                        FileObject.ConvertToFileObjectSQL(sqlList, rootFolder, ROOT_ID, 0);

                        for (int i = 0; i < sqlList.Count; i++)
                            db.FileItems.InsertOnSubmit(sqlList[i]);
                        db.SubmitChanges();
                    }

                    // Saving completed sync true to application settings
                    App.ApplicationSettings.Add(SYNC_KEYS + key, true);
                    App.ApplicationSettings.Save();
                }
            }
            catch
            {
                return false;
            }
            return true;
        }
Exemplo n.º 2
0
 public static List<FileObject> GetChildList(FileObjectDataContext db, string ParentId)
 {
     var dbList = from FileObjectSQL fos in db.FileItems where fos.ParentId == ParentId select fos;
     List<FileObjectSQL> sqlList = dbList.ToList<FileObjectSQL>();
     List<FileObject> list = new List<FileObject>();
     for (var i = 0; i < sqlList.Count; i++)
         list.Add(ConvertToFileObject(db, sqlList[i]));
     return list;
 }
Exemplo n.º 3
0
        public static FileObject ConvertToFileObject(FileObjectDataContext db, string ParentId)
        {
            Stack<FileObject> stack = new Stack<FileObject>();
            FileObject root = null;
            var dbList = from FileObjectSQL fos in db.FileItems select fos;
            //var dbList2 = from FileObjectSQL fos in db.FileItems group fos by fos.ParentId into fos select fos;
            //List<FileObjectSQL> FindChildList = dbList.ToList<FileObjectSQL>();
            //var levelGroupedList = dbList.GroupBy<FileObjectSQL, int>(x => x.Level).ToList();
            //var test = dbList.GroupBy<FileObjectSQL, int>(x => x.Level);
            var list = dbList.ToList();
            root = ConvertToFileObject(list[0]);
            stack.Push(root);

            for (int i = 1; i < list.Count; i++)
            {
                var item = list[i];
                //System.Diagnostics.Debug.WriteLine("["+i+"] "+item.Id);
                FileObject ff = ConvertToFileObject(item);
                if (item.Type.Equals(PintheCloud.Models.FileObject.FileObjectType.FOLDER))
                {
                    if (item.ParentId.Equals(stack.Peek().Id))
                    {
                        //System.Diagnostics.Debug.WriteLine("add " + ff.Id + " to Parent " + stack.Peek().Id);
                        stack.Peek().FileList.Add(ff);
                        stack.Push(ff);
                    }
                    else
                    {
                        stack.Pop();
                        if (item.ParentId.Equals(stack.Peek().Id))
                        {
                            //System.Diagnostics.Debug.WriteLine("add " + ff.Id + "to Parent " + stack.Peek().Id);
                            stack.Peek().FileList.Add(ff);
                            stack.Push(ff);
                        }
                        else
                        {
                            //System.Diagnostics.Debug.WriteLine("i-- from folder");
                            i--;
                        }
                    }
                }
                else
                {
                    if (item.ParentId.Equals(stack.Peek().Id))
                    {
                        //System.Diagnostics.Debug.WriteLine("add " + ff.Id + "to Parent " + stack.Peek().Id);
                        stack.Peek().FileList.Add(ff);
                    }
                    else
                    {
                        stack.Pop();
                        if (item.ParentId.Equals(stack.Peek().Id))
                        {
                            //System.Diagnostics.Debug.WriteLine("add " + ff.Id + "to Parent " + stack.Peek().Id);
                            stack.Peek().FileList.Add(ff);
                        }
                        else
                        {
                            //System.Diagnostics.Debug.WriteLine("i-- from file");
                            i--;
                        }
                    }
                }

            }
            return root;
        }
Exemplo n.º 4
0
        public static FileObject ConvertToFileObject(FileObjectDataContext db, FileObjectSQL fos)
        {
            FileObject fo = new FileObject(fos.Id, fos.Name, fos.Size, fos.Type, fos.Extension, fos.UpdateAt, fos.Thumbnail, fos.DownloadUrl, fos.MimeType);
            fo.SpotId = fos.SpotId;
            if (fos.ProfileName != null && fos.ProfileId != null && fos.ProfileEmail != null && fos.ProfilePhoneNumber != null)
            {
                fo.Owner = new ProfileObject();
                fo.Owner.Id = fos.ProfileId;
                fo.Owner.Email = fos.ProfileEmail;
                fo.Owner.Name = fos.ProfileName;
                fo.Owner.PhoneNumber = fos.ProfilePhoneNumber;
            }

            fo.FileList = GetChildList(db, fos.Id);
            return fo;
        }