Skip to content

Commit

Permalink
thumb-generation optimizations...?? maybe....
Browse files Browse the repository at this point in the history
  • Loading branch information
t0815 committed Aug 21, 2024
1 parent e356c2a commit 51a0f91
Show file tree
Hide file tree
Showing 5 changed files with 127 additions and 80 deletions.
2 changes: 2 additions & 0 deletions MyCBZ/Data/ThumbSliceThreadParams.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,7 @@ internal class ThumbSliceThreadParams : ThreadParam
{

public List<Page> ThumbnailPagesSlice { get; set; }

public List<Page> ThumbnailQueue { get; set; }
}
}
2 changes: 1 addition & 1 deletion MyCBZ/Forms/MainForm.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

192 changes: 117 additions & 75 deletions MyCBZ/Forms/MainForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ public partial class MainForm : Form

private CancellationTokenSource CancellationTokenSourceRequestThumbnail;

private CancellationTokenSource CancellationTokenSourceThumbnail;

private CancellationTokenSource CancellationTokenSourceRequestImageInfo;

private CancellationTokenSource CancellationTokenSourceUpdatePageView;
Expand Down Expand Up @@ -103,6 +105,7 @@ public MainForm()
CancellationTokenSourceRequestImageInfo = CancellationTokenSource.CreateLinkedTokenSource(CancellationTokenSourceGlobal.Token);
CancellationTokenSourceUpdatePageView = CancellationTokenSource.CreateLinkedTokenSource(CancellationTokenSourceGlobal.Token);
CancellationTokenSourceMoveItems = CancellationTokenSource.CreateLinkedTokenSource(CancellationTokenSourceGlobal.Token);
CancellationTokenSourceThumbnail = CancellationTokenSource.CreateLinkedTokenSource(CancellationTokenSourceGlobal.Token);

Program.ProjectModel = NewProjectModel();
Program.DebugMode = Win_CBZSettings.Default.DebugMode == "3ab980acc9ab16b";
Expand Down Expand Up @@ -933,15 +936,13 @@ public void RequestThumbnailSlice()
if (Win_CBZSettings.Default.PagePreviewEnabled)
{

List<Thread> threads = new List<Thread>();

if (ThumbnailThread != null)
{
if (ThumbnailThread.IsAlive)
{
//threads.Add(ThumbnailThread);

CancellationTokenSourceRequestThumbnail.Cancel();
CancellationTokenSourceThumbnail.Cancel();
//ThumbnailThread.Abort();
}
}
Expand All @@ -962,14 +963,19 @@ public void RequestThumbnailSlice()
{
//threads.Add(RequestThumbnailThread);
//RequestThumbnailThread.Join();
return;
}
}

List<Page> currentSlice = new List<Page>(ThumbnailPagesSlice.ToArray());
//ThumbnailPagesSlice.Clear();

RequestThumbnailThread = new Thread(LoadThumbnailSlice);
RequestThumbnailThread.Start(new ThumbSliceThreadParams()
{
ThumbnailPagesSlice = ThumbnailPagesSlice,
CancelToken = CancellationTokenSourceRequestThumbnail.Token
ThumbnailPagesSlice = currentSlice,
CancelToken = CancellationTokenSourceRequestThumbnail.Token,
ThumbnailQueue = ThumbnailPagesSlice
});

//Task awaitTasks = AwaitOperationsTask.AwaitOperations(threads);
Expand All @@ -991,109 +997,131 @@ public void LoadThumbnailSlice(object threadParams)
{
ThumbSliceThreadParams tParams = threadParams as ThumbSliceThreadParams;

bool updateRequired = false;
int indexToUpdate = -1;

if (Program.ProjectModel.ArchiveState != CBZArchiveStatusEvent.ARCHIVE_CLOSING)
{

if (!WindowClosed)
{
PageThumbsListBox.Invoke(new Action(() =>

//PageImages.Images.Clear();
try
{
//PageImages.Images.Clear();
try
foreach (Page page in tParams.ThumbnailPagesSlice)
{
foreach (Page page in tParams.ThumbnailPagesSlice)
try
{
try
{
if (!page.Closed)
if (!page.Closed)
{
if (!PageImages.Images.ContainsKey(page.Id))
{
if (!PageImages.Images.ContainsKey(page.Id))
{
PageImages.Images.Add(page.Id, page.GetThumbnail());
}
else
PageImages.Images.Add(page.Id, page.GetThumbnail());
updateRequired = true;
}
else
{
if (page.ThumbnailInvalidated && PageImages.Images.IndexOfKey(page.Id) > -1)
{
if (page.ThumbnailInvalidated && PageImages.Images.IndexOfKey(page.Id) > -1)
{
PageImages.Images[PageImages.Images.IndexOfKey(page.Id)] = page.GetThumbnail();
page.ThumbnailInvalidated = false;
}
updateRequired = true;
PageImages.Images[PageImages.Images.IndexOfKey(page.Id)] = page.GetThumbnail();
page.ThumbnailInvalidated = false;
}
}
else

if (updateRequired)
{
page.ThumbnailInvalidated = false;
PageThumbsListBox.Invoke(new Action(() =>
{
indexToUpdate = PageThumbsListBox.Items.IndexOf(page);
if (indexToUpdate > -1) {
PageThumbsListBox.Items[indexToUpdate] = page;
}
}));
}
tParams.CancelToken.ThrowIfCancellationRequested();
}
catch (OperationCanceledException)
{
break;
}
catch (Exception e)
else
{
MessageLogger.Instance.Log(LogMessageEvent.LOGMESSAGE_TYPE_WARNING, "Error generating Thumbnail for Page '" + page.Name + "' (" + page.Id + ") [" + e.Message + "]");
page.ThumbnailInvalidated = false;
}
finally

if (tParams.ThumbnailQueue != null)
{
page.FreeImage();
tParams.ThumbnailQueue.Remove(page);
}

tParams.CancelToken.ThrowIfCancellationRequested();
}
catch (OperationCanceledException)
{
break;
}
catch (Exception e)
{
MessageLogger.Instance.Log(LogMessageEvent.LOGMESSAGE_TYPE_WARNING, "Error generating Thumbnail for Page '" + page.Name + "' (" + page.Id + ") [" + e.Message + "]");
}
finally
{
page.FreeImage();
}

Thread.Sleep(10);
}
catch (Exception eo)
{
MessageLogger.Instance.Log(LogMessageEvent.LOGMESSAGE_TYPE_WARNING, "Error in thumb-generation thread! [" + eo.Message + "]");
}

}
catch (Exception eo)
{
MessageLogger.Instance.Log(LogMessageEvent.LOGMESSAGE_TYPE_WARNING, "Error in thumb-generation thread! [" + eo.Message + "]");
}


if (TogglePagePreviewToolbutton.Checked && PageThumbsListBox.Items.Count > 0) //PageView.Items.Count > 0)
{
//PageView.RedrawItems(0, PageView.Items.Count - 1, false);
if (TogglePagePreviewToolbutton.Checked && PageThumbsListBox.Items.Count > 0) //PageView.Items.Count > 0)
{
//PageView.RedrawItems(0, PageView.Items.Count - 1, false);

/*
int itemIndex = -1;
/*
int itemIndex = -1;
foreach (Page page in tParams.ThumbnailPagesSlice)
foreach (Page page in tParams.ThumbnailPagesSlice)
{
try
{
try
if (!page.Closed)
{
if (!page.Closed)
{
itemIndex = PageThumbsListBox.Items.IndexOf(page);
itemIndex = PageThumbsListBox.Items.IndexOf(page);
if (itemIndex > -1)
{
PageThumbsListBox.Items[itemIndex] = page;
}
if (itemIndex > -1)
{
PageThumbsListBox.Items[itemIndex] = page;
}
tParams.CancelToken.ThrowIfCancellationRequested();
}
catch (OperationCanceledException)
{
break;
}
catch (Exception e)
{
MessageLogger.Instance.Log(LogMessageEvent.LOGMESSAGE_TYPE_WARNING, "Error generating Thumbnail for Page '" + page.Name + "' (" + page.Id + ") [" + e.Message + "]");
}
finally
{
page.FreeImage();
}
tParams.CancelToken.ThrowIfCancellationRequested();
}
catch (OperationCanceledException)
{
break;
}
catch (Exception e)
{
MessageLogger.Instance.Log(LogMessageEvent.LOGMESSAGE_TYPE_WARNING, "Error generating Thumbnail for Page '" + page.Name + "' (" + page.Id + ") [" + e.Message + "]");
}
finally
{
page.FreeImage();
}
*/
}
*/
}

tParams.ThumbnailPagesSlice.Clear();
//tParams.ThumbnailPagesSlice.Clear();

PageThumbsListBox.Refresh();
}));
PageThumbsListBox.Invoke(new Action(() =>
{
PageThumbsListBox.Invalidate();
}));
}
}
}
Expand Down Expand Up @@ -4436,6 +4464,7 @@ private void PageView_DrawItem(object sender, DrawListViewItemEventArgs e)
if (!page.Closed)
{
ThumbnailPagesSlice.Add(page);

if (RequestThumbnailThread != null)
{
if (!RequestThumbnailThread.IsAlive)
Expand Down Expand Up @@ -4911,6 +4940,16 @@ private void PageThumbsListBox_DrawItem(object sender, DrawItemEventArgs e)
if (page != null)
{
e.Graphics.DrawRectangle(borderPen, rectangle);
if (RequestThumbnailThread != null)
{
if (RequestThumbnailThread.IsAlive)
{

e.Graphics.DrawImage(global::Win_CBZ.Properties.Resources.placeholder_image, new Point(center + 2, e.Bounds.Y + 4));
return;
}
}

if (PageImages.Images.IndexOfKey(page.Id) > -1)
{
if (page.Deleted)
Expand All @@ -4928,12 +4967,15 @@ private void PageThumbsListBox_DrawItem(object sender, DrawItemEventArgs e)

if (!page.Closed)
{
ThumbnailPagesSlice.Add(page);
if (ThumbnailPagesSlice.IndexOf(page) == - 1)
{
ThumbnailPagesSlice.Add(page);
}

if (RequestThumbnailThread != null)
{
if (!RequestThumbnailThread.IsAlive)
{

RequestThumbnailSlice();
}
}
Expand Down
8 changes: 4 additions & 4 deletions MyCBZ/Forms/MainForm.resx
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAbgoAAAJNU0Z0AUkBTAIBAQMB
AAEoAR4BKAEeARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEQAwABAQEAAQgG
AAEwAR4BMAEeARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEQAwABAQEAAQgG
AAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEAAfABygGmAQABMwUAATMB
AAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEAAYABfAH/AQACUAH/AQAB
kwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFmAwABmQMAAcwCAAEzAwAC
Expand Down Expand Up @@ -198,7 +198,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAXj4AAAJNU0Z0AUkBTAIBAREB
AAEoAR4BKAEeARgBAAEYAQAE/wEZAQAI/wFCAU0BNgcAATYDAAEoAwABYAMAAXgDAAEBAQABGAYAAYf/
AAEwAR4BMAEeARgBAAEYAQAE/wEZAQAI/wFCAU0BNgcAATYDAAEoAwABYAMAAXgDAAEBAQABGAYAAYf/
AP8A/wB4AALUAdUDJzYlAycD1d4AA70DJTa9AyUDvt4AA70DJRIAA/8B5QHzAfYBvAHqAfMBvAHqAfMB
5QHzAfYD/xIAAyUDvt4AA70DJQ8AAfQB+AH5AVAB2gH0AQAB0gH6AQAB0gH6AQAB0gH6AQAB0gH6AVAB
2gL0AfgB+Q8AAyUDvt4AA70DJQwAAfoC+wEuAdcB9wEAAdIB+gHMAe0C9AH4AfkB9AH4AfkBzAHtAfQB
Expand Down Expand Up @@ -508,7 +508,7 @@ The page with type 'FrontCover' should be at index 1.</value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAACgMAAAJNU0Z0AUkBTAIBAQIB
AAGYAR0BmAEdARABAAEQAQAE/wEZAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAARADAAEBAQABGAYAAQwh
AAGgAR0BoAEdARABAAEQAQAE/wEZAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAARADAAEBAQABGAYAAQwh
AAP3A9kDxAO/A9ID7QP+pQAD/gO5AywPJQN/A/0SAAPnAVIBVAFVA/oPAAO4AbYCuG8AA/sDhgYlA0kD
qwOtA38GJQNEA+MMAAPmA1ADJQN9A/oGAAP9A7QDKwMlA7ppAAP+A2MJJQObBgAD3wklA0QD/QYAA+cM
JQNGA/oDAAO0DCUBtgK4ZgAD1AwlA5sGAAPfDCUDfwP+AwAD6AM1DCUDfQO0AysJJQMrA7hmAAOGDCUD
Expand All @@ -534,7 +534,7 @@ The page with type 'FrontCover' should be at index 1.</value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAEAwAAAJNU0Z0AUkBTAIBAQQB
AAEwAR4BMAEeARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEgAwABAQEAAQgG
AAE4AR4BOAEeARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEgAwABAQEAAQgG
AAEIGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEAAfABygGmAQABMwUAATMB
AAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEAAYABfAH/AQACUAH/AQAB
kwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFmAwABmQMAAcwCAAEzAwAC
Expand Down
3 changes: 3 additions & 0 deletions MyCBZ/Win_CBZ.csproj.user
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Forms\MainForm.resx">
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Update="Forms\SettingsDialog.resx">
<SubType>Designer</SubType>
</EmbeddedResource>
Expand Down

0 comments on commit 51a0f91

Please sign in to comment.