using System; using System.Linq; using System.Globalization; using System.Net; using System.IO; using System.Text; using System.Threading; using System.Threading.Tasks; using FastReport.Auth; using FastReport.Cloud.FastReport.Models; namespace FastReport.Cloud.FastReport { internal class FRCloudTemplatesProvider : FRCloudFilesProviderBase, IFRCloudFilesProvider { const string API_TEMPLATES_BASEPATH = "api/rp/v1/Templates"; public FRCloudTemplatesProvider(AuthService authService) : base(authService, API_TEMPLATES_BASEPATH) { } public FileVM Create(string folderId, FileCreateVM fileCreate) { var url = CreateFileURL(folderId); var request = GetHttpWebRequestContent(url, fileCreate); var result = Send(request); return result; } #if ASYNC public async Task CreateAsync(string folderId, FileCreateVM fileCreate) { var url = CreateFileURL(folderId); var request = await GetHttpWebRequestContentAsync(url, fileCreate); var result = await SendAsync(request); return result; } #endif public FileVM CreateFolder(string folderId, FolderCreateVM folderCreate) { var url = CreateFolderURL(folderId); var request = GetHttpWebRequestContent(url, folderCreate); var result = Send(request); return result; } #if ASYNC public async Task CreateFolderAsync(string folderId, FolderCreateVM folderCreate) { var url = CreateFolderURL(folderId); var request = await GetHttpWebRequestContentAsync(url, folderCreate); var result = await SendAsync(request); return result; } #endif public void Delete(FileVM folderOrFile) { string url = DeleteURL(folderOrFile); var request = GetHttpWebRequest(url, method: HttpMethod.Delete); Send(request); } #if ASYNC public async Task DeleteAsync(FileVM folderOrFile) { string url = DeleteURL(folderOrFile); var request = GetHttpWebRequest(url, method: HttpMethod.Delete); await SendAsync(request); } #endif public FileResponse Download(string id) { string url = "download/t/" + id; var request = GetHttpWebRequest(url, accept: "text/plain"); var result = DownloadFile(request); return result; } #if ASYNC public async Task DownloadAsync(string id) { string url = "download/t/" + id; var request = GetHttpWebRequest(url, accept: "text/plain"); var result = await DownloadFileAsync(request); return result; } #endif public FilesVM GetFoldersAndFiles(string folderId, SearchOptions options = null) { var url = GetFoldersAndFilesURL(folderId, options); var request = GetHttpWebRequest(url); var result = Send(request); return result; } #if ASYNC public async Task GetFoldersAndFilesAsync(string folderId, SearchOptions options = null) { var url = GetFoldersAndFilesURL(folderId, options); var request = GetHttpWebRequest(url); var result = await SendAsync(request); return result; } #endif public FileVM Rename(FileVM folderOrFile, RenameVM newName) { string url = RenameURL(folderOrFile); var request = GetHttpWebRequestContent(url, newName, method: HttpMethod.Put); var result = Send(request); return result; } #if ASYNC public async Task RenameAsync(FileVM folderOrFile, RenameVM newName) { string url = RenameURL(folderOrFile); var request = await GetHttpWebRequestContentAsync(url, newName, method: HttpMethod.Put); var result = await SendAsync(request); return result; } #endif private static string ResaveURL(string id) { var urlBuilder_ = new StringBuilder(); urlBuilder_.Append(API_TEMPLATES_BASEPATH).Append("/File/{id}/Content"); urlBuilder_.Replace("{id}", id); var url_ = urlBuilder_.ToString(); return url_; } public void Resave(string id, FileCreateVM updatedFile) { string url = ResaveURL(id); var request = GetHttpWebRequestContent(url, updatedFile, method: HttpMethod.Put); Send(request); } #if ASYNC public async Task ResaveAsync(string id, FileCreateVM updatedFile) { string url = ResaveURL(id); var request = await GetHttpWebRequestContentAsync(url, updatedFile, method: HttpMethod.Put); await SendAsync(request); } #endif public FileVM GetFile(string id) { string url = GetFileURL(id); var request = GetHttpWebRequest(url); var result = Send(request); return result; } #if ASYNC public async Task GetFileAsync(string id) { string url = GetFileURL(id); var request = GetHttpWebRequest(url); var result = await SendAsync(request); return result; } #endif } }