2020-07-02 19:39:14 +02:00
using Blazored.Modal ;
using Blazored.Modal.Services ;
2020-04-24 00:18:16 +02:00
using Microsoft.AspNetCore.Components ;
2020-07-06 01:00:48 +02:00
using Microsoft.JSInterop ;
2020-04-13 23:58:26 +02:00
using Seenginx.Models ;
using Seenginx.Services ;
2020-07-02 19:39:14 +02:00
using Seenginx.Shared ;
using Seenginx.Utility ;
2020-04-13 23:58:26 +02:00
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Threading.Tasks ;
namespace Seenginx.Pages
{
public class NginxBase : ComponentBase
{
2020-07-02 19:39:14 +02:00
[Inject] public INginxService NginxService { get ; set ; }
2020-07-27 21:31:23 +02:00
[CascadingParameter] public IModalService Modal { get ; set ; }
2020-04-13 23:58:26 +02:00
public string InputSearch { get ; set ; }
public List < ConfigFile > ConfigFiles { get ; set ; } = new List < ConfigFile > ( ) ;
2020-04-16 18:50:05 +02:00
public ConfigFile SelectedFile { get ; set ; }
public List < int > FilteredOutFiles { get ; set ; } = new List < int > ( ) ;
2020-07-02 09:15:33 +02:00
public NotificationSettings GeneralNotificationSettings { get ; set ; } = null ;
2020-07-02 19:39:14 +02:00
public List < Template > Templates { get ; set ; } = new List < Template > ( ) ;
2020-04-16 18:50:05 +02:00
2020-07-01 19:36:22 +02:00
protected override async Task OnParametersSetAsync ( )
2020-04-13 23:58:26 +02:00
{
2020-07-01 19:36:22 +02:00
try
{
ConfigFiles . AddRange ( await NginxService . GetFilesAsync ( ) ) ;
2020-07-02 19:39:14 +02:00
Templates . AddRange ( await NginxService . GetTemplates ( ) ) ;
2020-07-01 19:36:22 +02:00
}
catch ( Exception ex )
{
throw ex ;
}
await base . OnParametersSetAsync ( ) ;
2020-04-13 23:58:26 +02:00
}
2020-07-01 19:36:22 +02:00
public void SelectedFileChanged ( ConfigFile configFile )
2020-04-16 18:50:05 +02:00
{
SelectedFile = configFile ;
2020-04-13 23:58:26 +02:00
}
2020-07-06 18:01:01 +02:00
public async Task AddFileModal ( )
2020-04-24 00:18:16 +02:00
{
2020-07-02 19:39:14 +02:00
var parameters = new ModalParameters ( ) ;
parameters . Add ( nameof ( Templates ) , Templates ) ;
var resultAwait = Modal . Show < NginxConfigForm > ( string . Empty , parameters ) ;
var result = await resultAwait . Result ;
if ( result . Cancelled ) return ;
2020-07-01 19:36:22 +02:00
2020-07-06 18:01:01 +02:00
var validationResult = await NginxService . ValidateForAddFileAsync ( ( NewFileForm ) result . Data ) ;
2020-07-02 19:39:14 +02:00
if ( ! validationResult . AllOk )
{
var validationPopupParameters = new ModalParameters ( ) . Setup ( PopupType . Ok , validationResult . ErrorMessage ) ;
var validationPopup = Modal . Show < GenericPopup > ( string . Empty , validationPopupParameters ) ;
await validationPopup . Result ;
validationPopup . Close ( ) ;
return ;
}
2020-07-01 19:36:22 +02:00
2020-07-02 19:39:14 +02:00
var addFileResult = await NginxService . AddFileAsync ( ( NewFileForm ) result . Data ) ;
if ( SelectedFile ! = null )
SelectedFile . Deselect ( ) ;
2020-07-01 19:36:22 +02:00
ConfigFiles . Add ( addFileResult . Data ) ;
ConfigFiles = ConfigFiles . OrderBy ( cf = > cf . Name ) . ToList ( ) ;
2020-07-02 19:39:14 +02:00
SelectedFile = ConfigFiles . Find ( cf = > cf . Name = = addFileResult . Data . Name ) ;
SelectedFile . Select ( ) ;
2020-04-24 00:18:16 +02:00
}
2020-07-06 18:01:01 +02:00
public async Task RenameFileModal ( )
{
var parameters = new ModalParameters ( ) ;
parameters . Add ( nameof ( RenameForm . Name ) , SelectedFile . Name ) ;
var resultAwait = Modal . Show < RenameForm > ( string . Empty , parameters ) ;
var result = await resultAwait . Result ;
if ( result . Cancelled ) return ;
var validationResult = await NginxService . ValidateForRenameFileAsync ( ConfigFiles , SelectedFile , result . Data . ToString ( ) ) ;
if ( ! validationResult . AllOk )
{
2020-07-29 01:31:32 +02:00
var popupAwait = Modal . Show < GenericPopup > ( string . Empty , new ModalParameters ( ) . Setup ( PopupType . Ok , validationResult . ErrorMessage ) ) ;
2020-07-06 18:01:01 +02:00
await popupAwait . Result ;
return ;
}
var renameResult = await NginxService . RenameFileAsync ( SelectedFile , $"{result.Data}.conf" ) ;
if ( ! renameResult . AllOk )
{
2020-07-29 01:31:32 +02:00
var popupAwait = Modal . Show < GenericPopup > ( string . Empty , new ModalParameters ( ) . Setup ( PopupType . Ok , renameResult . ErrorMessage ) ) ;
2020-07-06 18:01:01 +02:00
await popupAwait . Result ;
return ;
}
SelectedFile . Name = result . Data . ToString ( ) ;
2020-07-30 00:42:02 +02:00
SelectedFile . FullPath = renameResult . Data . FullPath ;
2020-07-06 18:01:01 +02:00
}
2020-07-06 01:00:48 +02:00
public async Task SaveFileAsync ( )
2020-04-16 18:50:05 +02:00
{
2020-07-06 18:01:01 +02:00
var validationResult = await NginxService . ValidateForSaveFileAsync ( SelectedFile ) ;
if ( ! validationResult . AllOk )
{
await Modal . Show < GenericPopup > ( string . Empty , new ModalParameters ( ) . Setup ( PopupType . Ok , validationResult . ErrorMessage ) ) . Result ;
return ;
}
var saveResult = await NginxService . SaveFileAsync ( SelectedFile ) ;
if ( ! saveResult . AllOk )
{
await Modal . Show < GenericPopup > ( string . Empty , new ModalParameters ( ) . Setup ( PopupType . Ok , saveResult . ErrorMessage ) ) . Result ;
return ;
}
2020-04-16 18:50:05 +02:00
}
2020-05-02 18:57:42 +02:00
2020-07-06 01:00:48 +02:00
public async Task SaveDraftFileAsync ( )
2020-05-03 02:10:32 +02:00
{
2020-07-29 01:31:32 +02:00
//var validationResult = await NginxService.ValidateForSaveDraftFileAsync(SelectedFile);
2020-07-06 18:01:01 +02:00
2020-07-29 01:31:32 +02:00
//if (!validationResult.AllOk)
//{
// await Modal.Show<GenericPopup>(string.Empty, new ModalParameters().Setup(PopupType.Ok, validationResult.ErrorMessage)).Result;
// return;
//}
2020-07-06 18:01:01 +02:00
var saveDraftResult = await NginxService . SaveDraftFileAsync ( SelectedFile ) ;
if ( ! saveDraftResult . AllOk )
{
await Modal . Show < GenericPopup > ( string . Empty , new ModalParameters ( ) . Setup ( PopupType . Ok , saveDraftResult . ErrorMessage ) ) . Result ;
return ;
}
2020-05-03 02:10:32 +02:00
}
2020-05-02 18:57:42 +02:00
2020-05-03 02:10:32 +02:00
public async Task TestConfiguration ( )
{
2020-07-29 01:31:32 +02:00
var testResult = await NginxService . TestFileAsync ( SelectedFile ) ;
2020-07-02 19:39:14 +02:00
2020-07-29 01:31:32 +02:00
if ( ! testResult . AllOk )
{
await Modal . Show < GenericPopup > ( string . Empty , new ModalParameters ( ) . Setup ( PopupType . Ok , $"{testResult.ErrorMessage}, ex [{testResult.Exception.Message}]" ) ) . Result ;
return ;
}
await Modal . Show < GenericPopup > ( string . Empty , new ModalParameters ( ) . Setup ( PopupType . Ok , testResult . Data ) ) . Result ;
2020-05-03 02:10:32 +02:00
}
2020-05-02 18:57:42 +02:00
2020-07-02 19:39:14 +02:00
public async Task DeleteFile ( )
2020-04-16 18:50:05 +02:00
{
2020-07-02 19:39:14 +02:00
var parameters = new ModalParameters ( ) . Setup ( PopupType . YesNo , $"Are you sure you want to delete '{SelectedFile.Name}'?" ) ;
var resultAwait = Modal . Show < GenericPopup > ( string . Empty , parameters ) ;
var result = await resultAwait . Result ;
if ( ( PopupAnswer ) result . Data = = PopupAnswer . No ) return ;
2020-07-06 01:00:48 +02:00
var deleteFileResult = await NginxService . DeleteFileAsync ( SelectedFile ) ;
2020-07-02 19:39:14 +02:00
if ( ! deleteFileResult . AllOk )
2020-07-02 09:15:33 +02:00
{
2020-07-02 19:39:14 +02:00
var errorParameters = new ModalParameters ( ) . Setup ( PopupType . Ok , $"Something went wrong, here's the error message: '{deleteFileResult.ErrorMessage}'?" ) ;
var errorReportModalAwait = Modal . Show < GenericPopup > ( string . Empty , errorParameters ) ;
await errorReportModalAwait . Result ;
return ;
2020-07-02 09:15:33 +02:00
}
2020-05-02 18:57:42 +02:00
2020-07-02 19:39:14 +02:00
ConfigFiles . Remove ( SelectedFile ) ;
SelectedFile = null ;
2020-05-03 02:10:32 +02:00
}
2020-04-13 23:58:26 +02:00
}
}