diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index d15b8ec8..1996d2b4 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,23 +1,28 @@
**What is this Pull-Request about**
+
What did get fixed.
What was extended or implemented.
What did you change.
**What issue is this Pull-Request solving**
+
As example type `closes #` or `fixing #`.
** How hat this been tested? **
+
Which tests did you run to verify your changes?
* [x] Test A
* [ ] Test B
** Checklist **
+
* [ ] **IMPORTANT** I have checked that this pull request is targeting the develop branch
-* [ ] I have reviewed my code
-* [ ] I have added all the required summary tests
+* [ ] I have reviewed my code
+* [ ] I have added all the required summary blocks to my classes, methods and variables/fields
**Special information required for reviewing or testing**
+
Write down any special information the reviewer could need for his or her review or any information to test this Pull-Request.
Please write comments on the `changed files` tab to the code if you want to explain something more into detail to the reviewers.
\ No newline at end of file
diff --git a/.github/Screenshots/ActivateHotfolder.png b/.github/Screenshots/ActivateHotfolder.png
new file mode 100644
index 00000000..040859d1
Binary files /dev/null and b/.github/Screenshots/ActivateHotfolder.png differ
diff --git a/.github/Screenshots/AddPathToFile.png b/.github/Screenshots/AddPathToFile.png
index f21caae4..935c8754 100644
Binary files a/.github/Screenshots/AddPathToFile.png and b/.github/Screenshots/AddPathToFile.png differ
diff --git a/.github/Screenshots/ConverterSelection.png b/.github/Screenshots/ConverterSelection.png
new file mode 100644
index 00000000..1b783760
Binary files /dev/null and b/.github/Screenshots/ConverterSelection.png differ
diff --git a/.github/Screenshots/GeneralHotfolderSettings.png b/.github/Screenshots/GeneralHotfolderSettings.png
new file mode 100644
index 00000000..616f0d12
Binary files /dev/null and b/.github/Screenshots/GeneralHotfolderSettings.png differ
diff --git a/.github/Screenshots/InstallationFolder.png b/.github/Screenshots/InstallationFolder.png
new file mode 100644
index 00000000..f7c642c2
Binary files /dev/null and b/.github/Screenshots/InstallationFolder.png differ
diff --git a/.github/Screenshots/JsonExample.png b/.github/Screenshots/JsonExample.png
new file mode 100644
index 00000000..0d6802e7
Binary files /dev/null and b/.github/Screenshots/JsonExample.png differ
diff --git a/.github/Screenshots/ModeSelection.png b/.github/Screenshots/ModeSelection.png
index f39923ad..847957db 100644
Binary files a/.github/Screenshots/ModeSelection.png and b/.github/Screenshots/ModeSelection.png differ
diff --git a/.github/Screenshots/OpenPluginManager.png b/.github/Screenshots/OpenPluginManager.png
new file mode 100644
index 00000000..f84cc2dd
Binary files /dev/null and b/.github/Screenshots/OpenPluginManager.png differ
diff --git a/.github/Screenshots/OpenSettings.png b/.github/Screenshots/OpenSettings.png
new file mode 100644
index 00000000..aafe52ce
Binary files /dev/null and b/.github/Screenshots/OpenSettings.png differ
diff --git a/.github/Screenshots/PluginFolder.png b/.github/Screenshots/PluginFolder.png
new file mode 100644
index 00000000..7cdbcdf2
Binary files /dev/null and b/.github/Screenshots/PluginFolder.png differ
diff --git a/.github/Screenshots/PluginSelected.png b/.github/Screenshots/PluginSelected.png
new file mode 100644
index 00000000..c221ab7f
Binary files /dev/null and b/.github/Screenshots/PluginSelected.png differ
diff --git a/.github/Screenshots/SelectButton.png b/.github/Screenshots/SelectButton.png
index 1536aa72..cb2b14dc 100644
Binary files a/.github/Screenshots/SelectButton.png and b/.github/Screenshots/SelectButton.png differ
diff --git a/.github/workflows/CheckPullRequest.yml b/.github/workflows/CheckPullRequest.yml
new file mode 100644
index 00000000..d6a6688e
--- /dev/null
+++ b/.github/workflows/CheckPullRequest.yml
@@ -0,0 +1,21 @@
+name: Check pull request
+
+on: [pull_request]
+
+jobs:
+ build:
+ name: Check pull request
+ runs-on: windows-latest
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v2
+ - name: Install nuget
+ uses: nuget/setup-nuget@v1
+ - name: Nuget restore
+ run: nuget restore
+ shell: powershell
+ - name: Setup msbuild
+ uses: microsoft/setup-msbuild@v1.0.0
+ - name: Build project
+ run: msbuild /t:Build /p:Configuration=Release
+ shell: powershell
\ No newline at end of file
diff --git a/.github/workflows/CreateLiveBuild.yml b/.github/workflows/CreateLiveBuild.yml
new file mode 100644
index 00000000..fa6080c2
--- /dev/null
+++ b/.github/workflows/CreateLiveBuild.yml
@@ -0,0 +1,75 @@
+name: Live build
+
+on:
+ push:
+ tags:
+ - '*'
+
+jobs:
+ build:
+ name: Create live versioned build artifact
+ runs-on: windows-latest
+ steps:
+ - name: Clone Repository
+ uses: actions/checkout@v2
+ with:
+ ref: master
+ - name: Get Current Tag
+ run: echo "::set-env name=tag::$(($env:GITHUB_REF -split '/')[-1] -replace ' ','')"
+ - name: Install NuGet
+ uses: nuget/setup-nuget@v1
+ - name: Install msbuild
+ uses: microsoft/setup-msbuild@v1.0.0
+ - name: Build Project
+ run: |
+ nuget restore
+ echo $env:tag > .\XmlFormatter\Version.txt
+ msbuild /t:Build /p:Configuration=Release
+ shell: powershell
+ - name: Create Artifacts
+ run: |
+ $xmlFormatter = -join($env:tag, "_XmlFormatter.zip")
+ $jsonPlugin = -join($env:tag, "_JsonPlugin.zip")
+ echo "::set-env name=xmlFormatter::$($xmlFormatter)"
+ echo "::set-env name=jsonPlugin::$($JsonPlugin)"
+ mkdir ..\Artifacts
+ mkdir ..\Artifacts\XmlFormatter\
+ mkdir ..\Artifacts\JsonPlugin\
+ mv .\XmlFormatter\bin\Release\** ..\Artifacts\XmlFormatter\
+ mv LICENSE ..\Artifacts\XmlFormatter\
+ cd ..\Artifacts\
+ mv .\XmlFormatter\Plugins\*Json*.dll .\JsonPlugin\
+ 7z a $xmlFormatter .\XmlFormatter\**
+ 7z a $jsonPlugin .\JsonPlugin\**
+ shell: powershell
+ - name: Create Release
+ id: create_release
+ uses: actions/create-release@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ tag_name: ${{ github.ref }}
+ release_name: Release - ${{ env.tag }}
+ body: Body goes here!
+ draft: true
+ prerelease: false
+ - name: Upload XmlFormatter Release Asset
+ id: upload-application-release-asset
+ uses: actions/upload-release-asset@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
+ asset_path: ..\Artifacts\${{ env.xmlFormatter }}
+ asset_name: ${{ env.xmlFormatter }}
+ asset_content_type: application/zip
+ - name: Upload JsonPlugin Release Asset
+ id: upload-plugin-release-asset
+ uses: actions/upload-release-asset@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
+ asset_path: ..\Artifacts\${{ env.jsonPlugin }}
+ asset_name: ${{ env.jsonPlugin }}
+ asset_content_type: application/zip
\ No newline at end of file
diff --git a/.github/workflows/LatestBuild.yml b/.github/workflows/LatestBuild.yml
new file mode 100644
index 00000000..ccdd5c33
--- /dev/null
+++ b/.github/workflows/LatestBuild.yml
@@ -0,0 +1,68 @@
+name: Latest unstable build
+
+on:
+ pull_request:
+ types: [closed]
+
+jobs:
+ build:
+ if: github.event.pull_request.merged == true
+ name: Create latest build artifact
+ runs-on: windows-latest
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v2
+ with:
+ ref: develop
+ - name: Install nuget
+ uses: nuget/setup-nuget@v1
+ - name: Setup msbuild
+ uses: microsoft/setup-msbuild@v1.0.0
+ - name: Build project
+ run: |
+ nuget restore
+ msbuild /t:Build /p:Configuration=Release
+ shell: powershell
+ - name: Create artifacts
+ run: |
+ mkdir ..\Artifacts
+ mkdir ..\Artifacts\XmlFormatter\
+ mkdir ..\Artifacts\JsonPlugin\
+ mv .\XmlFormatter\bin\Release\** ..\Artifacts\XmlFormatter\
+ mv LICENSE ..\Artifacts\XmlFormatter\
+ cd ..\Artifacts\
+ mv .\XmlFormatter\Plugins\*Json*.dll .\JsonPlugin\
+ 7z a LatestDevelopment_XmlFormatter.zip .\XmlFormatter\**
+ 7z a LatestDevelopment_JsonPlugin.zip .\JsonPlugin\**
+ shell: powershell
+ - name: Create Release
+ id: create_release
+ uses: actions/create-release@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ tag_name: ${{ github.ref }}-${{ GITHUB.RUN_NUMBER }}
+ release_name: Latest unstable
+ body: You cannot update this version from within the application!
+ draft: false
+ prerelease: true
+ - name: Upload XmlFormatter Release Asset
+ id: upload-application-release-asset
+ uses: actions/upload-release-asset@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
+ asset_path: ..\Artifacts\LatestDevelopment_XmlFormatter.zip
+ asset_name: LatestDevelopment_XmlFormatter.zip
+ asset_content_type: application/zip
+ - name: Upload Json Plugin Release Asset
+ id: upload-plugin-release-asset
+ uses: actions/upload-release-asset@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
+ asset_path: ..\Artifacts\LatestDevelopment_JsonPlugin.zip
+ asset_name: LatestDevelopment_JsonPlugin.zip
+ asset_content_type: application/zip
diff --git a/CorePlugin/CorePlugin.csproj b/CorePlugin/CorePlugin.csproj
new file mode 100644
index 00000000..bf2c8c55
--- /dev/null
+++ b/CorePlugin/CorePlugin.csproj
@@ -0,0 +1,63 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {3E81CFB2-ADEE-4B81-BC13-F6CE8546F9C9}
+ Library
+ Properties
+ CorePlugin
+ CorePlugin
+ v4.7.2
+ 512
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\packages\Octokit.0.47.0\lib\net46\Octokit.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {9808f069-6dc1-4c26-a434-16630fc697e8}
+ PluginFramework
+
+
+
+
\ No newline at end of file
diff --git a/CorePlugin/Properties/AssemblyInfo.cs b/CorePlugin/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..c32bb472
--- /dev/null
+++ b/CorePlugin/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("CorePlugin")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("CorePlugin")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("3e81cfb2-adee-4b81-bc13-f6ce8546f9c9")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/CorePlugin/packages.config b/CorePlugin/packages.config
new file mode 100644
index 00000000..3866a875
--- /dev/null
+++ b/CorePlugin/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/CorePlugin/src/Formatter/XmlFormatterProvider.cs b/CorePlugin/src/Formatter/XmlFormatterProvider.cs
new file mode 100644
index 00000000..7efa3bcb
--- /dev/null
+++ b/CorePlugin/src/Formatter/XmlFormatterProvider.cs
@@ -0,0 +1,91 @@
+using PluginFramework.src.DataContainer;
+using PluginFramework.src.Formatter;
+using System;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace CorePlugin.src.Formatter
+{
+ ///
+ /// A xml formatter class instance
+ ///
+ class XmlFormatterProvider : BaseFormatter
+ {
+ ///
+ /// Create a new instance of this class
+ ///
+ public XmlFormatterProvider() : base("xml", new PluginInformation("Xml Formatter", "Convert xml files", "XanatosX", new Version(1, 0)))
+ {
+ }
+
+ ///
+ public override bool ConvertToFlat(string filePath, string outputName)
+ {
+ FormatFile(filePath, outputName, SaveOptions.DisableFormatting);
+ return true;
+ }
+
+ ///
+ public override bool ConvertToFormatted(string filePath, string outputName)
+ {
+ FormatFile(filePath, outputName, SaveOptions.None);
+ return true;
+ }
+
+ ///
+ /// This method will convert the file
+ ///
+ /// The input file to convert
+ /// The output file to generate
+ /// The save options to use
+ private async void FormatFile(string inputFilePath, string outputName, SaveOptions options)
+ {
+ if (!IsFileReadableWriteable(inputFilePath, outputName))
+ {
+ FireEvent("Saving failed", "Files where locked!");
+ return;
+ }
+
+ FireEvent("Loading", "Loading ...");
+ XElement fileToConvert = await Task.Run(() =>
+ {
+ XElement returnElement;
+ try
+ {
+ returnElement = XElement.Load(inputFilePath);
+ }
+ catch (Exception)
+ {
+ FireEvent("Input file not valid", "The input file was not valid!");
+ returnElement = null;
+ }
+ return returnElement;
+ });
+
+ if (fileToConvert == null)
+ {
+ return;
+ }
+
+ FireEvent("Saving", "Saving ...");
+ bool saveSuccess = await Task.Run(() =>
+ {
+ try
+ {
+ fileToConvert.Save(outputName, options);
+ return true;
+ }
+ catch (Exception)
+ {
+ FireEvent("Saving did fail", "Saving went wrong, maybe the file was used?");
+ return false;
+ }
+ });
+
+ if (saveSuccess)
+ {
+ FireEvent("Done", "Saving done!");
+ }
+ }
+ }
+}
diff --git a/CorePlugin/src/Updating/DownloadGitHubReleaseStrategy.cs b/CorePlugin/src/Updating/DownloadGitHubReleaseStrategy.cs
new file mode 100644
index 00000000..070f727a
--- /dev/null
+++ b/CorePlugin/src/Updating/DownloadGitHubReleaseStrategy.cs
@@ -0,0 +1,68 @@
+using Octokit;
+using PluginFramework.src.DataContainer;
+using PluginFramework.src.Update;
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Net;
+
+namespace CorePlugin.src.Updating
+{
+ ///
+ /// This class descripes the download from GitHub strategy
+ ///
+ class DownloadGitHubReleaseStrategy : BaseUpdate
+ {
+ ///
+ /// Create a new instance of this strategy
+ ///
+ public DownloadGitHubReleaseStrategy() : base(new PluginInformation("Download GitHub releases", "Download the GitHub release", "XanatosX", new Version(1, 0)))
+ {
+ }
+
+ ///
+ public override bool Update(VersionCompare versionInformation)
+ {
+ bool returnValue = true;
+ string tempFolder = Path.GetTempPath();
+ using (WebClient client = new WebClient())
+ {
+ foreach (ReleaseAsset release in versionInformation.Assets)
+ {
+ string localFile = tempFolder;
+ string[] splittet = release.BrowserDownloadUrl.Split('/');
+ localFile += splittet.Last();
+ if (File.Exists(localFile))
+ {
+ try
+ {
+ using (FileStream fileStream = new FileStream(localFile, System.IO.FileMode.Open))
+ {
+ if (!fileStream.CanWrite)
+ {
+ returnValue &= false;
+ continue;
+ }
+ }
+ }
+ catch (Exception)
+ {
+ returnValue &= false;
+ continue;
+ }
+ }
+ client.DownloadFile(release.BrowserDownloadUrl, localFile);
+ Process.Start(localFile);
+ }
+ }
+
+ if (returnValue)
+ {
+ Process.Start(Environment.CurrentDirectory);
+ }
+
+ return returnValue;
+ }
+ }
+}
diff --git a/CorePlugin/src/Updating/OpenGitHubReleasesStrategy.cs b/CorePlugin/src/Updating/OpenGitHubReleasesStrategy.cs
new file mode 100644
index 00000000..ce973c42
--- /dev/null
+++ b/CorePlugin/src/Updating/OpenGitHubReleasesStrategy.cs
@@ -0,0 +1,27 @@
+using PluginFramework.src.DataContainer;
+using PluginFramework.src.Update;
+using System;
+using System.Diagnostics;
+
+namespace CorePlugin.src.Updating
+{
+ ///
+ /// This class will open up the release GitHub page
+ ///
+ class OpenGitHubReleasesStrategy : BaseUpdate
+ {
+ ///
+ /// Create a new instance of this strategy
+ ///
+ public OpenGitHubReleasesStrategy() : base(new PluginInformation("Open GitHub releases", "Open the GitHub Release", "XanatosX", new Version(1, 0)))
+ {
+ }
+
+ ///
+ public override bool Update(VersionCompare versionInformation)
+ {
+ Process.Start("https://github.com/XanatosX/XmlFormatter/releases/tag/" + versionInformation.LatestRelease.TagName);
+ return true;
+ }
+ }
+}
diff --git a/JsonPlugin/JsonPlugin.csproj b/JsonPlugin/JsonPlugin.csproj
new file mode 100644
index 00000000..e0464e98
--- /dev/null
+++ b/JsonPlugin/JsonPlugin.csproj
@@ -0,0 +1,63 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {61B2922F-25C0-4F10-8DF0-FF91287C4452}
+ Library
+ Properties
+ JsonPlugin
+ JsonPlugin
+ v4.7.2
+ 512
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll
+
+
+ ..\packages\Octokit.0.47.0\lib\net46\Octokit.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {9808f069-6dc1-4c26-a434-16630fc697e8}
+ PluginFramework
+
+
+
+
\ No newline at end of file
diff --git a/JsonPlugin/Properties/AssemblyInfo.cs b/JsonPlugin/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..7503f11c
--- /dev/null
+++ b/JsonPlugin/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("JsonPlugin")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("JsonPlugin")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("61b2922f-25c0-4f10-8df0-ff91287c4452")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/JsonPlugin/packages.config b/JsonPlugin/packages.config
new file mode 100644
index 00000000..f0a4837d
--- /dev/null
+++ b/JsonPlugin/packages.config
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/JsonPlugin/src/JsonFormatter.cs b/JsonPlugin/src/JsonFormatter.cs
new file mode 100644
index 00000000..c4490461
--- /dev/null
+++ b/JsonPlugin/src/JsonFormatter.cs
@@ -0,0 +1,98 @@
+using Newtonsoft.Json;
+using PluginFramework.src.DataContainer;
+using PluginFramework.src.Formatter;
+using System;
+using System.IO;
+using System.Threading.Tasks;
+
+namespace JsonPlugin
+{
+ ///
+ /// A foramtter to convert json files
+ ///
+ public class JsonFormatter : BaseFormatter
+ {
+ ///
+ /// Create a new instance of this formatter
+ ///
+ public JsonFormatter()
+ : base(
+ "json",
+ new PluginInformation("Json formatter", "This plugin will convert json files", "XanatosX", new Version(1, 0))
+ )
+ {
+ }
+
+ ///
+ public override bool ConvertToFlat(string filePath, string outputName)
+ {
+ FormatFile(filePath, outputName, Formatting.None);
+ return true;
+ }
+
+ ///
+ public override bool ConvertToFormatted(string filePath, string outputName)
+ {
+ FormatFile(filePath, outputName, Formatting.Indented);
+ return true;
+ }
+
+ ///
+ /// This method will convert the file
+ ///
+ /// The input file to convert
+ /// The output file to generate
+ /// The save options to use
+ private async void FormatFile(string inputFilePath, string outputName, Formatting formatting)
+ {
+ if (!IsFileReadableWriteable(inputFilePath, outputName))
+ {
+ FireEvent("Saving failed", "Files where locked!");
+ return;
+ }
+
+ FireEvent("Loading", "Loading ...");
+ object data = await Task