private static async Task BackupCharacters(string backupPath, User user, Campaign campaign, IList <Character> characters) { Console.WriteLine($"Backing up characters:"); var charactersPath = Path.Combine(backupPath, "Characters"); Directory.CreateDirectory(charactersPath); using (WebClient webClient = new WebClient()) using (DungeonPbEM.DungeonXMLSoapChannel service = channelFactory.CreateChannel()) { foreach (Character character in characters) { Console.WriteLine($" * {character.Name}"); var body = new DungeonPbEM.GetCharacterSheetRequestBody(user.ID, campaign.ID, 0, character.ID); var response = await service.GetCharacterSheetAsync(new DungeonPbEM.GetCharacterSheetRequest(body)); var sheetPath = Path.Combine(charactersPath, $"{character.Name}.xml"); File.WriteAllText(sheetPath, response.Body.GetCharacterSheetResult.OuterXml); var avatarUri = new Uri($"http://www.dungeonpbem.net/Image/Character/{character.FileName}"); var avatarPath = Path.Combine(charactersPath, character.FileName); await webClient.DownloadFileTaskAsync(avatarUri, avatarPath); } } }
private static async Task <IList <Campaign> > GetCampaigns(User user) { Console.Write("Getting user's campaigns... "); IList <Campaign> campaigns; using (DungeonPbEM.DungeonXMLSoapChannel service = channelFactory.CreateChannel()) { var body = new DungeonPbEM.GetCampaignListRequestBody(user.ID); var response = await service.GetCampaignListAsync(new DungeonPbEM.GetCampaignListRequest(body)); campaigns = Campaign.FromResponse(response); } Console.WriteLine("done!"); // Only active campaigns where the user is the dungeon master can be backed up campaigns = campaigns.Where(c => c.IsActive && c.IsDungeonMaster).ToList(); if (campaigns.Any()) { foreach (Campaign campaign in campaigns) { Console.WriteLine($"[{campaign.ID}] {campaign.Name}"); } } else { campaigns = null; Console.WriteLine("No campaigns are available for backing up."); } return(campaigns); }
private static async Task BackupPosts(string backupPath, User user, Campaign campaign) { Console.WriteLine($"Backing up posts:"); var postsPath = Path.Combine(backupPath, "Posts"); Directory.CreateDirectory(postsPath); using (DungeonPbEM.DungeonXMLSoapChannel service = channelFactory.CreateChannel()) { const byte quantity = 25; const ushort summaryLength = 100; ushort page = 1; bool done = false; do { Console.Write($" * Page {page}"); IList <Post> posts; { var body = new DungeonPbEM.GetPostListRequestBody(user.ID, campaign.ID, 0, page, quantity, summaryLength); var response = await service.GetPostListAsync(new DungeonPbEM.GetPostListRequest(body)); posts = Post.FromResponse(response); done = response.Body.GetPostListResult.ChildNodes.Count < quantity; } foreach (var post in posts) { Console.Write("."); var body = new DungeonPbEM.GetPostSingleRequestBody(user.ID, campaign.ID, 0, post.ID); var response = await service.GetPostSingleAsync(new DungeonPbEM.GetPostSingleRequest(body)); var postPath = Path.Combine(postsPath, $"{post.ID}.xml"); File.WriteAllText(postPath, response.Body.GetPostSingleResult.InnerXml); File.SetCreationTime(postPath, post.CreatedAt); File.SetLastWriteTime(postPath, post.UpdatedAt); } Console.WriteLine(); page++; }while (!done); } }
private static async Task <IList <Character> > GetCharacters(User user, Campaign campaign) { Console.Write("Getting campaign's characters... "); IList <Character> characters; using (DungeonPbEM.DungeonXMLSoapChannel service = channelFactory.CreateChannel()) { var body = new DungeonPbEM.GetCampaignPCListRequestBody(user.ID, campaign.ID); var response = await service.GetCampaignPCListAsync(new DungeonPbEM.GetCampaignPCListRequest(body)); characters = Character.FromResponse(response); } Console.WriteLine("done!"); return(characters); }
private static async Task <User> Login() { Console.Write("Please enter your username: "******"Please enter your password: "******"Logged in as '{user.DisplayName}'"); return(user); }