public async Task <string> ExportChannelsAsync(List <int> channelIdList, string filePath) { var siteContentDirectoryPath = PathUtils.Combine(DirectoryUtils.GetDirectoryPath(filePath), PathUtils.GetFileNameWithoutExtension(filePath)); DirectoryUtils.DeleteDirectoryIfExists(siteContentDirectoryPath); DirectoryUtils.CreateDirectoryIfNotExists(siteContentDirectoryPath); var allChannelIdList = new List <int>(); foreach (var channelId in channelIdList) { if (!allChannelIdList.Contains(channelId)) { allChannelIdList.Add(channelId); var nodeInfo = await _databaseManager.ChannelRepository.GetAsync(channelId); var childChannelIdList = await _databaseManager.ChannelRepository.GetChannelIdsAsync(nodeInfo.SiteId, nodeInfo.Id, ScopeType.Descendant); allChannelIdList.AddRange(childChannelIdList); } } var sitePath = await _pathManager.GetSitePathAsync(_site); var siteIe = new SiteIe(_pathManager, _databaseManager, _caching, _site, siteContentDirectoryPath); foreach (var channelId in allChannelIdList) { await siteIe.ExportAsync(_site, channelId, true); } var imageUploadDirectoryPath = PathUtils.Combine(siteContentDirectoryPath, _site.ImageUploadDirectoryName); DirectoryUtils.DeleteDirectoryIfExists(imageUploadDirectoryPath); DirectoryUtils.Copy(PathUtils.Combine(sitePath, _site.ImageUploadDirectoryName), imageUploadDirectoryPath); var videoUploadDirectoryPath = PathUtils.Combine(siteContentDirectoryPath, _site.VideoUploadDirectoryName); DirectoryUtils.DeleteDirectoryIfExists(videoUploadDirectoryPath); DirectoryUtils.Copy(PathUtils.Combine(sitePath, _site.VideoUploadDirectoryName), videoUploadDirectoryPath); var fileUploadDirectoryPath = PathUtils.Combine(siteContentDirectoryPath, _site.FileUploadDirectoryName); DirectoryUtils.DeleteDirectoryIfExists(fileUploadDirectoryPath); DirectoryUtils.Copy(PathUtils.Combine(sitePath, _site.FileUploadDirectoryName), fileUploadDirectoryPath); AtomFeed feed = AtomUtility.GetEmptyFeed(); var entry = AtomUtility.GetEmptyEntry(); AtomUtility.AddDcElement(entry.AdditionalElements, "ImageUploadDirectoryName", _site.ImageUploadDirectoryName); AtomUtility.AddDcElement(entry.AdditionalElements, "VideoUploadDirectoryName", _site.VideoUploadDirectoryName); AtomUtility.AddDcElement(entry.AdditionalElements, "FileUploadDirectoryName", _site.FileUploadDirectoryName); feed.Entries.Add(entry); var uploadFolderPath = PathUtils.Combine(siteContentDirectoryPath, BackupUtility.UploadFolderName); DirectoryUtils.CreateDirectoryIfNotExists(uploadFolderPath); var uploadFilePath = PathUtils.Combine(uploadFolderPath, BackupUtility.UploadFileName); feed.Save(uploadFilePath); _pathManager.CreateZip(filePath, siteContentDirectoryPath); DirectoryUtils.DeleteDirectoryIfExists(siteContentDirectoryPath); return(PathUtils.GetFileName(filePath)); }