Пример #1
0
        public string postJSON(Event e)
        {
            string hash = Crypto.GetHMACbase64(Credential.SecretKey,Credential.PublicKey, true);
            var httpWebRequest = (HttpWebRequest)WebRequest.Create(string.Format("https://my.greenqloud.com/qloudsync/history/{0}?username={1}&hashValue={2}",RuntimeSettings.DefaultBucketName, Credential.Username, hash));
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Method = "POST";
            string json = "";
            string result = null;

            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {

                json = "{\"action\":\""+e.EventType+"\"," +
                    "\"application\":\""+GlobalSettings.FullApplicationName+"\"," + "\"applicationVersion\":\""+GlobalSettings.RunningVersion+"\"," + "\"bucket\":\""+Credential.Username+""+GlobalSettings.SuffixNameBucket+"\"," + "\"deviceId\":\""+GlobalSettings.DeviceIdHash+"\"," + "\"hash\":\""+e.Item.ETag+"\"," + "\"object\":\"" + e.Item.Key +"\"," + "\"os\":\""+GlobalSettings.OSVersion+"\"," + "\"resultObject\":\""+( e.HaveResultItem ? e.Item.ResultItem.Key : "")+"\"," + "\"username\":\""+Credential.Username+"\"}";

                streamWriter.Write(json);
                streamWriter.Flush();
                streamWriter.Close();

            }
            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {

                result = streamReader.ReadToEnd();

            }
            return result;
        }
        public RepositoryItem Create(Event e)
        {
            if (!ExistsUnmoved (e.Item)) {
                Create (e.Item);
            } else {
                Update (e.Item);
            }
            if (e.Item.ResultItem != null && e.Item.ResultItem.Id == 0) {
                Create (e.Item.ResultItem);
                e.Item.ResultItemId = GetId ( e.Item.ResultItem);
                Update (e.Item);
            }else if(e.Item.ResultItem != null && e.Item.ResultItem.Id != 0)
                Update (e.Item.ResultItem);

            e.Item.Id = GetId (e.Item);
            return e.Item;
        }
Пример #3
0
 public bool Exists(Event e)
 {
     return All.Count!=0;
 }
Пример #4
0
        public override void Create(Event e)
        {
            if (e == null)
                return;
                repositoryItemDAO.Create (e);
                if (e.EventType == EventType.DELETE || e.EventType == EventType.MOVE)
                {
                    repositoryItemDAO.MarkAsMoved(e.Item);
                }

                DateTime dateOfEvent =  e.InsertTime;
                if(dateOfEvent==DateTime.MinValue){
                    dateOfEvent = GlobalDateTime.Now;
                }

                //Verify ignore
                RepositoryIgnoreDAO ignoreDato = new SQLiteRepositoryIgnoreDAO();
                List<RepositoryIgnore> ignores = ignoreDato.All(this.repo);
                foreach (RepositoryIgnore ignoreItem in ignores)
                {
                    if (e.Item.Key.StartsWith(ignoreItem.Path))
                    {
                        e.Synchronized = true;
                        e.Response = RESPONSE.IGNORED;
                    }
                }

                string sql =string.Format("INSERT INTO EVENT (ITEMID, TYPE, REPOSITORY, SYNCHRONIZED, INSERTTIME, USER, APPLICATION, APPLICATION_VERSION, DEVICE_ID, OS, BUCKET, TRY_QNT, RESPONSE, RepositoryId) VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}', '{11}', '{12}', '{13}')",
                                            e.Item.Id, e.EventType.ToString(), e.RepositoryType.ToString(), e.Synchronized.ToString(), dateOfEvent.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'"), e.User, e.Application, e.ApplicationVersion, e.DeviceId, e.OS, e.Bucket, e.TryQnt, e.Response.ToString(), e.Repository.Id);

                if (e.Response != RESPONSE.IGNORED)
                {
                    e.Id = (int)database.ExecuteNonQuery(sql, true);
                    Logger.LogEvent("EVENT CREATED", e);
                }
        }
Пример #5
0
 public static void LogEvent(string type, Event e )
 {
     Logger.LogInfo(type, e.ToString());
 }
Пример #6
0
 public override void UpdateToSynchronized(Event e, RESPONSE response)
 {
     database.ExecuteNonQuery (string.Format("UPDATE EVENT SET  SYNCHRONIZED = '{1}', RESPONSE = '{2}' WHERE EventID ='{0}'", e.Id, bool.TrueString, response.ToString()));
 }
Пример #7
0
 public List<Event> Select(string sql)
 {
     List<Event> events = new List<Event>();
     DataTable dt = database.GetDataTable(sql);
     foreach(DataRow dr in dt.Rows){
         Event e = new Event(LocalRepository.CreateInstance(int.Parse(dr[14].ToString())));
         e.Id = int.Parse (dr[0].ToString());
         e.Item = repositoryItemDAO.GetById (int.Parse (dr[1].ToString()));
         e.EventType = (EventType) Enum.Parse(typeof(EventType), dr[2].ToString());
         e.RepositoryType = (RepositoryType) Enum.Parse(typeof(RepositoryType),dr[3].ToString());
         e.Synchronized = bool.Parse (dr[4].ToString());
         e.InsertTime = Convert.ToDateTime(dr[5].ToString()).ToUniversalTime();
         e.User = dr[6].ToString();
         e.Application = dr[7].ToString();
         e.ApplicationVersion = dr[8].ToString();
         e.DeviceId = dr[9].ToString();
         e.OS = dr[10].ToString();
         e.Bucket = dr[11].ToString();
         e.TryQnt = int.Parse (dr[12].ToString());
         e.Response = (RESPONSE) Enum.Parse(typeof(RESPONSE),dr[13].ToString());
         events.Add (e);
     }
     return events;
 }
Пример #8
0
 public override void IgnoreAllIfMoved(Event e)
 {
     CombineMultipleMoves (e);
     e = FindById(e.Id);
     List<Event> list = Select(string.Format("SELECT * FROM EVENT WHERE ItemId ='{0}' AND TYPE = '{1}' AND EventID > '{2}'  AND SYNCHRONIZED <> '{3}' AND RepositoryId = '{4}' ORDER BY EventID ASC LIMIT 1", e.Item.Id, EventType.MOVE, e.Id, bool.TrueString, repo.Id));
     if(list.Count > 0) {
         if (e.EventType == EventType.CREATE || e.EventType == EventType.UPDATE) {
             database.ExecuteNonQuery (string.Format("UPDATE EVENT SET  SYNCHRONIZED = '{0}', RESPONSE = '{1}' WHERE EventID = '{2}'", bool.TrueString, RESPONSE.IGNORED.ToString(), list.First().Id));
             repositoryItemDAO.MarkAsMoved (e.Item);
             database.ExecuteNonQuery (string.Format("UPDATE EVENT SET  ItemId ='{0}' WHERE EventID = '{1}'", list.First().Item.ResultItem.Id, e.Id));
         }
     }
 }
Пример #9
0
 public abstract void IgnoreAllIfMoved(Event e);
Пример #10
0
 public abstract void IgnoreAllIfDeleted(Event e);
Пример #11
0
 public abstract void IgnoreAllEquals(Event e);
Пример #12
0
 public abstract void Create(Event e);
        private Event BuildEvent(EventType type, bool isDirectory, string path, string newPath = null)
        {
            Event e = new Event();
            LocalRepository repo = repositoryDAO.GetRepositoryByItemFullName(path);
            e.EventType = type;
            if (path != null)
            {
                string key = path.Substring(repo.Path.Length);
                if (isDirectory && !key.EndsWith(Path.DirectorySeparatorChar.ToString()))
                    key += Path.DirectorySeparatorChar;
                e.Item = RepositoryItem.CreateInstance(repo, key);
            }

            if (newPath != null)
            {
                string key = newPath.Substring(repo.Path.Length);
                if (isDirectory && !key.EndsWith(Path.DirectorySeparatorChar.ToString()))
                    key += Path.DirectorySeparatorChar;

                e.Item.ResultItem = RepositoryItem.CreateInstance(repo, key);
            }
            return e;
        }
 public void HandleItemEvent(Event e)
 {
     if (!e.Item.IsFolder)
         currentEventDownloading = e;
     
 }
Пример #15
0
 public override void IgnoreAllEquals(Event e)
 {
     database.ExecuteNonQuery (string.Format("UPDATE EVENT SET  SYNCHRONIZED = '{1}', RESPONSE = '{4}' WHERE ItemId ='{0}' AND TYPE = '{2}' AND EventID > '{3}' AND SYNCHRONIZED <> '{5}' AND RepositoryId = '{6}'", e.Item.Id , bool.TrueString , e.EventType, e.Id, RESPONSE.IGNORED.ToString(), bool.TrueString, repo.Id));
 }
Пример #16
0
 public abstract void IgnoreFromIgnordList(Event e);
Пример #17
0
 public override void IgnoreAllIfDeleted(Event e)
 {
     List<Event> list = Select (string.Format("SELECT * FROM EVENT WHERE ItemId ='{0}' AND TYPE = '{1}' AND EventID > '{2}'  AND SYNCHRONIZED <> '{3}' AND RepositoryId = '{4}'", e.Item.Id, EventType.DELETE, e.Id, bool.TrueString, repo.Id));
     if(list.Count > 0) {
         database.ExecuteNonQuery (string.Format("UPDATE EVENT SET  SYNCHRONIZED = '{0}', RESPONSE = '{1}' WHERE ItemId ='{2}' AND EventID < '{3}'  AND RepositoryId = '{4}' ", bool.TrueString, RESPONSE.IGNORED.ToString(), e.Item.Id , list.Last().Id, repo.Id));
         repositoryItemDAO.MarkAsMoved (e.Item);
         if (e.EventType == EventType.CREATE) {
             database.ExecuteNonQuery (string.Format("UPDATE EVENT SET  SYNCHRONIZED = '{0}', RESPONSE = '{1}' WHERE EventID = '{2}'", bool.TrueString, RESPONSE.IGNORED.ToString(), list.Last().Id));
         }
     }
 }
Пример #18
0
 public abstract void SetEventType(Event e);
Пример #19
0
 public override void IgnoreFromIgnordList(Event e)
 {
     RepositoryIgnoreDAO ignoreDato = new SQLiteRepositoryIgnoreDAO();
     List<RepositoryIgnore> ignores = ignoreDato.All(this.repo);
     bool ignore = false;
     foreach (RepositoryIgnore ignoreItem in ignores)
     {
         if (e.Item.Key.StartsWith(ignoreItem.Path) || (e.EventType == EventType.MOVE && e.Item.ResultItem.Key.StartsWith(ignoreItem.Path)))
         {
             ignore = true;
         }
     }
     if(ignore)
         database.ExecuteNonQuery(string.Format("UPDATE EVENT SET  SYNCHRONIZED = '{0}', RESPONSE = '{1}' WHERE EventID = '{2}'", bool.TrueString, RESPONSE.IGNORED.ToString(), e.Id));
 }
Пример #20
0
 public abstract void UpdateToSynchronized(Event e, RESPONSE response);
Пример #21
0
 public override void SetEventType(Event e)
 {
     database.ExecuteNonQuery (string.Format("UPDATE EVENT SET  TYPE = '{0}' WHERE EventID ='{1}'", e.EventType, e.Id));
 }
Пример #22
0
 public abstract void UpdateTryQnt(Event e);
Пример #23
0
 public override void UpdateTryQnt(Event e)
 {
     database.ExecuteNonQuery (string.Format("UPDATE EVENT SET  TRY_QNT = '{0}' WHERE EventID ='{1}'", e.TryQnt, e.Id));
 }
Пример #24
0
        public void CombineMultipleMoves(Event e)
        {
            Event toCombine = null;
            Event combineWith = null;
            if (e.EventType == EventType.MOVE)
                toCombine = e;

            if(e == null) {
                List<Event> list = Select (string.Format("SELECT * FROM EVENT WHERE ItemId ='{0}' AND TYPE = '{1}' AND EventID > '{2}'  AND SYNCHRONIZED <> '{3}'  AND RepositoryId = '{4}'", e.Item.Id, EventType.MOVE, e.Id, bool.TrueString, repo.Id));
                if(list.Count > 0) {
                    toCombine = list.First ();
                }
            }

            //do while move.hasnext
            //ignore o next
            try {
                if (toCombine != null){
                    List<Event> list2;
                    do {
                        list2 = Select (string.Format("SELECT * FROM EVENT WHERE ItemId ='{0}' AND TYPE = '{1}' AND EventID > '{2}'  AND SYNCHRONIZED <> '{3}' AND RepositoryId = '{4}'", toCombine.Item.ResultItemId, EventType.MOVE, e.Id, bool.TrueString, repo.Id));
                        if (list2.Count > 0) {
                            combineWith = list2.First ();
                            database.ExecuteNonQuery (string.Format("UPDATE EVENT SET  SYNCHRONIZED = '{0}', RESPONSE = '{1}' WHERE EventID = '{2}'", bool.TrueString, RESPONSE.IGNORED.ToString(), combineWith.Id));
                            repositoryItemDAO.MarkAsMoved (toCombine.Item.ResultItem);
                            toCombine.Item.ResultItem = combineWith.Item.ResultItem;
                            database.ExecuteNonQuery (string.Format("UPDATE RepositoryItem SET  ResultItemId ='{0}' WHERE RepositoryItemID = '{1}'  AND RepositoryId = '{2}'", combineWith.Item.ResultItemId, toCombine.Item.Id, repo.Id));
                        }
                    } while (list2 != null && list2.Count > 0);
                }
            } catch (Exception ex) {
                Logger.LogInfo("ERROR ON COMBINING MOVE EVENTS", ex.Message);
            }
        }
        private void Callback(IntPtr streamRef, IntPtr clientCallBackInfo, int numEvents, IntPtr eventPaths, IntPtr eventFlags, IntPtr eventIds)
        {
            string[] paths = new string[numEvents];
            FSEventStreamEventFlagItem[] flags = new FSEventStreamEventFlagItem[numEvents];
            UInt64[] ids = new UInt64[numEvents];
            unsafe {
                char** eventPathsPointer = (char**)eventPaths.ToPointer ();
                uint* eventFlagsPointer = (uint*)eventFlags.ToPointer ();
                ulong* eventIdsPointer = (ulong*)eventIds.ToPointer ();
                for (int i = 0; i < numEvents; i++) {
                    paths [i] = Marshal.PtrToStringAuto (new IntPtr (eventPathsPointer [i]));
                    flags [i] = (FSEventStreamEventFlagItem)eventFlagsPointer [i];
                    ids [i] = eventIdsPointer [i];
                }
            }
            ChangedEventHandler handler = Changed;

            for (int i = 0; i < numEvents; i++)
            {
                if (paths [i] == repo.Path || paths [i] + Path.DirectorySeparatorChar.ToString () == repo.Path)
                    return;

                if(!paths[i].Substring(paths[i].LastIndexOf(Path.DirectorySeparatorChar)+1).StartsWith(".")){

                    string search = paths [i];
                    if(flags [i].HasFlag (FSEventStreamEventFlagItem.IsDir))
                        search += Path.DirectorySeparatorChar;

                    bool ignore = false;
                    lock(_bagLock){
                        if (ignoreBag.Contains (search))
                            ignore = true;
                    }

                    if (!ignore) {

                        Event e = new Event (repo);
                        List<Event> subEvents = new List<Event> ();
                        string key = repo.RemoteFolder + paths [i].Substring (repo.Path.Length);
                        if (flags [i].HasFlag (FSEventStreamEventFlagItem.IsDir) && !key.EndsWith (Path.DirectorySeparatorChar.ToString()))
                            key += Path.DirectorySeparatorChar;
                        e.Item = RepositoryItem.CreateInstance (repo, key);

                        if (
                            flags [i].HasFlag (FSEventStreamEventFlagItem.Created) &&
                            ((flags [i].HasFlag (FSEventStreamEventFlagItem.IsFile) && !flags[i].HasFlag (FSEventStreamEventFlagItem.Renamed)) || (flags [i].HasFlag (FSEventStreamEventFlagItem.IsDir) && !flags[i].HasFlag (FSEventStreamEventFlagItem.Renamed)))
                            ) {
                            e.EventType = EventType.CREATE;
                            List<RepositoryItem> items =  new List<RepositoryItem>();
                            if(e.Item.IsFolder){
                                items = physicalController.GetItems (e.Item.LocalAbsolutePath);
                            }
                            if (items.Count > 0) {
                                foreach(RepositoryItem item in items){
                                    Event e2 = new Event (repo);
                                    e2.EventType = EventType.CREATE;
                                    e2.Item = item;
                                    subEvents.Add (e2);
                                }
                            }
                        } else if (flags [i].HasFlag (FSEventStreamEventFlagItem.Removed)) {
                            e.EventType = EventType.DELETE;
                        } else if (flags [i].HasFlag (FSEventStreamEventFlagItem.Modified)) {
                            if (flags [i].HasFlag (FSEventStreamEventFlagItem.IsDir) && !Directory.Exists (paths[i])) {
                                e.EventType = EventType.DELETE;
                            } else if (flags [i].HasFlag (FSEventStreamEventFlagItem.IsFile) && !File.Exists (paths[i])) {
                                e.EventType = EventType.DELETE;
                            } else {
                                e.EventType = EventType.UPDATE;
                            }
                        } else if (flags [i].HasFlag (FSEventStreamEventFlagItem.Renamed)) {
                            if ((i + 1) < numEvents && (ids [i] == ids [i+1] - 1)) {
                                e.EventType = EventType.MOVE;
                                i++;
                                string key2 = repo.RemoteFolder + paths [i].Substring (repo.Path.Length);
                                if (flags [i].HasFlag (FSEventStreamEventFlagItem.IsDir) && !key2.EndsWith (Path.DirectorySeparatorChar.ToString()))
                                    key2 += Path.DirectorySeparatorChar;
                                e.Item.BuildResultItem (key2);
                            } else if (flags [i].HasFlag (FSEventStreamEventFlagItem.IsDir) && !Directory.Exists (paths[i])) {
                                e.EventType = EventType.DELETE;
                            } else if (flags [i].HasFlag (FSEventStreamEventFlagItem.IsFile) && !File.Exists (paths[i])) {
                                e.EventType = EventType.DELETE;
                            } else {
                                if (flags [i].HasFlag (FSEventStreamEventFlagItem.IsFile)) {
                                    e.EventType = EventType.UPDATE;
                                }
                            }
                        } else {
                            return;
                        }

                        handler (e);
                        foreach(Event e2 in subEvents){
                            handler(e2);
                        }

                    }
                }
            }
        }
        private Event BuildEvent(EventType type, bool isDirectory, string path, string newPath = null)
        {
            Event e = new Event(repo);
            e.EventType = type;
            if (path != null)
            {
                string key = path.Substring(repo.Path.Length);
                if (isDirectory)
                    key = ConvertToDirectoryPathString(key);
                e.Item = RepositoryItem.CreateInstance(repo, key);
            }

            if (newPath != null)
            {
                string key = newPath.Substring(repo.Path.Length);
                if (isDirectory)
                    key = ConvertToDirectoryPathString(key); ;

                e.Item.ResultItem = RepositoryItem.CreateInstance(repo, key);
            }
            return e;
        }