private void RenderDate(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter) { CacheLog log = (CacheLog)model.GetValue(iter, 0); CellRendererText text = cell as CellRendererText; text.Text = log.LogDate.ToShortDateString() + " " + log.LogDate.ToShortTimeString(); }
/// <summary> /// Deletes the item from cache /// </summary> /// <param name="id">A string representing the id of the item in the cache to be deleted</param> /// <param name="cacheItemType">A cache item type</param> public override void CacheDeleteItem(string id, CacheItemType cacheItemType) { if (cacheItemType == CacheItemType.All || cacheItemType == CacheItemType.MarketDescription) { try { foreach (var fetchedVariant in _fetchedVariants) { if (fetchedVariant.Key.StartsWith(id)) { _fetchedVariants.TryRemove(id, out _); } } } catch (Exception e) { ExecutionLog.LogWarning($"Error deleting fetchedVariants for {id}", e); } if (_cache.Contains(id)) { CacheLog.LogDebug($"Delete variant market: {id}"); _cache.Remove(id); } } }
private void RenderCode(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter) { CacheLog log = (CacheLog)model.GetValue(iter, 0); CellRendererText text = cell as CellRendererText; text.Text = log.CacheCode; }
/// <summary> /// Updates Cache Status /// </summary> /// <param name="cache"> /// A <see cref="Geocache"/> /// </param> /// <param name="log"> /// A <see cref="CacheLog"/> /// </param> public void UpdateCache(Geocache cache, CacheLog log) { if (cache == null) { return; } m_Win.App.CacheStore.AddLog(log.CacheCode, log); if (log.LogStatus == "Found it") { cache.DNF = false; cache.FTF = false; cache.Symbol = "Geocache Found"; m_Win.App.CacheStore.AddWaypointOrCache(cache, false, false); } else if (log.LogStatus == "Didn't find it") { cache.DNF = true; cache.FTF = false; cache.Symbol = "Geocache"; m_Win.App.CacheStore.AddWaypointOrCache(cache, false, false); } else if (log.LogStatus == "Needs Maintenance") { cache.CheckNotes = true; } }
private int TypeCompare(TreeModel model, TreeIter tia, TreeIter tib) { CacheLog logA = (CacheLog)model.GetValue(tia, 0); CacheLog logB = (CacheLog)model.GetValue(tib, 0); if (logA == null || logB == null) { return(0); } return(logA.LogStatus.CompareTo(logB.LogStatus)); }
/// <summary> /// Deletes the item from cache /// </summary> /// <param name="id">A <see cref="URN" /> representing the id of the item in the cache to be deleted</param> /// <param name="cacheItemType">A cache item type</param> public override void CacheDeleteItem(URN id, CacheItemType cacheItemType) { if (id != null) { if (cacheItemType == CacheItemType.All || cacheItemType == CacheItemType.MarketDescription) { CacheLog.LogDebug($"Delete variant market: {id}"); _cache.Remove(id.Id.ToString()); } } }
private void RenderName(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter) { CacheLog log = (CacheLog)model.GetValue(iter, 0); CellRendererText text = cell as CellRendererText; if (m_caches.ContainsKey(log.CacheCode)) { text.Text = m_caches[log.CacheCode].CacheName; } else { text.Text = Catalog.GetString("<Name Unavailable>"); } }
void HandleLogViewSelectionChanged(object sender, EventArgs e) { TreeIter iter; TreeModel model; if (((TreeSelection)sender).GetSelected(out model, out iter)) { CacheLog val = (CacheLog)model.GetValue(iter, 0); if (hasUnsaved) { HandleUnsavedChanges(); } if (val == null) { fieldNotesDescPane.Sensitive = false; viewCacheButton.Sensitive = false; deleteButton.Sensitive = false; return; } fieldNotesDescPane.Sensitive = true; viewCacheButton.Sensitive = true; deleteButton.Sensitive = true; m_currLog = val; if (m_caches.ContainsKey(val.CacheCode)) { UpdateCacheInfo(val); } else { cacheDesc.HTML = Catalog.GetString("<b>Information Unavailable. This cache is not in your OCM database.</b>"); mapView.ClearCaches(); firstToFindCheck.Sensitive = false; } logEntry.Buffer.Changed -= HandleLogEntryBufferChanged; logEntry.Buffer.Text = val.LogMessage; logEntry.Buffer.Changed += HandleLogEntryBufferChanged; deleteButton.Sensitive = true; viewCacheButton.Sensitive = true; logPane.Sensitive = true; saveButton.Sensitive = false; } else { deleteButton.Sensitive = false; viewCacheButton.Sensitive = false; fieldNotesDescPane.Sensitive = false; } }
public string SaveCache(CacheLog cache, string key) { try { var serializedEc = JsonConvert.SerializeObject(cache, Formatting.Indented); var encrypted = EncryptStringToBytes(serializedEc, Encoding.UTF8.GetBytes(key)); var seed = new Random(); var filename = DateTime.Now.ToFileTime().ToString() + seed.Next(0, 10) + ".evn"; SaveFile(filename, encrypted); return(filename); } catch { } return(null); }
public void Initialize() { foreach (var cacheType in CacheLog.GetCacheClosedTypes()) { var argumentType = cacheType.GetGenericArguments()[0]; var log = new TypeLog() { Type = argumentType.Name }; LogTypes.Add(log); TypeDic[argumentType] = log; log.Count = CacheLog.CacheCounter[argumentType]; // SubscribeToCacheEvents(cacheType); } CacheLog.AnyAdded += AddedHandler; CacheLog.AnyRemoved += RemovedHandler; }
/// <inheritdoc /> public void AddEventIdForTimelineIgnore(URN eventId, int producerId, Type messageType) { if (producerId == 4) // BetPal { if (_ignoreEventsTimelineCache.Contains(eventId.ToString())) { _ignoreEventsTimelineCache.Get(eventId.ToString()); // to update sliding expiration } else { CacheLog.LogDebug($"Received {messageType.Name} - added {eventId} to the ignore timeline list"); _ignoreEventsTimelineCache.Add(eventId.ToString(), DateTime.Now, new CacheItemPolicy { SlidingExpiration = SdkInfo.AddVariableNumber(OperationManager.IgnoreBetPalTimelineSportEventStatusCacheTimeout, 20) }); } } }
protected void ReloadData() { if (!CacheHelper.DebugCache) { this.lblInfo.Text = GetString("DebugCache.NotConfigured"); } else { this.plcLogs.Controls.Clear(); for (int i = CacheHelper.LastLogs.Count - 1; i >= 0; i--) { try { // Get the log RequestLog log = (RequestLog)CacheHelper.LastLogs[i]; if (log != null) { // Load the table DataTable dt = log.LogTable; if (!DataHelper.DataSourceIsEmpty(dt)) { // Load the control CacheLog logCtrl = (CacheLog)LoadControl("~/CMSAdminControls/Debug/CacheLog.ascx"); logCtrl.ID = "queryLog_" + i; logCtrl.EnableViewState = false; logCtrl.Log = log; logCtrl.LogStyle = ""; logCtrl.ShowCompleteContext = this.chkCompleteContext.Checked; // Add to the output this.plcLogs.Controls.Add(new LiteralControl("<div>‎<strong> " + GetRequestLink(log.RequestURL, log.RequestGUID) + "</strong> (" + log.RequestTime.ToString("hh:mm:ss") + ")‎<br /><br />")); this.plcLogs.Controls.Add(logCtrl); this.plcLogs.Controls.Add(new LiteralControl("</div><br /><br />")); } } } catch { } } } }
protected virtual void OnCloseClick(object sender, System.EventArgs e) { if (hasUnsaved) { MessageDialog dlg = new MessageDialog(this, DialogFlags.Modal, MessageType.Warning, ButtonsType.YesNo, Catalog.GetString("You have unsaved changes that will be lost. Do you wish to save?\n")); if ((int)(ResponseType.Yes) == dlg.Run()) { SaveLogChanges(); } dlg.Hide(); } m_currLog = null; m_caches = null; this.Hide(); if (needsRefresh) { m_Win.RefreshCacheList(); } }
protected virtual void OnDeleteClick(object sender, System.EventArgs e) { Gtk.TreeIter itr; Gtk.TreeModel model; if (logView.Selection.GetSelected(out model, out itr)) { CacheLog log = (CacheLog)model.GetValue(itr, 0); MessageDialog dlg = new MessageDialog(this, DialogFlags.Modal, MessageType.Warning, ButtonsType.YesNo, Catalog.GetString("Are you sure you want to remove the field note for '{0}'?"), log.CacheCode); if ((int)ResponseType.Yes == dlg.Run()) { m_Logs.Remove(log); PopulateLogs(m_Logs); UpdateFNFile(); logEntry.Buffer.Text = String.Empty; } dlg.Hide(); dlg.Dispose(); } }
protected virtual void OnViewCache(object sender, System.EventArgs e) { Gtk.TreeIter itr; Gtk.TreeModel model; if (logView.Selection.GetSelected(out model, out itr)) { CacheLog log = (CacheLog)model.GetValue(itr, 0); if (!m_Win.CacheList.ContainsCode(log.CacheCode)) { MessageDialog dlg = new MessageDialog(this, DialogFlags.Modal, MessageType.Info, ButtonsType.Ok, Catalog.GetString("'{0}' is not within the list of unfiltered caches. Your filter settings may have filtered it out or it may not be in your database."), log.CacheCode); dlg.Run(); dlg.Hide(); dlg.Dispose(); return; } m_Win.CacheList.SelectCacheByName(log.CacheCode); this.Hide(); this.Dispose(); } }
private int DateCompare(TreeModel model, TreeIter tia, TreeIter tib) { CacheLog logA = (CacheLog)model.GetValue(tia, 0); CacheLog logB = (CacheLog)model.GetValue(tib, 0); if (logA == null || logB == null) { return(0); } if (logA.LogDate > logB.LogDate) { return(1); } else if (logA.LogDate == logB.LogDate) { return(0); } else { return(-1); } }
private void RenderType(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter) { CacheLog log = (CacheLog)model.GetValue(iter, 0); CellRendererPixbuf icon = cell as CellRendererPixbuf; if (log.LogStatus == "Found it") { icon.Pixbuf = IconManager.FOUNDICON_S; } else if (log.LogStatus == "Didn't find it") { icon.Pixbuf = IconManager.DNF_S; } else if (log.LogStatus == "Needs Maintenance") { icon.Pixbuf = IconManager.NEEDS_MAINT_S; } else { icon.Pixbuf = IconManager.WRITENOTE_S; } }
public void BackupLog(SentryEvent arg) { /*Faremos backup de todas as partes importantes para a visualização de erro no sentry.io * não será feito o backup completo do objeto pois partes dele não são necessários já */ var unhandledError = false; var sentryExceptions = arg.SentryExceptions.ToList(); var StackModule = new List <string>(); var StackType = new List <string>(); var StackValue = new List <string>(); var StackStackTrace = new List <string>(); /*Store the stack frames*/ var stackFrameContextLine = new List <string>(); var stackFrameFileName = new List <string>(); var stackFrameFunction = new List <string>(); var stackFrameImgAddress = new List <long>(); var stackFrameInApp = new List <bool>(); var stackFrameInstOffset = new List <long>(); var stackFrameLineNumb = new List <long>(); var stackFrameModule = new List <string>(); var stackFramePackage = new List <string>(); var stackFrameTotalPerStack = new List <int>(); for (int i = 0, framecnt = 0; i < sentryExceptions.Count(); i++) { StackModule.Add(sentryExceptions[i].Module); StackType.Add(sentryExceptions[i].Type); StackValue.Add(sentryExceptions[i].Value); if (sentryExceptions[i].Stacktrace != null) { for (int j = 0; j < sentryExceptions[i].Stacktrace.Frames.Count; j++) { stackFrameContextLine.Add(sentryExceptions[i].Stacktrace.Frames[j].ContextLine); stackFrameFileName.Add(sentryExceptions[i].Stacktrace.Frames[j].FileName); stackFrameFunction.Add(sentryExceptions[i].Stacktrace.Frames[j].Function); stackFrameImgAddress.Add(sentryExceptions[i].Stacktrace.Frames[j].ImageAddress); stackFrameInApp.Add(sentryExceptions[i].Stacktrace.Frames[j].InApp.GetValueOrDefault()); stackFrameInstOffset.Add(sentryExceptions[i].Stacktrace.Frames[j].InstructionOffset.GetValueOrDefault()); stackFrameLineNumb.Add(sentryExceptions[i].Stacktrace.Frames[j].LineNumber.GetValueOrDefault()); stackFrameModule.Add(sentryExceptions[i].Stacktrace.Frames[j].Module); stackFramePackage.Add(sentryExceptions[i].Stacktrace.Frames[j].Package); framecnt++; } } stackFrameTotalPerStack.Add(framecnt); } var tagsKeys = new List <string>(arg.Tags.Keys.ToList()); var tagsValues = new List <string>(); for (int i = 0; i < tagsKeys.Count(); i++) { if (tagsKeys[i] == "error.handled") { unhandledError = arg.Tags[tagsKeys[i]] == "False"; } tagsValues.Add(arg.Tags[tagsKeys[i]]); } var stack = arg.SentryExceptions?.First().Stacktrace; var extraKeys = new List <string>(arg.Extra.Keys.ToList()); var extraValues = new List <string>(); for (int i = 0; i < extraKeys.Count(); i++) { extraValues.Add((string)arg.Extra[extraKeys[i]]); } extraKeys.Add("Original Time"); extraValues.Add(DateTime.Now.ToString("dddd, MMM dd yyyy HH:mm:ss zzz")); //A última tag (que ficou em ordem invertida) sempre será a mensagem da viewmodel //as demais informações extras serão coletadas mediante o novo envio online string viewModelMessage; if (arg.Extra.ContainsKey("viewModelMessage")) { viewModelMessage = arg.Extra["viewModelMessage"]?.ToString(); } var user = arg.User; var cacheLog = new CacheLog() { StackModule = StackModule, StackStackTrace = StackStackTrace, StackType = StackType, StackValue = StackValue, StackTrace = stack, StackFrameContextLine = stackFrameContextLine, StackFrameFileName = stackFrameFileName, StackFrameFunction = stackFrameFunction, StackFrameImgAddress = stackFrameImgAddress, StackFrameInApp = stackFrameInApp, StackFrameInstOffset = stackFrameInstOffset, StackFrameLineNumb = stackFrameLineNumb, StackFrameModule = stackFrameModule, StackFramePackage = stackFramePackage, StackFrameTotalPerStack = stackFrameTotalPerStack, TagsKeys = tagsKeys, TagsValues = tagsValues, User = user, ExtraKeys = extraKeys, ExtraValues = extraValues, Message = arg.Message, Level = arg.Level, Data = arg.Timestamp.ToString("dddd, MMM dd yyyy HH:mm:ss zzz"), }; //Since SaveErrorCache is a heavy task, we run it in a new task in case the error was handled else //We need to run syncronously else the app will close before saving the error on disk. var saveTask = new Task(() => { _offlineCacheHelper.SaveCache(cacheLog, _key); }); saveTask.Start(); if (unhandledError) { saveTask.Wait(); } }
public override CacheLog GetLastFindLogBy(string cachecode, string finderId) { Trace("Getting last found log for " + cachecode +" by " + finderId); IDataReader rdr = ExecuteSQLQuery(String.Format(LAST_FOUND_BY, cachecode, finderId)); CacheLog log = new CacheLog(); while (rdr.Read()) { log.LogDate = DateTime.Parse(rdr.GetString(0)); log.LoggedBy = rdr.GetString(1); log.LogMessage = rdr.GetString(2); log.LogStatus = rdr.GetString(3); log.FinderID = rdr.GetString(4); String encoded = rdr.GetString(5); log.Encoded = Boolean.Parse(encoded); log.LogID = rdr.GetString(6); log.LogKey = rdr.GetString(7); log.CacheCode = cachecode; } return log; }
/// <summary> /// Updates all info panes with the current cache information /// </summary> /// <param name="val"> /// A geocache object <see cref="CacheLog"/> /// </param> private void UpdateCacheInfo(CacheLog val) { Geocache cache = m_caches[val.CacheCode]; StringBuilder builder = new StringBuilder(); builder.Append("<b>"); builder.Append(cache.Name); builder.Append(":"); builder.Append(cache.CacheName); if (!String.IsNullOrEmpty(cache.PlacedBy)) { builder.Append(Catalog.GetString(" by ")); builder.Append(cache.PlacedBy); } builder.Append("</b><br/>"); builder.Append(Geocache.GetCTypeString(cache.TypeOfCache)); builder.Append("<br/><br/>"); builder.Append(cache.ShortDesc); builder.Append("<br/><br/>"); builder.Append(cache.LongDesc); cacheDesc.HTML = builder.ToString(); List <CacheLog> logs = m_Win.App.CacheStore.GetCacheLogs(cache.Name); builder = new StringBuilder(); foreach (CacheLog log in logs) { builder.Append(log.toHTML()); } cacheLog.HTML = builder.ToString(); mapView.ClearCaches(); mapView.AddMarker(cache, false); List <Waypoint> children = m_Win.App.CacheStore.GetChildWaypoints(new string[] { cache.Name }); ListStore cmodel = waypointCombo.Model as ListStore; m_waypoints.Clear(); cmodel.Clear(); waypointCombo.AppendText(cache.Name); cacheNotes.SetCache(cache); firstToFindCheck.Toggled -= OnFTFCheck; firstToFindCheck.Active = cache.FTF; firstToFindCheck.Toggled += OnFTFCheck; if (val.LogStatus == "Found it") { firstToFindCheck.Sensitive = true; } else { firstToFindCheck.Sensitive = false; } logChoice.Changed -= OnLogTypeChange; SetLogChoice(); logChoice.Changed += OnLogTypeChange; m_waypoints.Add(cache.Name, cache); foreach (Waypoint pt in children) { waypointCombo.AppendText(pt.Name); m_waypoints.Add(pt.Name, pt); } waypointCombo.Active = 0; }
public override Dictionary<string, List<CacheLog>> GetCacheLogsMulti(string[] cachecodes) { Trace("Getting Cache Logs multi"); IDataReader rdr = ExecuteSQLQuery(String.Format(GET_LOGS_MULTI, ArrayToSQL(cachecodes))); Dictionary<string, List<CacheLog>> logmap = new Dictionary<string, List<CacheLog>>(); while (rdr.Read()) { CacheLog log = new CacheLog(); log.LogDate = DateTime.Parse(rdr.GetString(0)); log.LoggedBy = rdr.GetString(1); log.LogMessage = rdr.GetString(2); log.LogStatus = rdr.GetString(3); log.FinderID = rdr.GetString(4); String encoded = rdr.GetString(5); log.Encoded = Boolean.Parse(encoded); log.LogID = rdr.GetString(6); log.LogKey = rdr.GetString(7); log.CacheCode = rdr.GetString(8); if (logmap.ContainsKey(log.CacheCode)) { logmap[log.CacheCode].Add(log); } else { logmap.Add(log.CacheCode, new List<CacheLog>()); logmap[log.CacheCode].Add(log); } } return logmap; }
public override List<CacheLog> GetCacheLogs(string cachecode) { Trace("Getting Cache Logs for " + cachecode); IDataReader rdr = ExecuteSQLQuery(String.Format(GET_LOGS, cachecode)); List<CacheLog> logs = new List<CacheLog>(); while (rdr.Read()) { CacheLog log = new CacheLog(); log.CacheCode = cachecode; log.LogDate = DateTime.Parse(rdr.GetString(0)); log.LoggedBy = rdr.GetString(1); log.LogMessage = rdr.GetString(2); log.LogStatus = rdr.GetString(3); log.FinderID = rdr.GetString(4); String encoded = rdr.GetString(5); log.Encoded = Boolean.Parse(encoded); log.LogID = rdr.GetString(6); log.LogKey = rdr.GetString(7); logs.Add(log); } return logs; }
public override CacheLog GetCacheLogByKey(string key) { Trace("Getting Cache Log " + key); IDataReader rdr = ExecuteSQLQuery(String.Format(GET_LOG_BY_KEY, key)); CacheLog log = new CacheLog(); while (rdr.Read()) { log.LogKey = key; log.LogDate = DateTime.Parse(rdr.GetString(0)); log.LoggedBy = rdr.GetString(1); log.LogMessage = rdr.GetString(2); log.LogStatus = rdr.GetString(3); log.FinderID = rdr.GetString(4); String encoded = rdr.GetString(5); log.Encoded = Boolean.Parse(encoded); log.LogID = rdr.GetString(6); log.CacheCode = rdr.GetString(7); } return log; }
public override void AddLog(string parent, CacheLog log) { Trace("Adding log for " + parent); String insert = String.Format(ADD_LOG, parent, log.LogDate.ToString("o"), Escape(log.LoggedBy), Escape(log.LogMessage), Escape(log.LogStatus), log.FinderID, log.Encoded.ToString(), log.LogID, log.LogKey); String update = String.Format(UPDATE_LOG, parent, log.LogDate.ToString("o"), Escape(log.LoggedBy), Escape(log.LogMessage), Escape(log.LogStatus), log.FinderID, log.Encoded.ToString(), log.LogID, log.LogKey); InsertOrUpdate(update, insert); }
public bool DoIt() { if (_Daddy != null) { try { string[] fichiers_monkeys = new string[] { "https://www.dropbox.com/sh/vbm2svx98swen20/AAC4gad3RA5e6Fko8eXf2LNVa/7646619.zip?dl=1", "Bruno.fr", "https://www.dropbox.com/sh/vbm2svx98swen20/AADfaTi0WiPMYsDvfdTK0hpZa/MyFindsFab.zip?dl=1", "ElFIQue", "https://www.dropbox.com/sh/vbm2svx98swen20/AAAg7lraTEa01pEs6R45eFnZa/MyFinds_RGX78.zip?dl=1", "RGX78", "", "Kirdec", "", "CamCasimir" }; List <ParameterObject> lst = new List <ParameterObject>(); for (int i = 1; i < fichiers_monkeys.Length; i += 2) { if (fichiers_monkeys[i - 1] != "") { lst.Add(new ParameterObject(ParameterObject.ParameterType.Bool, true, "foo", fichiers_monkeys[i])); } } ParametersChanger changer = new ParametersChanger(); changer.Title = "Choix des PQs à traiter"; changer.BtnCancel = _Daddy.GetTranslator().GetString("BtnCancel"); changer.BtnOK = _Daddy.GetTranslator().GetString("BtnOk"); changer.ErrorFormater = _Daddy.GetTranslator().GetString("ErrWrongParameter"); changer.ErrorTitle = _Daddy.GetTranslator().GetString("Error"); changer.Parameters = lst; changer.Font = _Daddy.Font; changer.Icon = _Daddy.Icon; int nb_monkeys = 5; if (changer.ShowDialog() == DialogResult.OK) { for (int i = 0; i < lst.Count; i++) { if (lst[i].Value == "False") { fichiers_monkeys[2 * i] = ""; } } } _Daddy._ThreadProgressBarTitle = "Traitement des PQs MyFinds des Monkeys"; _Daddy.CreateThreadProgressBar(); List <String> files = new List <string>(); for (int i = 0; i < fichiers_monkeys.Length / 2; i++) { String file = fichiers_monkeys[2 * i]; if (file == "") { continue; } string localfilegpx = ""; if (file.Contains(".zip")) { string localfilezip = Guid.NewGuid().ToString() + ".zip"; MyTools.DownloadFile(file, _Daddy.GetProxy(), null, localfilezip); // On dezippe try { ZipFile.ExtractToDirectory(localfilezip, "."); using (ZipArchive archive = ZipFile.OpenRead(localfilezip)) { localfilegpx = archive.Entries[0].Name; } } catch (Exception exc2) { File.Delete(localfilezip); throw exc2; } File.Delete(localfilezip); } else { localfilegpx = Guid.NewGuid().ToString() + ".gpx"; MyTools.DownloadFile(file, _Daddy.GetProxy(), null, localfilegpx); } files.Add(localfilegpx); } Dictionary <String, Geocache> caches_trouvees_ensemble = null; Dictionary <String, Geocache> caches_communes = new Dictionary <string, Geocache>(); foreach (String file in files) { _Daddy.Log("Loading " + file); // On lit les caches Dictionary <String, Geocache> aBatch = new Dictionary <String, Geocache>(); List <Waypoint> wpts = new List <Waypoint>(); _Daddy.LoadGCFile(file, ref aBatch, ref wpts); File.Delete(file); _Daddy.Log("Loaded " + aBatch.Count.ToString() + " caches"); // On ne garde que les logs "Found it", "Attended", "Webcam Photo Taken" dans les caches! foreach (KeyValuePair <String, Geocache> pair in aBatch) { Geocache geo = pair.Value; CacheLog found_log = null; foreach (CacheLog log in geo._Logs) { if ((log._Type == "Found it") || (log._Type == "Attended") || (log._Type == "Webcam Photo Taken")) { found_log = log; break; } } geo._Logs.Clear(); geo._Logs.Add(found_log); _Daddy.Log(geo._Code + ": " + found_log._Type + " " + found_log._Date); } // On fusionne avec uniquement les caches trouvées le même jour ! if (caches_trouvees_ensemble == null) { // Les caches trouvées ensemble caches_trouvees_ensemble = aBatch; // Et les caches potentiellement communes foreach (KeyValuePair <String, Geocache> pair in aBatch) { caches_communes.Add(pair.Key, pair.Value); } } else { Dictionary <String, Geocache> newcaches = new Dictionary <string, Geocache>(); // On va stocker les caches qui ont été trouvées le même jour foreach (KeyValuePair <String, Geocache> pair in aBatch) { Geocache geo = pair.Value; // Est-ce que cette cache est déjà dans la liste commune ? // Si non, même pas la peine de se creuser la tête Geocache cache_merged = null; if (caches_trouvees_ensemble.ContainsKey(pair.Key)) { _Daddy.Log("Found a match: " + pair.Key); cache_merged = caches_trouvees_ensemble[pair.Key]; // Est-ce que ça a été trouvé à la même date ? String date_log_batch = MyTools.CleanDate(geo._Logs[0]._Date); String date_log_merge = MyTools.CleanDate(cache_merged._Logs[0]._Date); if (date_log_batch == date_log_merge) { _Daddy.Log("Found a common date: " + date_log_batch); // Ok on a un truc commun !!! newcaches.Add(pair.Key, cache_merged); } else { cache_merged = null; _Daddy.Log("Didn't find a common date: " + date_log_batch + " vs " + date_log_merge); } } // Else poubelle // On regarde si on n'a pas eu un match sur la même date if (cache_merged == null) { _Daddy.Log("Check if it is a common cache"); // Alors on met à jour caches_communes si besoin if (caches_communes.ContainsKey(pair.Key)) { _Daddy.Log("Common cache!"); // On met à jour les fichiers et les logs Geocache cache_common = caches_communes[pair.Key]; cache_common._origin.AddRange(pair.Value._origin); cache_common._Logs.Add(pair.Value._Logs[0]); _Daddy.Log("Updated!"); } else { _Daddy.Log("Not common (so far)"); // On ajoute juste la cache caches_communes.Add(pair.Key, pair.Value); } } } // On remplace la liste mergée caches_trouvees_ensemble.Clear(); aBatch.Clear(); caches_trouvees_ensemble = newcaches; } } _Daddy.KillThreadProgressBar(); SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = "CSV (*.csv)|*.csv"; saveFileDialog1.RestoreDirectory = true; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { String fichier_csv = saveFileDialog1.FileName; FileInfo fi = new FileInfo(fichier_csv); Directory.SetCurrentDirectory(fi.Directory.ToString()); String fileRadix = fi.Name.ToString(); int nb_max = 3 + 2 * nb_monkeys; System.IO.StreamWriter file = new System.IO.StreamWriter(fileRadix, false, Encoding.Default); _Daddy.Log("Create common found msg"); EcritLigne(file, new object[] { "LISTE DES CACHES COMMUNES TROUVEES LE MEME JOUR", caches_trouvees_ensemble.Count }, nb_max); foreach (KeyValuePair <String, Geocache> pair in caches_trouvees_ensemble) { // Longueur max arguments : 3 Geocache geo = pair.Value; EcritLigne(file, new object[] { geo._Code, geo._Name.Replace(";", ","), geo._Logs[0]._Date }, nb_max); } _Daddy.Log("Create common msg"); EcritLigne(file, new object[] { "LISTE DES CACHES COMMUNES MAIS NON TROUVEES LE MEME JOUR" }, nb_max); foreach (KeyValuePair <String, Geocache> pair in caches_communes) { Geocache geo = pair.Value; if (geo._Logs.Count >= 2) { // Longueur max arguments : 3 + 2*nb_monkeys List <object> os = new List <object>(); os.Add(geo._Code); os.Add(geo._Name.Replace(";", ",")); List <String> dates = new List <String>(); // On va parcourir les monkeys dans l'ordre et voir s'ils sont présents for (int i = 0; i < fichiers_monkeys.Length / 2; i++) { String monkey = fichiers_monkeys[2 * i + 1]; String date = ""; foreach (CacheLog log in geo._Logs) { if (log._User.ToLower() == monkey.ToLower()) { date = MyTools.CleanDate(log._Date); dates.Add(date); } } if (date != "") { os.Add(monkey); os.Add(date); } else { os.Add(monkey); os.Add(" "); } } // On recherche les doublons var duplicates = dates.GroupBy(a => a).SelectMany(ab => ab.Skip(1).Take(1)).ToList(); if (duplicates.Count() != 0) { os.Add("MonkeyFind"); } else { os.Add("NotMonkey"); } EcritLigne(file, os.ToArray(), nb_max); } } file.Close(); } // Exclure des caches affichées les caches de caches_communes ET caches_trouvees_ensemble // En gros toute cache qui a été trouvée par au moins un membre doit être exclue HashSet <String> hs = new HashSet <String>(); foreach (KeyValuePair <String, Geocache> pair in caches_communes) { hs.Add(pair.Key); } foreach (KeyValuePair <String, Geocache> pair in caches_trouvees_ensemble) { hs.Add(pair.Key); } CustomFilterExcludeSelection fltr = new CustomFilterExcludeSelection(hs); _Daddy.ExecuteCustomFilter(fltr); return(true); } catch (Exception exc) { _Daddy.KillThreadProgressBar(); String msg = _Daddy.GetTranslator().GetString("ErrFilter") + ": " + exc.Message; MyMessageBox.Show(msg, _Daddy.GetTranslator().GetString("ErrTitle"), MessageBoxIcon.Exclamation, _Daddy.GetTranslator()); return(false); } } else { MessageBox.Show("Daddy is missing :-("); return(false); } }