public static LogInfo FromDataString(string s) { LogInfo result = new LogInfo(); try { string[] parts = s.Split(new char[] { '|' }); result.GeocacheCode = parts[0]; result.LogText = parts[3].Replace("<!br!>", "\r\n").Replace("(!-!)", "|"); result.VisitDate = DateTime.Parse(parts[2]); result.LogType = Utils.DataAccess.GetLogType(int.Parse(parts[1])); result.TrackableDrop = bool.Parse(parts[4]); result.TrackableRetrieve = bool.Parse(parts[5]); result.AddToFavorites = bool.Parse(parts[6]); for (int i = 7; i < parts.Length; i++) { if (parts[i].Length>0) { ImageInfo ii = ImageInfo.FromDataString(parts[i].Replace("(!-!)", "|")); if (ii != null) { result.Images.Add(ii); } } } } catch { result = null; } return result; }
public bool LogGeocache(LiveAPI.GeocachingLiveV6 api, LogInfo logInfo, List<LiveAPI.LiveV6.Trackable> dropTbs, List<string> retrieveTbs) { bool result = false; try { var req = new LiveAPI.LiveV6.CreateFieldNoteAndPublishRequest(); req.AccessToken = api.Token; req.CacheCode = logInfo.GeocacheCode; req.EncryptLogText = false; req.FavoriteThisCache = logInfo.AddToFavorites; req.Note = logInfo.LogText; req.PromoteToLog = true; req.WptLogTypeId = logInfo.LogType.ID; req.UTCDateLogged = logInfo.VisitDate.Date.AddHours(12).ToUniversalTime(); var resp = api.Client.CreateFieldNoteAndPublish(req); if (resp.Status.StatusCode == 0) { bool error = false; if (Core.ApplicationData.Instance.ActiveDatabase!=null) { var gc = Core.ApplicationData.Instance.ActiveDatabase.GeocacheCollection.GetGeocache(logInfo.GeocacheCode); if (gc != null) { if (logInfo.LogType.AsFound) { gc.Found = true; } } LiveAPI.Import.ImportLog(Core.ApplicationData.Instance.ActiveDatabase, resp.Log); if (gc!=null) { gc.ResetCachedLogData(); } } //log trackables (14=drop off, 13=retrieve from cache, 75=visited) if (dropTbs != null && dropTbs.Count > 0) { var reqT = new LiveAPI.LiveV6.CreateTrackableLogRequest(); reqT.AccessToken = api.Token; reqT.LogType = 14; reqT.UTCDateLogged = logInfo.VisitDate.Date.AddHours(12).ToUniversalTime(); foreach (var tb in dropTbs) { reqT.TrackingNumber = tb.TrackingCode; reqT.CacheCode = logInfo.GeocacheCode; var resp2 = api.Client.CreateTrackableLog(reqT); if (resp2.Status.StatusCode != 0) { Core.ApplicationData.Instance.Logger.AddLog(this, Core.Logger.Level.Error, resp2.Status.StatusMessage); error = true; //break; } } } if (retrieveTbs != null && retrieveTbs.Count > 0) { var reqT = new LiveAPI.LiveV6.CreateTrackableLogRequest(); reqT.AccessToken = api.Token; reqT.LogType = 13; reqT.UTCDateLogged = logInfo.VisitDate.Date.AddHours(12).ToUniversalTime(); foreach (var tb in retrieveTbs) { reqT.TrackingNumber = tb; reqT.CacheCode = logInfo.GeocacheCode; var resp2 = api.Client.CreateTrackableLog(reqT); if (resp2.Status.StatusCode != 0) { Core.ApplicationData.Instance.Logger.AddLog(this, Core.Logger.Level.Error, resp2.Status.StatusMessage); error = true; //break; } } } //add log images foreach (var li in logInfo.Images) { var uplReq = new LiveAPI.LiveV6.UploadImageToGeocacheLogRequest(); uplReq.AccessToken = api.Token; uplReq.LogGuid = resp.Log.Guid; uplReq.ImageData = new LiveAPI.LiveV6.UploadImageData(); uplReq.ImageData.FileCaption = li.Caption; uplReq.ImageData.FileDescription = li.Description; uplReq.ImageData.FileName = li.Uri; //todo: scale image to comply to limits uplReq.ImageData.base64ImageData = System.Convert.ToBase64String(System.IO.File.ReadAllBytes(li.Uri)); var resp2 = api.Client.UploadImageToGeocacheLog(uplReq); if (resp2.Status.StatusCode != 0) { Core.ApplicationData.Instance.Logger.AddLog(this, Core.Logger.Level.Error, resp2.Status.StatusMessage); error = true; //break; } } if (logInfo.AddToFavorites) { Favorites.Manager.Instance.AddFavoritedGeocache(logInfo.GeocacheCode); } result = true; } else { Core.ApplicationData.Instance.Logger.AddLog(this, Core.Logger.Level.Error, resp.Status.StatusMessage); } } catch(Exception e) { Core.ApplicationData.Instance.Logger.AddLog(this, e); } return result; }