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; }
public bool Exists(Event e) { return All.Count!=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); } }
public static void LogEvent(string type, Event e ) { Logger.LogInfo(type, e.ToString()); }
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())); }
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; }
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)); } } }
public abstract void IgnoreAllIfMoved(Event e);
public abstract void IgnoreAllIfDeleted(Event e);
public abstract void IgnoreAllEquals(Event e);
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; }
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)); }
public abstract void IgnoreFromIgnordList(Event e);
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)); } } }
public abstract void SetEventType(Event e);
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)); }
public abstract void UpdateToSynchronized(Event e, RESPONSE response);
public override void SetEventType(Event e) { database.ExecuteNonQuery (string.Format("UPDATE EVENT SET TYPE = '{0}' WHERE EventID ='{1}'", e.EventType, e.Id)); }
public abstract void UpdateTryQnt(Event e);
public override void UpdateTryQnt(Event e) { database.ExecuteNonQuery (string.Format("UPDATE EVENT SET TRY_QNT = '{0}' WHERE EventID ='{1}'", e.TryQnt, e.Id)); }
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; }