Skip to content

Commit

Permalink
perf: Optimize memory leaks and refactor related code.
Browse files Browse the repository at this point in the history
  • Loading branch information
SakiRinn committed Mar 2, 2025
1 parent 76a8591 commit 91b2e1c
Show file tree
Hide file tree
Showing 12 changed files with 157 additions and 149 deletions.
4 changes: 2 additions & 2 deletions Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@


[assembly: AssemblyTitle("LiveCaptions Translator")]
[assembly: AssemblyVersion("1.2.1251.2716")]
[assembly: AssemblyFileVersion("1.2.1251.2716")]
[assembly: AssemblyVersion("1.2.1251.305")]
[assembly: AssemblyFileVersion("1.2.1251.305")]
10 changes: 5 additions & 5 deletions src/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
Height="27"
ShowMaximize="False">
<ui:TitleBar.Header>
<ui:TextBlock Padding="15,0,0,0" VerticalAlignment="Center">LiveCaptionsTranslator</ui:TextBlock>
<ui:TextBlock Padding="15,0,0,0" VerticalAlignment="Center">LiveCaptions Translator</ui:TextBlock>
</ui:TitleBar.Header>
<ui:TitleBar.TrailingContent>
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
Expand Down Expand Up @@ -87,21 +87,21 @@
Content="Setting"
FontFamily="Bahnschrift"
Icon="{ui:SymbolIcon Settings24}"
NavigationCacheMode="Enabled"
NavigationCacheMode="Required"
TargetPageType="{x:Type local:SettingPage}" />
<ui:NavigationViewItem
Margin="0,3,0,0"
Content="Prompt"
FontFamily="Bahnschrift"
Icon="{ui:SymbolIcon Chat24}"
NavigationCacheMode="Enabled"
TargetPageType="{x:Type local:PromptSetting}" />
NavigationCacheMode="Required"
TargetPageType="{x:Type local:PromptSetting}" Cursor="" />
<ui:NavigationViewItem
Margin="0,3,0,0"
Content="History"
FontFamily="Bahnschrift"
Icon="{ui:SymbolIcon History24}"
NavigationCacheMode="Enabled"
NavigationCacheMode="Disabled"
TargetPageType="{x:Type local:HistoryPage}" />
</ui:NavigationView.MenuItems>
</ui:NavigationView>
Expand Down
71 changes: 19 additions & 52 deletions src/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
using System.Windows;
using System.Text.RegularExpressions;
using Wpf.Ui.Appearance;
using Wpf.Ui.Controls;

using LiveCaptionsTranslator.utils;

namespace LiveCaptionsTranslator
{
public partial class MainWindow : FluentWindow
{
private uint OverlayMode = 0;

public SubtitleWindow? SubtitleWindow { get; set; } = null;


Expand All @@ -27,8 +26,9 @@ public MainWindow()
};
Loaded += (sender, args) => RootNavigation.Navigate(typeof(CaptionPage));

WindowStateRestore(this, "Main");
ToggleTopmost(App.Settings.MainTopmost);
var windowState = WindowHandler.LoadState(this, App.Settings);
WindowHandler.RestoreState(this, windowState);
ToggleTopmost(App.Settings.TopMost);
}

private void TopmostButton_Click(object sender, RoutedEventArgs e)
Expand All @@ -41,40 +41,37 @@ private void OverlaySubtitleModeButton_Click(object sender, RoutedEventArgs e)
var button = sender as Button;
var symbolIcon = button?.Icon as SymbolIcon;

if (OverlayMode == 0)
if (SubtitleWindow == null)
{
// Mode 1: Caption + Translation
OverlayMode = 1;
// Caption + Translation
symbolIcon.Symbol = SymbolRegular.TextUnderlineDouble20;

SubtitleWindow = new SubtitleWindow();
WindowStateRestore(SubtitleWindow, "Overlay");
SubtitleWindow.SizeChanged +=
(s, e) => WindowStateSave(SubtitleWindow, "Overlay");
(s, e) => WindowHandler.SaveState(SubtitleWindow, App.Settings);
SubtitleWindow.LocationChanged +=
(s, e) => WindowStateSave(SubtitleWindow, "Overlay");
(s, e) => WindowHandler.SaveState(SubtitleWindow, App.Settings);

var windowState = WindowHandler.LoadState(SubtitleWindow, App.Settings);
WindowHandler.RestoreState(SubtitleWindow, windowState);
SubtitleWindow.Show();
}
else if (OverlayMode == 1)
else if (!SubtitleWindow.IsTranslationOnly)
{
// Mode 2: Translation Only
OverlayMode = 2;
// Translation Only
symbolIcon.Symbol = SymbolRegular.TextAddSpaceBefore20;

SubtitleWindow.TranslationOnly(true);
SubtitleWindow.IsTranslationOnly = true;
SubtitleWindow.Focus();
}
else
{
// Mode 0: Close
OverlayMode = 0;
// Closed
symbolIcon.Symbol = SymbolRegular.WindowNew20;

SubtitleWindow.TranslationOnly(false);
SubtitleWindow.IsTranslationOnly = false;
SubtitleWindow.Close();

SubtitleWindow = null;
symbolIcon.Filled = false;
}
}

Expand All @@ -98,7 +95,7 @@ private void LogOnly_OnClickButton_Click(object sender, RoutedEventArgs e)
private void MainWindow_BoundsChanged(object sender, EventArgs e)
{
var window = sender as Window;
WindowStateSave(window, "Main");
WindowHandler.SaveState(window, App.Settings);
}

private void ToggleTopmost(bool enable)
Expand All @@ -107,37 +104,7 @@ private void ToggleTopmost(bool enable)
var symbolIcon = button?.Icon as SymbolIcon;
Topmost = enable;
symbolIcon.Filled = enable;
App.Settings.MainTopmost = enable;
}

private void WindowStateSave(Window window, string windowType)
{
if (window != null)
{
App.Settings.WindowBounds[windowType] = Regex.Replace(
window.RestoreBounds.ToString(), @"(\d+\.\d{1})\d+", "$1");
App.Settings?.Save();
}
}

private void WindowStateRestore(Window window, string windowType)
{
if (window != null)
{
Rect bounds = Rect.Parse(App.Settings.WindowBounds[windowType]);
if (!bounds.IsEmpty)
{
window.Top = bounds.Top;
window.Left = bounds.Left;

// Restore the size only for a manually sized
if (window.SizeToContent == SizeToContent.Manual)
{
window.Width = bounds.Width;
window.Height = bounds.Height;
}
}
}
App.Settings.TopMost = enable;
}
}
}
26 changes: 15 additions & 11 deletions src/SubtitleWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,24 @@ namespace LiveCaptionsTranslator
{
public partial class SubtitleWindow : Window
{
private bool isTranslationOnly = false;
public bool IsTranslationOnly
{
get => isTranslationOnly;
set
{
isTranslationOnly = value;
ResizeForTranslationOnly();
}
}

public SubtitleWindow()
{
InitializeComponent();
DataContext = App.Captions;
App.Captions.PropertyChanged += TranslatedChanged;

Loaded += (s, e) => App.Captions.PropertyChanged += TranslatedChanged;
Unloaded += (s, e) => App.Captions.PropertyChanged -= TranslatedChanged;
}

private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
Expand Down Expand Up @@ -109,7 +122,7 @@ private void TranslatedChanged(object sender, PropertyChangedEventArgs e)
}
}

public void TranslationOnly(bool isTranslationOnly)
public void ResizeForTranslationOnly()
{
if (isTranslationOnly)
{
Expand All @@ -129,14 +142,5 @@ public void TranslationOnly(bool isTranslationOnly)
this.MinHeight += 40;
}
}

protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
if (App.Captions != null)
{
App.Captions.PropertyChanged -= TranslatedChanged;
}
}
}
}
2 changes: 1 addition & 1 deletion src/models/Caption.cs
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ public async Task Translate()
DisplayTranslatedCaption = ShortenDisplaySentence(TranslatedCaption, 240);
// Log
var LogTask = Task.Run(
() => Translator.Log(originalSnapshot, TranslatedCaption, isOverWrite));
() => Translator.Log(originalSnapshot, TranslatedCaption, App.Settings, isOverWrite));
}

TranslateFlag = false;
Expand Down
50 changes: 14 additions & 36 deletions src/models/Setting.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,42 +16,24 @@ public class Setting : INotifyPropertyChanged

private string apiName;
private string targetLanguage;
private Dictionary<string, TranslateAPIConfig> configs;
private string prompt;

private int maxIdleInterval = 20;
private int maxSyncInterval = 5;
private int historyMaxRow = 1;

private Dictionary<string, string> windowBounds = new()
{
{ "Main", "1, 1, 1, 1" },
{ "Overlay", "1, 1, 1, 1" },
};
private Dictionary<string, string> windowBounds;
private bool topmost = true;

private Dictionary<string, TranslateAPIConfig> configs;
private TranslateAPIConfig? currentAPIConfig;

private bool enableLogging = true;

private bool mainTopmost = true;

public bool MainTopmost
{
get => mainTopmost;
set
{
mainTopmost = value;
OnPropertyChanged("MainTopMost");
}
}

public bool EnableLogging
public bool TopMost
{
get => enableLogging;
get => topmost;
set
{
enableLogging = value;
OnPropertyChanged();
topmost = value;
OnPropertyChanged("TopMost");
}
}

Expand Down Expand Up @@ -87,16 +69,6 @@ public int MaxSyncInterval
OnPropertyChanged("MaxSyncInterval");
}
}

public int HistoryMaxRow
{
get => historyMaxRow;
set
{
historyMaxRow = value;
OnPropertyChanged("HistoryMaxRow");
}
}
public string Prompt
{
get => prompt;
Expand Down Expand Up @@ -158,15 +130,21 @@ public Setting()
{ "OpenAI", new OpenAIConfig() },
{ "OpenRouter", new OpenRouterConfig() },
};
windowBounds = new Dictionary<string, string>
{
{ "MainWindow", "1, 1, 1, 1" },
{ "SubtitleWindow", "1, 1, 1, 1" },
};
}

public Setting(string apiName, string targetLanguage, string prompt,
Dictionary<string, TranslateAPIConfig> configs)
Dictionary<string, TranslateAPIConfig> configs, Dictionary<string, string> windowBounds)
{
this.apiName = apiName;
this.targetLanguage = targetLanguage;
this.prompt = prompt;
this.configs = configs;
this.windowBounds = windowBounds;
}

public static Setting Load()
Expand Down
3 changes: 2 additions & 1 deletion src/pages/CaptionPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ public CaptionPage()
{
InitializeComponent();
DataContext = App.Captions;
App.Captions.PropertyChanged += TranslatedChanged;

Loaded += (s, e) => App.Captions.PropertyChanged += TranslatedChanged;
Unloaded += (s, e) => App.Captions.PropertyChanged -= TranslatedChanged;
}

Expand Down
2 changes: 1 addition & 1 deletion src/pages/HistoryPage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
Margin="5,0,0,0"
Padding="10,4,10,7"
VerticalAlignment="Stretch"
SelectionChanged="maxRow_SelectionChanged">
SelectedIndex="1">
<ComboBoxItem Content="20/page" Tag="20" />
<ComboBoxItem Content="30/page" Tag="30" />
<ComboBoxItem Content="50/page" Tag="50" />
Expand Down
Loading

0 comments on commit 91b2e1c

Please sign in to comment.