diff --git a/plugins/calibre.koplugin/metadata.lua b/plugins/calibre.koplugin/metadata.lua index 8ca7a9b0e..0d4e72d59 100644 --- a/plugins/calibre.koplugin/metadata.lua +++ b/plugins/calibre.koplugin/metadata.lua @@ -134,12 +134,19 @@ end -- add a book to our books table function CalibreMetadata:addBook(book) -- prevent duplicate entries + if not self:updateBook(book) then + table.insert(self.books, #self.books + 1, slim(book)) + end +end + +-- update a book in our books table if exists +function CalibreMetadata:updateBook(book) local _, index = self:getBookUuid(book.lpath) if index then self.books[index] = slim(book) - else - table.insert(self.books, #self.books + 1, slim(book)) + return true end + return false end -- remove a book from our books table diff --git a/plugins/calibre.koplugin/wireless.lua b/plugins/calibre.koplugin/wireless.lua index c972ff947..a0a4f8293 100644 --- a/plugins/calibre.koplugin/wireless.lua +++ b/plugins/calibre.koplugin/wireless.lua @@ -430,6 +430,8 @@ function CalibreWireless:onReceiveJSON(data) self:getBookCount(arg) elseif opcode == OPCODES.SEND_BOOK then self:sendBook(arg) + elseif opcode == OPCODES.SEND_BOOK_METADATA then + self:sendBookMetadata(arg) elseif opcode == OPCODES.DELETE_BOOK then self:deleteBook(arg) elseif opcode == OPCODES.GET_BOOK_FILE_SEGMENT then @@ -707,6 +709,16 @@ function CalibreWireless:sendBook(arg) end end +function CalibreWireless:sendBookMetadata(arg) + logger.dbg("SEND_BOOK_METADATA", arg) + + CalibreMetadata:updateBook(arg.data) + + if (arg.index + 1) == arg.count then + CalibreMetadata:saveBookList() + end +end + function CalibreWireless:deleteBook(arg) logger.dbg("DELETE_BOOK", arg) self:sendJsonData('OK', {})