using System; using System.Linq; using System.Globalization; using System.Text; using System.Threading; using System.Threading.Tasks; using FastReport.Auth; using FastReport.Cloud.FastReport.Models; using System.Net; using System.IO; namespace FastReport.Cloud.FastReport { internal sealed class FRCloudReportsProvider : FRCloudFilesProviderBase, IFRCloudFilesProvider { const string API_REPORTS_BASEPATH = "api/rp/v1/Reports"; public FRCloudReportsProvider(AuthService authService) : base(authService, API_REPORTS_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) { var urlBuilder_ = new StringBuilder(); urlBuilder_.Append("download/r/").Append(id); var url_ = urlBuilder_.ToString(); var request = GetHttpWebRequest(url_, accept: "text/plain"); var result = DownloadFile(request); return result; } #if ASYNC public async Task DownloadAsync(string id) { var urlBuilder_ = new StringBuilder(); urlBuilder_.Append("download/r/").Append(id); var url_ = urlBuilder_.ToString(); 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 // Resave doesn't work for .fpx public void Resave(string id, FileCreateVM updatedFile) { throw new NotImplementedException(); } #if ASYNC public Task ResaveAsync(string id, FileCreateVM updatedFile) { throw new NotImplementedException(); } #endif // not supported for .fpx reports FileVM IFRCloudFilesProvider.GetFile(string id) { throw new NotImplementedException(); } #if ASYNC Task IFRCloudFilesProvider.GetFileAsync(string id) { throw new NotImplementedException(); } #endif } }