mirror of
https://github.com/chylex/TweetDuck.git
synced 2025-06-02 14:34:11 +02:00
Rename 'Export/Import Settings' to Profile and add Plugin exporting
This commit is contained in:
parent
bf76398627
commit
9e45628e87
@ -231,7 +231,7 @@ public void OpenSettings(){
|
|||||||
else{
|
else{
|
||||||
bool prevEnableUpdateCheck = Config.EnableUpdateCheck;
|
bool prevEnableUpdateCheck = Config.EnableUpdateCheck;
|
||||||
|
|
||||||
currentFormSettings = new FormSettings(this, updates);
|
currentFormSettings = new FormSettings(this, plugins, updates);
|
||||||
|
|
||||||
currentFormSettings.FormClosed += (sender, args) => {
|
currentFormSettings.FormClosed += (sender, args) => {
|
||||||
currentFormSettings = null;
|
currentFormSettings = null;
|
||||||
|
@ -3,13 +3,14 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using TweetDck.Core.Other.Settings;
|
using TweetDck.Core.Other.Settings;
|
||||||
|
using TweetDck.Plugins;
|
||||||
using TweetDck.Updates;
|
using TweetDck.Updates;
|
||||||
|
|
||||||
namespace TweetDck.Core.Other{
|
namespace TweetDck.Core.Other{
|
||||||
sealed partial class FormSettings : Form{
|
sealed partial class FormSettings : Form{
|
||||||
private readonly Dictionary<Type, BaseTabSettings> tabs = new Dictionary<Type, BaseTabSettings>(4);
|
private readonly Dictionary<Type, BaseTabSettings> tabs = new Dictionary<Type, BaseTabSettings>(4);
|
||||||
|
|
||||||
public FormSettings(FormBrowser browserForm, UpdateHandler updates){
|
public FormSettings(FormBrowser browserForm, PluginManager plugins, UpdateHandler updates){
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
Text = Program.BrandName+" Settings";
|
Text = Program.BrandName+" Settings";
|
||||||
@ -18,7 +19,7 @@ public FormSettings(FormBrowser browserForm, UpdateHandler updates){
|
|||||||
this.tabPanel.AddButton("General", SelectTab<TabSettingsGeneral>);
|
this.tabPanel.AddButton("General", SelectTab<TabSettingsGeneral>);
|
||||||
this.tabPanel.AddButton("Notifications", () => SelectTab(() => new TabSettingsNotifications(browserForm.CreateNotificationForm(false))));
|
this.tabPanel.AddButton("Notifications", () => SelectTab(() => new TabSettingsNotifications(browserForm.CreateNotificationForm(false))));
|
||||||
this.tabPanel.AddButton("Updates", () => SelectTab(() => new TabSettingsUpdates(updates)));
|
this.tabPanel.AddButton("Updates", () => SelectTab(() => new TabSettingsUpdates(updates)));
|
||||||
this.tabPanel.AddButton("Advanced", () => SelectTab(() => new TabSettingsAdvanced(browserForm.ReloadBrowser)));
|
this.tabPanel.AddButton("Advanced", () => SelectTab(() => new TabSettingsAdvanced(browserForm.ReloadBrowser, plugins)));
|
||||||
this.tabPanel.SelectTab(tabPanel.Buttons.First());
|
this.tabPanel.SelectTab(tabPanel.Buttons.First());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
namespace TweetDck.Core.Other.Settings.Export{
|
namespace TweetDck.Core.Other.Settings.Export{
|
||||||
class CombinedFileStream : IDisposable{
|
class CombinedFileStream : IDisposable{
|
||||||
|
public const char KeySeparator = '/';
|
||||||
|
|
||||||
private readonly Stream stream;
|
private readonly Stream stream;
|
||||||
|
|
||||||
public CombinedFileStream(Stream stream){
|
public CombinedFileStream(Stream stream){
|
||||||
@ -65,6 +67,13 @@ void IDisposable.Dispose(){
|
|||||||
public class Entry{
|
public class Entry{
|
||||||
public string Identifier { get; private set; }
|
public string Identifier { get; private set; }
|
||||||
|
|
||||||
|
public string KeyName{
|
||||||
|
get{
|
||||||
|
int index = Identifier.IndexOf(KeySeparator);
|
||||||
|
return index == -1 ? Identifier : Identifier.Substring(0, index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private readonly byte[] contents;
|
private readonly byte[] contents;
|
||||||
|
|
||||||
public Entry(string identifier, byte[] contents){
|
public Entry(string identifier, byte[] contents){
|
||||||
@ -75,6 +84,12 @@ public Entry(string identifier, byte[] contents){
|
|||||||
public void WriteToFile(string path){
|
public void WriteToFile(string path){
|
||||||
File.WriteAllBytes(path, contents);
|
File.WriteAllBytes(path, contents);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void WriteToFile(string path, bool createDirectory){
|
||||||
|
// ReSharper disable once AssignNullToNotNullAttribute
|
||||||
|
Directory.CreateDirectory(Path.GetDirectoryName(path));
|
||||||
|
File.WriteAllBytes(path, contents);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using TweetDck.Plugins;
|
||||||
|
|
||||||
namespace TweetDck.Core.Other.Settings.Export{
|
namespace TweetDck.Core.Other.Settings.Export{
|
||||||
sealed class ExportManager{
|
sealed class ExportManager{
|
||||||
@ -11,9 +14,11 @@ sealed class ExportManager{
|
|||||||
public Exception LastException { get; private set; }
|
public Exception LastException { get; private set; }
|
||||||
|
|
||||||
private readonly string file;
|
private readonly string file;
|
||||||
|
private readonly PluginManager plugins;
|
||||||
|
|
||||||
public ExportManager(string file){
|
public ExportManager(string file, PluginManager plugins){
|
||||||
this.file = file;
|
this.file = file;
|
||||||
|
this.plugins = plugins;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Export(bool includeSession){
|
public bool Export(bool includeSession){
|
||||||
@ -21,6 +26,27 @@ public bool Export(bool includeSession){
|
|||||||
using(CombinedFileStream stream = new CombinedFileStream(new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.None))){
|
using(CombinedFileStream stream = new CombinedFileStream(new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.None))){
|
||||||
stream.WriteFile("config", Program.ConfigFilePath);
|
stream.WriteFile("config", Program.ConfigFilePath);
|
||||||
|
|
||||||
|
foreach(PathInfo path in EnumerateFilesRelative(plugins.PathOfficialPlugins)){
|
||||||
|
string[] split = path.Relative.Split(CombinedFileStream.KeySeparator);
|
||||||
|
|
||||||
|
if (split.Length < 3){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (split.Length == 3){
|
||||||
|
if (split[2].Equals(".meta", StringComparison.InvariantCultureIgnoreCase) ||
|
||||||
|
split[2].Equals("browser.js", StringComparison.InvariantCultureIgnoreCase) ||
|
||||||
|
split[2].Equals("notification.js", StringComparison.InvariantCultureIgnoreCase)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stream.WriteFile("plugin.off"+path.Relative, path.Full);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach(PathInfo path in EnumerateFilesRelative(plugins.PathCustomPlugins)){
|
||||||
|
stream.WriteFile("plugin.usr"+path.Relative, path.Full);
|
||||||
|
}
|
||||||
|
|
||||||
if (includeSession){
|
if (includeSession){
|
||||||
stream.WriteFile("cookies", CookiesPath);
|
stream.WriteFile("cookies", CookiesPath);
|
||||||
}
|
}
|
||||||
@ -37,16 +63,33 @@ public bool Export(bool includeSession){
|
|||||||
|
|
||||||
public bool Import(){
|
public bool Import(){
|
||||||
try{
|
try{
|
||||||
|
bool updatedPlugins = false;
|
||||||
|
|
||||||
using(CombinedFileStream stream = new CombinedFileStream(new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.None))){
|
using(CombinedFileStream stream = new CombinedFileStream(new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.None))){
|
||||||
CombinedFileStream.Entry entry;
|
CombinedFileStream.Entry entry;
|
||||||
|
|
||||||
while((entry = stream.ReadFile()) != null){
|
while((entry = stream.ReadFile()) != null){
|
||||||
switch(entry.Identifier){
|
switch(entry.KeyName){
|
||||||
case "config":
|
case "config":
|
||||||
entry.WriteToFile(Program.ConfigFilePath);
|
entry.WriteToFile(Program.ConfigFilePath);
|
||||||
Program.ReloadConfig();
|
Program.ReloadConfig();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "plugin.off":
|
||||||
|
string root = Path.Combine(plugins.PathOfficialPlugins, entry.Identifier.Split(CombinedFileStream.KeySeparator)[1]);
|
||||||
|
|
||||||
|
if (Directory.Exists(root)){
|
||||||
|
entry.WriteToFile(Path.Combine(plugins.PathOfficialPlugins, entry.Identifier.Substring(entry.KeyName.Length+1)), true);
|
||||||
|
updatedPlugins = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "plugin.usr":
|
||||||
|
entry.WriteToFile(Path.Combine(plugins.PathCustomPlugins, entry.Identifier.Substring(entry.KeyName.Length+1)), true);
|
||||||
|
updatedPlugins = true;
|
||||||
|
break;
|
||||||
|
|
||||||
case "cookies":
|
case "cookies":
|
||||||
if (MessageBox.Show("Do you want to import the login session? This will restart "+Program.BrandName+".", "Importing "+Program.BrandName+" Settings", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes){
|
if (MessageBox.Show("Do you want to import the login session? This will restart "+Program.BrandName+".", "Importing "+Program.BrandName+" Settings", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes){
|
||||||
entry.WriteToFile(Path.Combine(Program.StoragePath, TempCookiesPath));
|
entry.WriteToFile(Path.Combine(Program.StoragePath, TempCookiesPath));
|
||||||
@ -61,11 +104,27 @@ public bool Import(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (updatedPlugins){
|
||||||
|
plugins.Reload();
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
LastException = e;
|
LastException = e;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IEnumerable<PathInfo> EnumerateFilesRelative(string root){
|
||||||
|
return Directory.EnumerateFiles(root, "*.*", SearchOption.AllDirectories).Select(fullPath => new PathInfo{
|
||||||
|
Full = fullPath,
|
||||||
|
Relative = fullPath.Substring(root.Length).Replace(Path.DirectorySeparatorChar, CombinedFileStream.KeySeparator) // includes leading separator character
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private class PathInfo{
|
||||||
|
public string Full { get; set; }
|
||||||
|
public string Relative { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
37
Core/Other/Settings/TabSettingsAdvanced.Designer.cs
generated
37
Core/Other/Settings/TabSettingsAdvanced.Designer.cs
generated
@ -28,12 +28,12 @@ private void InitializeComponent() {
|
|||||||
this.checkHardwareAcceleration = new System.Windows.Forms.CheckBox();
|
this.checkHardwareAcceleration = new System.Windows.Forms.CheckBox();
|
||||||
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
|
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
|
||||||
this.btnEditCefArgs = new System.Windows.Forms.Button();
|
this.btnEditCefArgs = new System.Windows.Forms.Button();
|
||||||
|
this.btnEditCSS = new System.Windows.Forms.Button();
|
||||||
this.btnReset = new System.Windows.Forms.Button();
|
this.btnReset = new System.Windows.Forms.Button();
|
||||||
this.btnImport = new System.Windows.Forms.Button();
|
this.btnImport = new System.Windows.Forms.Button();
|
||||||
this.btnExport = new System.Windows.Forms.Button();
|
this.btnExport = new System.Windows.Forms.Button();
|
||||||
this.groupPerformance = new System.Windows.Forms.GroupBox();
|
this.groupPerformance = new System.Windows.Forms.GroupBox();
|
||||||
this.groupConfiguration = new System.Windows.Forms.GroupBox();
|
this.groupConfiguration = new System.Windows.Forms.GroupBox();
|
||||||
this.btnEditCSS = new System.Windows.Forms.Button();
|
|
||||||
this.groupPerformance.SuspendLayout();
|
this.groupPerformance.SuspendLayout();
|
||||||
this.groupConfiguration.SuspendLayout();
|
this.groupConfiguration.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
@ -75,11 +75,22 @@ private void InitializeComponent() {
|
|||||||
this.btnEditCefArgs.UseVisualStyleBackColor = true;
|
this.btnEditCefArgs.UseVisualStyleBackColor = true;
|
||||||
this.btnEditCefArgs.Click += new System.EventHandler(this.btnEditCefArgs_Click);
|
this.btnEditCefArgs.Click += new System.EventHandler(this.btnEditCefArgs_Click);
|
||||||
//
|
//
|
||||||
|
// btnEditCSS
|
||||||
|
//
|
||||||
|
this.btnEditCSS.Location = new System.Drawing.Point(6, 48);
|
||||||
|
this.btnEditCSS.Name = "btnEditCSS";
|
||||||
|
this.btnEditCSS.Size = new System.Drawing.Size(171, 23);
|
||||||
|
this.btnEditCSS.TabIndex = 16;
|
||||||
|
this.btnEditCSS.Text = "Edit CSS";
|
||||||
|
this.toolTip.SetToolTip(this.btnEditCSS, "Set custom CSS for browser and notification windows.");
|
||||||
|
this.btnEditCSS.UseVisualStyleBackColor = true;
|
||||||
|
this.btnEditCSS.Click += new System.EventHandler(this.btnEditCSS_Click);
|
||||||
|
//
|
||||||
// btnReset
|
// btnReset
|
||||||
//
|
//
|
||||||
this.btnReset.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
this.btnReset.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||||
this.btnReset.AutoSize = true;
|
this.btnReset.AutoSize = true;
|
||||||
this.btnReset.Location = new System.Drawing.Point(209, 250);
|
this.btnReset.Location = new System.Drawing.Point(190, 250);
|
||||||
this.btnReset.Name = "btnReset";
|
this.btnReset.Name = "btnReset";
|
||||||
this.btnReset.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
this.btnReset.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
||||||
this.btnReset.Size = new System.Drawing.Size(102, 23);
|
this.btnReset.Size = new System.Drawing.Size(102, 23);
|
||||||
@ -92,12 +103,12 @@ private void InitializeComponent() {
|
|||||||
//
|
//
|
||||||
this.btnImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
this.btnImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||||
this.btnImport.AutoSize = true;
|
this.btnImport.AutoSize = true;
|
||||||
this.btnImport.Location = new System.Drawing.Point(109, 250);
|
this.btnImport.Location = new System.Drawing.Point(100, 250);
|
||||||
this.btnImport.Name = "btnImport";
|
this.btnImport.Name = "btnImport";
|
||||||
this.btnImport.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
this.btnImport.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
||||||
this.btnImport.Size = new System.Drawing.Size(94, 23);
|
this.btnImport.Size = new System.Drawing.Size(84, 23);
|
||||||
this.btnImport.TabIndex = 16;
|
this.btnImport.TabIndex = 16;
|
||||||
this.btnImport.Text = "Import Settings";
|
this.btnImport.Text = "Import Profile";
|
||||||
this.btnImport.UseVisualStyleBackColor = true;
|
this.btnImport.UseVisualStyleBackColor = true;
|
||||||
this.btnImport.Click += new System.EventHandler(this.btnImport_Click);
|
this.btnImport.Click += new System.EventHandler(this.btnImport_Click);
|
||||||
//
|
//
|
||||||
@ -105,12 +116,13 @@ private void InitializeComponent() {
|
|||||||
//
|
//
|
||||||
this.btnExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
this.btnExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||||
this.btnExport.AutoSize = true;
|
this.btnExport.AutoSize = true;
|
||||||
|
this.btnExport.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
this.btnExport.Location = new System.Drawing.Point(9, 250);
|
this.btnExport.Location = new System.Drawing.Point(9, 250);
|
||||||
this.btnExport.Name = "btnExport";
|
this.btnExport.Name = "btnExport";
|
||||||
this.btnExport.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
this.btnExport.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
||||||
this.btnExport.Size = new System.Drawing.Size(94, 23);
|
this.btnExport.Size = new System.Drawing.Size(85, 23);
|
||||||
this.btnExport.TabIndex = 15;
|
this.btnExport.TabIndex = 15;
|
||||||
this.btnExport.Text = "Export Settings";
|
this.btnExport.Text = "Export Profile";
|
||||||
this.btnExport.UseVisualStyleBackColor = true;
|
this.btnExport.UseVisualStyleBackColor = true;
|
||||||
this.btnExport.Click += new System.EventHandler(this.btnExport_Click);
|
this.btnExport.Click += new System.EventHandler(this.btnExport_Click);
|
||||||
//
|
//
|
||||||
@ -136,17 +148,6 @@ private void InitializeComponent() {
|
|||||||
this.groupConfiguration.TabStop = false;
|
this.groupConfiguration.TabStop = false;
|
||||||
this.groupConfiguration.Text = "Configuration";
|
this.groupConfiguration.Text = "Configuration";
|
||||||
//
|
//
|
||||||
// btnEditCSS
|
|
||||||
//
|
|
||||||
this.btnEditCSS.Location = new System.Drawing.Point(6, 48);
|
|
||||||
this.btnEditCSS.Name = "btnEditCSS";
|
|
||||||
this.btnEditCSS.Size = new System.Drawing.Size(171, 23);
|
|
||||||
this.btnEditCSS.TabIndex = 16;
|
|
||||||
this.btnEditCSS.Text = "Edit CSS";
|
|
||||||
this.toolTip.SetToolTip(this.btnEditCSS, "Set custom CSS for browser and notification windows.");
|
|
||||||
this.btnEditCSS.UseVisualStyleBackColor = true;
|
|
||||||
this.btnEditCSS.Click += new System.EventHandler(this.btnEditCSS_Click);
|
|
||||||
//
|
|
||||||
// TabSettingsAdvanced
|
// TabSettingsAdvanced
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
@ -5,15 +5,18 @@
|
|||||||
using TweetDck.Core.Other.Settings.Dialogs;
|
using TweetDck.Core.Other.Settings.Dialogs;
|
||||||
using TweetDck.Core.Other.Settings.Export;
|
using TweetDck.Core.Other.Settings.Export;
|
||||||
using TweetDck.Core.Utils;
|
using TweetDck.Core.Utils;
|
||||||
|
using TweetDck.Plugins;
|
||||||
|
|
||||||
namespace TweetDck.Core.Other.Settings{
|
namespace TweetDck.Core.Other.Settings{
|
||||||
partial class TabSettingsAdvanced : BaseTabSettings{
|
partial class TabSettingsAdvanced : BaseTabSettings{
|
||||||
private readonly Action browserReloadAction;
|
private readonly Action browserReloadAction;
|
||||||
|
private readonly PluginManager plugins;
|
||||||
|
|
||||||
public TabSettingsAdvanced(Action browserReloadAction){
|
public TabSettingsAdvanced(Action browserReloadAction, PluginManager plugins){
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
this.browserReloadAction = browserReloadAction;
|
this.browserReloadAction = browserReloadAction;
|
||||||
|
this.plugins = plugins;
|
||||||
|
|
||||||
checkHardwareAcceleration.Checked = HardwareAcceleration.IsEnabled;
|
checkHardwareAcceleration.Checked = HardwareAcceleration.IsEnabled;
|
||||||
|
|
||||||
@ -109,7 +112,7 @@ private void btnExport_Click(object sender, EventArgs e){
|
|||||||
if (file != null){
|
if (file != null){
|
||||||
Program.UserConfig.Save();
|
Program.UserConfig.Save();
|
||||||
|
|
||||||
ExportManager manager = new ExportManager(file);
|
ExportManager manager = new ExportManager(file, plugins);
|
||||||
|
|
||||||
if (!manager.Export(saveCredentials)){
|
if (!manager.Export(saveCredentials)){
|
||||||
Program.HandleException("An exception happened while exporting "+Program.BrandName+" settings.", manager.LastException);
|
Program.HandleException("An exception happened while exporting "+Program.BrandName+" settings.", manager.LastException);
|
||||||
@ -130,7 +133,7 @@ private void btnImport_Click(object sender, EventArgs e){
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (file != null){
|
if (file != null){
|
||||||
ExportManager manager = new ExportManager(file);
|
ExportManager manager = new ExportManager(file, plugins);
|
||||||
|
|
||||||
if (manager.Import()){
|
if (manager.Import()){
|
||||||
((FormSettings)ParentForm).ReloadUI();
|
((FormSettings)ParentForm).ReloadUI();
|
||||||
|
Loading…
Reference in New Issue
Block a user