diff --git a/COPYRIGHT b/COPYRIGHT index 933e771..3ac5369 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -16,11 +16,6 @@ Files: resources/rapydscript/* Copyright: Various License: BSD -Files: src/unrar/* -Copyright: Various -License: Non-free - Code can be distributed freely. - Files: src/html5lib/* Copyright: Copyright (c) 2006-2013 James Graham and other contributors License: Expat diff --git a/Changelog.yaml b/Changelog.yaml index e4e041d..8105931 100644 --- a/Changelog.yaml +++ b/Changelog.yaml @@ -67,7 +67,7 @@ - title: "Save to disk: Dont error out if the user deletes all formats to be saved." - - title: "Linux binary: Fix calibre not starting on systems where QT_QPA_PLATFORM is set to use wayland" + - title: "GNU/Linux binary: Fix calibre not starting on systems where QT_QPA_PLATFORM is set to use wayland" improved recipes: - The Economist @@ -94,7 +94,7 @@ bug fixes: - title: "Fix a regression that caused clicking the clear button in the main search bar to not unapply the current search until enter is pressed." - - title: "Linux: Fix a regression causing calibre to fail to start on systems with no DBUS session bus" + - title: "GNU/Linux: Fix a regression causing calibre to fail to start on systems with no DBUS session bus" - title: "Browser viewer: Fix body font being forced to sans-serif, overriding in book and user stylesheet settings" @@ -134,7 +134,7 @@ - title: "Book details panel: Fix metadata field titles not being top aligned" - - title: "Linux: Fix long startup delay on systems that do not have a desktop notification service running" + - title: "GNU/Linux: Fix long startup delay on systems that do not have a desktop notification service running" - title: "3.11.1 fixes a couple of regression in 3.11.0 that broke configuring Get books and creating catalogs" @@ -245,12 +245,12 @@ - title: "Book details popup window: Show the cover size in the bottom right corner if the option to show cover size in the Book details panel is set." tickets: [1716520] - - title: "Linux: Fix regression that broke using calibre on some older VNC servers" + - title: "GNU/Linux: Fix regression that broke using calibre on some older VNC servers" - title: "Browser viewer: Do not fail if the book contains javascript that has errors." tickets: [1715781] - - title: "Linux: Fix file open dialog on older KDE desktops not working correctly." + - title: "GNU/Linux: Fix file open dialog on older KDE desktops not working correctly." tickets: [1715648] - title: "Update Ozon.ru metadata plugin for website changes." @@ -262,7 +262,7 @@ - title: "Conversion: Expand -epub-writing-mode to -webkit-writing-mode and writing-mode properties for maximum compatibility." tickets: [1713509] - - title: "Linux: Fix SONY PRS-650 not being detected" + - title: "GNU/Linux: Fix SONY PRS-650 not being detected" improved recipes: - The Hindu @@ -313,9 +313,9 @@ - title: "Workaround for Qt bug that prevented using the shift and ctrl keys with the touchscreen" - - title: "Linux: fix native KDE file dialog not working on older systems" + - title: "GNU/Linux: fix native KDE file dialog not working on older systems" - - title: "Linux: Fix KDE dialogs not supporting multiple file name filter groups" + - title: "GNU/Linux: Fix KDE dialogs not supporting multiple file name filter groups" - title: "Fix libraries being sorted alphabetically by full path rather than just library name" @@ -340,7 +340,7 @@ date: 2017-08-04 new features: - - title: "Linux: Use native file dialogs via zenity or kdialog, if available" + - title: "GNU/Linux: Use native file dialogs via zenity or kdialog, if available" - title: "Copy to library: Add an action to show a dialog that allows for easy selection of libraries for copy/move. Useful when there are a large number of libraries to choose from." tickets: [1706198] @@ -519,7 +519,7 @@ - title: "Server: Fix timeout errors when using SSL (particularly common when running the server on windows)" - - title: "Linux: Fix slow mouse wheel scrolling in Cover grid because of Qt bug" + - title: "GNU/Linux: Fix slow mouse wheel scrolling in Cover grid because of Qt bug" - title: "Blacklist the iOS Reader applications and Marvin XD plugins as they were preventing calibre from starting up and they have not worked in a long time anyway, since Apple restricted USB access to their iOS devices" @@ -555,8 +555,6 @@ - title: "Edit metadata dialog: Add buttons to easily set/clear Yes/no columns" tickets: [1698331] - - title: "Support for RAR 5.0 format RAR and CBR files" - bug fixes: - title: "Version 3.1.1 fixes a regression in 3.1.0 that prevented the standalone calibre-server.exe from working on Windows and macOS" @@ -3720,7 +3718,7 @@ - title: "Add books: Improve performance when adding large numbers of books at once" - - title: "Add books: Allow adding books from multiple ZIP/RAR archives, each containing many books, by right clicking on the Add books and choosing 'Add from archive'" + - title: "Add books: Allow adding books from multiple ZIP archives, each containing many books, by right clicking on the Add books and choosing 'Add from archive'" - title: "Metadata download: Prioritize results that have the same language as the current calibre user interface language" diff --git a/README.md b/README.md index 584157f..df775a7 100644 --- a/README.md +++ b/README.md @@ -3,17 +3,22 @@ calibre -calibre is an e-book manager. It can view, convert, edit and catalog e-books -in all of the major e-book formats. It can also talk to e-book reader -devices. It can go out to the internet and fetch metadata for your books. -It can download newspapers and convert them into e-books for convenient -reading. It is cross platform, running on Linux, Windows and OS X. +This is a fully-libre fork of calibre, an e-book manager. +It can view, convert, edit and catalog e-books in all of the major e-book formats. +It can also talk to e-book reader devices. It can go out to the internet and fetch +metadata for your books. +It can download newspapers and convert them into e-books for convenient +reading. It is cross platform, running on GNU/Linux, Windows and OS X. For more information, see the [calibre About page](https://calibre-ebook.com/about) [![Build Status](https://api.travis-ci.org/kovidgoyal/calibre.svg)](https://travis-ci.org/kovidgoyal/calibre) [![Build status](https://ci.appveyor.com/api/projects/status/v3nkfq0t3pse8lep?svg=true&passingText=windows%20OK&failingText=windows%20KO)](https://ci.appveyor.com/project/kovidgoyal/calibre) +
+
+
+ Screenshots ------------- [Screenshots page](https://calibre-ebook.com/demo) @@ -34,12 +39,5 @@ Bugs ------ Bug reports and feature requests should be made in the calibre bug tracker at [launchpad](https://bugs.launchpad.net/calibre). -GitHub is only used for code hosting and pull requests. - -Support calibre ----------------- - -calibre is a result of the efforts of many volunteers from all over the world. -If you find it useful, please consider contributing to support its development. -[Donate to support calibre development](https://calibre-ebook.com/donate). +If the bug is particular to this fork, then report it in the [Parabola Bug Tracker](https://labs.parabola.nu/projects) diff --git a/imgsrc/mimetypes/rar.svg a/imgsrc/mimetypes/rar.svg deleted file mode 100644 index 9b1f34e..0000000 --- a/imgsrc/mimetypes/rar.svg +++ /dev/null @@ -1,2765 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/manual/conversion.rst b/manual/conversion.rst index 8fa28e6..6eca538 100644 --- a/manual/conversion.rst +++ b/manual/conversion.rst @@ -735,7 +735,7 @@ output ranging anywhere from decent to unusable, depending on the input PDF. Comic book collections ~~~~~~~~~~~~~~~~~~~~~~~~~ -A comic book collection is a .cbc file. A .cbc file is a ZIP file that contains other CBZ/CBR files. In addition the +A comic book collection is a .cbc file. A .cbc file is a ZIP file that contains other CBZ files. In addition the .cbc file must contain a simple text file called comics.txt, encoded in UTF-8. The comics.txt file must contain a list of the comics files inside the .cbc file, in the form filename:title, as shown below:: diff --git a/manual/faq.rst b/manual/faq.rst index 0637394..adb2e84 100644 --- a/manual/faq.rst +++ b/manual/faq.rst @@ -18,7 +18,7 @@ What formats does calibre support conversion to/from? calibre supports the conversion of many input formats to many output formats. It can convert every input format in the following list, to every output format. -*Input Formats:* AZW, AZW3, AZW4, CBZ, CBR, CBC, CHM, DJVU, DOCX, EPUB, FB2, HTML, HTMLZ, LIT, LRF, MOBI, ODT, PDF, PRC, PDB, PML, RB, RTF, SNB, TCR, TXT, TXTZ +*Input Formats:* AZW, AZW3, AZW4, CBZ, CBC, CHM, DJVU, DOCX, EPUB, FB2, HTML, HTMLZ, LIT, LRF, MOBI, ODT, PDF, PRC, PDB, PML, RB, RTF, SNB, TCR, TXT, TXTZ *Output Formats:* AZW3, EPUB, DOCX, FB2, HTMLZ, OEB, LIT, LRF, MOBI, PDB, PMLZ, RB, PDF, RTF, SNB, TCR, TXT, TXTZ, ZIP diff --git a/manual/gui.rst b/manual/gui.rst index 0c38741..54418f7 100644 --- a/manual/gui.rst +++ b/manual/gui.rst @@ -51,7 +51,7 @@ Add books 3. **Add books from directories, including sub-directories (Multiple books per directory, assumes every e-book file is a different book)**: Allows you to choose a directory. The directory and all its sub-directories are scanned recursively and any e-books found are added to the library. calibre assumes that each directory contains many books. All e-book files with the same name in a directory are assumed to be the same book in different formats. E-books with different names are added as different books. - 4. **Add multiple books from archive (ZIP/RAR)**: Allows you to add multiple e-books that are stored inside the selected ZIP or RAR files. It is a convenient shortcut that avoids having to first unzip the archive and then add the books via one of the above two options. + 4. **Add multiple books from archive (ZIP)**: Allows you to add multiple e-books that are stored inside the selected ZIP files. It is a convenient shortcut that avoids having to first unzip the archive and then add the books via one of the above two options. 5. **Add empty book (Book Entry with no formats)**: Allows you to create a blank book record. This can be used to then manually fill out the information about a book that you may not have yet in your collection. diff --git a/recipes/economist.recipe b/recipes/economist.recipe index 0116528..4766232 100644 --- a/recipes/economist.recipe +++ b/recipes/economist.recipe @@ -39,7 +39,7 @@ class Economist(BasicNewsRecipe): INDEX = 'https://www.economist.com/printedition' description = ( 'Global news and current affairs from a European' - ' perspective. Best downloaded on Friday mornings (GMT)' + ' perspective. Best downloaded on Saturday mornings (GMT)' ) extra_css = ''' .headline {font-size: x-large;} diff --git a/resources/calibre-portable.bat a/resources/calibre-portable.bat deleted file mode 100644 index e30cb26..0000000 --- a/resources/calibre-portable.bat +++ /dev/null @@ -1,207 +0,0 @@ -@echo OFF -REM Calibre-Portable.bat -REM ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ -REM -REM Batch File to start a Calibre configuration on Windows -REM giving explicit control of the location of: -REM - Calibre Program Files -REM - Calibre Library Files -REM - Calibre Config Files -REM - Calibre Metadata database -REM - Calibre Source files -REM - Calibre Temp Files -REM By setting the paths correctly it can be used to run: -REM - A "portable calibre" off a USB stick. -REM - A network installation with local metadata database -REM (for performance) and books stored on a network share -REM - A local installation using customised settings -REM -REM If trying to run off a USB stick then the folder structure -REM shown below is recommended (relative to the location of -REM this batch file). This can structure can also be used -REM when running of a local hard disk if you want to get the -REM level of control this batch file provides. -REM - Calibre2 Location of program files -REM - CalibreConfig Location of Configuration files -REM - CalibreLibrary Location of Books and metadata -REM - CalibreSource Location of Calibre Source files (Optional) -REM -REM This batch file is designed so that if you create the recommended -REM folder structure then it can be used 'as is' without modification. -REM -REM More information on the Environment Variables used by Calibre can -REM be found at: -REM https://manual.calibre-ebook.com/customize.html#environment-variables -REM -REM The documentation for this file in the Calibre manual can be found at: -REM https://manual.calibre-ebook.com/portable.html -REM -REM CHANGE HISTORY -REM ¬¬¬¬¬¬¬¬¬¬¬¬¬¬ -REM 22 Jan 2012 itimpi - Updated to keep it in line with the calibre-portable.sh -REM file for Linux systems - - -REM ------------------------------------- -REM Set up Calibre Config folder -REM -REM This is where user specific settings -REM are stored. -REM ------------------------------------- - -IF EXIST CalibreConfig ( - SET CALIBRE_CONFIG_DIRECTORY=%cd%\CalibreConfig - ECHO CONFIG FILES: %cd%\CalibreConfig -) - - -REM -------------------------------------------------------------- -REM Specify Location of ebooks -REM -REM Location where Book files are located -REM Either set explicit path, or if running from a USB stick -REM a relative path can be used to avoid need to know the -REM drive letter of the USB stick. -REM -REM Comment out any of the following that are not to be used -REM (although leaving them in does not really matter) -REM -------------------------------------------------------------- - -IF EXIST U:\eBooks\CalibreLibrary ( - SET CALIBRE_LIBRARY_DIRECTORY=U:\eBOOKS\CalibreLibrary - ECHO LIBRARY FILES: U:\eBOOKS\CalibreLibrary -) -IF EXIST CalibreLibrary ( - SET CALIBRE_LIBRARY_DIRECTORY=%cd%\CalibreLibrary - ECHO LIBRARY FILES: %cd%\CalibreLibrary -) - - -REM -------------------------------------------------------------- -REM Specify Location of metadata database (optional) -REM -REM Location where the metadata.db file is located. If not set -REM the same location as Books files will be assumed. This. -REM option is typically set to get better performance when the -REM Library is on a (slow) network drive. Putting the metadata.db -REM file locally then makes gives a big performance improvement. -REM -REM NOTE. If you use this option, then the ability to switch -REM libraries within Calibre will be disabled. Therefore -REM you do not want to set it if the metadata.db file -REM is at the same location as the book files. -REM -REM Another point to watch is that plugins can cause problems -REM as they often store absolute path information -REM -------------------------------------------------------------- - -IF EXIST %cd%\CalibreMetadata\metadata.db ( - IF NOT "%CALIBRE_LIBRARY_DIRECTORY%" == "%cd%\CalibreMetadata" ( - SET CALIBRE_OVERRIDE_DATABASE_PATH=%cd%\CalibreMetadata\metadata.db - ECHO DATABASE: %cd%\CalibreMetadata\metadata.db - ECHO ' - ECHO ***CAUTION*** Library Switching will be disabled - ECHO ' - ) -) - -REM -------------------------------------------------------------- -REM Specify Location of source (optional) -REM -REM It is easy to run Calibre from source -REM Just set the environment variable to where the source is located -REM When running from source the GUI will have a '*' after the version. -REM number that is displayed at the bottom of the Calibre main screen. -REM -REM More information on setting up a development environment can -REM be found at: -REM https://manual.calibre-ebook.com/develop.html#develop -REM -------------------------------------------------------------- - -IF EXIST CalibreSource\src ( - SET CALIBRE_DEVELOP_FROM=%cd%\CalibreSource\src - ECHO SOURCE FILES: %cd%\CalibreSource\src -) ELSE ( - ECHO SOURCE FILES: *** Not being Used *** -) - - -REM -------------------------------------------------------------- -REM Specify Location of calibre Windows binaries (optional) -REM -REM To avoid needing Calibre to be set in the search path, ensure -REM that Calibre Program Files is current directory when starting. -REM The following test falls back to using search path . -REM This folder can be populated by copying the Calibre2 folder from -REM an existing installation or by installing direct to here. -REM -REM NOTE. Do not try and put both Windows and Linux binaries into -REM same folder as this can cause problems. -REM -------------------------------------------------------------- - -IF EXIST %cd%\Calibre2 ( - CD %cd%\Calibre2 - ECHO PROGRAM FILES: %cd% -) ELSE ( - ECHO PROGRAM FILES: *** Use System search PATH *** -) - - -REM -------------------------------------------------------------- -REM Location of Calibre Temporary files (optional) -REM -REM Calibre creates a lot of temporary files while running -REM In theory these are removed when Calibre finishes, but -REM in practise files can be left behind (particularily if -REM any errors occur). Using this option allows some -REM explicit clean-up of these files. -REM If not set Calibre uses the normal system TEMP location -REM -------------------------------------------------------------- - -SET CALIBRE_TEMP_DIR=%TEMP%\CALIBRE_TEMP -ECHO TEMPORARY FILES: %CALIBRE_TEMP_DIR% - -IF EXIST "%CALIBRE_TEMP_DIR%" RMDIR /s /q "%CALIBRE_TEMP_DIR%" -MKDIR "%CALIBRE_TEMP_DIR%" -REM set the following for any components that do -REM not obey the CALIBRE_TEMP_DIR setting -SET TMP=%CALIBRE_TEMP_DIR% -SET TEMP=%CALIBRE_TEMP_DIR% - - -REM -------------------------------------------------------------- -REM Set the Interface language (optional) -REM -REM If not set Calibre uses the language set in Preferences -REM -------------------------------------------------------------- - -SET CALIBRE_OVERRIDE_LANG=EN -ECHO INTERFACE LANGUAGE: %CALIBRE_OVERRIDE_LANG% - -REM ---------------------------------------------------------- -REM The following gives a chance to check the settings before -REM starting Calibre. It can be commented out if not wanted. -REM ---------------------------------------------------------- - -ECHO ' -ECHO Press CTRL-C if you do not want to continue -PAUSE - - -REM -------------------------------------------------------- -REM Start up the calibre program. -REM -REM The use of 'belownormal' priority helps keep the system -REM responsive while Calibre is running. Within Calibre itself -REM the backgound processes should be set to run with 'low' priority. - -REM Using the START command starts up Calibre in a separate process. -REM If used without /WAIT option it launches Calibre and contines batch file. -REM normally this would simply run off the end and close the Command window. -REM Use with /WAIT to wait until Calibre completes to run a task on exit -REM -------------------------------------------------------- - -ECHO "Starting up Calibre" -ECHO OFF -ECHO %cd% -START /belownormal Calibre --with-library "%CALIBRE_LIBRARY_DIRECTORY%" diff --git a/resources/calibre-portable.sh a/resources/calibre-portable.sh deleted file mode 100755 index beafb10..0000000 --- a/resources/calibre-portable.sh +++ /dev/null @@ -1,395 +0,0 @@ -#!/bin/bash -# Calibre-Portable.sh -# ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ -# -# Shell script File to start a Calibre configuration on Linux -# giving explicit control of the location of: -# - Calibre Program Files -# - Calibre Library Files -# - Calibre Config Files -# - Calibre Metadata database -# - Calibre Source files -# - Calibre Temp Files -# By setting the paths correctly it can be used to run: -# - A "portable calibre" off a USB stick. -# - A network installation with local metadata database -# (for performance) and books stored on a network share -# - A local installation using customised settings -# -# If trying to run off a USB stick then the folder structure -# shown below is recommended (relative to the location of -# this script file). This structure can also be used when -# running of a local hard disk if you want to get the level -# of control this script file provides. -# - Calibre Location of linux program files -# - CalibreConfig Location of Configuration files -# - CalibreLibrary Location of Books and metadata -# - CalibreSource Location of Calibre Source files (Optional) -# -# This script file is designed so that if you create the recommended -# folder structure then it can be used 'as is' without modification. -# To use your own structure, simply set the variables in the generated configuration file. -# -# More information on the Environment Variables used by Calibre can -# be found at: -# https://manual.calibre-ebook.com/customize.html#environment-variables -# -# NOTE: It is quite possible to have both Windows and Linux binaries on the same -# USB stick but set up to use the same calibre settings otherwise. -# In this case you use: -# - calibre-portable.bat to run the Windows version -# - calibre-portable.sh to run the Linux version -# -# CHANGE HISTORY -# ¬¬¬¬¬¬¬¬¬¬¬¬¬¬ -# 22 Jan 2012 itimpi ----- First version based on the calibre-portable.bat file for Windows -# It should have identical functionality but for a linux environment. -# It might work on MacOS but that has not been validated. -# -# 02 Feb 2015 eschwartz -- Fix path issues, allow setting each location in one variable, allow -# specifying a list of libraries in descending order of priority. -# -# 01 Apr 2015 eschwartz -- Fix temp dir and permissions, migrate settings to configuration file. - -# ----------------------------------------------------- -# On exit, make sure all files are marked world-writable. -# This allows you to use calibre on other computers -# without changing fstab rules and suchlike. -# You can now use an ext3 drive instead of vfat so the -# binaries and script will be executable. -# ----------------------------------------------------- - -cleanup() { - # Check if user has disabled cleanup - if [[ "${CALIBRE_NO_CLEANUP}" = "1" ]]; then - return - fi - - for i in "${CONFIG_DIR}" "${CALIBRE_LIBRARY_DIRECTORY}" \ - "${METADATA_DIR}" "${SRC_DIR}" "${BIN_DIR}"; do - if [[ -d "${i}" ]]; then - chmod a+rwX "${i}" - fi - done - rm -rf "${CALIBRE_TEMP_DIR}" -} - -trap cleanup EXIT - -# ------------------------------------------------ -# Interactive options. -# ------------------------------------------------ - -usage() -{ - cat <<- _EOF_ - Usage: calibre-portable.sh [OPTIONS] - Run a portable instance of calibre. - - OPTIONS - -u, --upgrade-install upgrade or install the portable calibre binaries - -h, --help show this usage message then exit -_EOF_ -} - -do_upgrade() -{ - wget -nv -O- https://raw.githubusercontent.com/kovidgoyal/calibre/master/setup/linux-installer.py \ - | python -c "import sys; main=lambda x,y:sys.stderr.write('Download failed\n'); \ - exec(sys.stdin.read()); main('$(pwd)', True)" -} - -while [[ "${#}" -gt 0 ]]; do - case "${1}" in - -h|--help) - usage - exit - ;; - -u|--upgrade-install) - do_upgrade - exit - ;; - *) - echo "calibre-portable.sh: unecognzed option '${1}'" - echo "Try 'calibre-portable.sh --help' for more information." - exit 1 - esac - shift -done - -# ------------------------------------------------ -# Create or read configuration file. -# ------------------------------------------------ - -if [[ -f "$(pwd)/calibre-portable.conf" ]]; then - source "$(pwd)/calibre-portable.conf" -else - cat <<- _EOF_ > $(pwd)/calibre-portable.conf - # Configuration file for calibre-portable. Generated on $(date) - # Settings in here will override the defaults specified in the portable launcher. - - ################################################## - # Set up calibre config folder. - # - # This is where user specific settings are stored. - ################################################## - - # CONFIG_DIR="\$(pwd)/CalibreConfig" - - ################################################################ - # -- Specify the location of your calibre library. - # - # -- Either set an explicit path, or if running from a USB stick - # -- a relative path can be used to avoid needing to know the - # -- mount point of the USB stick. - # - # -- Specify a list of libraries here, by adding new elements to the - # -- array. The first value of LIBRARY_DIRS that is an existing directory - # -- will be used as the current calibre library. - ################################################################ - - # LIBRARY_DIRS[0]="/path/to/first/CalibreLibrary" - # LIBRARY_DIRS[1]="/path/to/second/CalibreLibrary" - # LIBRARY_DIRS[2]="\$(pwd)/CalibreLibrary" - - ################################################################ - # -- Specify location of metadata database (optional). - # - # -- Location where the metadata.db file is located. If not set - # -- then the same location as the library folder will be assumed. - # -- This option is typically used to get better performance when the - # -- library is on a (slow) network drive. Putting the metadata.db - # -- file locally then makes gives a big performance improvement. - # - # -- NOTE. If you use this option, then the ability to switch - # -- libraries within calibre will be disabled. Therefore - # -- you do not want to set it if the metadata.db file - # -- is at the same location as the book files. - # - # -- Another point to watch is that plugins can cause problems - # -- as they often store absolute path information. - ################################################################ - - # METADATA_DIR="\$(pwd)/CalibreMetadata" - - ################################################################ - # -- Specify location of source (optional). - # - # -- It is easy to run calibre from source. Just set the environment - # -- variable to where the source is located. When running from source - # -- the GUI will have a '*' after the version number that is displayed - # -- at the bottom of the calibre main screen. - # - # -- More information on setting up a development environment can - # -- be found at: - # -- https://manual.calibre-ebook.com/develop.html#develop - ################################################################ - - # SRC_DIR="$\(pwd)/CalibreSource/src" - - ################################################################ - # -- Specify location of calibre linux binaries (optional). - # - # -- To avoid needing Calibre to be set in the search path, ensure - # -- that if Calibre Program Files exists, we manually specify the - # -- location of the binary. - # -- The following test falls back to using the search path, or you - # -- can specifically use the search path by leaving the BIN_DIR blank. - # - # -- This folder can be populated by copying the /opt/calibre folder - # -- from an existing installation or by installing direct to here. - # - # -- NOTE. Do not try and put both Windows and Linux binaries into - # -- the same folder as this can cause problems. - ################################################################ - - # BIN_DIR="$\(pwd)/calibre" - - ################################################################ - # -- Location of calibre temporary files (optional). - # - # -- calibre creates a lot of temporary files while running - # -- In theory these are removed when calibre finishes, but - # -- in practice files can be left behind (particularly if - # -- a crash occurs). Using this option allows some - # -- explicit clean-up of these files. - # -- If not set calibre uses the normal system TEMP location - ################################################################ - - # CALIBRE_TEMP_DIR="/tmp/CALIBRE_TEMP_\$(tr -dc 'A-Za-z0-9' - - - - Show notification when &new version is available - - - diff --git a/src/calibre/gui2/preferences/look_feel.ui b/src/calibre/gui2/preferences/look_feel.ui index baa4a30..5636ef3 100644 --- a/src/calibre/gui2/preferences/look_feel.ui +++ b/src/calibre/gui2/preferences/look_feel.ui @@ -1200,7 +1200,7 @@ column being examined (the left-hand pane) - + diff --git a/src/calibre/gui2/update.py b/src/calibre/gui2/update.py index 9ea0993..9f59a9d 100644 --- a/src/calibre/gui2/update.py +++ b/src/calibre/gui2/update.py @@ -1,20 +1,18 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal ' -import re, binascii, cPickle, ssl, json +import binascii, cPickle from future_builtins import map from threading import Thread, Event from PyQt5.Qt import (QObject, pyqtSignal, Qt, QUrl, QDialog, QGridLayout, - QLabel, QCheckBox, QDialogButtonBox, QIcon) + QLabel, QCheckBox, QIcon) -from calibre.constants import (__appname__, __version__, iswindows, isosx, +from calibre.constants import (__appname__, iswindows, isosx, isportable, is64bit, numeric_version) from calibre import prints, as_unicode -from calibre.utils.config import prefs from calibre.utils.localization import localize_website_link -from calibre.utils.https import get_https_resource_securely -from calibre.gui2 import config, dynamic, open_url +from calibre.gui2 import dynamic, open_url from calibre.gui2.dialogs.plugin_updater import get_plugin_updates_available URL = 'https://code.calibre-ebook.com/latest' @@ -31,35 +29,7 @@ def get_download_url(): def get_newest_version(): - try: - icon_theme_name = json.loads(I('icon-theme.json', data=True))['name'] - except Exception: - icon_theme_name = '' - headers={ - 'CALIBRE-VERSION':__version__, - 'CALIBRE-OS': ('win' if iswindows else 'osx' if isosx else 'oth'), - 'CALIBRE-INSTALL-UUID': prefs['installation_uuid'], - 'CALIBRE-ICON-THEME': icon_theme_name, - } - try: - version = get_https_resource_securely(URL, headers=headers) - except ssl.SSLError as err: - if getattr(err, 'reason', None) != 'CERTIFICATE_VERIFY_FAILED': - raise - # certificate verification failed, since the version check contains no - # critical information, ignore and proceed - # We have to do this as if the calibre CA certificate ever - # needs to be revoked, then we wont be able to do version checks - version = get_https_resource_securely(URL, headers=headers, cacerts=None) - try: - version = version.decode('utf-8').strip() - except UnicodeDecodeError: - version = u'' - ans = NO_CALIBRE_UPDATE - m = re.match(ur'(\d+)\.(\d+).(\d+)$', version) - if m is not None: - ans = tuple(map(int, (m.group(1), m.group(2), m.group(3)))) - return ans + return NO_CALIBRE_UPDATE class Signal(QObject): @@ -82,12 +52,6 @@ class CheckForUpdates(Thread): calibre_update_version = NO_CALIBRE_UPDATE plugins_update_found = 0 try: - version = get_newest_version() - if version[:2] > numeric_version[:2]: - calibre_update_version = version - except Exception as e: - prints('Failed to check for calibre update:', as_unicode(e)) - try: update_plugins = get_plugin_updates_available(raise_error=True) if update_plugins is not None: plugins_update_found = len(update_plugins) @@ -126,11 +90,6 @@ class UpdateNotification(QDialog): self.setWindowIcon(QIcon(I('lt.png'))) self.l.addWidget(self.logo, 0, 0) self.l.addWidget(self.label, 0, 1) - self.cb = QCheckBox( - _('Show this notification for future updates'), self) - self.l.addWidget(self.cb, 1, 0, 1, -1) - self.cb.setChecked(config.get('new_version_notification')) - self.cb.stateChanged.connect(self.show_future) self.bb = QDialogButtonBox(self) b = self.bb.addButton(_('&Get update'), self.bb.AcceptRole) b.setDefault(True) @@ -152,9 +111,6 @@ class UpdateNotification(QDialog): initial_filter=FILTER_UPDATE_AVAILABLE) d.exec_() - def show_future(self, *args): - config.set('new_version_notification', bool(self.cb.isChecked())) - def accept(self): open_url(QUrl(get_download_url())) @@ -202,8 +158,7 @@ class UpdateMixin(object): self.status_bar.update_label.setVisible(True) if has_calibre_update: - if (force or (config.get('new_version_notification') and - dynamic.get('update to version %s'%calibre_version, True))): + if force: if not no_show_popup: self._update_notification__ = UpdateNotification(calibre_version, number_of_plugin_updates, parent=self) diff --git a/src/calibre/linux.py b/src/calibre/linux.py index 17b55cb..f9b06ea 100644 --- a/src/calibre/linux.py +++ b/src/calibre/linux.py @@ -317,7 +317,7 @@ class ZshCompleter(object): # {{{ ): for fmt in fmts: is_input = group_title == input_group - if is_input and fmt in {'rar', 'zip', 'oebzip'}: + if is_input and fmt in {'zip', 'oebzip'}: continue p = (get_parser(input_fmt=fmt) if is_input else get_parser(output_fmt=fmt)) diff --git a/src/calibre/test_build.py b/src/calibre/test_build.py index 897e6b5..2af959d 100644 --- a/src/calibre/test_build.py +++ b/src/calibre/test_build.py @@ -205,10 +205,6 @@ class BuildTest(unittest.TestCase): from calibre.gui2.win_file_dialogs import test test() - def test_unrar(self): - from calibre.utils.unrar import test_basic - test_basic() - @unittest.skipUnless(iswindows, 'WPD is windows only') def test_wpd(self): wpd = plugins['wpd'][0] diff --git a/src/calibre/utils/search_query_parser.py b/src/calibre/utils/search_query_parser.py index 9fac662..f9d1535 100644 --- a/src/calibre/utils/search_query_parser.py +++ b/src/calibre/utils/search_query_parser.py @@ -456,16 +456,16 @@ class Tester(SearchQueryParser): u'Tor Books', u'lrf'], 8: [u'Stalky and Co.', u'Rudyard Kipling', u'manybooks.net', u'lrf'], - 9: [u'A Game of Thrones', u'George R. R. Martin', None, u'lrf,rar'], - 10: [u'A Clash of Kings', u'George R. R. Martin', None, u'lrf,rar'], - 11: [u'A Storm of Swords', u'George R. R. Martin', None, u'lrf,rar'], + 9: [u'A Game of Thrones', u'George R. R. Martin', None, u'lrf'], + 10: [u'A Clash of Kings', u'George R. R. Martin', None, u'lrf'], + 11: [u'A Storm of Swords', u'George R. R. Martin', None, u'lrf'], 12: [u'Biggles - Pioneer Air Fighter', u'W. E. Johns', None, u'lrf,rtf'], 13: [u'Biggles of the Camel Squadron', u'W. E. Johns', u'London:Thames, (1977)', u'lrf,rtf'], - 14: [u'A Feast for Crows', u'George R. R. Martin', None, u'lrf,rar'], - 15: [u'Cryptonomicon', u'Neal Stephenson', None, u'lrf,rar'], + 14: [u'A Feast for Crows', u'George R. R. Martin', None, u'lrf'], + 15: [u'Cryptonomicon', u'Neal Stephenson', None, u'lrf'], 16: [u'Quicksilver', u'Neal Stephenson', None, u'lrf,zip'], 17: [u'The Comedies of William Shakespeare', u'William Shakespeare', @@ -480,15 +480,15 @@ class Tester(SearchQueryParser): None, u'lrf'], 20: [u'An Ideal Husband', u'Oscar Wilde', u'manybooks.net', u'lrf'], - 21: [u'Flight of the Nighthawks', u'Raymond E. Feist', None, u'lrf,rar'], - 22: [u'Into a Dark Realm', u'Raymond E. Feist', None, u'lrf,rar'], - 23: [u'The Sundering', u'Walter Jon Williams', None, u'lrf,rar'], - 24: [u'The Praxis', u'Walter Jon Williams', None, u'lrf,rar'], - 25: [u'Conventions of War', u'Walter Jon Williams', None, u'lrf,rar'], - 26: [u'Banewreaker', u'Jacqueline Carey', None, u'lrf,rar'], - 27: [u'Godslayer', u'Jacqueline Carey', None, u'lrf,rar'], - 28: [u"Kushiel's Scion", u'Jacqueline Carey', None, u'lrf,rar'], - 29: [u'Underworld', u'Don DeLillo', None, u'lrf,rar'], + 21: [u'Flight of the Nighthawks', u'Raymond E. Feist', None, u'lrf'], + 22: [u'Into a Dark Realm', u'Raymond E. Feist', None, u'lrf'], + 23: [u'The Sundering', u'Walter Jon Williams', None, u'lrf'], + 24: [u'The Praxis', u'Walter Jon Williams', None, u'lrf'], + 25: [u'Conventions of War', u'Walter Jon Williams', None, u'lrf'], + 26: [u'Banewreaker', u'Jacqueline Carey', None, u'lrf'], + 27: [u'Godslayer', u'Jacqueline Carey', None, u'lrf'], + 28: [u"Kushiel's Scion", u'Jacqueline Carey', None, u'lrf'], + 29: [u'Underworld', u'Don DeLillo', None, u'lrf'], 30: [u'Genghis Khan and The Making of the Modern World', u'Jack Weatherford Orc', u'Three Rivers Press', @@ -499,9 +499,9 @@ class Tester(SearchQueryParser): u'lrf,zip'], 32: [u'The Killer Angels', u'Michael Shaara', None, u'html,lrf'], 33: [u'Band Of Brothers', u'Stephen E Ambrose', None, u'lrf,txt'], - 34: [u'The Gates of Rome', u'Conn Iggulden', None, u'lrf,rar'], + 34: [u'The Gates of Rome', u'Conn Iggulden', None, u'lrf'], 35: [u'The Death of Kings', u'Conn Iggulden', u'Bantam Dell', u'lit,lrf'], - 36: [u'The Field of Swords', u'Conn Iggulden', None, u'lrf,rar'], + 36: [u'The Field of Swords', u'Conn Iggulden', None, u'lrf'], 37: [u'Masterman Ready', u'Marryat, Captain Frederick', None, u'lrf'], 38: [u'With the Lightnings', u'David Drake', @@ -514,16 +514,16 @@ class Tester(SearchQueryParser): 40: [u'The Far Side of The Stars', u'David Drake', u'Baen Publishing Enterprises', - u'lrf,rar'], + u'lrf'], 41: [u'The Way to Glory', u'David Drake', u'Baen Publishing Enterprises', - u'lrf,rar'], - 42: [u'Some Golden Harbor', u'David Drake', u'Baen Books', u'lrf,rar'], + u'lrf'], + 42: [u'Some Golden Harbor', u'David Drake', u'Baen Books', u'lrf'], 43: [u'Harry Potter And The Half-Blood Prince', u'J. K. Rowling', None, - u'lrf,rar'], + u'lrf'], 44: [u'Harry Potter and the Order of the Phoenix', u'J. K. Rowling', None, @@ -532,12 +532,12 @@ class Tester(SearchQueryParser): 46: [u'The Stars at War II', u'Steve White', u'Baen Publishing Enterprises', - u'lrf,rar'], - 47: [u'Exodus', u'Steve White,Shirley Meier', u'Baen Books', u'lrf,rar'], + u'lrf'], + 47: [u'Exodus', u'Steve White,Shirley Meier', u'Baen Books', u'lrf'], 48: [u'Harry Potter and the Goblet of Fire', u'J. K. Rowling', None, - u'lrf,rar'], + u'lrf'], 49: [u'Harry Potter and the Prisoner of Azkaban', u'J. K. Rowling', None, @@ -550,20 +550,20 @@ class Tester(SearchQueryParser): u'J.K. Rowling', None, u'lit,lrf,pdf'], - 52: [u"His Majesty's Dragon", u'Naomi Novik', None, u'lrf,rar'], + 52: [u"His Majesty's Dragon", u'Naomi Novik', None, u'lrf'], 53: [u'Throne of Jade', u'Naomi Novik', u'Del Rey', u'lit,lrf'], - 54: [u'Black Powder War', u'Naomi Novik', u'Del Rey', u'lrf,rar'], + 54: [u'Black Powder War', u'Naomi Novik', u'Del Rey', u'lrf'], 55: [u'War and Peace', u'Leo Tolstoy', u'gutenberg.org', u'lrf,txt'], 56: [u'Anna Karenina', u'Leo Tolstoy', u'gutenberg.org', u'lrf,txt'], 57: [u'A Shorter History of Rome', u'Eugene Lawrence,Sir William Smith', u'gutenberg.org', u'lrf,zip'], - 58: [u'The Name of the Rose', u'Umberto Eco', None, u'lrf,rar'], + 58: [u'The Name of the Rose', u'Umberto Eco', None, u'lrf'], 71: [u"Wind Rider's Oath", u'David Weber', u'Baen', u'lrf'], 74: [u'Rally Cry', u'William R Forstchen', None, u'htm,lrf'], - 86: [u'Empire of Ivory', u'Naomi Novik', None, u'lrf,rar'], - 87: [u"Renegade's Magic", u'Robin Hobb', None, u'lrf,rar'], + 86: [u'Empire of Ivory', u'Naomi Novik', None, u'lrf'], + 87: [u"Renegade's Magic", u'Robin Hobb', None, u'lrf'], 89: [u'Master and commander', u"Patrick O'Brian", u'Fontana,\n1971', @@ -571,7 +571,7 @@ class Tester(SearchQueryParser): 91: [u'A Companion to Wolves', u'Sarah Monette,Elizabeth Beär', None, - u'lrf,rar'], + u'lrf'], 92: [u'The Lions of al-Rassan', u'Guy Gavriel Kay', u'Eos', u'lit,lrf'], 93: [u'Gardens of the Moon', u'Steven Erikson', u'Tor Fantasy', u'lit,lrf'], 95: [u'The Master and Margarita', @@ -595,7 +595,7 @@ class Tester(SearchQueryParser): 144: [u'Atonement', u'Ian McEwan', u'New York : Nan A. Talese/Doubleday, 2002.', - u'lrf,rar'], + u'lrf'], 146: [u'1632', u'Eric Flint', u'Baen Books', u'lit,lrf'], 147: [u'1633', u'David Weber,Eric Flint,Dru Blair', u'Baen', u'lit,lrf'], 148: [u'1634: The Baltic War', @@ -648,7 +648,7 @@ class Tester(SearchQueryParser): 253: [u"Hunter's Run", u'George R. R. Martin,Gardner Dozois,Daniel Abraham', u'Eos', - u'lrf,rar'], + u'lrf'], 257: [u'Knife of Dreams', u'Robert Jordan', None, u'lit,lrf'], 258: [u'Saturday', u'Ian McEwan', @@ -668,7 +668,7 @@ class Tester(SearchQueryParser): u'New York : Random House, 2005.', u'lit,lrf'], 269: [u'Reap the Whirlwind', u'David Mack', u'Star Trek', u'lit,lrf'], - 272: [u'Mistborn', u'Brandon Sanderson', u'Tor Fantasy', u'lrf,rar'], + 272: [u'Mistborn', u'Brandon Sanderson', u'Tor Fantasy', u'lrf'], 273: [u'The Thousandfold Thought', u'R. Scott Bakker', u'Overlook TP', @@ -676,17 +676,17 @@ class Tester(SearchQueryParser): 276: [u'Elantris', u'Brandon Sanderson', u'New York : Tor, 2005.', - u'lrf,rar'], + u'lrf'], 291: [u'Sundiver', u'David Brin', u'New York : Bantam Books, 1995.', u'lit,lrf'], - 299: [u'Imperium', u'Robert Harris', u'Arrow', u'lrf,rar'], + 299: [u'Imperium', u'Robert Harris', u'Arrow', u'lrf'], 300: [u'Startide Rising', u'David Brin', u'Bantam', u'htm,lrf'], 301: [u'The Uplift War', u'David Brin', u'Spectra', u'lit,lrf'], - 304: [u'Brightness Reef', u'David Brin', u'Orbit', u'lrf,rar'], + 304: [u'Brightness Reef', u'David Brin', u'Orbit', u'lrf'], 305: [u"Infinity's Shore", u'David Brin', u'Spectra', u'txt'], - 306: [u"Heaven's Reach", u'David Brin', u'Spectra', u'lrf,rar'], + 306: [u"Heaven's Reach", u'David Brin', u'Spectra', u'lrf'], 325: [u"Foundation's Triumph", u'David Brin', u'Easton Press', u'lit,lrf'], 327: [u'I am Charlotte Simmons', u'Tom Wolfe', u'Vintage', u'htm,lrf'], 335: [u'The Currents of Space', u'Isaac Asimov', None, u'lit,lrf'], @@ -716,15 +716,15 @@ class Tester(SearchQueryParser): u'Aspect', u'lit,lrf'], 356: [u'The Naked God', u'Peter F. Hamilton', u'Aspect', u'lit,lrf'], - 421: [u'A Shadow in Summer', u'Daniel Abraham', u'Tor Fantasy', u'lrf,rar'], + 421: [u'A Shadow in Summer', u'Daniel Abraham', u'Tor Fantasy', u'lrf'], 427: [u'Lonesome Dove', u'Larry M\\cMurtry', None, u'lit,lrf'], 440: [u'Ghost', u'John Ringo', u'Baen', u'lit,lrf'], 441: [u'Kildar', u'John Ringo', u'Baen', u'lit,lrf'], - 443: [u'Hidden Empire ', u'Kevin J. Anderson', u'Aspect', u'lrf,rar'], + 443: [u'Hidden Empire ', u'Kevin J. Anderson', u'Aspect', u'lrf'], 444: [u'The Gun Seller', u'Hugh Laurie', u'Washington Square Press', - u'lrf,rar'] + u'lrf'] } tests = { diff --git a/src/calibre/utils/unrar.py a/src/calibre/utils/unrar.py deleted file mode 100644 index 2fd0af3..0000000 --- a/src/calibre/utils/unrar.py +++ /dev/null @@ -1,158 +0,0 @@ -#!/usr/bin/env python2 -# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:fdm=marker:ai -from __future__ import (unicode_literals, division, absolute_import, print_function) - -__license__ = 'GPL v3' -__copyright__ = '2012, Kovid Goyal ' -__docformat__ = 'restructuredtext en' - -import os -import shutil -import re -from io import BytesIO - -from calibre.constants import filesystem_encoding, iswindows -from calibre.ptempfile import PersistentTemporaryFile, TemporaryDirectory - - -def as_unicode(x): - if isinstance(x, bytes): - x = x.decode(filesystem_encoding) - return x - - -class StreamAsPath(object): - - def __init__(self, stream): - self.stream = stream - - def __enter__(self): - self.temppath = None - if isinstance(self.stream, basestring): - return as_unicode(self.stream) - name = getattr(self.stream, 'name', None) - if name and os.access(name, os.R_OK): - return as_unicode(name) - pos = self.stream.tell() - with PersistentTemporaryFile('for-unar', 'wb') as f: - shutil.copyfileobj(self.stream, f) - self.stream.seek(pos) - self.temppath = f.name - return as_unicode(f.name) - - def __exit__(self, *a): - if self.temppath is not None: - try: - os.remove(self.temppath) - except EnvironmentError: - pass - self.temppath = None - - -def extract(path_or_stream, location): - from unrardll import extract - with StreamAsPath(path_or_stream) as path: - return extract(path, location) - - -def names(path_or_stream): - from unrardll import names - with StreamAsPath(path_or_stream) as path: - for name in names(path, only_useful=True): - yield name - - -def comment(path_or_stream): - from unrardll import comment - with StreamAsPath(path_or_stream) as path: - return comment(path) - - -def extract_member( - path_or_stream, match=re.compile(r'\.(jpg|jpeg|gif|png)\s*$', re.I), name=None): - from unrardll import extract_member - if iswindows and name is not None: - name = name.replace(os.sep, '/') - - def is_match(header): - fname = header['filename'] - if iswindows: - fname = fname.replace(os.sep, '/') - return (name is not None and fname == name) or \ - (match is not None and match.search(fname) is not None) - - with StreamAsPath(path_or_stream) as path: - name, data = extract_member(path, is_match) - if name is not None: - return name, data - - -def extract_first_alphabetically(stream): - from calibre.libunzip import sort_key - names_ = sorted([ - x for x in names(stream) - if os.path.splitext(x)[1][1:].lower() in { - 'png', 'jpg', 'jpeg', 'gif', 'webp'}], - key=sort_key) - return extract_member(stream, name=names_[0], match=None) - - -def extract_cover_image(stream): - from calibre.libunzip import sort_key, name_ok - for name in sorted(names(stream), key=sort_key): - if name_ok(name): - return extract_member(stream, name=name, match=None) - - -# Test normal RAR file {{{ - - -def test_basic(): - - stream = BytesIO( # {{{ - b"Rar!\x1a\x07\x00\xcf\x90s\x00\x00\r\x00\x00\x00\x00\x00\x00\x00\x14\xe7z\x00\x80#\x00\x17\x00\x00\x00\r\x00\x00\x00\x03\xc2\xb3\x96o\x00\x00\x00\x00\x1d3\x03\x00\x00\x00\x00\x00CMT\x0c\x00\x8b\xec\x8e\xef\x14\xf6\xe6h\x04\x17\xff\xcd\x0f\xffk9b\x11]^\x80\xd3dt \x90+\x00\x14\x00\x00\x00\x08\x00\x00\x00\x03\xf1\x84\x93\\\xb9]yA\x1d3\t\x00\xa4\x81\x00\x001\\sub-one\x00\xc0\x0c\x00\x8f\xec\x89\xfe.JM\x86\x82\x0c_\xfd\xfd\xd7\x11\x1a\xef@\x9eHt \x80'\x00\x0e\x00\x00\x00\x04\x00\x00\x00\x03\x9f\xa8\x17\xf8\xaf]yA\x1d3\x07\x00\xa4\x81\x00\x00one.txt\x00\x08\xbf\x08\xae\xf3\xca\x87\xfeo\xfe\xd2n\x80-Ht \x82:\x00\x18\x00\x00\x00\x10\x00\x00\x00\x03\xa86\x81\xdf\xf9fyA\x1d3\x1a\x00\xa4\x81\x00\x00\xe8\xaf\xb6\xe6\xaf\x94\xe5\xb1\x81.txt\x00\x8bh\xf6\xd4kA\\.\x00txt\x0c\x00\x8b\xec\x8e\xef\x14\xf6\xe2l\x91\x189\xff\xdf\xfe\xc2\xd3:g\x9a\x19F=cYt \x928\x00\x11\x00\x00\x00\x08\x00\x00\x00\x03\x7f\xd6\xb6\x7f\xeafyA\x1d3\x16\x00\xa4\x81\x00\x00F\xc3\xbc\xc3\x9fe.txt\x00\x01\x00F\xfc\xdfe\x00.txt\x00\xc0