qwen edit

This commit is contained in:
Курнат Андрей
2026-02-18 16:43:13 +03:00
parent 0d9fa23db8
commit 23a3563524
3 changed files with 47 additions and 2 deletions

View File

@@ -57,4 +57,4 @@ public class Book
[Ignore]
public double ProgressBarWidth => ReadingProgress * 120; // relative to cover width
}
}

View File

@@ -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)

View File

@@ -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",