public Task GetLogsAsync()

in SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Storage/Storage.cs [236:287]


        public Task<string> GetLogsAsync(string channelName, int limit, List<Log> logs)
        {
            return AddTaskToQueue(() =>
            {
                logs?.Clear();
                var retrievedLogs = new List<Log>();
                AppCenterLog.Debug(AppCenterLog.LogTag,
                    $"Trying to get up to {limit} logs from storage for {channelName}");
                var idPairs = new List<Tuple<Guid?, long>>();
                var failedToDeserializeALog = false;
                var objectEntries = _storageAdapter.Select(TableName, ColumnChannelName, channelName, ColumnIdName, _pendingDbIdentifiers.Cast<object>().ToArray(), limit);
                var retrievedEntries = objectEntries.Select(entries =>
                    new LogEntry()
                    {
                        Id = (long)entries[0],
                        Channel = (string)entries[1],
                        Log = (string)entries[2]
                    }
                ).ToList();
                foreach (var entry in retrievedEntries)
                {
                    try
                    {
                        var log = LogSerializer.DeserializeLog(entry.Log);
                        retrievedLogs.Add(log);
                        idPairs.Add(Tuple.Create(log.Sid, Convert.ToInt64(entry.Id)));
                    }
                    catch (JsonException e)
                    {
                        AppCenterLog.Error(AppCenterLog.LogTag, "Cannot deserialize a log in storage", e);
                        failedToDeserializeALog = true;
                        _storageAdapter.Delete(TableName, ColumnIdName, entry.Id);
                    }
                }
                if (failedToDeserializeALog)
                {
                    AppCenterLog.Warn(AppCenterLog.LogTag, "Deleted logs that could not be deserialized");
                }
                if (idPairs.Count == 0)
                {
                    AppCenterLog.Debug(AppCenterLog.LogTag,
                        $"No available logs in storage for channel '{channelName}'");
                    return null;
                }

                // Process the results
                var batchId = Guid.NewGuid().ToString();
                ProcessLogIds(channelName, batchId, idPairs);
                logs?.AddRange(retrievedLogs);
                return batchId;
            });
        }