feat: add multi-client mode
This commit is contained in:
parent
eea455c51b
commit
458f4a673c
@ -30,6 +30,7 @@ internal class Configuration : IPluginConfiguration {
|
|||||||
public bool DatabaseBattleMessages;
|
public bool DatabaseBattleMessages;
|
||||||
public bool LoadPreviousSession;
|
public bool LoadPreviousSession;
|
||||||
public bool FilterIncludePreviousSessions;
|
public bool FilterIncludePreviousSessions;
|
||||||
|
public bool SharedMode;
|
||||||
|
|
||||||
public float FontSize = 17f;
|
public float FontSize = 17f;
|
||||||
public float JapaneseFontSize = 17f;
|
public float JapaneseFontSize = 17f;
|
||||||
@ -60,6 +61,7 @@ internal class Configuration : IPluginConfiguration {
|
|||||||
this.DatabaseBattleMessages = other.DatabaseBattleMessages;
|
this.DatabaseBattleMessages = other.DatabaseBattleMessages;
|
||||||
this.LoadPreviousSession = other.LoadPreviousSession;
|
this.LoadPreviousSession = other.LoadPreviousSession;
|
||||||
this.FilterIncludePreviousSessions = other.FilterIncludePreviousSessions;
|
this.FilterIncludePreviousSessions = other.FilterIncludePreviousSessions;
|
||||||
|
this.SharedMode = other.SharedMode;
|
||||||
this.FontSize = other.FontSize;
|
this.FontSize = other.FontSize;
|
||||||
this.JapaneseFontSize = other.JapaneseFontSize;
|
this.JapaneseFontSize = other.JapaneseFontSize;
|
||||||
this.SymbolsFontSize = other.SymbolsFontSize;
|
this.SymbolsFontSize = other.SymbolsFontSize;
|
||||||
|
29
ChatTwo/Resources/Language.Designer.cs
generated
29
ChatTwo/Resources/Language.Designer.cs
generated
@ -1,4 +1,4 @@
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// <auto-generated>
|
// <auto-generated>
|
||||||
// This code was generated by a tool.
|
// This code was generated by a tool.
|
||||||
// Runtime Version:4.0.30319.42000
|
// Runtime Version:4.0.30319.42000
|
||||||
@ -735,6 +735,33 @@ namespace ChatTwo.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Allow multiple clients to run {0} at the same time, sharing the same database..
|
||||||
|
/// </summary>
|
||||||
|
internal static string Options_SharedMode_Description {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Options_SharedMode_Description", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Enable multi-client mode.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Options_SharedMode_Name {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Options_SharedMode_Name", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to This option is not recommended. No support will be offered if you enable this option. This option will hurt the performance of {0}..
|
||||||
|
/// </summary>
|
||||||
|
internal static string Options_SharedMode_Warning {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Options_SharedMode_Warning", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Show the Novice Network join button next to the settings button if logged in as a mentor..
|
/// Looks up a localized string similar to Show the Novice Network join button next to the settings button if logged in as a mentor..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -464,4 +464,13 @@
|
|||||||
<data name="Options_Database_Advanced" xml:space="preserve">
|
<data name="Options_Database_Advanced" xml:space="preserve">
|
||||||
<value>Advanced</value>
|
<value>Advanced</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Options_SharedMode_Name" xml:space="preserve">
|
||||||
|
<value>Enable multi-client mode</value>
|
||||||
|
</data>
|
||||||
|
<data name="Options_SharedMode_Description" xml:space="preserve">
|
||||||
|
<value>Allow multiple clients to run {0} at the same time, sharing the same database.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Options_SharedMode_Warning" xml:space="preserve">
|
||||||
|
<value>This option is not recommended. No support will be offered if you enable this option. This option will hurt the performance of {0}.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
@ -17,7 +17,7 @@ internal class Store : IDisposable {
|
|||||||
|
|
||||||
private ConcurrentQueue<(uint, Message)> Pending { get; } = new();
|
private ConcurrentQueue<(uint, Message)> Pending { get; } = new();
|
||||||
private Stopwatch CheckpointTimer { get; } = new();
|
private Stopwatch CheckpointTimer { get; } = new();
|
||||||
internal ILiteDatabase Database { get; }
|
internal ILiteDatabase Database { get; private set; }
|
||||||
private ILiteCollection<Message> Messages => this.Database.GetCollection<Message>("messages");
|
private ILiteCollection<Message> Messages => this.Database.GetCollection<Message>("messages");
|
||||||
|
|
||||||
private Dictionary<ChatType, NameFormatting> Formats { get; } = new();
|
private Dictionary<ChatType, NameFormatting> Formats { get; } = new();
|
||||||
@ -34,9 +34,6 @@ internal class Store : IDisposable {
|
|||||||
this.Plugin = plugin;
|
this.Plugin = plugin;
|
||||||
this.CheckpointTimer.Start();
|
this.CheckpointTimer.Start();
|
||||||
|
|
||||||
var dir = this.Plugin.Interface.ConfigDirectory;
|
|
||||||
dir.Create();
|
|
||||||
|
|
||||||
BsonMapper.Global = new BsonMapper {
|
BsonMapper.Global = new BsonMapper {
|
||||||
IncludeNonPublic = true,
|
IncludeNonPublic = true,
|
||||||
TrimWhitespace = false,
|
TrimWhitespace = false,
|
||||||
@ -116,10 +113,7 @@ internal class Store : IDisposable {
|
|||||||
dateTime => dateTime.Subtract(DateTime.UnixEpoch).TotalMilliseconds,
|
dateTime => dateTime.Subtract(DateTime.UnixEpoch).TotalMilliseconds,
|
||||||
bson => DateTime.UnixEpoch.AddMilliseconds(bson.AsInt64)
|
bson => DateTime.UnixEpoch.AddMilliseconds(bson.AsInt64)
|
||||||
);
|
);
|
||||||
this.Database = new LiteDatabase(Path.Join(dir.FullName, "chat.db"), BsonMapper.Global) {
|
this.Database = this.Connect();
|
||||||
CheckpointSize = 1_000,
|
|
||||||
Timeout = TimeSpan.FromSeconds(1),
|
|
||||||
};
|
|
||||||
this.Messages.EnsureIndex(msg => msg.Date);
|
this.Messages.EnsureIndex(msg => msg.Date);
|
||||||
this.Messages.EnsureIndex(msg => msg.SortCode);
|
this.Messages.EnsureIndex(msg => msg.SortCode);
|
||||||
|
|
||||||
@ -138,6 +132,24 @@ internal class Store : IDisposable {
|
|||||||
this.Database.Dispose();
|
this.Database.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ILiteDatabase Connect() {
|
||||||
|
var dir = this.Plugin.Interface.ConfigDirectory;
|
||||||
|
dir.Create();
|
||||||
|
|
||||||
|
var dbPath = Path.Join(dir.FullName, "chat.db");
|
||||||
|
var connection = this.Plugin.Config.SharedMode ? "shared" : "direct";
|
||||||
|
var connString = $"Filename='{dbPath}';Connection={connection}";
|
||||||
|
return new LiteDatabase(connString, BsonMapper.Global) {
|
||||||
|
CheckpointSize = 1_000,
|
||||||
|
Timeout = TimeSpan.FromSeconds(1),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void Reconnect() {
|
||||||
|
this.Database.Dispose();
|
||||||
|
this.Database = this.Connect();
|
||||||
|
}
|
||||||
|
|
||||||
private void Logout(object? sender, EventArgs eventArgs) {
|
private void Logout(object? sender, EventArgs eventArgs) {
|
||||||
this.LastContentId = 0;
|
this.LastContentId = 0;
|
||||||
}
|
}
|
||||||
|
@ -142,6 +142,7 @@ internal sealed class Settings : IUiComponent {
|
|||||||
|| Math.Abs(this.Mutable.JapaneseFontSize - this.Ui.Plugin.Config.JapaneseFontSize) > 0.001
|
|| Math.Abs(this.Mutable.JapaneseFontSize - this.Ui.Plugin.Config.JapaneseFontSize) > 0.001
|
||||||
|| Math.Abs(this.Mutable.SymbolsFontSize - this.Ui.Plugin.Config.SymbolsFontSize) > 0.001;
|
|| Math.Abs(this.Mutable.SymbolsFontSize - this.Ui.Plugin.Config.SymbolsFontSize) > 0.001;
|
||||||
var langChanged = this.Mutable.LanguageOverride != this.Ui.Plugin.Config.LanguageOverride;
|
var langChanged = this.Mutable.LanguageOverride != this.Ui.Plugin.Config.LanguageOverride;
|
||||||
|
var sharedChanged = this.Mutable.SharedMode != this.Ui.Plugin.Config.SharedMode;
|
||||||
|
|
||||||
config.UpdateFrom(this.Mutable);
|
config.UpdateFrom(this.Mutable);
|
||||||
|
|
||||||
@ -159,6 +160,10 @@ internal sealed class Settings : IUiComponent {
|
|||||||
this.Ui.Plugin.LanguageChanged(this.Ui.Plugin.Interface.UiLanguage);
|
this.Ui.Plugin.LanguageChanged(this.Ui.Plugin.Interface.UiLanguage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sharedChanged) {
|
||||||
|
this.Ui.Plugin.Store.Reconnect();
|
||||||
|
}
|
||||||
|
|
||||||
if (!this.Mutable.HideChat && hideChatChanged) {
|
if (!this.Mutable.HideChat && hideChatChanged) {
|
||||||
GameFunctions.GameFunctions.SetChatInteractable(true);
|
GameFunctions.GameFunctions.SetChatInteractable(true);
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,13 @@ internal sealed class Database : ISettingsTab {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ImGuiUtil.OptionCheckbox(
|
||||||
|
ref this.Mutable.SharedMode,
|
||||||
|
Language.Options_SharedMode_Name,
|
||||||
|
string.Format(Language.Options_SharedMode_Description, Plugin.PluginName)
|
||||||
|
);
|
||||||
|
ImGuiUtil.WarningText(string.Format(Language.Options_SharedMode_Warning, Plugin.PluginName));
|
||||||
|
|
||||||
ImGui.Spacing();
|
ImGui.Spacing();
|
||||||
|
|
||||||
if (this._showAdvanced && ImGui.TreeNodeEx(Language.Options_Database_Advanced)) {
|
if (this._showAdvanced && ImGui.TreeNodeEx(Language.Options_Database_Advanced)) {
|
||||||
|
@ -202,7 +202,9 @@ internal static class ImGuiUtil {
|
|||||||
ImGui.PushStyleColor(ImGuiCol.Text, dalamudOrange.Value);
|
ImGui.PushStyleColor(ImGuiCol.Text, dalamudOrange.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ImGui.PushTextWrapPos();
|
||||||
ImGui.TextUnformatted(text);
|
ImGui.TextUnformatted(text);
|
||||||
|
ImGui.PopTextWrapPos();
|
||||||
|
|
||||||
if (dalamudOrange != null) {
|
if (dalamudOrange != null) {
|
||||||
ImGui.PopStyleColor();
|
ImGui.PopStyleColor();
|
||||||
|
Loading…
Reference in New Issue
Block a user