qwen edit
This commit is contained in:
@@ -57,4 +57,4 @@ public class Book
|
|||||||
|
|
||||||
[Ignore]
|
[Ignore]
|
||||||
public double ProgressBarWidth => ReadingProgress * 120; // relative to cover width
|
public double ProgressBarWidth => ReadingProgress * 120; // relative to cover width
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,11 +46,17 @@ public partial class ReaderViewModel : BaseViewModel
|
|||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private int _totalPages = 1;
|
private int _totalPages = 1;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
private bool _isLocationsLoaded;
|
||||||
|
|
||||||
// Это свойство будет обновляться автоматически при изменении любого из полей выше
|
// Это свойство будет обновляться автоматически при изменении любого из полей выше
|
||||||
public string ChapterProgressText => $"{ChapterCurrentPage} из {ChapterTotalPages}";
|
public string ChapterProgressText => $"{ChapterCurrentPage} из {ChapterTotalPages}";
|
||||||
|
|
||||||
// Это свойство будет обновляться автоматически при изменении любого из полей выше
|
// Это свойство будет обновляться автоматически при изменении любого из полей выше
|
||||||
public string ProgressText => $"{CurrentPage} из {TotalPages}";
|
// Пока страницы не посчитаны, показываем 0%
|
||||||
|
public string ProgressText => !_isLocationsLoaded || TotalPages <= 0
|
||||||
|
? "0%"
|
||||||
|
: $"{CurrentPage} из {TotalPages}";
|
||||||
|
|
||||||
// Чтобы ChapterProgressText уведомлял интерфейс, добавим частичные методы (особенность Toolkit)
|
// Чтобы ChapterProgressText уведомлял интерфейс, добавим частичные методы (особенность Toolkit)
|
||||||
partial void OnChapterCurrentPageChanged(int value) => OnPropertyChanged(nameof(ChapterProgressText));
|
partial void OnChapterCurrentPageChanged(int value) => OnPropertyChanged(nameof(ChapterProgressText));
|
||||||
@@ -59,6 +65,7 @@ public partial class ReaderViewModel : BaseViewModel
|
|||||||
// Чтобы ProgressText уведомлял интерфейс, добавим частичные методы (особенность Toolkit)
|
// Чтобы ProgressText уведомлял интерфейс, добавим частичные методы (особенность Toolkit)
|
||||||
partial void OnCurrentPageChanged(int value) => OnPropertyChanged(nameof(ProgressText));
|
partial void OnCurrentPageChanged(int value) => OnPropertyChanged(nameof(ProgressText));
|
||||||
partial void OnTotalPagesChanged(int value) => OnPropertyChanged(nameof(ProgressText));
|
partial void OnTotalPagesChanged(int value) => OnPropertyChanged(nameof(ProgressText));
|
||||||
|
partial void OnIsLocationsLoadedChanged(bool value) => OnPropertyChanged(nameof(ProgressText));
|
||||||
|
|
||||||
public List<string> AvailableFonts { get; } = new()
|
public List<string> AvailableFonts { get; } = new()
|
||||||
{
|
{
|
||||||
@@ -109,6 +116,25 @@ public partial class ReaderViewModel : BaseViewModel
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Проверяем, есть ли сохранённые локации (кэш)
|
||||||
|
var hasCachedLocations = !string.IsNullOrEmpty(Book.Locations);
|
||||||
|
|
||||||
|
// Если есть кэш - сразу показываем реальный прогресс
|
||||||
|
IsLocationsLoaded = hasCachedLocations;
|
||||||
|
|
||||||
|
// Если есть кэш - восстанавливаем прогресс из книги
|
||||||
|
if (hasCachedLocations)
|
||||||
|
{
|
||||||
|
CurrentPage = Book.CurrentPage > 0 ? Book.CurrentPage : 0;
|
||||||
|
TotalPages = Book.TotalPages > 0 ? Book.TotalPages : 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Сбрасываем прогресс в 0% пока идёт подсчёт страниц
|
||||||
|
CurrentPage = 0;
|
||||||
|
TotalPages = 0;
|
||||||
|
}
|
||||||
|
|
||||||
var savedFontSize = await _settingsService.GetIntAsync(SettingsKeys.DefaultFontSize, Constants.Reader.DefaultFontSize);
|
var savedFontSize = await _settingsService.GetIntAsync(SettingsKeys.DefaultFontSize, Constants.Reader.DefaultFontSize);
|
||||||
var savedFontFamily = await _settingsService.GetAsync(SettingsKeys.DefaultFontFamily, "serif");
|
var savedFontFamily = await _settingsService.GetAsync(SettingsKeys.DefaultFontFamily, "serif");
|
||||||
|
|
||||||
@@ -171,6 +197,13 @@ public partial class ReaderViewModel : BaseViewModel
|
|||||||
}
|
}
|
||||||
Book.Locations = locations;
|
Book.Locations = locations;
|
||||||
await _databaseService.UpdateBookAsync(Book);
|
await _databaseService.UpdateBookAsync(Book);
|
||||||
|
|
||||||
|
// Локации сохранены - теперь показываем реальный прогресс
|
||||||
|
// (если ещё не был показан из кэша)
|
||||||
|
if (!IsLocationsLoaded)
|
||||||
|
{
|
||||||
|
IsLocationsLoaded = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task SaveProgressAsync(double progress, string? cfi, string? chapter, int currentPage, int totalPages)
|
public async Task SaveProgressAsync(double progress, string? cfi, string? chapter, int currentPage, int totalPages)
|
||||||
|
|||||||
@@ -26,6 +26,18 @@ public partial class BookshelfPage : ContentPage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override async void OnNavigatedTo(NavigatedToEventArgs args)
|
||||||
|
{
|
||||||
|
base.OnNavigatedTo(args);
|
||||||
|
|
||||||
|
// Если вернулись на главную страницу и книги уже загружены - обновляем прогресс
|
||||||
|
// (например, после чтения)
|
||||||
|
if (_viewModel.Books.Count > 0 && !_viewModel.IsBusy)
|
||||||
|
{
|
||||||
|
await _viewModel.LoadBooksCommand.ExecuteAsync(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private async void OnMenuClicked(object? sender, EventArgs e)
|
private async void OnMenuClicked(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
var action = await _navigationService.DisplayActionSheetAsync("Menu", "Cancel",
|
var action = await _navigationService.DisplayActionSheetAsync("Menu", "Cancel",
|
||||||
|
|||||||
Reference in New Issue
Block a user