From 2d38fb1b22a5a86d1f5b85f69b383371dbd4ef57 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 11 Mar 2020 17:21:39 +0530 Subject: [PATCH] Remove references to drmfree.calibre-ebook.com That site is being retired. Text about DRM has been migrated to the calibre manual. --- manual/drm.rst | 107 ++++++++++++++++++ manual/faq.rst | 2 +- manual/gui.rst | 2 +- manual/simple_index.rst | 1 + src/calibre/customize/builtins.py | 10 -- src/calibre/gui2/actions/store.py | 6 +- src/calibre/gui2/dialogs/drm_error.ui | 3 +- .../gui2/store/stores/open_books_plugin.py | 80 ------------- 8 files changed, 115 insertions(+), 96 deletions(-) create mode 100644 manual/drm.rst delete mode 100644 src/calibre/gui2/store/stores/open_books_plugin.py diff --git a/manual/drm.rst b/manual/drm.rst new file mode 100644 index 0000000000..551ed63e6c --- /dev/null +++ b/manual/drm.rst @@ -0,0 +1,107 @@ + +.. _dmr: + +Digital Rights Management (DRM) +=============================================== + +Digital rights management (DRM) is a generic term for access control +technologies that can be used by hardware manufacturers, publishers, copyright +holders and individuals to try to impose limitations on the usage of digital +content and devices. It is also, sometimes, disparagingly described as Digital +Restrictions Management. The term is used to describe any technology which +inhibits uses (legitimate or otherwise) of digital content that were not +desired or foreseen by the content provider. The term generally doesn't refer +to other forms of copy protection which can be circumvented without modifying +the file or device, such as serial numbers or key-files. It can also refer to +restrictions associated with specific instances of digital works or devices. +DRM technologies attempt to control use of digital media by preventing access, +copying or conversion to other formats by end users. See `wikipedia +`_. + + +What does DRM imply for me personally? +------------------------------------------ + +When you buy an e-book with DRM you don't really own it but have purchased the +permission to use it in a manner dictated to you by the seller. DRM limits what +you can do with e-books you have "bought". Often people who buy books with DRM +are unaware of the extent of these restrictions. These restrictions prevent you +from reformatting the e-book to your liking, including making stylistic changes +like adjusting the font sizes, although there is software that empowers you to +do such things for non DRM books. People are often surprised that an e-book +they have bought in a particular format cannot be converted to another format +if the e-book has DRM. So if you have an Amazon Kindle and buy a book sold by +Barnes and Nobles, you should know that if that e-book has DRM you will not be +able to read it on your Kindle. Notice that I am talking about a book you buy, +not steal or pirate but BUY. + + +What does DRM do for authors? +---------------------------------- + +Publishers of DRMed e-books argue that the DRM is all for the sake of authors +and to protect their artistic integrity and prevent piracy. But DRM does NOT +prevent piracy. People who want to pirate content or use pirated content still +do it and succeed. The three major DRM schemes for e-books today are run by +Amazon, Adobe and Barnes and Noble and all three DRM schemes have been cracked. +All DRM does is inconvenience legitimate users. It can be argued that it +actually harms authors as people who would have bought the book choose to find +a pirated version as they are not willing to put up with DRM. Those that would +pirate in the absence of DRM do so in its presence as well. To reiterate, the +key point is that DRM *does not prevent piracy*. So DRM is not only pointless +and harmful to buyers of e-books but also a waste of money. + + +DRM and freedom +------------------- + +Although digital content can be used to make information as well as creative +works easily available to everyone and empower humanity, this is not in the +interests of some publishers who want to steer people away from this +possibility of freedom simply to maintain their relevance in world developing +so fast that they cant keep up. + + +Why does calibre not support DRM? +------------------------------------- + +calibre is open source software while DRM by its very nature is closed. If +calibre were to support opening or viewing DRM files it could be trivially +modified to be used as a tool for DRM removal which is illegal under today's +laws. Open source software and DRM are a clash of principles. While DRM is all +about controlling the user open source software is about empowering the user. +The two simply can not coexist. + + +What is calibre's view on content providers? +------------------------------------------------ + +We firmly believe that authors and other content providers should be +compensated for their efforts, but DRM is not the way to go about it. We are +developing this database of DRM-free e-books from various sources to help you +find DRM-free alternatives and to help independent authors and publishers of +DRM-free e-books publicize their content. We hope you will find this useful and +we request that you do not pirate the content made available to you here. + + +How can I help fight DRM? +----------------------------- + +As somebody who reads and buys e-books you can help fight DRM. Do not buy +e-books with DRM. There are some publishers who publish DRM-free e-books. Make +an effort to see if they carry the e-book you are looking for. If you like +books by certain independent authors that sell DRM-free e-books and you can +afford it make donations to them. This is money well spent as their e-books +tend to be cheaper (there may be exceptions) than the ones you would buy from +publishers of DRMed books and would probably work on all devices you own in the +future saving you the cost of buying the e-book again. Do not discourage +publishers and authors of DRM-free e-books by pirating their content. Content +providers deserve compensation for their efforts. Do not punish them for trying +to make your reading experience better by making available DRM-free e-books. In +the long run this is detrimental to you. If you have bought books from sellers +that carry both DRMed as well as DRM-free books, not knowing if they carry DRM +or not make it a point to leave a comment or review on the website informing +future buyers of its DRM status. Many sellers do not think it important to +clearly indicate to their buyers if an e-book carries DRM or not. `Here +` you will find a Guide to +DRM-free living. diff --git a/manual/faq.rst b/manual/faq.rst index f9b0862422..6cb991ef41 100644 --- a/manual/faq.rst +++ b/manual/faq.rst @@ -983,7 +983,7 @@ If you want to backup the calibre configuration/plugins, you have to backup the How do I use purchased EPUB books with calibre (or what do I do with .acsm files)? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Most purchased EPUB books have `DRM `_. This prevents calibre from opening them. You can still use calibre to store and transfer them to your e-book reader. First, you must authorize your reader on a windows machine with Adobe Digital Editions. Once this is done, EPUB books transferred with calibre will work fine on your reader. When you purchase an epub book from a website, you will get an ".acsm" file. This file should be opened with Adobe Digital Editions, which will then download the actual ".epub" e-book. The e-book file will be stored in the folder "My Digital Editions", from where you can add it to calibre. +Most purchased EPUB books have :doc:`DRM `. This prevents calibre from opening them. You can still use calibre to store and transfer them to your e-book reader. First, you must authorize your reader on a windows machine with Adobe Digital Editions. Once this is done, EPUB books transferred with calibre will work fine on your reader. When you purchase an epub book from a website, you will get an ".acsm" file. This file should be opened with Adobe Digital Editions, which will then download the actual ".epub" e-book. The e-book file will be stored in the folder "My Digital Editions", from where you can add it to calibre. I am getting a "Permission Denied" error? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/manual/gui.rst b/manual/gui.rst index ab48192309..f5e67d51a6 100644 --- a/manual/gui.rst +++ b/manual/gui.rst @@ -94,7 +94,7 @@ Convert books :class: float-right-img |cei| E-books can be converted from a number of formats into whatever format your e-book reader prefers. -Many e-books available for purchase will be protected by `Digital Rights Management `_ *(DRM)* technology. +Many e-books available for purchase will be protected by :doc:`Digital Rights Management ` *(DRM)* technology. calibre will not convert these e-books. It is easy to remove the DRM from many formats, but as this may be illegal, you will have to find tools to liberate your books yourself and then use calibre to convert them. diff --git a/manual/simple_index.rst b/manual/simple_index.rst index 18a62cbd93..bc1607d34d 100644 --- a/manual/simple_index.rst +++ b/manual/simple_index.rst @@ -41,4 +41,5 @@ available `_. customize generated/en/cli-index develop + drm glossary diff --git a/src/calibre/customize/builtins.py b/src/calibre/customize/builtins.py index 44880cbc0e..4a3af02002 100644 --- a/src/calibre/customize/builtins.py +++ b/src/calibre/customize/builtins.py @@ -1738,15 +1738,6 @@ class StoreNextoStore(StoreBase): affiliate = True -class StoreOpenBooksStore(StoreBase): - name = 'Open Books' - description = 'Comprehensive listing of DRM free e-books from a variety of sources provided by users of calibre.' - actual_plugin = 'calibre.gui2.store.stores.open_books_plugin:OpenBooksStore' - - drm_free_only = True - headquarters = 'US' - - class StoreOzonRUStore(StoreBase): name = 'OZON.ru' description = 'e-books from OZON.ru' @@ -1910,7 +1901,6 @@ plugins += [ StoreMillsBoonUKStore, StoreMobileReadStore, StoreNextoStore, - StoreOpenBooksStore, StoreOzonRUStore, StorePragmaticBookshelfStore, StorePublioStore, diff --git a/src/calibre/gui2/actions/store.py b/src/calibre/gui2/actions/store.py index ba948ac738..7b889ec51b 100644 --- a/src/calibre/gui2/actions/store.py +++ b/src/calibre/gui2/actions/store.py @@ -13,6 +13,7 @@ from PyQt5.Qt import QIcon, QSize from calibre.gui2 import error_dialog from calibre.gui2.actions import InterfaceAction from calibre.gui2.dialogs.confirm_delete import confirm +from calibre.utils.localization import localize_user_manual_link class StoreAction(InterfaceAction): @@ -146,8 +147,9 @@ class StoreAction(InterfaceAction): 'buying from. Be sure to double check that any books you get ' 'will work with your e-book reader, especially if the book you ' 'are buying has ' - 'DRM.' - )), 'about_get_books_msg', + 'DRM.' + ).format(localize_user_manual_link( + 'https://manual.calibre-ebook.com/drm.html'))), 'about_get_books_msg', parent=self.gui, show_cancel_button=False, confirm_msg=_('Show this message again'), pixmap='dialog_information.png', title=_('About Get books')) diff --git a/src/calibre/gui2/dialogs/drm_error.ui b/src/calibre/gui2/dialogs/drm_error.ui index 08d3f3d60a..6d3a39e519 100644 --- a/src/calibre/gui2/dialogs/drm_error.ui +++ b/src/calibre/gui2/dialogs/drm_error.ui @@ -44,8 +44,7 @@ <p>This book is locked by <b>DRM</b>. To learn more about DRM and why you cannot read or convert this book in calibre, - <a href="https://drmfree.calibre-ebook.com/about#drm">click here</a>.<p>A large number of recent, DRM free releases are - available at <a href="https://drmfree.calibre-ebook.com">Open Books</a>. + <a href="https://manual.calibre-ebook.com/drm.html">click here</a>.<p> true diff --git a/src/calibre/gui2/store/stores/open_books_plugin.py b/src/calibre/gui2/store/stores/open_books_plugin.py deleted file mode 100644 index 8f8c5dd305..0000000000 --- a/src/calibre/gui2/store/stores/open_books_plugin.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, division, print_function, unicode_literals - -store_version = 1 # Needed for dynamic plugin loading - -__license__ = 'GPL 3' -__copyright__ = '2011, John Schember ' -__docformat__ = 'restructuredtext en' - -from contextlib import closing -try: - from urllib.parse import quote_plus -except ImportError: - from urllib import quote_plus - -from lxml import html - -from PyQt5.Qt import QUrl - -from calibre import browser, url_slash_cleaner -from calibre.gui2 import open_url -from calibre.gui2.store import StorePlugin -from calibre.gui2.store.basic_config import BasicStoreConfig -from calibre.gui2.store.search_result import SearchResult -from calibre.gui2.store.web_store_dialog import WebStoreDialog - - -class OpenBooksStore(BasicStoreConfig, StorePlugin): - - def open(self, parent=None, detail_item=None, external=False): - url = 'https://drmfree.calibre-ebook.com/' - - if external or self.config.get('open_external', False): - open_url(QUrl(url_slash_cleaner(detail_item if detail_item else url))) - else: - d = WebStoreDialog(self.gui, url, parent, detail_item) - d.setWindowTitle(self.name) - d.set_tags(self.config.get('tags', '')) - d.exec_() - - def search(self, query, max_results=10, timeout=60): - url = 'https://drmfree.calibre-ebook.com/search/?q=' + quote_plus(query) - - br = browser() - - counter = max_results - with closing(br.open(url, timeout=timeout)) as f: - doc = html.fromstring(f.read()) - for data in doc.xpath('//ul[@id="object_list"]//li'): - if counter <= 0: - break - - id = ''.join(data.xpath('.//div[@class="links"]/a[1]/@href')) - id = id.strip() - if not id: - continue - - cover_url = ''.join(data.xpath('.//div[@class="cover"]/img/@src')) - - price = ''.join(data.xpath('.//div[@class="price"]/text()')) - a, b, price = price.partition('Price:') - price = price.strip() - if not price: - continue - - title = ''.join(data.xpath('.//div/strong/text()')) - author = ''.join(data.xpath('.//div[@class="author"]//text()')) - author = author.partition('by')[-1] - - counter -= 1 - - s = SearchResult() - s.cover_url = cover_url - s.title = title.strip() - s.author = author.strip() - s.price = price.strip() - s.detail_item = id.strip() - s.drm = SearchResult.DRM_UNLOCKED - - yield s