public string TranslateQuery(Query query, string from) { string q = "SELECT "; for (int i = 0; i < query.Members.Count; i++) { q += query.Members[i]; if (i < query.Members.Count -1) q += ","; } q += " FROM " + from + " WHERE 1=1 "; foreach (Criterion criter in query.Criteria) { q += " AND " + criter.PropertyName; switch (criter.Operator) { case CriteriaOperator.Equal: q += " = "; break; case CriteriaOperator.GreaterThan: q += " > "; break; case CriteriaOperator.LessThan: q += " < "; break; case CriteriaOperator.Like: q += " LIKE "; break; case CriteriaOperator.NotEqual: q += " <> "; break; } q += SafeSqlLiteral(criter.Value, 2); } return q; }
/// <summary> /// Reload user data from the DB /// </summary> public void UserRefreshInfo() { if (!this._isUserLoggedIn) throw new ControlObjectException(EnumSeverity.Bug, EnumMessageCode.UserNotLoggedIn); Query q = new Query(); Criterion c = new Criterion(); c.Operator = CriteriaOperator.Equal; c.PropertyName = "UserID"; c.Value = this._userLoggedIn.UserID; q.Criteria.Add(c); q.Members.Add("*"); IList<User> users = this._myDataConnection.GetByCriteria<User>(q); if (users.Count == 1) { double hoursDiffStdTime = this._userLoggedIn.HoursDiffStdTime; this._userLoggedIn = users[0]; this._userLoggedIn.HoursDiffStdTime = hoursDiffStdTime; } else throw new ControlObjectException(EnumSeverity.Warning, EnumMessageCode.UserCouldNotBeLoaded); }
/// <summary> /// Send the password to the user /// </summary> public void UserSendPassword(string emailOrUserName) { Query q = new Query(); Criterion c = new Criterion(); c.Operator = CriteriaOperator.Equal; c.PropertyName = "UserName"; c.Value = "'" + emailOrUserName + "'"; q.Criteria.Add(c); c = new Criterion(); c.Operator = CriteriaOperator.Equal; c.PropertyName = "UserActive"; c.Value = "1"; q.Criteria.Add(c); q.Members.Add("*"); IList<User> users = this._myDataConnection.GetByCriteria<User>(q); if (users.Count == 1) { ServiceEmail.SendEmail(users[0], "[SnipeAgent] Your password", "Here is your password: "******"UserEmailAddress"; c.Value = "'" + emailOrUserName + "'"; q.Criteria.Add(c); c = new Criterion(); c.Operator = CriteriaOperator.Equal; c.PropertyName = "UserActive"; c.Value = "1"; q.Criteria.Add(c); q.Members.Add("*"); users = this._myDataConnection.GetByCriteria<User>(q); if (users.Count == 1) { ServiceEmail.SendEmail(users[0], "[SnipeAgent] Your password", "Here is your password: " + users[0].UserPassword); return; } else throw new ControlObjectException(EnumSeverity.Warning, EnumMessageCode.UserEmailOrUserNameNotFound); }
/// <summary> /// Fetch the token from eBay and assign it to the user currently logged in /// </summary> public bool SetUserToken(TokenFetcher fetcher) { if (_serviceEBay.User == null) { User user = new User(); user.EBayUserToken = _serviceOther.DefaultToken(); user.EBayUserTokenExpirationDate = _serviceOther.DefaultTokenExpirationDate(); _serviceEBay.User = user; } try { TokenData token = _serviceEBay.FetchToken(fetcher); Query q = new Query(); Criterion c = new Criterion(); c.Operator = CriteriaOperator.Equal; c.PropertyName = "UserID"; c.Value = fetcher.UserID; q.Criteria.Add(c); q.Members.Add("*"); IList<User> users = this._myDataConnection.GetByCriteria<User>(q); if (users.Count == 1) { User user = users[0]; this._userLoggedIn.EBayUserToken = token.Token; this._userLoggedIn.EBayUserTokenExpirationDate = token.ExpirationDate; this.UserSave(user); } else throw new ControlObjectException(EnumSeverity.Bug, EnumMessageCode.UserCouldNotBeLoaded); return true; } catch { return false; } }
/// <summary> /// Use this function to log in /// </summary> /// <param name="userName">User name</param> /// <param name="userPassword">Password</param> public void UserLogin(string userName, string userPassword, bool mobile, double hoursDiffStdTime) { Query q = new Query(); Criterion c = new Criterion(); c.Operator = CriteriaOperator.Equal; c.PropertyName = "UserName"; c.Value = "'" + userName + "'"; q.Criteria.Add(c); c = new Criterion(); c.Operator = CriteriaOperator.Equal; c.PropertyName = "UserPassword"; c.Value = "'" + userPassword + "'"; q.Criteria.Add(c); c = new Criterion(); c.Operator = CriteriaOperator.Equal; c.PropertyName = "UserActive"; c.Value = "1"; q.Criteria.Add(c); q.Members.Add("*"); IList<User> users = this._myDataConnection.GetByCriteria<User>(q); if (users.Count == 1) { if (mobile && !users[0].HasOptions() && UltimateSniper_ServiceLayer.UserSettings.Default.isMobileInOptionPackage) throw new ControlObjectException(EnumSeverity.Warning, EnumMessageCode.UserMobileAccessDenied); this._isUserLoggedIn = true; this._userLoggedIn = users[0]; this._userLoggedIn.HoursDiffStdTime = hoursDiffStdTime; Random random = new Random(); int num = random.Next(); this.subscriptionRandomHex = num.ToString("X"); this.isMobile = mobile; // We assign the user for the token!! this._serviceEBay.User = this._userLoggedIn; //Thread myThread = new Thread(new ThreadStart(UpdateSnipeValidity)); //myThread.Start(); } else throw new ControlObjectException(EnumSeverity.Warning, EnumMessageCode.UserPasswordAndLoginNotMatching); }
/// <summary> /// Returns the list of snipes placed by the user over the last month /// </summary> /// <returns></returns> public List<Snipe> GetRecentSnipes() { if (!this._isUserLoggedIn) throw new ControlObjectException(EnumSeverity.Bug, EnumMessageCode.UserNotLoggedIn); Query q = new Query(); Criterion crit = new Criterion(); crit.Operator = CriteriaOperator.Equal; crit.PropertyName = "UserID"; crit.Value = this._userLoggedIn.UserID; q.Criteria.Add(crit); crit = new Criterion(); crit.Operator = CriteriaOperator.GreaterThan; crit.PropertyName = "ItemEndDate"; DateTime nowMin1Month = this.GeteBayOfficialTime().AddMonths(-1); crit.Value = "#DateParse#" + nowMin1Month.ToString() + "#EndDateParse#"; q.Criteria.Add(crit); q.Members.Add("*"); return this._myDataConnection.GetByCriteria<Snipe>(q).ToList(); }
/// <summary> /// Return the list of snipes that the user placed and won /// </summary> /// <returns></returns> public List<Snipe> GetWonSnipes() { if (!this._isUserLoggedIn) throw new ControlObjectException(EnumSeverity.Bug, EnumMessageCode.UserNotLoggedIn); Query q = new Query(); Criterion crit = new Criterion(); crit.Operator = CriteriaOperator.Equal; crit.PropertyName = "UserID"; crit.Value = this._userLoggedIn.UserID; q.Criteria.Add(crit); crit = new Criterion(); crit.Operator = CriteriaOperator.Equal; crit.PropertyName = "SnipeStatusID"; crit.Value = 4; q.Criteria.Add(crit); q.Members.Add("*"); return this._myDataConnection.GetByCriteria<Snipe>(q).ToList(); }
public User GetUserForSnipe(Snipe snipe) { SqlDataContext myDataConnection = new SqlDataContext(); Query q = new Query(); Criterion c = new Criterion(); c.Operator = CriteriaOperator.Equal; c.PropertyName = "UserID"; c.Value = snipe.UserID; q.Criteria.Add(c); q.Members.Add("*"); IList<User> userList = myDataConnection.GetByCriteria<User>(q); if (userList.Count != 1) return null; else return userList[0]; }
/// <summary> /// Get the list of category passed as paramter /// </summary> /// <param name="categoryIDs">List of category IDs to be returned</param> /// <returns></returns> public List<Category> GetCategories(List<int> categoryIDs) { List<Category> ListCategories = new List<Category>(); Query q; Criterion crit; foreach (int catID in categoryIDs) { q = new Query(); crit = new Criterion(); crit.Operator = CriteriaOperator.Equal; crit.PropertyName = "CategoryID"; crit.Value = catID; q.Criteria.Add(crit); q.Members.Add("*"); ListCategories.AddRange(this._myDataConnection.GetByCriteria<Category>(q).ToList()); } return ListCategories; }
public Snipe GetSnipe(int snipeID) { SqlDataContext myDataConnection = new SqlDataContext(); Query q = new Query(); Criterion crit = new Criterion(); crit.Operator = CriteriaOperator.Equal; crit.PropertyName = "SnipeID"; crit.Value = snipeID; q.Criteria.Add(crit); q.Members.Add("*"); List<Snipe> snipes = myDataConnection.GetByCriteria<Snipe>(q).ToList(); if (snipes.Count != 1) throw new Exception("Error when loading the snipe"); else return snipes[0]; }
public void GetSimilarItemsTest() { ServiceEBay target = new ServiceEBay(true); // TODO: Initialize to an appropriate value Snipe snipe = new Snipe(); List<eBayItemData> expected = null; // TODO: Initialize to an appropriate value List<eBayItemData> actual; IList<User> users = new List<User>(); SqlDataContext myDataConnection = new SqlDataContext(); Query q = new Query(); Criterion crit = new Criterion(); crit.Operator = CriteriaOperator.Equal; crit.PropertyName = "UserID"; crit.Value = "2"; q.Criteria.Add(crit); q.Members.Add("*"); users = myDataConnection.GetByCriteria<User>(q); target.User = users[0]; IList<Snipe> snipes = new List<Snipe>(); myDataConnection = new SqlDataContext(); q = new Query(); crit = new Criterion(); crit.Operator = CriteriaOperator.Equal; crit.PropertyName = "SnipeID"; crit.Value = "1"; q.Criteria.Add(crit); q.Members.Add("*"); snipes = myDataConnection.GetByCriteria<Snipe>(q); snipe = snipes[0]; actual = target.GetSimilarItems(snipe); Assert.AreEqual(expected, actual); Assert.Inconclusive("Verify the correctness of this test method."); }
public string Timer_UpdateEndingSnipes(bool ActiveSnipe) { try { Logger.CreateLog("Beginning__UpdateEndingSnipes", EnumLogLevel.INFO); IList<Snipe> ListNewSnipes = new List<Snipe>(); Query q = new Query(); Criterion critDateSup = new Criterion(); critDateSup.Operator = CriteriaOperator.LessThan; critDateSup.PropertyName = "ItemEndDate"; DateTime nowPlusOne = SL_Scheduler.GeteBayOfficialTime().AddHours(1); critDateSup.Value = "#DateParse#" + nowPlusOne.ToString() + "#EndDateParse#"; q.Criteria.Add(critDateSup); Criterion critStatus = new Criterion(); critStatus.Operator = CriteriaOperator.Equal; critStatus.PropertyName = "SnipeStatusID"; critStatus.Value = 1; q.Criteria.Add(critStatus); q.Members.Add("*"); try { Logger.CreateLog("Snipe_UpdateEndingSnipes", "Number in memory: " + this.ListSnipesToSurvey.Count.ToString(), null, EnumLogLevel.INFO); ListNewSnipes = SL_Scheduler.myDataConnection.GetByCriteria<Snipe>(q); Logger.CreateLog("Snipe_UpdateEndingSnipes", "Number found: " + ListNewSnipes.Count.ToString(), null, EnumLogLevel.INFO); } catch (ControlObjectException ex) { foreach (UserMessage error in ex.ErrorList) Logger.CreateLog("Error__UpdateEndingSnipes_" + error.MessageCode.ToString() + error.Severity.ToString(), null, ex, EnumLogLevel.ERROR); } catch (Exception ex) { Logger.CreateLog("Error__UpdateEndingSnipes", null, ex, EnumLogLevel.ERROR); } foreach (Snipe snipe in ListNewSnipes) { bool found = false; foreach (Snipe currSnipe in ListSnipesToSurvey) { if (currSnipe.SnipeID == snipe.SnipeID) { found = true; break; } } if (!found) { snipe.CheckTimeActive = true; snipe.ActiveSnipe = ActiveSnipe; this.ListSnipesToSurvey.Add(snipe); UltimateSniper_BusinessObjects.Snipe.CheckTimeEventHandler ctHandler = new Snipe.CheckTimeEventHandler(snipe.CheckTime); this.CheckTimeEvent += ctHandler; UltimateSniper_BusinessObjects.PlaceSnipeEventHandler pseHandler = new PlaceSnipeEventHandler(this.PlaceSnipe); snipe.PlaceSnipeEvent += pseHandler; UltimateSniper_BusinessObjects.CheckSnipeResultEventHandler csrHandler = new CheckSnipeResultEventHandler(this.CheckSnipeResult); snipe.CheckSnipeResultEvent += csrHandler; } } Logger.CreateLog("Ending__UpdateEndingSnipes", EnumLogLevel.INFO); // Cleaning ListNewSnipes.Clear(); //System.GC.Collect(); } catch (Exception ex) { Logger.CreateLog("Error__UpdateEndingSnipes", string.Empty, ex, EnumLogLevel.INFO); } return DateTime.Now.ToString(); }
public string Timer_Snipe_CheckSnipeValidity() { try { Logger.CreateLog("Beginning__Snipe_CheckSnipeValidity", EnumLogLevel.INFO); IList<Snipe> snipeList = new List<Snipe>(); IList<Snipe> tempList = new List<Snipe>(); // Loading snipes not updated since one day: Query q = new Query(); Criterion c = new Criterion(); c.Operator = CriteriaOperator.LessThan; c.PropertyName = "ItemLastUpdate"; DateTime nowMin24H = SL_Scheduler.GeteBayOfficialTime().AddHours(-24); c.Value = "#DateParse#" + nowMin24H.ToString() + "#EndDateParse#"; q.Criteria.Add(c); Criterion critStatus = new Criterion(); critStatus.Operator = CriteriaOperator.Equal; critStatus.PropertyName = "SnipeStatusID"; critStatus.Value = 1; q.Criteria.Add(critStatus); Criterion critInProgres = new Criterion(); critInProgres.Operator = CriteriaOperator.Equal; critInProgres.PropertyName = "ValidityCheckInProgress"; critInProgres.Value = "0"; q.Criteria.Add(critInProgres); Criterion critStyle = new Criterion(); critStyle.Operator = CriteriaOperator.NotEqual; critStyle.PropertyName = "SnipeStyleID"; critStyle.Value = "2"; q.Criteria.Add(critStyle); q.Members.Add("*"); try { tempList = SL_Scheduler.myDataConnection.GetByCriteria<Snipe>(q); } catch (ControlObjectException ex) { foreach (UserMessage error in ex.ErrorList) Logger.CreateLog("Error__Snipe_CheckSnipeValidity_" + error.MessageCode.ToString() + error.Severity.ToString(), null, ex, EnumLogLevel.ERROR); } catch (Exception ex) { Logger.CreateLog("Error__Snipe_CheckSnipeValidity", null, ex, EnumLogLevel.ERROR); } foreach (Snipe snipe in tempList) snipeList.Add(snipe); // Loading snipes ending in the next day - IF THE USER HAS THE OPTION #warning Check that the query is working! q = new Query(); c = new Criterion(); c.PropertyName = "ItemEndDate"; DateTime nowPlus24H = SL_Scheduler.GeteBayOfficialTime().AddHours(-24); c.Value = "#DateParse#" + nowPlus24H.ToString() + "#EndDateParse#"; q.Criteria.Add(c); q.Members.Add("*"); q.QueryName = "ForSuscribedUser"; try { tempList = new List<Snipe>(); tempList = SL_Scheduler.myDataConnection.GetByCriteria<Snipe>(q); } catch (ControlObjectException ex) { foreach (UserMessage error in ex.ErrorList) Logger.CreateLog("Error__Snipe_CheckSnipeValidity_" + error.MessageCode.ToString() + error.Severity.ToString(), null, ex, EnumLogLevel.ERROR); } catch (Exception ex) { Logger.CreateLog("Error__Snipe_CheckSnipeValidity", null, ex, EnumLogLevel.ERROR); } foreach (Snipe snipe in tempList) snipeList.Add(snipe); #warning the locking of the snipes for validity check isnt very clean tempList = new List<Snipe>(); Snipe tempS; // Set ValidityCheckInProgress at True foreach (Snipe snipe in snipeList) { // We reload the snipe from the database... Maybe something changed! tempS = SL_Scheduler.otherService.GetSnipe((int)snipe.SnipeID); if (!tempS.SnipeInProgress && !tempS.ResultInProgress && !tempS.ValidityCheckInProgress) { tempS.ValidityCheckInProgress = true; SL_Scheduler.myDataConnection.Save<Snipe>((object)tempS, tempS); tempList.Add(tempS); } } tempS = null; // Updating snipes foreach (Snipe snipe in tempList) this.CheckSnipeValidity(snipe); // Set ValidityCheckInProgress at False foreach (Snipe snipe in tempList) { snipe.ValidityCheckInProgress = false; SL_Scheduler.myDataConnection.Save<Snipe>((object)snipe, snipe); } Logger.CreateLog("Ending__Snipe_CheckSnipeValidity", EnumLogLevel.INFO); // Cleaning tempList.Clear(); snipeList.Clear(); //System.GC.Collect(); } catch (Exception ex) { Logger.CreateLog("Error__Snipe_CheckSnipeValidity", string.Empty, ex, EnumLogLevel.INFO); } return DateTime.Now.ToString(); }
public string Timer_BidOptimizer_RefreshSnipes() { try { Logger.CreateLog("Beginning__Timer_BidOptimizer_RefreshSnipes", EnumLogLevel.INFO); IList<Snipe> endingSnipeList = new List<Snipe>(); DateTime nowMin1 = SL_Scheduler.GeteBayOfficialTime().AddMinutes(1); #region Load snipes ending later than a minute // Load snipes ending later than a minute Query qAll = new Query(); Criterion cAll = new Criterion(); cAll.Operator = CriteriaOperator.GreaterThan; cAll.PropertyName = "ItemEndDate"; cAll.Value = "#DateParse#" + nowMin1.ToString() + "#EndDateParse#"; qAll.Criteria.Add(cAll); Criterion cAllNotEnded = new Criterion(); cAllNotEnded.Operator = CriteriaOperator.GreaterThan; cAllNotEnded.PropertyName = "ItemEndDate"; cAllNotEnded.Value = "#DateParse#" + SL_Scheduler.GeteBayOfficialTime().ToString() + "#EndDateParse#"; qAll.Criteria.Add(cAllNotEnded); Criterion cAllNotPending = new Criterion(); cAllNotPending.Operator = CriteriaOperator.Equal; cAllNotPending.PropertyName = "SnipeInProgress"; cAllNotPending.Value = 0; qAll.Criteria.Add(cAllNotPending); Criterion cLastUp = new Criterion(); cLastUp.Operator = CriteriaOperator.LessThan; cLastUp.PropertyName = "ItemLastUpdate"; DateTime nowMin2H = SL_Scheduler.GeteBayOfficialTime().AddHours(-2); cLastUp.Value = "#DateParse#" + nowMin2H.ToString() + "#EndDateParse#"; qAll.Criteria.Add(cLastUp); Criterion critStatusAll = new Criterion(); critStatusAll.Operator = CriteriaOperator.Equal; critStatusAll.PropertyName = "SnipeStatusID"; critStatusAll.Value = 1; qAll.Criteria.Add(critStatusAll); Criterion critStyleAll = new Criterion(); critStyleAll.Operator = CriteriaOperator.Equal; critStyleAll.PropertyName = "SnipeStyleID"; critStyleAll.Value = "2"; qAll.Criteria.Add(critStyleAll); qAll.Members.Add("*"); #endregion #region Load & process first the snipes ending in the next minute // Load & process first the snipes ending in the next minute Query q = new Query(); Criterion c = new Criterion(); c.Operator = CriteriaOperator.LessThan; c.PropertyName = "ItemEndDate"; c.Value = "#DateParse#" + nowMin1.ToString() + "#EndDateParse#"; q.Criteria.Add(c); Criterion critStatus = new Criterion(); critStatus.Operator = CriteriaOperator.Equal; critStatus.PropertyName = "SnipeStatusID"; critStatus.Value = 1; q.Criteria.Add(critStatus); Criterion cNotPending = new Criterion(); cNotPending.Operator = CriteriaOperator.Equal; cNotPending.PropertyName = "SnipeInProgress"; cNotPending.Value = 0; q.Criteria.Add(cNotPending); Criterion critStyle = new Criterion(); critStyle.Operator = CriteriaOperator.Equal; critStyle.PropertyName = "SnipeStyleID"; critStyle.Value = "2"; q.Criteria.Add(critStyle); Criterion cNotEnded = new Criterion(); cNotEnded.Operator = CriteriaOperator.GreaterThan; cNotEnded.PropertyName = "ItemEndDate"; cNotEnded.Value = "#DateParse#" + SL_Scheduler.GeteBayOfficialTime().ToString() + "#EndDateParse#"; q.Criteria.Add(cNotEnded); q.Members.Add("*"); endingSnipeList = SL_Scheduler.myDataConnection.GetByCriteria<Snipe>(q); foreach (Snipe snipe in endingSnipeList) { Query qBuf = new Query(); qBuf.QueryName = "CheckCategoryYounger"; Criterion critere = new Criterion(); critere.Operator = CriteriaOperator.Equal; critere.PropertyName = "SnipeID"; critere.Value = snipe.SnipeID; qBuf.Criteria.Add(critere); qBuf.Members.Add("*"); if (SL_Scheduler.myDataConnection.GetByCriteria<Snipe>(qBuf).Count == 0) { MyThreadHandle threadHandle = new MyThreadHandle(snipe); Thread myThread = new Thread(new ThreadStart(threadHandle.PlaceBids)); myThread.Start(); } } #endregion IList<Snipe> AllSnipeList = new List<Snipe>(); AllSnipeList = SL_Scheduler.myDataConnection.GetByCriteria<Snipe>(qAll); foreach (Snipe snipe in AllSnipeList) { snipe.SnipeInProgress = true; SL_Scheduler.myDataConnection.Save<Snipe>((object)snipe, snipe); } foreach (Snipe snipe in AllSnipeList) { Query qBuf = new Query(); qBuf.QueryName = "CheckCategoryYounger"; Criterion critere = new Criterion(); critere.Operator = CriteriaOperator.Equal; critere.PropertyName = "SnipeID"; critere.Value = snipe.SnipeID; qBuf.Criteria.Add(critere); qBuf.Members.Add("*"); if (SL_Scheduler.myDataConnection.GetByCriteria<Snipe>(qBuf).Count == 0) { MyThreadHandle threadHandle = new MyThreadHandle(snipe); threadHandle.PlaceBids(); } } } catch (ControlObjectException ex) { foreach (UserMessage error in ex.ErrorList) Logger.CreateLog("Error__Timer_BidOptimizer_RefreshSnipes_" + error.MessageCode.ToString() + error.Severity.ToString(), null, ex, EnumLogLevel.ERROR); } catch (Exception ex) { Logger.CreateLog("Error__Timer_BidOptimizer_RefreshSnipes", null, ex, EnumLogLevel.ERROR); } return DateTime.Now.ToString(); }