123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- using FastReport.Auth;
- using FastReport.Cloud.FastReport;
- using FastReport.Cloud.FastReport.ListViewCloud;
- using FastReport.Cloud.FastReport.Models;
- using FastReport.Cloud.FastReport.Models.DataSource;
- using FastReport.Data;
- using FastReport.Forms;
- using FastReport.Utils;
- using System;
- using System.IO;
- using System.Net;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace FastReport.Design
- {
- internal static class CloudCommands
- {
- private static bool isAborted;
- private static AuthService.AppUser User => AuthService.Instance.User;
- private static void ShowWindowUntilAuthentificatedOrAborted()
- {
- while (!User.IsAuthentificatedAndActive && !isAborted)
- {
- ShowAuthWindow();
- }
- }
- private static void ShowAuthWindow()
- {
- using (AuthForm authPage = new AuthForm())
- {
- if (authPage.ShowDialog() == DialogResult.OK)
- {
- if (!User.IsAuthentificatedAndActive)
- {
- var localizator = new MyRes("Forms,ListViewForm");
- MessageBox.Show(localizator.Get("AuthError"),
- localizator.Get("AuthErrorCaption"), MessageBoxButtons.OK);
- }
- }
- else
- {
- isAborted = true;
- }
- }
- }
- private static void CheckAndSetReportProvider()
- {
- if (ProviderManager.Provider == null || ProviderManager.Subscriptions == null ||
- ProviderManager.Subscription == null || ProviderManager.Provider != ProviderManager.Provider.Templates)
- {
- ProviderManager.SetProvider(new FRCloudProvider(AuthService.Instance), Modes.CloudFilesMode.Templates);
- }
- }
- private static CreateDataSourceVM CreateCloudConnection(DataConnectionBase data)
- {
- CreateDataSourceVM dsVM = new CreateDataSourceVM();
- if (data.ClassName.StartsWith("MsSql"))
- dsVM.ConnectionType = DataSourceConnectionType.MSSQL;
- else if (data.ClassName.StartsWith("Firebird"))
- dsVM.ConnectionType = DataSourceConnectionType.FirebirdDB;
- else if (data.ClassName.StartsWith("Mongo"))
- dsVM.ConnectionType = DataSourceConnectionType.MongoDB;
- else if (data.ClassName.StartsWith("Postgres"))
- dsVM.ConnectionType = DataSourceConnectionType.Postgres;
- else if (data.ClassName.StartsWith("Oracle"))
- dsVM.ConnectionType = DataSourceConnectionType.OracleDB;
- else if (data.ClassName.StartsWith("MySql"))
- dsVM.ConnectionType = DataSourceConnectionType.MySQL;
- else if (data.ClassName.StartsWith("Json"))
- dsVM.ConnectionType = DataSourceConnectionType.JSON;
- else if (data.ClassName.StartsWith("Xml"))
- dsVM.ConnectionType = DataSourceConnectionType.XML;
- else if (data.ClassName.ToLower().StartsWith("CSV"))
- dsVM.ConnectionType = DataSourceConnectionType.CSV;
- else
- throw new Exception("Error in creating connection");
- dsVM.ConnectionString = data.ConnectionString;
- dsVM.Name = data.Name;
- dsVM.SubscriptionId = ProviderManager.Subscription.Id;
- return dsVM;
- }
- private static FileVM SaveFile(Report report, Modes.CloudFilesMode cloudFilesMode)
- {
- if (!CheckAuthentication())
- return null;
- if (AuthService.Instance.CanRefresh)
- {
- AuthService.Instance.Refresh();
- }
- using (ListViewCloudForm form = new ListViewCloudForm())
- {
- form.Mode = Modes.FormOpenMode.SaveMode;
- FilesModeItem.FilesMode = cloudFilesMode;
- form.SetReportTextBox(report.GetReportName + FilesModeItem.ToString());
- form.ReportToSave = report;
- if (!form.OnLoad(new FRCloudProvider(AuthService.Instance)))
- {
- return null;
- }
- form.ShowDialog();
- return form.CreatedFile;
- }
- }
- // loads file using dialog window. Can be used to load either template or a prepared report.
- private static OpeningInstance LoadFileDialog(Modes.CloudFilesMode cloudFilesMode)
- {
- if (!CheckAuthentication())
- return null;
- if (AuthService.Instance.CanRefresh)
- AuthService.Instance.Refresh();
- using (ListViewCloudForm form = new ListViewCloudForm())
- {
- form.Mode = Modes.FormOpenMode.OpenMode;
- FilesModeItem.FilesMode = cloudFilesMode;
- //form.FilesMode = CloudFilesMode; // error with creating report
- while (!form.OnLoad(new FRCloudProvider(AuthService.Instance)))
- {
- ShowAuthWindow();
- if (isAborted)
- return null;
- }
- form.ShowDialog();
- return form.Instance;
- }
- }
- public static bool CheckAuthentication()
- {
- isAborted = false;
- ShowWindowUntilAuthentificatedOrAborted();
- return User.IsAuthentificatedAndActive && !isAborted;
- }
- public static FileVM SaveReportFile(Report report) => SaveFile(report, Modes.CloudFilesMode.Templates);
- public static FileVM SavePreviewFile(Report report) => SaveFile(report, Modes.CloudFilesMode.Reports);
- public static bool Resave(Report report)
- {
- CheckAndSetReportProvider();
- return FileManager.ResaveCommand(report);
- }
- public static Stream LoadPreviewFile()
- {
- var instance = LoadFileDialog(Modes.CloudFilesMode.Reports);
- return instance?.ReportStream;
- }
- // loads report template file using dialog.
- public static OpeningInstance LoadFile()
- {
- return LoadFileDialog(Modes.CloudFilesMode.Templates);
- }
- // loads specified report template file. Throws an exception if load failed.
- // This method is used by recent file list. CheckAuthentication call is required beforehand
- public static async Task<OpeningInstance> LoadFile(string key, string id)
- {
- return await Task.Run(() =>
- {
- if (AuthService.Instance.CanRefresh)
- AuthService.Instance.Refresh();
- }).ContinueWith(_ =>
- {
- CheckAndSetReportProvider();
- return new OpeningInstance((FileManager.DownloadFileCommand(id)).Stream,
- key, id, null, FileManager.GetFileCommand(id).EditedTime);
- });
- }
- public static void PreviewReport(Report report)
- {
- XmlItem xi = Config.Root.FindItem("Auth").FindItem("ConnectionInfo");
- string serverFromConfig = xi.GetProp("Server");
- string host = string.IsNullOrEmpty(serverFromConfig) ? Res.Get("Forms,ServerWindow,DefaultServerHost") : serverFromConfig;
- string uri = host + @"/staticpreview/t/" + report.CloudFileInfo.FileId;
- ProcessHelper.StartProcess(uri);
- }
- public static DataConnectionBase GetDataConnection()
- {
- if (!CheckAuthentication())
- return null;
- if (AuthService.Instance.CanRefresh)
- AuthService.Instance.Refresh();
- using (CloudDataSourceForm form = new CloudDataSourceForm())
- {
- if (!form.SetProvider())
- return null;
- form.OnLoad();
- form.ShowDialog();
- if (form.dataConnection != null)
- {
- var connection = form.dataConnection;
- connection.TablesStructure = form.tableStructure;
- connection.CloudId = form.dataSourceId;
- connection.CloudInfo.Name = form.dataConnection.Name;
- connection.CloudInfo.ConnectionString = form.dataConnection.ConnectionString;
- return connection;
- }
- }
- return null;
- }
- public static void UploadDataConnection(DataConnectionBase data)
- {
- if (!CheckAuthentication())
- return;
- CheckAndSetReportProvider();
- if (AuthService.Instance.CanRefresh)
- AuthService.Instance.Refresh();
- var dsVM = CreateCloudConnection(data);
- if (ProviderManager.DataSourcesProvider == null)
- ProviderManager.DataSourcesProvider = new FRCloudDataSourcesProvider(AuthService.Instance);
- try
- {
- if (string.IsNullOrEmpty(data.CloudId))
- DataSourceManager.CreateDataSourceCommand(dsVM);
- else
- {
- try
- {
- DataSourceManager.FetchDataCommand(data.CloudId);
- DataSourceManager.UpdateDataSourceSubscriptionCommand(data.CloudId, new UpdateDataSourceSubcriptionVM()
- {
- SubscriptionId = ProviderManager.Subscription.Id
- });
- if (data.CloudInfo.Name != data.Name)
- DataSourceManager.RenameDataSourceCommand(data.CloudId, new RenameDataSourceVM() { Name = data.Name });
- if (data.CloudInfo.ConnectionString != data.ConnectionString)
- DataSourceManager.UpdateConnectionStringCommand(data.CloudId, new UpdateDataSourceConnectionStringVM()
- {
- ConnectionString = data.ConnectionString
- });
- }
- catch (WebException exception)
- {
- if (((HttpWebResponse)exception.Response).StatusCode == HttpStatusCode.BadRequest)
- {
- MessageBox.Show(Res.Get("Forms,DataWizard,MessageBox,ErrorInvalidID"),
- Res.Get("Forms,DataWizard,MessageBox,ErrorCaption"), MessageBoxButtons.OK, MessageBoxIcon.Error);
- }
- if (((HttpWebResponse)exception.Response).StatusCode == HttpStatusCode.NotFound)
- {
- MessageBox.Show(Res.Get("Forms,DataWizard,MessageBox,Error404"),
- Res.Get("Forms,DataWizard,MessageBox,ErrorCaption"), MessageBoxButtons.OK, MessageBoxIcon.Error);
- }
- return;
- }
- }
- if (string.IsNullOrEmpty(data.CloudId))
- MessageBox.Show(Res.Get("Forms,DataWizard,MessageBox,SuccessText"),
- Res.Get("Forms,DataWizard,MessageBox,SuccessCaption"), MessageBoxButtons.OK);
- else
- MessageBox.Show(Res.Get("Forms,DataWizard,MessageBox,SuccessUpdateText"),
- Res.Get("Forms,DataWizard,MessageBox,SuccessUpdateCaption"), MessageBoxButtons.OK);
- }
- catch (Exception exception)
- {
- MessageBox.Show(Res.Get("Forms,DataWizard,MessageBox,ErrorText"),
- Res.Get("Forms,DataWizard,MessageBox,ErrorCaption"), MessageBoxButtons.OK, MessageBoxIcon.Error);
- }
- }
- }
- }
|