Register Guidelines E-Books Today's Posts Search

Go Back   MobileRead Forums > E-Book Software > Calibre > Plugins

Notices

Reply
 
Thread Tools Search this Thread
Old 05-17-2022, 07:32 AM   #196
kiwidude
Calibre Plugins Developer
kiwidude ought to be getting tired of karma fortunes by now.kiwidude ought to be getting tired of karma fortunes by now.kiwidude ought to be getting tired of karma fortunes by now.kiwidude ought to be getting tired of karma fortunes by now.kiwidude ought to be getting tired of karma fortunes by now.kiwidude ought to be getting tired of karma fortunes by now.kiwidude ought to be getting tired of karma fortunes by now.kiwidude ought to be getting tired of karma fortunes by now.kiwidude ought to be getting tired of karma fortunes by now.kiwidude ought to be getting tired of karma fortunes by now.kiwidude ought to be getting tired of karma fortunes by now.
 
Posts: 4,637
Karma: 2162064
Join Date: Oct 2010
Location: Australia
Device: Kindle Oasis
Quote:
Originally Posted by theducks View Post
(And Thanks to you Kiwidude if you are lurking)
Ha, I do lurk now and again and also thankful to the maintainers who have persisted with keeping my plugins alive particularly through these Python/Qt upgrades. I still use many of them myself each week so grateful for everyone here keeping the dream alive...
kiwidude is offline   Reply With Quote
Old 05-17-2022, 10:17 AM   #197
davidfor
Grand Sorcerer
davidfor ought to be getting tired of karma fortunes by now.davidfor ought to be getting tired of karma fortunes by now.davidfor ought to be getting tired of karma fortunes by now.davidfor ought to be getting tired of karma fortunes by now.davidfor ought to be getting tired of karma fortunes by now.davidfor ought to be getting tired of karma fortunes by now.davidfor ought to be getting tired of karma fortunes by now.davidfor ought to be getting tired of karma fortunes by now.davidfor ought to be getting tired of karma fortunes by now.davidfor ought to be getting tired of karma fortunes by now.davidfor ought to be getting tired of karma fortunes by now.
 
Posts: 24,907
Karma: 47303748
Join Date: Jul 2011
Location: Sydney, Australia
Device: Kobo:Touch,Glo, AuraH2O, GloHD,AuraONE, ClaraHD, Libra H2O; tolinoepos
Quote:
Originally Posted by iamagloworm View Post
I wonder if anyone could have a look at this plugin? davidfor has updated it for python 3, and collects some metadata from FictionDB, but genre, classification and time period are not added to tags, and I want to add age-level as well, ideally to a separate column.

I really appreciate davidfor reviving this plugin and thought some extra support would be welcome.

FictionDB Plug-In thread
Are you saying the plugin doesn't work with the beta? It seemed to when I tried. If it doesn't, report the problem in the plugins thread and I'll look at it.
davidfor is offline   Reply With Quote
Old 07-26-2022, 04:20 AM   #198
Mick2nd
Member
Mick2nd began at the beginning.
 
Mick2nd's Avatar
 
Posts: 13
Karma: 10
Join Date: Aug 2019
Location: Germany, Jena
Device: Kindle & Android Tablet
Plugin no longer working

Hi Kovid,


my Plugin Toc View Generator is no longer working. The code generated by PyQt designer generates the following error message (displayed in error dialog):


Code:
calibre, version 6.1.0
FEHLER: Unbehandelter Ausnahmefehler: <b>AttributeError</b>:type object 'QLocale' has no attribute 'English'

calibre 6.1  embedded-python: True
Windows-10-10.0.22000-SP0 Windows ('64bit', 'WindowsPE')
('Windows', '10', '10.0.22000')
Python 3.10.1
Windows: ('10', '10.0.22000', 'SP0', 'Multiprocessor Free')
Interface language: de
Successfully initialized third party plugins: Gather KFX-ZIP (from KFX Input) (1, 49, 0) && DeDRM (10, 0, 3) && Package KFX (from KFX Input) (1, 49, 0) && Count Pages (1, 11, 2) && KFX metadata reader (from KFX Input) (1, 49, 0) && KFX Input (1, 49, 0) && TOC View Generator (2, 1, 3)
Traceback (most recent call last):
  File "calibre\gui2\preferences\plugins.py", line 301, in customize_plugin
  File "calibre\gui2\preferences\plugins.py", line 379, in modify_plugin
  File "calibre\customize\__init__.py", line 166, in do_user_config
  File "calibre_plugins.toc_view_generator.__init__", line 128, in config_widget
  File "calibre_plugins.toc_view_generator.gui.Config", line 44, in __init__
  File "calibre_plugins.toc_view_generator.gui.TempConfig", line 38, in __init__
  File "calibre_plugins.toc_view_generator.gui.Config_ui", line 16, in setupUi
AttributeError: type object 'QLocale' has no attribute 'English'
I assume it has to do with the compatibility layer for PyQt5.


Can You help?
Mick2nd
Mick2nd is offline   Reply With Quote
Old 07-26-2022, 04:22 AM   #199
kovidgoyal
creator of calibre
kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.
 
kovidgoyal's Avatar
 
Posts: 43,858
Karma: 22666666
Join Date: Oct 2006
Location: Mumbai, India
Device: Various
Use the pyqt6 designer and you will be fine. Or manually replace QLocale.English with QLocale.Language.English
kovidgoyal is offline   Reply With Quote
Old 07-26-2022, 04:39 AM   #200
Mick2nd
Member
Mick2nd began at the beginning.
 
Mick2nd's Avatar
 
Posts: 13
Karma: 10
Join Date: Aug 2019
Location: Germany, Jena
Device: Kindle & Android Tablet
Quote:
Originally Posted by kovidgoyal View Post
Use the pyqt6 designer and you will be fine. Or manually replace QLocale.English with QLocale.Language.English

Thanks, I will give it a try later this day.
Mick2nd is offline   Reply With Quote
Old 09-14-2023, 08:10 AM   #201
Nicolas F
Groupie
Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.
 
Posts: 161
Karma: 1842
Join Date: Jan 2016
Device: Kobo Glo HD
Quote:
Originally Posted by kovidgoyal View Post
calibre 6 (to be released in a few months), will be based on Qt 6. Qt 6 has various minor incompatibilities with Qt 5, many of which I have implemented compatibility layers for. However if your plugins use Qt then they need to be tested against Qt 6. Beta builds of calibre you can use for that purpose are available here: https://download.calibre-ebook.com/betas/

As of 5.99.3 the betas have support for proper icon themeing with support for using different icon themes for light and dark mode and calibre switches between them automatically. In order to use icons from themes that support your plugin you should pass the plugin name to the get_icons() function to load an icon. For example:

[...]
Hi,

if I understand this correctly I should be able to create an icon theme with light and dark versions for plugin icons too?

I'm on windows 10,
I tried to create icons in the "resources\images\Name of the plugin" folder but it works when I use icon.png but if I use icon-for-dark-theme.png or icon-for-light-theme.png the icon doesn't show up in calibre.

Even with @JimmXinu plugin's like EpubMerge which specifies in the version note "Use Cal6 get_icons() so icon themes apply" I can't get it to work.

What should I do concretely with the light and dark icons ?
Nicolas F is offline   Reply With Quote
Old 09-14-2023, 08:48 AM   #202
kovidgoyal
creator of calibre
kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.
 
kovidgoyal's Avatar
 
Posts: 43,858
Karma: 22666666
Join Date: Oct 2006
Location: Mumbai, India
Device: Various
Themeing means the user installs an icon theme that has support for your plugin, then get_icons() will use icons from that theme if available, falling back to the icons in the plugin zip file when no icon is found in the theme.
kovidgoyal is offline   Reply With Quote
Old 09-14-2023, 08:54 AM   #203
thiago.eec
Guru
thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.
 
Posts: 927
Karma: 1177583
Join Date: Dec 2016
Location: Goiânia - Brazil
Device: iPad, Kindle Paperwhite
Quote:
Originally Posted by Nicolas F View Post
Hi,

if I understand this correctly I should be able to create an icon theme with light and dark versions for plugin icons too?

I'm on windows 10,
I tried to create icons in the "resources\images\Name of the plugin" folder but it works when I use icon.png but if I use icon-for-dark-theme.png or icon-for-light-theme.png the icon doesn't show up in calibre.

Even with @JimmXinu plugin's like EpubMerge which specifies in the version note "Use Cal6 get_icons() so icon themes apply" I can't get it to work.

What should I do concretely with the light and dark icons ?
If I'm not mistaken, this is how calibre choose an icon:

1) Look for user overrides in '../resources/images/Plugin name'
2) Look for themed versions (for-dark-theme / for-light-theme)
3) Look in the theme package
4) Use the plugin zipped image

But, most of the plugins I checked, have their on implementation of a get_icon() function, created by @kiwidude. This was created back when calibre couldn't handle this.

The point is: calibre changed but many plugins still uses the old scheme. Some plugin developers updated their function, like you mentioned (@JimmXinu and @kiwidude, for example).

Also, I don't see anyone looking for themed icons (maybe I missed some). I implemented this for my plugins.

This is my calibre 6+ get_icon() function:
Spoiler:
Code:
def get_icon(icon_name):
    # Check to see whether the icon exists as a Calibre resource
    # This will enable skinning if the user stores icons within a folder like:
    # ...\AppData\Roaming\calibre\resources\images\Plugin Name\

    # General icons (..\resources\images\)
    general_icons = ['dialog_warning.png', 'marked.png']

    if icon_name not in general_icons:
        icon_name = 'images/' + icon_name

    # First, look for the themed icon (Qt resource files)
    tc = 'dark' if is_dark_theme() else 'light'
    sq, ext = os.path.splitext(icon_name)
    sq = f'{sq}-for-{tc}-theme{ext}'  # Yet to be implemented by theme creators, but...
    icon = QIcon.ic(PLUGIN_NAME + '/' + sq.replace('images/', ''))
    if icon.isNull():
        # Then, look for the regular icon (..\resources\images\Plugin Name\)
        sq, ext = os.path.splitext(icon_name)
        if 'help' not in icon_name:  # There is only one help icon
            sq = f'{sq}_{tc}{ext}'
        else:
            sq = icon_name
        icon = QIcon.ic(PLUGIN_NAME + '/' + sq.replace('images/', ''))
        if icon.isNull():
            # Then, look for it on general icons (Qt resource files)
            if not sq.startswith('images/'):  # Image does not come with the zip file
                return QIcon.ic(icon_name)
        else:
            return icon
    else:
        return icon

    # As we did not find an icon elsewhere, look within our zip resources
    return get_icons(sq)

This function also deals with themed icons inside the zip file. I always create two set of icons, to work with light and dark theme.

P.S.: 'Check books' and 'Reading goal' are examples of plugins that can handle themed versions.

Last edited by thiago.eec; 09-14-2023 at 09:08 AM. Reason: add examples
thiago.eec is offline   Reply With Quote
Old 09-14-2023, 09:51 AM   #204
Nicolas F
Groupie
Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.
 
Posts: 161
Karma: 1842
Join Date: Jan 2016
Device: Kobo Glo HD
Quote:
Originally Posted by thiago.eec View Post
If I'm not mistaken, this is how calibre choose an icon:

1) Look for user overrides in '../resources/images/Plugin name'
2) Look for themed versions (for-dark-theme / for-light-theme)
3) Look in the theme package
4) Use the plugin zipped image

But, most of the plugins I checked, have their on implementation of a get_icon() function, created by @kiwidude. This was created back when calibre couldn't handle this.

The point is: calibre changed but many plugins still uses the old scheme. Some plugin developers updated their function, like you mentioned (@JimmXinu and @kiwidude, for example).

Also, I don't see anyone looking for themed icons (maybe I missed some). I implemented this for my plugins.

This is my calibre 6+ get_icon() function:
Spoiler:
Code:
def get_icon(icon_name):
    # Check to see whether the icon exists as a Calibre resource
    # This will enable skinning if the user stores icons within a folder like:
    # ...\AppData\Roaming\calibre\resources\images\Plugin Name\

    # General icons (..\resources\images\)
    general_icons = ['dialog_warning.png', 'marked.png']

    if icon_name not in general_icons:
        icon_name = 'images/' + icon_name

    # First, look for the themed icon (Qt resource files)
    tc = 'dark' if is_dark_theme() else 'light'
    sq, ext = os.path.splitext(icon_name)
    sq = f'{sq}-for-{tc}-theme{ext}'  # Yet to be implemented by theme creators, but...
    icon = QIcon.ic(PLUGIN_NAME + '/' + sq.replace('images/', ''))
    if icon.isNull():
        # Then, look for the regular icon (..\resources\images\Plugin Name\)
        sq, ext = os.path.splitext(icon_name)
        if 'help' not in icon_name:  # There is only one help icon
            sq = f'{sq}_{tc}{ext}'
        else:
            sq = icon_name
        icon = QIcon.ic(PLUGIN_NAME + '/' + sq.replace('images/', ''))
        if icon.isNull():
            # Then, look for it on general icons (Qt resource files)
            if not sq.startswith('images/'):  # Image does not come with the zip file
                return QIcon.ic(icon_name)
        else:
            return icon
    else:
        return icon

    # As we did not find an icon elsewhere, look within our zip resources
    return get_icons(sq)

This function also deals with themed icons inside the zip file. I always create two set of icons, to work with light and dark theme.

P.S.: 'Check books' and 'Reading goal' are examples of plugins that can handle themed versions.
Thank you for replying.

It works with your plugin with the for-dark-theme / for-light-theme like I was thinking.

I made the highlight theme a few years ago with icons for a majority of the plugins at the time and I wanted to update it to be compatible with light and dark themes
Nicolas F is offline   Reply With Quote
Old 09-14-2023, 10:01 AM   #205
Nicolas F
Groupie
Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.
 
Posts: 161
Karma: 1842
Join Date: Jan 2016
Device: Kobo Glo HD
Quote:
Originally Posted by kovidgoyal View Post
Themeing means the user installs an icon theme that has support for your plugin, then get_icons() will use icons from that theme if available, falling back to the icons in the plugin zip file when no icon is found in the theme.
Thanks for answering,

yes I've mad the material and highlight themes for calibre a few years ago but the for-dark-theme / for-light-theme icons don't seem to work for themes.

It works with thiago.eec's plugins but I downloaded the Interface Plugin Demo from calibre website (Interface Plugin Demo.zip) and it doesn't see the custom icons.

The code for the demo plugin is
Code:
icon = get_icons('images/icon.png', 'Interface Plugin Demo')
If I understand it correctly I should be able to use "images/Interface Plugin Demo/icon-for-dark-theme.png" and get the icon in dark mode.

thiago.eec's plugin that works doesn't seem to use the default implementation.
Nicolas F is offline   Reply With Quote
Old 09-14-2023, 10:25 AM   #206
kovidgoyal
creator of calibre
kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.
 
kovidgoyal's Avatar
 
Posts: 43,858
Karma: 22666666
Join Date: Oct 2006
Location: Mumbai, India
Device: Various
Yes the default implementation doesnt check for dark/light. But plugin authors are free to roll their own.
kovidgoyal is offline   Reply With Quote
Old 09-14-2023, 10:39 AM   #207
Nicolas F
Groupie
Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.
 
Posts: 161
Karma: 1842
Join Date: Jan 2016
Device: Kobo Glo HD
Quote:
Originally Posted by kovidgoyal View Post
Yes the default implementation doesnt check for dark/light. But plugin authors are free to roll their own.
Ok thank you. I thought you had changed the default implementation in order to use the light and dark mode.

Do you think you will change this so that light and dark themes can be applied to plugins? Should I had a feature request in calibre bug tracker?
Nicolas F is offline   Reply With Quote
Old 09-14-2023, 10:41 AM   #208
kovidgoyal
creator of calibre
kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.
 
kovidgoyal's Avatar
 
Posts: 43,858
Karma: 22666666
Join Date: Oct 2006
Location: Mumbai, India
Device: Various
actually I think I am mis-remembering, the default implementation uses ICon.ic() and that does work with light/dark variants automatically.
kovidgoyal is offline   Reply With Quote
Old 09-14-2023, 10:58 AM   #209
Nicolas F
Groupie
Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.Nicolas F once ate a cherry pie in a record 7 seconds.
 
Posts: 161
Karma: 1842
Join Date: Jan 2016
Device: Kobo Glo HD
Then I don't know why but it doesn't seem to work.

Maybe @thiago.eec can confirm that it's not working with get_icons()
Nicolas F is offline   Reply With Quote
Old 09-14-2023, 11:37 AM   #210
thiago.eec
Guru
thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.thiago.eec ought to be getting tired of karma fortunes by now.
 
Posts: 927
Karma: 1177583
Join Date: Dec 2016
Location: Goiânia - Brazil
Device: iPad, Kindle Paperwhite
Quote:
Originally Posted by Nicolas F View Post
Then I don't know why but it doesn't seem to work.

Maybe @thiago.eec can confirm that it's not working with get_icons()
Yes. Using get_icons('icon.png', PLUGIN_NAME) works.

You need this too:
..\resources\images\PLUGIN_NAME\icon-for-dark-theme.png
..\resources\images\PLUGIN_NAME\icon-for-light-theme.png
thiago.eec is offline   Reply With Quote
Reply


Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Suggestion for PI Devs BetterRed Plugins 11 09-27-2020 06:18 PM
Attn plugin devs: porting to python 3 kovidgoyal Plugins 129 06-16-2020 01:31 AM
Attention All Plugin Devs: Remove vestiges from python 2? KevinH Plugins 11 05-29-2020 03:16 PM
Plugin Devs: Should we include a License or COPYING file? KevinH Plugins 3 08-15-2017 01:09 PM
New Plugin Features in the upcoming Sigil 0.8.900 KevinH Plugins 6 09-14-2015 02:48 PM


All times are GMT -4. The time now is 10:57 AM.


MobileRead.com is a privately owned, operated and funded community.