From 7fc28f8b720bef924e55730c0076021b6d596d01 Mon Sep 17 00:00:00 2001 From: Laury Date: Mon, 13 Dec 2021 21:54:25 +0100 Subject: [PATCH] [reader] Added detection of rich text files (.urt) TODO: parse differently this files --- apps/reader/list_book_controller.cpp | 32 +++++++++++++++++----------- apps/reader/list_book_controller.h | 3 ++- apps/reader/read_book_controller.cpp | 4 ++-- apps/reader/read_book_controller.h | 2 +- apps/reader/word_wrap_view.cpp | 6 ++++-- apps/reader/word_wrap_view.h | 5 +++-- 6 files changed, 31 insertions(+), 21 deletions(-) diff --git a/apps/reader/list_book_controller.cpp b/apps/reader/list_book_controller.cpp index 814f60d5f..d727ab9ee 100644 --- a/apps/reader/list_book_controller.cpp +++ b/apps/reader/list_book_controller.cpp @@ -15,12 +15,13 @@ ListBookController::ListBookController(Responder * parentResponder): m_tableView(this, this, this), m_readBookController(this) { - m_filesNumber = filesWithExtension(".txt", m_files, k_maxFilesNumber); + m_txtFilesNumber = filesWithExtension(".txt", m_files, k_maxFilesNumber); + m_urtFilesNumber = filesWithExtension(".urt", m_files + m_txtFilesNumber, k_maxFilesNumber - m_txtFilesNumber); cleanRemovedBookRecord(); } int ListBookController::numberOfRows() const { - return m_filesNumber; + return m_txtFilesNumber + m_urtFilesNumber; } KDCoordinate ListBookController::cellHeight() { @@ -52,7 +53,7 @@ void ListBookController::didBecomeFirstResponder() { bool ListBookController::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::OK || event == Ion::Events::EXE || event == Ion::Events::Right) { - m_readBookController.setBook(m_files[selectedRow()]); + m_readBookController.setBook(m_files[selectedRow()], selectedRow() >= m_txtFilesNumber); static_cast(parentResponder())->push(&m_readBookController); Container::activeApp()->setFirstResponder(&m_readBookController); return true; @@ -63,10 +64,9 @@ bool ListBookController::handleEvent(Ion::Events::Event event) { bool ListBookController::hasBook(const char* filename) const { - for(int i=0;inumberOfRecordsWithExtension("txt"); - for(int i=0; irecordWithExtensionAtIndex("txt", i); - if(!hasBook(r.fullName())) - { - r.destroy(); + for(int i=0; irecordWithExtensionAtIndex("txt", i); + if(!hasBook(r.fullName())) { + r.destroy(); + } } + + nb = Ion::Storage::sharedStorage()->numberOfRecordsWithExtension("urt"); + for(int i=0; irecordWithExtensionAtIndex("urt", i); + if(!hasBook(r.fullName())) { + r.destroy(); + } } } bool ListBookController::isEmpty() const { - return m_filesNumber == 0; + return m_txtFilesNumber + m_urtFilesNumber == 0; } I18n::Message ListBookController::emptyMessage() { diff --git a/apps/reader/list_book_controller.h b/apps/reader/list_book_controller.h index ddbd3f553..13cacd2b7 100644 --- a/apps/reader/list_book_controller.h +++ b/apps/reader/list_book_controller.h @@ -31,7 +31,8 @@ private: SelectableTableView m_tableView; static const int k_maxFilesNumber = 20; External::Archive::File m_files[k_maxFilesNumber]; - int m_filesNumber = 0; + int m_txtFilesNumber; + int m_urtFilesNumber; static const int k_cellsNumber = 6; MessageTableCellWithChevron m_cells[k_cellsNumber]; ReadBookController m_readBookController; diff --git a/apps/reader/read_book_controller.cpp b/apps/reader/read_book_controller.cpp index 622389a98..b80e6cdae 100644 --- a/apps/reader/read_book_controller.cpp +++ b/apps/reader/read_book_controller.cpp @@ -12,10 +12,10 @@ View * ReadBookController::view() { return &m_readerView; } -void ReadBookController::setBook(const External::Archive::File& file) { +void ReadBookController::setBook(const External::Archive::File& file, bool isRichTextFile) { m_file = &file; loadPosition(); - m_readerView.setText(reinterpret_cast(file.data), file.dataLength); + m_readerView.setText(reinterpret_cast(file.data), file.dataLength, isRichTextFile); } bool ReadBookController::handleEvent(Ion::Events::Event event) { diff --git a/apps/reader/read_book_controller.h b/apps/reader/read_book_controller.h index 0bd006dc3..642269d99 100644 --- a/apps/reader/read_book_controller.h +++ b/apps/reader/read_book_controller.h @@ -11,7 +11,7 @@ class ReadBookController : public ViewController { public: ReadBookController(Responder * parentResponder); View * view() override; - void setBook(const External::Archive::File& file); + void setBook(const External::Archive::File& file, bool isRichTextFile); bool handleEvent(Ion::Events::Event event) override; void viewDidDisappear() override; void savePosition() const; diff --git a/apps/reader/word_wrap_view.cpp b/apps/reader/word_wrap_view.cpp index 49ea133ab..acbcbd8ef 100644 --- a/apps/reader/word_wrap_view.cpp +++ b/apps/reader/word_wrap_view.cpp @@ -12,7 +12,8 @@ WordWrapTextView::WordWrapTextView() : PointerTextView(GlobalPreferences::sharedGlobalPreferences()->font()), m_pageOffset(0), m_nextPageOffset(0), - m_length(0) + m_length(0), + m_isRichTextFile(false) // Value isn't important, it will change when the file is loaded { } @@ -25,9 +26,10 @@ void WordWrapTextView::nextPage() { markRectAsDirty(bounds()); } -void WordWrapTextView::setText(const char* text, int length) { +void WordWrapTextView::setText(const char* text, int length, bool isRichTextFile) { PointerTextView::setText(text); m_length = length; + m_isRichTextFile = isRichTextFile; } void WordWrapTextView::previousPage() { diff --git a/apps/reader/word_wrap_view.h b/apps/reader/word_wrap_view.h index 92526ec88..a3f3c87eb 100644 --- a/apps/reader/word_wrap_view.h +++ b/apps/reader/word_wrap_view.h @@ -16,7 +16,7 @@ class WordWrapTextView : public PointerTextView { public: WordWrapTextView(); void drawRect(KDContext * ctx, KDRect rect) const override; - void setText(const char*, int length); + void setText(const char*, int length, bool isRichTextFile); void nextPage(); void previousPage(); BookSave getBookSave() const; @@ -28,9 +28,10 @@ private: int m_pageOffset; mutable int m_nextPageOffset; int m_length; + bool m_isRichTextFile; mutable KDColor m_textColor; }; } -#endif \ No newline at end of file +#endif