コード例 #1
0
        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();
        }
コード例 #2
0
        /// <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);
                }
            }
        }
コード例 #3
0
        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;
        }
コード例 #4
0
 /// <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;
     }
 }
コード例 #5
0
        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));
        }
コード例 #6
0
 /// <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());
         }
     }
 }
コード例 #7
0
        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>");
            }
        }
コード例 #8
0
        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;
            }
        }
コード例 #9
0
 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);
 }
コード例 #10
0
    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;
    }
コード例 #11
0
 /// <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)
             });
         }
     }
 }
コード例 #12
0
    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>&lrm;<strong>&nbsp;" + GetRequestLink(log.RequestURL, log.RequestGUID) + "</strong> (" + log.RequestTime.ToString("hh:mm:ss") + ")&lrm;<br /><br />"));
                            this.plcLogs.Controls.Add(logCtrl);
                            this.plcLogs.Controls.Add(new LiteralControl("</div><br /><br />"));
                        }
                    }
                }
                catch
                {
                }
            }
        }
    }
コード例 #13
0
 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();
     }
 }
コード例 #14
0
 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();
     }
 }
コード例 #15
0
 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();
     }
 }
コード例 #16
0
        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);
            }
        }
コード例 #17
0
        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();
            }
        }
コード例 #19
0
        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;
        }
コード例 #20
0
        /// <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;
        }
コード例 #21
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;
 }
コード例 #22
0
 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;
 }
コード例 #23
0
 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;
 }
コード例 #24
0
 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);
 }
コード例 #25
0
ファイル: MonkeyCaches.cs プロジェクト: michaeloed/mgmgeo
        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);
            }
        }