View Single Post
Old 08-24-2022, 07:12 PM   #17
Comfy.n
want to learn what I want
Comfy.n ought to be getting tired of karma fortunes by now.Comfy.n ought to be getting tired of karma fortunes by now.Comfy.n ought to be getting tired of karma fortunes by now.Comfy.n ought to be getting tired of karma fortunes by now.Comfy.n ought to be getting tired of karma fortunes by now.Comfy.n ought to be getting tired of karma fortunes by now.Comfy.n ought to be getting tired of karma fortunes by now.Comfy.n ought to be getting tired of karma fortunes by now.Comfy.n ought to be getting tired of karma fortunes by now.Comfy.n ought to be getting tired of karma fortunes by now.Comfy.n ought to be getting tired of karma fortunes by now.
 
Posts: 1,641
Karma: 7908443
Join Date: Sep 2020
Device: none
Quote:
Originally Posted by DNSB View Post
Looking at the code, chaley posted:

Code:
    if book_ids:
        self.gui.library_view.model().refresh_ids(book_ids)
Looking at the after the loop in the zip archive:

Code:
    if book_id:
        self.gui.library_view.model().refresh_ids(book_ids)
It seems as if you are missing an s in the if line.

Edit: Tried changing book_id to book_ids and got a BOOL error on install.

I had originally pasted "if book_ids:" as Chaley posted. Modification in the file attached to "if book_id:" was an attempt to guess what could have triggered the install error. (and I forgot to undo that modification before posting the files here, sorry about that!)


Quote:
Originally Posted by chaley View Post
Yes, this is part of the problem. However, the main problem is that the indentation isn't right. I think the file should look like
Code:
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai

__license__   = 'GPL v3'
__copyright__ = '2019, Paul'
__docformat__ = 'restructuredtext en'

from calibre.gui2.actions import InterfaceAction
from calibre.customize import InterfaceActionBase
from calibre.gui2 import error_dialog
from calibre.utils.date import format_date
import datetime

class InterfacePluginBase(InterfaceActionBase):
    name                = 'Auto Datestamp and View'
    description         = 'Add a date stamp and view current book'
    supported_platforms = ['windows', 'osx', 'linux']
    author              = 'Paul'
    version             = (0, 0, 9)
    minimum_calibre_version = (0, 7, 53)
    actual_plugin = 'calibre_plugins.auto_datestamp_and_view:AutoDatestampAndView'

class AutoDatestampAndView(InterfaceAction):
    name = 'Auto Datestamp and View'
    action_spec = (_('Date and view book'), None, None, None)
    action_type = 'current'
    
    def genesis(self):
        self.qaction.triggered.connect(self.gui.iactions['View']._view_calibre_books)
        orig_func = self.gui.iactions['View']._view_calibre_books

        def datestamp_and_view(book_ids):
            # View the book(s)
            orig_func(book_ids)
            # Then update the date stamp
            db = self.gui.library_view.model().db
            dateformat = 'iso'
            date_column = '#lastopened'
            custom_columns = db.custom_field_keys()
            # Make sure column exists
            if date_column not in custom_columns: 
                return error_dialog(self.gui, 'Before running this plugin', 
                        'You need to create a custom Date column called %s '%date_column, show=True)
            label = db.field_metadata.key_to_label(date_column)
            # Stamp each one by one
            for book_id in book_ids:
                now = datetime.datetime.now()
                viewdate = format_date(now, dateformat, assume_utc=False, as_utc=False)
                db.set_custom(book_id, viewdate, label=label, commit=True)
            if book_ids:
                self.gui.library_view.model().refresh_ids(book_ids)
            # thanks to Kovid Goyal for the following line, also for Calibre in general
            self.gui.iactions['View']._view_calibre_books = datestamp_and_view
TBH I don't know why the last 2 lines are in this file, but I'm not going to go deep into development.
I just tested that code with and without the last 2 lines; both resulted in emblem not updating. So I think I will just keep using the "before the loop" version (edit: "in the loop", actually), until a proper solution emerges. Thank you!

Update: today I tested again JS Plugin "Activate Last-viewed" option, and to my pleasant surprise, I had the emblem update instantly, after viewing any title even with external viewers.
(JS version 1.0.196)

Last edited by Comfy.n; 12-07-2022 at 09:31 PM. Reason: update
Comfy.n is offline   Reply With Quote