internal Update(ServerSyncUpdateData serverSyncUpdateData) { Identity = new Identity(serverSyncUpdateData.Id); }
/// <summary> /// Return metadata for updates /// </summary> /// <param name="request">The request; contains IDs for updates to retrieve metadata for</param> /// <returns>Update metadata for requested updates</returns> public Task <ServerUpdateData> GetUpdateDataAsync(GetUpdateDataRequest request) { var response = new ServerUpdateData(); // Make sure the request is not larger than the config says var updateRequestCount = request.GetUpdateData.updateIds.Count(); if (updateRequestCount > ServiceConfiguration.MaxNumberOfUpdatesPerRequest) { return(null); } var returnUpdatesList = new List <ServerSyncUpdateData>(); var returnFilesList = new List <ServerSyncUrlData>(); foreach (var rawIdentity in request.GetUpdateData.updateIds) { var updateIdentity = new Identity(rawIdentity); // Find the update; it can be either category or update Update update; if (!FilteredUpdates.TryGetValue(updateIdentity, out update)) { if ((update = Categories.First(c => c.Identity.Equals(updateIdentity))) == null) { throw new Exception("Update not found"); } } if (update.HasFiles) { // if update contains files, we must also gather file information foreach (var updateFile in update.Files) { returnFilesList.Add( new ServerSyncUrlData() { FileDigest = Convert.FromBase64String(updateFile.Digests[0].DigestBase64), MUUrl = updateFile.Urls[0].MuUrl, UssUrl = $"Content/{updateFile.GetContentDirectoryName()}/{updateFile.FileName}" }); } } var rawUpdateData = new ServerSyncUpdateData(); rawUpdateData.Id = rawIdentity; using (var metadataReader = new StreamReader(MetadataSource.GetUpdateMetadataStream(update.Identity))) { rawUpdateData.XmlUpdateBlob = metadataReader.ReadToEnd(); } returnUpdatesList.Add(rawUpdateData); } response.updates = returnUpdatesList.ToArray(); // Deduplicate list of files response.fileUrls = returnFilesList.GroupBy(f => f.MUUrl).Select(k => k.First()).ToArray(); return(Task.FromResult(response)); }