qwen edit
This commit is contained in:
@@ -57,4 +57,4 @@ public class Book
|
||||
|
||||
[Ignore]
|
||||
public double ProgressBarWidth => ReadingProgress * 120; // relative to cover width
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,11 +46,17 @@ public partial class ReaderViewModel : BaseViewModel
|
||||
[ObservableProperty]
|
||||
private int _totalPages = 1;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool _isLocationsLoaded;
|
||||
|
||||
// Это свойство будет обновляться автоматически при изменении любого из полей выше
|
||||
public string ChapterProgressText => $"{ChapterCurrentPage} из {ChapterTotalPages}";
|
||||
|
||||
// Это свойство будет обновляться автоматически при изменении любого из полей выше
|
||||
public string ProgressText => $"{CurrentPage} из {TotalPages}";
|
||||
// Пока страницы не посчитаны, показываем 0%
|
||||
public string ProgressText => !_isLocationsLoaded || TotalPages <= 0
|
||||
? "0%"
|
||||
: $"{CurrentPage} из {TotalPages}";
|
||||
|
||||
// Чтобы ChapterProgressText уведомлял интерфейс, добавим частичные методы (особенность Toolkit)
|
||||
partial void OnChapterCurrentPageChanged(int value) => OnPropertyChanged(nameof(ChapterProgressText));
|
||||
@@ -59,6 +65,7 @@ public partial class ReaderViewModel : BaseViewModel
|
||||
// Чтобы ProgressText уведомлял интерфейс, добавим частичные методы (особенность Toolkit)
|
||||
partial void OnCurrentPageChanged(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()
|
||||
{
|
||||
@@ -109,6 +116,25 @@ public partial class ReaderViewModel : BaseViewModel
|
||||
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 savedFontFamily = await _settingsService.GetAsync(SettingsKeys.DefaultFontFamily, "serif");
|
||||
|
||||
@@ -171,6 +197,13 @@ public partial class ReaderViewModel : BaseViewModel
|
||||
}
|
||||
Book.Locations = locations;
|
||||
await _databaseService.UpdateBookAsync(Book);
|
||||
|
||||
// Локации сохранены - теперь показываем реальный прогресс
|
||||
// (если ещё не был показан из кэша)
|
||||
if (!IsLocationsLoaded)
|
||||
{
|
||||
IsLocationsLoaded = true;
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
var action = await _navigationService.DisplayActionSheetAsync("Menu", "Cancel",
|
||||
|
||||
Reference in New Issue
Block a user