optimize parallel task, and clear share bookmarkId
This commit is contained in:
@@ -33,6 +33,7 @@ namespace Pixiview.Illust
|
||||
private int startIndex;
|
||||
private int nextIndex;
|
||||
private bool flag = false;
|
||||
private ParallelTask task;
|
||||
|
||||
public FavoritesPage()
|
||||
{
|
||||
@@ -67,6 +68,16 @@ namespace Pixiview.Illust
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnUnload()
|
||||
{
|
||||
if (task != null)
|
||||
{
|
||||
task.Dispose();
|
||||
task = null;
|
||||
}
|
||||
base.OnUnload();
|
||||
}
|
||||
|
||||
protected override IEnumerable<IllustItem> DoGetIllustList(IllustItem[] data)
|
||||
{
|
||||
return data;
|
||||
@@ -300,14 +311,13 @@ namespace Pixiview.Illust
|
||||
|
||||
if (list.Length > 0)
|
||||
{
|
||||
#if LOG
|
||||
for (var i = 0; i < list.Length; i++)
|
||||
{
|
||||
var item = list[i];
|
||||
#if LOG
|
||||
App.DebugPrint($"add bookmark ({item.BookmarkId}) - {item.Id}: {item.Title}");
|
||||
#endif
|
||||
item.Image = StyleDefinition.DownloadBackground;
|
||||
}
|
||||
#endif
|
||||
nows.InsertRange(0, list);
|
||||
}
|
||||
}
|
||||
@@ -316,21 +326,98 @@ namespace Pixiview.Illust
|
||||
return;
|
||||
}
|
||||
|
||||
ParallelTask.Start("favorite.loadimages", 0, list.Length, Configs.MaxPageThreads, i =>
|
||||
SyncRemoteFavorites(list);
|
||||
}
|
||||
|
||||
private void SyncRemoteFavorites(IllustItem[] list)
|
||||
{
|
||||
for (var i = 0; i < list.Length; i++)
|
||||
{
|
||||
var illustItem = list[i];
|
||||
var data = Stores.LoadIllustPreloadData(illustItem.Id);
|
||||
if (data != null && data.illust.TryGetValue(illustItem.Id, out var illust))
|
||||
var item = list[i];
|
||||
var data = Stores.LoadIllustPreloadData(item.Id, false);
|
||||
if (data != null && data.illust.TryGetValue(item.Id, out var illust))
|
||||
{
|
||||
illust.CopyToItem(illustItem);
|
||||
illust.CopyToItem(item);
|
||||
if (data.user.TryGetValue(illust.userId, out var user))
|
||||
{
|
||||
illustItem.ProfileUrl = user.image;
|
||||
item.ProfileUrl = user.image;
|
||||
}
|
||||
var url = item.ImageUrl;
|
||||
if (url != null)
|
||||
{
|
||||
var image = Stores.LoadPreviewImage(url, false);
|
||||
if (image == null)
|
||||
{
|
||||
image = Stores.LoadThumbnailImage(url, false);
|
||||
}
|
||||
if (image != null)
|
||||
{
|
||||
item.Image = image;
|
||||
}
|
||||
}
|
||||
url = item.ProfileUrl;
|
||||
if (url == null)
|
||||
{
|
||||
item.ProfileImage = StyleDefinition.ProfileNone;
|
||||
}
|
||||
else
|
||||
{
|
||||
var image = Stores.LoadUserProfileImage(url, false);
|
||||
if (image != null)
|
||||
{
|
||||
item.ProfileImage = image;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
App.DebugError("load.favorite", $"cannot fetch preload data, {illustItem.Id}, disposed.");
|
||||
return false;
|
||||
}
|
||||
|
||||
list = list.Where(i => i.Image == null || i.ProfileImage == null).ToArray();
|
||||
|
||||
if (task != null)
|
||||
{
|
||||
task.Dispose();
|
||||
task = null;
|
||||
}
|
||||
|
||||
task = ParallelTask.Start("favorite.loadimages", 0, list.Length, Configs.MaxPageThreads, i =>
|
||||
{
|
||||
var item = list[i];
|
||||
if (item.ImageUrl == null)
|
||||
{
|
||||
var data = Stores.LoadIllustPreloadData(item.Id, true, force: true);
|
||||
if (data != null && data.illust.TryGetValue(item.Id, out var illust))
|
||||
{
|
||||
illust.CopyToItem(item);
|
||||
if (data.user.TryGetValue(illust.userId, out var user))
|
||||
{
|
||||
item.ProfileUrl = user.image;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
App.DebugError("load.favorite", $"cannot fetch preload data, {item.Id}, disposed.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (item.Image == null && item.ImageUrl != null)
|
||||
{
|
||||
item.Image = StyleDefinition.DownloadBackground;
|
||||
var image = Stores.LoadThumbnailImage(item.ImageUrl, true, force: true);
|
||||
if (image != null)
|
||||
{
|
||||
item.Image = image;
|
||||
}
|
||||
}
|
||||
if (item.ProfileImage == null && item.ProfileUrl != null)
|
||||
{
|
||||
item.ProfileImage = StyleDefinition.ProfileNone;
|
||||
var userImage = Stores.LoadUserProfileImage(item.ProfileUrl, true, force: true);
|
||||
if (userImage != null)
|
||||
{
|
||||
item.ProfileImage = userImage;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}, () =>
|
||||
{
|
||||
Stores.SaveFavoritesIllusts();
|
||||
|
@@ -598,7 +598,32 @@ namespace Pixiview.Illust
|
||||
{
|
||||
if (item.Image == null)
|
||||
{
|
||||
item.Image = StyleDefinition.DownloadBackground;
|
||||
var url = Configs.GetThumbnailUrl(item.ImageUrl);
|
||||
var image = Stores.LoadPreviewImage(url, false);
|
||||
if (image == null)
|
||||
{
|
||||
image = Stores.LoadThumbnailImage(url, false);
|
||||
}
|
||||
if (image != null)
|
||||
{
|
||||
item.Image = image;
|
||||
}
|
||||
item.ImageUrl = url;
|
||||
}
|
||||
if (item.ProfileImage == null)
|
||||
{
|
||||
if (item.ProfileUrl == null)
|
||||
{
|
||||
item.ProfileImage = StyleDefinition.ProfileNone;
|
||||
}
|
||||
else
|
||||
{
|
||||
var image = Stores.LoadUserProfileImage(item.ProfileUrl, false);
|
||||
if (image != null)
|
||||
{
|
||||
item.ProfileImage = image;
|
||||
}
|
||||
}
|
||||
}
|
||||
item.IsFavorite =
|
||||
item.BookmarkId != null ||
|
||||
@@ -616,30 +641,30 @@ namespace Pixiview.Illust
|
||||
task.Dispose();
|
||||
task = null;
|
||||
}
|
||||
task = ParallelTask.Start("collection.load", 0, collection.Count, Configs.MaxThreads, i =>
|
||||
var list = collection.Where(i => i.Image == null || i.ProfileImage == null).ToArray();
|
||||
|
||||
task = ParallelTask.Start("collection.load", 0, list.Length, Configs.MaxThreads, i =>
|
||||
{
|
||||
if (!collection.Running)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
var illust = collection[i];
|
||||
if (illust.ImageUrl != null)
|
||||
var illust = list[i];
|
||||
|
||||
if (illust.Image == null && illust.ImageUrl != null)
|
||||
{
|
||||
var url = Configs.GetThumbnailUrl(illust.ImageUrl);
|
||||
var image = Stores.LoadPreviewImage(url, false);
|
||||
if (image == null)
|
||||
{
|
||||
image = Stores.LoadThumbnailImage(url);
|
||||
}
|
||||
illust.Image = StyleDefinition.DownloadBackground;
|
||||
var image = Stores.LoadThumbnailImage(illust.ImageUrl, true, force: true);
|
||||
if (image != null)
|
||||
{
|
||||
illust.Image = image;
|
||||
}
|
||||
}
|
||||
|
||||
if (illust.ProfileUrl != null)
|
||||
if (illust.ProfileImage == null && illust.ProfileUrl != null)
|
||||
{
|
||||
var userImage = Stores.LoadUserProfileImage(illust.ProfileUrl);
|
||||
illust.ProfileImage = StyleDefinition.ProfileNone;
|
||||
var userImage = Stores.LoadUserProfileImage(illust.ProfileUrl, true, force: true);
|
||||
if (userImage != null)
|
||||
{
|
||||
illust.ProfileImage = userImage;
|
||||
|
@@ -62,8 +62,9 @@ namespace Pixiview.Illust
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return data.body.page.follow.Select(i =>
|
||||
var illusts = data.body.page.follow.Select(i =>
|
||||
data.body.thumbnails.illust.FirstOrDefault(l => l.illustId == i.ToString())?.ConvertToItem());
|
||||
return illusts;
|
||||
}
|
||||
|
||||
protected override IllustData DoLoadIllustData(bool force)
|
||||
@@ -78,7 +79,10 @@ namespace Pixiview.Illust
|
||||
return;
|
||||
}
|
||||
await ScrollToTopAsync(scrollView);
|
||||
StartLoad(true);
|
||||
|
||||
|
||||
lastUpdated = default;
|
||||
StartLoad(false);
|
||||
}
|
||||
|
||||
private void SearchBar_SearchButtonPressed(object sender, EventArgs e)
|
||||
|
@@ -308,7 +308,7 @@ namespace Pixiview.Illust
|
||||
{
|
||||
if (user.ProfileUrl != null)
|
||||
{
|
||||
var userImage = Stores.LoadUserProfileImage(user.ProfileUrl);
|
||||
var userImage = Stores.LoadUserProfileImage(user.ProfileUrl, true);
|
||||
if (userImage != null)
|
||||
{
|
||||
user.ProfileImage = userImage;
|
||||
@@ -326,10 +326,10 @@ namespace Pixiview.Illust
|
||||
if (illust.ImageUrl != null)
|
||||
{
|
||||
var url = Configs.GetThumbnailUrl(illust.ImageUrl);
|
||||
var image = Stores.LoadPreviewImage(url, false);
|
||||
var image = Stores.LoadPreviewImage(url, true, force: false);
|
||||
if (image == null)
|
||||
{
|
||||
image = Stores.LoadThumbnailImage(url);
|
||||
image = Stores.LoadThumbnailImage(url, true);
|
||||
}
|
||||
if (image != null)
|
||||
{
|
||||
|
@@ -439,7 +439,7 @@ namespace Pixiview.Illust
|
||||
}
|
||||
}
|
||||
item.Loading = true;
|
||||
var image = Stores.LoadPreviewImage(item.PreviewUrl, force: force);
|
||||
var image = Stores.LoadPreviewImage(item.PreviewUrl, true, force: force);
|
||||
if (image != null)
|
||||
{
|
||||
item.Image = image;
|
||||
@@ -649,7 +649,7 @@ namespace Pixiview.Illust
|
||||
isPreloading = true;
|
||||
var illustItem = IllustItem;
|
||||
// force to reload
|
||||
var preload = Stores.LoadIllustPreloadData(illustItem.Id, force);
|
||||
var preload = Stores.LoadIllustPreloadData(illustItem.Id, true, force: force);
|
||||
if (preload != null && preload.illust.TryGetValue(illustItem.Id, out var illust))
|
||||
{
|
||||
illust.CopyToItem(illustItem);
|
||||
|
Reference in New Issue
Block a user