in CommandLine/XblConnectedStorage/Program.cs [85:151]
private static async Task<int> OnDownload(Options options)
{
string gamertag = options.GamerTag;
Guid scid = options.ServiceConfigurationId;
string sandbox = options.Sandbox;
List<TitleBlobInfo> savedGameInfos = await ConnectedStorage.ListSavedGamesAsync(gamertag, scid.ToString(), sandbox, string.Empty, 0, 0);
if (savedGameInfos.Count == 0)
{
Console.WriteLine("No saves found.");
return 0;
}
Directory.CreateDirectory(Path.GetDirectoryName(options.OutputFile));
XmlWriterSettings xmlWriterSettings = new XmlWriterSettings()
{
Indent = true
};
using (XmlWriter xbStorageXmlWriter = XmlWriter.Create(options.OutputFile, xmlWriterSettings))
{
xbStorageXmlWriter.WriteStartDocument();
xbStorageXmlWriter.WriteStartElement("XbConnectedStorageSpace");
xbStorageXmlWriter.WriteStartElement("ContextDescription");
xbStorageXmlWriter.WriteStartElement("Account");
xbStorageXmlWriter.WriteAttributeString("msa", "change@me.com");
xbStorageXmlWriter.WriteEndElement(); // Account
xbStorageXmlWriter.WriteStartElement("Title");
xbStorageXmlWriter.WriteAttributeString("scid", scid.ToString());
xbStorageXmlWriter.WriteEndElement(); // Title
xbStorageXmlWriter.WriteEndElement(); // ContextDescription
xbStorageXmlWriter.WriteStartElement("Data");
xbStorageXmlWriter.WriteStartElement("Containers");
foreach (TitleBlobInfo savedGameInfo in savedGameInfos)
{
string savedGameName = savedGameInfo.FileName.Substring(0, savedGameInfo.FileName.IndexOf(','));
xbStorageXmlWriter.WriteStartElement("Container");
xbStorageXmlWriter.WriteAttributeString("name", savedGameName);
xbStorageXmlWriter.WriteStartElement("Blobs");
SavedGameV2Response savedGame = await ConnectedStorage.DownloadSavedGameAsync(gamertag, scid, sandbox, savedGameName);
foreach (ExtendedAtomInfo atomInfo in savedGame.Atoms)
{
xbStorageXmlWriter.WriteStartElement("Blob");
xbStorageXmlWriter.WriteAttributeString("name", atomInfo.Name);
byte[] atomContent = await ConnectedStorage.DownloadAtomAsync(gamertag, scid, sandbox, atomInfo.Atom);
xbStorageXmlWriter.WriteCData(Convert.ToBase64String(atomContent));
xbStorageXmlWriter.WriteEndElement(); // Blob
}
xbStorageXmlWriter.WriteEndElement(); // Blobs
}
xbStorageXmlWriter.WriteEndElement(); // Containers
xbStorageXmlWriter.WriteEndElement(); // Data
xbStorageXmlWriter.WriteEndElement(); // XbConnectedStorageSpace
}
Console.WriteLine($"Operation complete. Downloaded {savedGameInfos.Count} save containers to {options.OutputFile}.");
return 0;
}