private async Task LoadData(bool isRefresh) { try { SetProgressBar(AppResources.SysTrayGettingItems); var query = new SyncJobItemQuery { JobId = SyncJob.Id, TargetId = ConnectionManager.Device.DeviceId, AddMetadata = true }; var items = await ApiClient.GetSyncJobItems(query); if (items != null && !items.Items.IsNullOrEmpty()) { SyncJobItems = items.Items.Select(x => new SyncJobItemViewModel(x, NavigationService, ConnectionManager, this)).ToObservableCollection(); } } catch (HttpException ex) { Utils.HandleHttpException("LoadData()", ex, NavigationService, Log); } SetProgressBar(); }
public Dictionary <string, SyncedItemProgress> GetSyncedItemProgresses(SyncJobItemQuery query) { var result = new Dictionary <string, SyncedItemProgress>(); var now = DateTime.UtcNow; using (var connection = CreateConnection(true).Result) { using (var cmd = connection.CreateCommand()) { cmd.CommandText = "select ItemId,Status,Progress from SyncJobItems"; var whereClauses = new List <string>(); if (!string.IsNullOrWhiteSpace(query.TargetId)) { whereClauses.Add("TargetId=@TargetId"); cmd.Parameters.Add(cmd, "@TargetId", DbType.String).Value = query.TargetId; } if (query.Statuses.Length > 0) { var statuses = string.Join(",", query.Statuses.Select(i => "'" + i.ToString() + "'").ToArray()); whereClauses.Add(string.Format("Status in ({0})", statuses)); } if (whereClauses.Count > 0) { cmd.CommandText += " where " + string.Join(" AND ", whereClauses.ToArray()); } cmd.CommandText += ";" + cmd.CommandText .Replace("select ItemId,Status,Progress from SyncJobItems", "select ItemIds,Status,Progress from SyncJobs") .Replace("'Synced'", "'Completed','CompletedWithError'"); //Logger.Debug(cmd.CommandText); using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) { LogQueryTime("GetSyncedItemProgresses", cmd, now); while (reader.Read()) { AddStatusResult(reader, result, false); } if (reader.NextResult()) { while (reader.Read()) { AddStatusResult(reader, result, true); } } } } } return(result); }
public QueryResult <SyncJobItem> GetJobItems(SyncJobItemQuery query) { var result = _repo.GetJobItems(query); if (query.AddMetadata) { result.Items.ForEach(FillMetadata); } return(result); }
public QueryResult <SyncJobItem> GetJobItems(SyncJobItemQuery query) { var result = _repo.GetJobItems(query); if (query.AddMetadata) { foreach (var item in result.Items) { FillMetadata(item); } } return(result); }
public Dictionary <string, SyncedItemProgress> GetSyncedItemProgresses(SyncJobItemQuery query) { return(_repo.GetSyncedItemProgresses(query)); }
public QueryResult <SyncedItemProgress> GetSyncedItemProgresses(SyncJobItemQuery query) { return(_repo.GetSyncedItemProgresses(query)); }
public QueryResult <SyncJobItem> GetJobItems(SyncJobItemQuery query) { return(GetJobItemReader(query, BaseJobItemSelectText, GetJobItem)); }
public QueryResult <SyncedItemProgress> GetSyncedItemProgresses(SyncJobItemQuery query) { return(GetJobItemReader(query, "select ItemId,Status from SyncJobItems", GetSyncedItemProgress)); }
private QueryResult <T> GetJobItemReader <T>(SyncJobItemQuery query, string baseSelectText, Func <IDataReader, T> itemFactory) { if (query == null) { throw new ArgumentNullException("query"); } using (var cmd = _connection.CreateCommand()) { cmd.CommandText = baseSelectText; var whereClauses = new List <string>(); if (!string.IsNullOrWhiteSpace(query.JobId)) { whereClauses.Add("JobId=@JobId"); cmd.Parameters.Add(cmd, "@JobId", DbType.String).Value = query.JobId; } if (!string.IsNullOrWhiteSpace(query.ItemId)) { whereClauses.Add("ItemId=@ItemId"); cmd.Parameters.Add(cmd, "@ItemId", DbType.String).Value = query.ItemId; } if (!string.IsNullOrWhiteSpace(query.TargetId)) { whereClauses.Add("TargetId=@TargetId"); cmd.Parameters.Add(cmd, "@TargetId", DbType.String).Value = query.TargetId; } if (query.Statuses.Length > 0) { var statuses = string.Join(",", query.Statuses.Select(i => "'" + i.ToString() + "'").ToArray()); whereClauses.Add(string.Format("Status in ({0})", statuses)); } var whereTextWithoutPaging = whereClauses.Count == 0 ? string.Empty : " where " + string.Join(" AND ", whereClauses.ToArray()); var startIndex = query.StartIndex ?? 0; if (startIndex > 0) { whereClauses.Add(string.Format("Id NOT IN (SELECT Id FROM SyncJobItems ORDER BY JobItemIndex, DateCreated LIMIT {0})", startIndex.ToString(_usCulture))); } if (whereClauses.Count > 0) { cmd.CommandText += " where " + string.Join(" AND ", whereClauses.ToArray()); } cmd.CommandText += " ORDER BY JobItemIndex, DateCreated"; if (query.Limit.HasValue) { cmd.CommandText += " LIMIT " + query.Limit.Value.ToString(_usCulture); } cmd.CommandText += "; select count (Id) from SyncJobItems" + whereTextWithoutPaging; var list = new List <T>(); var count = 0; using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) { while (reader.Read()) { list.Add(itemFactory(reader)); } if (reader.NextResult() && reader.Read()) { count = reader.GetInt32(0); } } return(new QueryResult <T>() { Items = list.ToArray(), TotalRecordCount = count }); } }
public QueryResult <string> GetLibraryItemIds(SyncJobItemQuery query) { return(_repo.GetLibraryItemIds(query)); }
public QueryResult <string> GetLibraryItemIds(SyncJobItemQuery query) { return(GetJobItemReader(query, "select ItemId from SyncJobItems", GetItemId)); }
public Dictionary <string, SyncedItemProgress> GetSyncedItemProgresses(SyncJobItemQuery query) { var result = new Dictionary <string, SyncedItemProgress>(); var now = DateTime.UtcNow; using (WriteLock.Read()) { using (var connection = CreateConnection(true)) { var commandText = "select ItemId,Status,Progress from SyncJobItems"; var whereClauses = new List <string>(); if (!string.IsNullOrWhiteSpace(query.TargetId)) { whereClauses.Add("TargetId=@TargetId"); } if (query.Statuses.Length > 0) { var statuses = string.Join(",", query.Statuses.Select(i => "'" + i.ToString() + "'").ToArray()); whereClauses.Add(string.Format("Status in ({0})", statuses)); } if (whereClauses.Count > 0) { commandText += " where " + string.Join(" AND ", whereClauses.ToArray()); } var statementTexts = new List <string> { commandText }; commandText = commandText .Replace("select ItemId,Status,Progress from SyncJobItems", "select ItemIds,Status,Progress from SyncJobs") .Replace("'Synced'", "'Completed','CompletedWithError'"); statementTexts.Add(commandText); var statements = connection.PrepareAll(string.Join(";", statementTexts.ToArray())) .ToList(); using (var statement = statements[0]) { if (!string.IsNullOrWhiteSpace(query.TargetId)) { statement.TryBind("@TargetId", query.TargetId); } foreach (var row in statement.ExecuteQuery()) { AddStatusResult(row, result, false); } LogQueryTime("GetSyncedItemProgresses", commandText, now); } now = DateTime.UtcNow; using (var statement = statements[1]) { if (!string.IsNullOrWhiteSpace(query.TargetId)) { statement.TryBind("@TargetId", query.TargetId); } foreach (var row in statement.ExecuteQuery()) { AddStatusResult(row, result, true); } LogQueryTime("GetSyncedItemProgresses", commandText, now); } } } return(result); }
private QueryResult <T> GetJobItemReader <T>(SyncJobItemQuery query, string baseSelectText, Func <IReadOnlyList <IResultSetValue>, T> itemFactory) { if (query == null) { throw new ArgumentNullException("query"); } using (WriteLock.Read()) { using (var connection = CreateConnection(true)) { var commandText = baseSelectText; var paramList = new List <object>(); var whereClauses = new List <string>(); if (!string.IsNullOrWhiteSpace(query.JobId)) { whereClauses.Add("JobId=?"); paramList.Add(query.JobId); } if (!string.IsNullOrWhiteSpace(query.ItemId)) { whereClauses.Add("ItemId=?"); paramList.Add(query.ItemId); } if (!string.IsNullOrWhiteSpace(query.TargetId)) { whereClauses.Add("TargetId=?"); paramList.Add(query.TargetId); } if (query.Statuses.Length > 0) { var statuses = string.Join(",", query.Statuses.Select(i => "'" + i.ToString() + "'").ToArray()); whereClauses.Add(string.Format("Status in ({0})", statuses)); } var whereTextWithoutPaging = whereClauses.Count == 0 ? string.Empty : " where " + string.Join(" AND ", whereClauses.ToArray()); var startIndex = query.StartIndex ?? 0; if (startIndex > 0) { whereClauses.Add(string.Format("Id NOT IN (SELECT Id FROM SyncJobItems ORDER BY JobItemIndex, DateCreated LIMIT {0})", startIndex.ToString(_usCulture))); } if (whereClauses.Count > 0) { commandText += " where " + string.Join(" AND ", whereClauses.ToArray()); } commandText += " ORDER BY JobItemIndex, DateCreated"; if (query.Limit.HasValue) { commandText += " LIMIT " + query.Limit.Value.ToString(_usCulture); } var list = new List <T>(); var count = connection.Query("select count (Id) from SyncJobItems" + whereTextWithoutPaging, paramList.ToArray()) .SelectScalarInt() .First(); foreach (var row in connection.Query(commandText, paramList.ToArray())) { list.Add(itemFactory(row)); } return(new QueryResult <T>() { Items = list.ToArray(), TotalRecordCount = count }); } } }
public Dictionary <string, SyncedItemProgress> GetSyncedItemProgresses(SyncJobItemQuery query) { var result = new Dictionary <string, SyncedItemProgress>(); using (var connection = CreateConnection(true).Result) { using (var cmd = connection.CreateCommand()) { cmd.CommandText = "select ItemId,Status,Progress from SyncJobItems"; var whereClauses = new List <string>(); if (!string.IsNullOrWhiteSpace(query.TargetId)) { whereClauses.Add("TargetId=@TargetId"); cmd.Parameters.Add(cmd, "@TargetId", DbType.String).Value = query.TargetId; } if (query.Statuses.Length > 0) { var statuses = string.Join(",", query.Statuses.Select(i => "'" + i.ToString() + "'").ToArray()); whereClauses.Add(string.Format("Status in ({0})", statuses)); } if (whereClauses.Count > 0) { cmd.CommandText += " where " + string.Join(" AND ", whereClauses.ToArray()); } using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult)) { while (reader.Read()) { var itemId = reader.GetString(0); if (!reader.IsDBNull(1)) { var status = (SyncJobItemStatus)Enum.Parse(typeof(SyncJobItemStatus), reader.GetString(1), true); if (status == SyncJobItemStatus.Synced) { result[itemId] = new SyncedItemProgress { Status = SyncJobItemStatus.Synced }; } else { SyncedItemProgress currentStatus; double progress = reader.IsDBNull(2) ? 0.0 : reader.GetDouble(2); if (!result.TryGetValue(itemId, out currentStatus) || (currentStatus.Status != SyncJobItemStatus.Synced && progress >= currentStatus.Progress)) { result[itemId] = new SyncedItemProgress { Status = status, Progress = progress }; } } } } } } } return(result); }