From 9b52e0d4e8dfb9e5782fa48cffba3fc1d9272962 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 21 May 2011 12:49:17 -0600 Subject: [PATCH 1/7] Fix #786264 (external IP and Ubuntu's 127.0.1.1 addr) --- src/calibre/library/server/base.py | 2 +- src/calibre/utils/mdns.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/calibre/library/server/base.py b/src/calibre/library/server/base.py index eea28469a9..862e724809 100644 --- a/src/calibre/library/server/base.py +++ b/src/calibre/library/server/base.py @@ -218,7 +218,7 @@ class LibraryServer(ContentServer, MobileServer, XMLServer, OPDSServer, Cache, cherrypy.engine.start() except: ip = get_external_ip() - if not ip or ip == '127.0.0.1': + if not ip or ip.startswith('127.'): raise cherrypy.log('Trying to bind to single interface: '+ip) cherrypy.config.update({'server.socket_host' : ip}) diff --git a/src/calibre/utils/mdns.py b/src/calibre/utils/mdns.py index b7cc8757d3..2be6bef49b 100644 --- a/src/calibre/utils/mdns.py +++ b/src/calibre/utils/mdns.py @@ -13,16 +13,17 @@ def _get_external_ip(): ipaddr = socket.gethostbyname(socket.gethostname()) except: ipaddr = '127.0.0.1' - if ipaddr == '127.0.0.1': + if ipaddr.startswith('127.'): for addr in ('192.0.2.0', '198.51.100.0', 'google.com'): try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect((addr, 0)) ipaddr = s.getsockname()[0] - if ipaddr != '127.0.0.1': - return ipaddr + if not ipaddr.startswith('127.'): + break except: time.sleep(0.3) + #print 'ipaddr: %s' % ipaddr return ipaddr _ext_ip = None From d4f79884a4d931bf59f462a5196032fdf7577a9a Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 21 May 2011 14:16:49 -0600 Subject: [PATCH 2/7] Fix #786287 (Updated recipe for The Nation magazine) --- recipes/icons/the_nation.png | Bin 0 -> 925 bytes recipes/the_nation.recipe | 44 +++++++++++++++++++++++++++-------- 2 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 recipes/icons/the_nation.png diff --git a/recipes/icons/the_nation.png b/recipes/icons/the_nation.png new file mode 100644 index 0000000000000000000000000000000000000000..fd6e6ebfb445f3beccce4f5dfb69435c7a43ee3e GIT binary patch literal 925 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR{Y*KXGHy)E{r&e7t%4 z|NsB{BcgZs_+M;lJzZQnTTJr);w5WLEfy*$A5G0zuB8jqI|@caU^s=q{_ai7f&Pi` zba4!+nA3aSo9}=E2TQ;f4WEU3{}* Date: Sat, 21 May 2011 14:19:26 -0600 Subject: [PATCH 3/7] Fix #786293 (Updated recipe for Marca website) --- recipes/icons/marca.png | Bin 0 -> 293 bytes recipes/marca.recipe | 46 +++++++++++++++++----------------------- 2 files changed, 19 insertions(+), 27 deletions(-) create mode 100644 recipes/icons/marca.png diff --git a/recipes/icons/marca.png b/recipes/icons/marca.png new file mode 100644 index 0000000000000000000000000000000000000000..e9231176b66532319eae2266c74d9d1c5ac30c1c GIT binary patch literal 293 zcmV+=0owkFP)|1AyZ(#|t z;UK+U Date: Sat, 21 May 2011 14:20:45 -0600 Subject: [PATCH 4/7] Fix #786299 (Updated recipe for El Mundo) --- recipes/elmundo.recipe | 48 ++++++++++++++++++++++++++------------ recipes/icons/elmundo.png | Bin 550 -> 1082 bytes 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/recipes/elmundo.recipe b/recipes/elmundo.recipe index aea60de304..dedd449f93 100644 --- a/recipes/elmundo.recipe +++ b/recipes/elmundo.recipe @@ -1,6 +1,6 @@ __license__ = 'GPL v3' -__copyright__ = '2009, Darko Miletic ' +__copyright__ = '2009-2011, Darko Miletic ' ''' elmundo.es ''' @@ -10,15 +10,24 @@ from calibre.web.feeds.news import BasicNewsRecipe class ElMundo(BasicNewsRecipe): title = 'El Mundo' __author__ = 'Darko Miletic' - description = 'News from Spain' - publisher = 'El Mundo' + description = 'Lider de informacion en espaniol' + publisher = 'Unidad Editorial Informacion General S.L.U.' category = 'news, politics, Spain' oldest_article = 2 max_articles_per_feed = 100 no_stylesheets = True use_embedded_content = False encoding = 'iso8859_15' - language = 'es' + language = 'es_ES' + masthead_url = 'http://estaticos03.elmundo.es/elmundo/iconos/v4.x/v4.01/bg_h1.png' + publication_type = 'newspaper' + extra_css = """ + body{font-family: Arial,Helvetica,sans-serif} + .metadata_noticia{font-size: small} + h1,h2,h3,h4,h5,h6,.subtitulo {color: #3F5974} + .hora{color: red} + .update{color: gray} + """ conversion_options = { 'comments' : description @@ -30,22 +39,31 @@ class ElMundo(BasicNewsRecipe): keep_only_tags = [dict(name='div', attrs={'class':'noticia'})] remove_tags_before = dict(attrs={'class':['titular','antetitulo'] }) remove_tags_after = dict(name='div' , attrs={'id':['desarrollo_noticia','tamano']}) - + remove_attributes = ['lang','border'] remove_tags = [ dict(name='div', attrs={'class':['herramientas','publicidad_google']}) ,dict(name='div', attrs={'id':'modulo_multimedia' }) ,dict(name='ul', attrs={'class':'herramientas' }) - ,dict(name=['object','link']) + ,dict(name=['object','link','embed','iframe','base','meta']) ] feeds = [ - (u'Portada' , u'http://rss.elmundo.es/rss/descarga.htm?data2=4' ) - ,(u'Deportes' , u'http://rss.elmundo.es/rss/descarga.htm?data2=14') - ,(u'Economia' , u'http://rss.elmundo.es/rss/descarga.htm?data2=7' ) - ,(u'Espana' , u'http://rss.elmundo.es/rss/descarga.htm?data2=8' ) - ,(u'Internacional' , u'http://rss.elmundo.es/rss/descarga.htm?data2=9' ) - ,(u'Cultura' , u'http://rss.elmundo.es/rss/descarga.htm?data2=6' ) - ,(u'Ciencia/Ecologia', u'http://rss.elmundo.es/rss/descarga.htm?data2=5' ) - ,(u'Comunicacion' , u'http://rss.elmundo.es/rss/descarga.htm?data2=26') - ,(u'Television' , u'http://rss.elmundo.es/rss/descarga.htm?data2=76') + (u'Portada' , u'http://estaticos.elmundo.es/elmundo/rss/portada.xml' ) + ,(u'Deportes' , u'http://estaticos.elmundo.es/elmundodeporte/rss/portada.xml') + ,(u'Economia' , u'http://estaticos.elmundo.es/elmundo/rss/economia.xml' ) + ,(u'Espana' , u'http://estaticos.elmundo.es/elmundo/rss/espana.xml' ) + ,(u'Internacional' , u'http://estaticos.elmundo.es/elmundo/rss/internacional.xml' ) + ,(u'Cultura' , u'http://estaticos.elmundo.es/elmundo/rss/cultura.xml' ) + ,(u'Ciencia/Ecologia', u'http://estaticos.elmundo.es/elmundo/rss/ciencia.xml' ) + ,(u'Comunicacion' , u'http://estaticos.elmundo.es/elmundo/rss/comunicacion.xml' ) + ,(u'Television' , u'http://estaticos.elmundo.es/elmundo/rss/television.xml' ) ] + + def preprocess_html(self, soup): + for item in soup.findAll(style=True): + del item['style'] + return soup + + def get_article_url(self, article): + return article.get('guid', None) + diff --git a/recipes/icons/elmundo.png b/recipes/icons/elmundo.png index 754b3d0e154df866a55866b5b4174ad3e1ea1630..24467eac80e2881abcb243aa7cf797fd41050c6a 100644 GIT binary patch literal 1082 zcmdr~{ZkSK0HxHmNU!b2cAe!fJ1@1Zwf(TVwKQx{DxI>_kZj08@UuCYD5i4e+3oCu zlrbpzNaZs>5~mWOTuV@p_>%aXVu^qPf}W9m!?A^Wh?)~`gy%u=pg&1Hg5C8zg zq^ChHh5e&lei#wf#N!9E0e}bq{9+C?96=es23FUaVqp~)8$?Wz1xD+b$wlY@0Z5AMBaqOWVTrC?F`nCc(}P=PocEFo_9K3 z^Arjd+4h&)z0lhyjLW?tS3F>Qg0TSUt~V zw$=(J<#PFAFj!k#dq<>Au3~63njg-A5xJLT2CG0I*xcCmxZGr!71R2Z(mT@E|D=LG zAQFj`N~PZJTwYoI{tQ_CQj2H5km&3NgMl(^2BluhZ63-3sv5dFiE2TV?XP%4sM!aE*bjf8J+{d{i-lG1ye;l%T(g+|gq9pV z9K8ySrHl7QQNMlaHYa`sH-1LL5PsYTRFp^09b5N(%E~UtJ!**pr4{H7UFn!A7$ABg z*&Zl(Pm3CiOORm)#9y4Yt_T2862jF%(B%VB7t0RNP8CG}LEHG81SCY0haHNqERBc% zjqe-g-Y&1(%-}~>9!%)~+eV)?;6jyrW*p;v=}q?J)$WnZG76yX{Hw7^0^lJ-=sKo94f9k^KPZG_gHK+fdwdVh$ev?7MqUx!j^S73@Jl@ye z|L~v2$O8oZakVKLGd49RevI;Qp7HPBZ~q=ip7r)M$r|(aO-}r~tyV*7hQ*Bti5n3! zC2vGVay&AZ-)C5|*5XjXixY)A6nkcuz4`zD`F(pfH?~88|K~rnKm6XlUh>f2I~{)N z5eFwGs|)B|;9mXr|HIGxY;JCkc>jL>F5kSpRqODYV6qdUr9emXsF8NKy z;?w-j-l;2Q9AS8G|3AT^_OWE)O9pX^^52romw_TD%pTloHs{fqbjXG$XU!QN9~BlQ zW@hHY`~Ux!oH0{ElHu^D;w38SFB*X1tXkq4QIcGgnpl#mn*t;lj0_Acbq$PwD8$gx z%Fx2fz*yVBz{ Date: Sat, 21 May 2011 14:27:25 -0600 Subject: [PATCH 5/7] ... --- setup/installer/windows/wix-template.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup/installer/windows/wix-template.xml b/setup/installer/windows/wix-template.xml index 5de08e155f..9835ae8f6b 100644 --- a/setup/installer/windows/wix-template.xml +++ b/setup/installer/windows/wix-template.xml @@ -115,7 +115,7 @@ + Message="This application is only supported on Windows XP SP3, or higher."> = 501)]]> From fb26c223a7346ea215b160c1df8b373a40b47a4a Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 21 May 2011 16:29:57 -0600 Subject: [PATCH 6/7] Fix #786290 (Enhancements for building on NetBSD) --- setup/__init__.py | 4 +++- setup/extensions.py | 6 +++--- setup/install.py | 8 ++++---- src/calibre/__init__.py | 10 +++++----- src/calibre/constants.py | 4 +++- src/calibre/devices/libusb.py | 4 ++-- src/calibre/ebooks/html/input.py | 4 ++-- src/calibre/ebooks/pdf/pdftohtml.py | 6 +++--- src/calibre/gui2/__init__.py | 6 +++--- src/calibre/gui2/lrf_renderer/main.py | 6 +++--- src/calibre/gui2/viewer/main.py | 4 ++-- src/calibre/linux.py | 17 ++++++++++------- src/calibre/utils/fonts/__init__.py | 8 ++++---- src/calibre/utils/help2man.py | 4 ++-- src/calibre/utils/network.py | 4 ++-- 15 files changed, 51 insertions(+), 44 deletions(-) diff --git a/setup/__init__.py b/setup/__init__.py index 61bafd2282..4a8d9870be 100644 --- a/setup/__init__.py +++ b/setup/__init__.py @@ -12,7 +12,9 @@ is64bit = platform.architecture()[0] == '64bit' iswindows = re.search('win(32|64)', sys.platform) isosx = 'darwin' in sys.platform isfreebsd = 'freebsd' in sys.platform -islinux = not isosx and not iswindows and not isfreebsd +isnetbsd = 'netbsd' in sys.platform +isbsd = isnetbsd or isfreebsd +islinux = not isosx and not iswindows and not isbsd SRC = os.path.abspath('src') sys.path.insert(0, SRC) sys.resources_location = os.path.join(os.path.dirname(SRC), 'resources') diff --git a/setup/extensions.py b/setup/extensions.py index 6e8e7ce4b7..678859432d 100644 --- a/setup/extensions.py +++ b/setup/extensions.py @@ -11,7 +11,7 @@ from distutils import sysconfig from PyQt4.pyqtconfig import QtGuiModuleMakefile -from setup import Command, islinux, isfreebsd, isosx, SRC, iswindows +from setup import Command, islinux, isfreebsd, isbsd, isosx, SRC, iswindows from setup.build_environment import fc_inc, fc_lib, chmlib_inc_dirs, \ fc_error, poppler_libs, poppler_lib_dirs, poppler_inc_dirs, podofo_inc, \ podofo_lib, podofo_error, poppler_error, pyqt, OSX_SDK, NMAKE, \ @@ -21,7 +21,7 @@ from setup.build_environment import fc_inc, fc_lib, chmlib_inc_dirs, \ jpg_lib_dirs, chmlib_lib_dirs, sqlite_inc_dirs, icu_inc_dirs, \ icu_lib_dirs MT -isunix = islinux or isosx or isfreebsd +isunix = islinux or isosx or isbsd make = 'make' if isunix else NMAKE @@ -205,7 +205,7 @@ if islinux: ldflags.append('-lpython'+sysconfig.get_python_version()) -if isfreebsd: +if isbsd: cflags.append('-pthread') ldflags.append('-shared') cflags.append('-I'+sysconfig.get_python_inc()) diff --git a/setup/install.py b/setup/install.py index e1a1190ff9..7290dbd799 100644 --- a/setup/install.py +++ b/setup/install.py @@ -8,7 +8,7 @@ __docformat__ = 'restructuredtext en' import sys, os, textwrap, subprocess, shutil, tempfile, atexit, stat, shlex -from setup import Command, islinux, isfreebsd, basenames, modules, functions, \ +from setup import Command, islinux, isfreebsd, isbsd, basenames, modules, functions, \ __appname__, __version__ HEADER = '''\ @@ -116,7 +116,7 @@ class Develop(Command): def pre_sub_commands(self, opts): - if not (islinux or isfreebsd): + if not (islinux or isbsd): self.info('\nSetting up a source based development environment is only ' 'supported on linux. On other platforms, see the User Manual' ' for help with setting up a development environment.') @@ -156,7 +156,7 @@ class Develop(Command): self.warn('Failed to compile mount helper. Auto mounting of', ' devices will not work') - if not isfreebsd and os.geteuid() != 0: + if not isbsd and os.geteuid() != 0: return self.warn('Must be run as root to compile mount helper. Auto ' 'mounting of devices will not work.') src = os.path.join(self.SRC, 'calibre', 'devices', 'linux_mount_helper.c') @@ -168,7 +168,7 @@ class Develop(Command): ret = p.wait() if ret != 0: return warn() - if not isfreebsd: + if not isbsd: os.chown(dest, 0, 0) os.chmod(dest, stat.S_ISUID|stat.S_ISGID|stat.S_IRUSR|stat.S_IWUSR|\ stat.S_IXUSR|stat.S_IXGRP|stat.S_IXOTH) diff --git a/src/calibre/__init__.py b/src/calibre/__init__.py index b82ea984ec..3a35feb66f 100644 --- a/src/calibre/__init__.py +++ b/src/calibre/__init__.py @@ -12,10 +12,10 @@ from functools import partial warnings.simplefilter('ignore', DeprecationWarning) -from calibre.constants import (iswindows, isosx, islinux, isfreebsd, isfrozen, - preferred_encoding, __appname__, __version__, __author__, - win32event, win32api, winerror, fcntl, - filesystem_encoding, plugins, config_dir) +from calibre.constants import (iswindows, isosx, islinux, isfrozen, + isbsd, preferred_encoding, __appname__, __version__, __author__, + win32event, win32api, winerror, fcntl, + filesystem_encoding, plugins, config_dir) from calibre.startup import winutil, winutilerror if False and islinux and not getattr(sys, 'frozen', False): @@ -31,7 +31,7 @@ if False: # Prevent pyflakes from complaining winutil, winutilerror, __appname__, islinux, __version__ fcntl, win32event, isfrozen, __author__ - winerror, win32api, isfreebsd + winerror, win32api, isbsd _mt_inited = False def _init_mimetypes(): diff --git a/src/calibre/constants.py b/src/calibre/constants.py index b22739cbb2..ef46b0bef2 100644 --- a/src/calibre/constants.py +++ b/src/calibre/constants.py @@ -27,7 +27,9 @@ iswindows = 'win32' in _plat or 'win64' in _plat isosx = 'darwin' in _plat isnewosx = isosx and getattr(sys, 'new_app_bundle', False) isfreebsd = 'freebsd' in _plat -islinux = not(iswindows or isosx or isfreebsd) +isnetbsd = 'netbsd' in _plat +isbsd = isfreebsd or isnetbsd +islinux = not(iswindows or isosx or isbsd) isfrozen = hasattr(sys, 'frozen') isunix = isosx or islinux diff --git a/src/calibre/devices/libusb.py b/src/calibre/devices/libusb.py index 2d4911c799..016a6b18aa 100644 --- a/src/calibre/devices/libusb.py +++ b/src/calibre/devices/libusb.py @@ -8,10 +8,10 @@ from ctypes import cdll, POINTER, byref, pointer, Structure as _Structure, \ c_ubyte, c_ushort, c_int, c_char, c_void_p, c_byte, c_uint from errno import EBUSY, ENOMEM -from calibre import iswindows, isosx, isfreebsd, load_library +from calibre import iswindows, isosx, isbsd, load_library _libusb_name = 'libusb' -PATH_MAX = 511 if iswindows else 1024 if (isosx or isfreebsd) else 4096 +PATH_MAX = 511 if iswindows else 1024 if (isosx or isbsd) else 4096 if iswindows: class Structure(_Structure): _pack_ = 1 diff --git a/src/calibre/ebooks/html/input.py b/src/calibre/ebooks/html/input.py index b22f7d2791..3d5f6c00ef 100644 --- a/src/calibre/ebooks/html/input.py +++ b/src/calibre/ebooks/html/input.py @@ -20,7 +20,7 @@ from itertools import izip from calibre.customize.conversion import InputFormatPlugin from calibre.ebooks.chardet import xml_to_unicode from calibre.customize.conversion import OptionRecommendation -from calibre.constants import islinux, isfreebsd, iswindows +from calibre.constants import islinux, isbsd, iswindows from calibre import unicode_path, as_unicode from calibre.utils.localization import get_lang from calibre.utils.filenames import ascii_filename @@ -302,7 +302,7 @@ class HTMLInput(InputFormatPlugin): if getattr(self, '_is_case_sensitive', None) is not None: return self._is_case_sensitive if not path or not os.path.exists(path): - return islinux or isfreebsd + return islinux or isbsd self._is_case_sensitive = not (os.path.exists(path.lower()) \ and os.path.exists(path.upper())) return self._is_case_sensitive diff --git a/src/calibre/ebooks/pdf/pdftohtml.py b/src/calibre/ebooks/pdf/pdftohtml.py index 4aa0953738..a791dab48a 100644 --- a/src/calibre/ebooks/pdf/pdftohtml.py +++ b/src/calibre/ebooks/pdf/pdftohtml.py @@ -13,7 +13,7 @@ from functools import partial from calibre.ebooks import ConversionError, DRMError from calibre.ptempfile import PersistentTemporaryFile -from calibre.constants import isosx, iswindows, islinux, isfreebsd +from calibre.constants import isosx, iswindows, islinux, isbsd from calibre import CurrentDir PDFTOHTML = 'pdftohtml' @@ -23,7 +23,7 @@ if isosx and hasattr(sys, 'frameworks_dir'): if iswindows and hasattr(sys, 'frozen'): PDFTOHTML = os.path.join(os.path.dirname(sys.executable), 'pdftohtml.exe') popen = partial(subprocess.Popen, creationflags=0x08) # CREATE_NO_WINDOW=0x08 so that no ugly console is popped up -if (islinux or isfreebsd) and getattr(sys, 'frozen', False): +if (islinux or isbsd) and getattr(sys, 'frozen', False): PDFTOHTML = os.path.join(sys.executables_location, 'bin', 'pdftohtml') def pdftohtml(output_dir, pdf_path, no_images): @@ -43,7 +43,7 @@ def pdftohtml(output_dir, pdf_path, no_images): # This is neccessary as pdftohtml doesn't always (linux) respect absolute paths pdf_path = os.path.abspath(pdf_path) cmd = [PDFTOHTML, '-enc', 'UTF-8', '-noframes', '-p', '-nomerge', '-nodrm', '-q', pdf_path, os.path.basename(index)] - if isfreebsd: + if isbsd: cmd.remove('-nodrm') if no_images: cmd.append('-i') diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index 8007b6cd19..2cb18f3bda 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -12,7 +12,7 @@ from PyQt4.Qt import (QVariant, QFileInfo, QObject, SIGNAL, QBuffer, Qt, ORG_NAME = 'KovidsBrain' APP_UID = 'libprs500' -from calibre.constants import islinux, iswindows, isfreebsd, isfrozen, isosx +from calibre.constants import islinux, iswindows, isbsd, isfrozen, isosx from calibre.utils.config import Config, ConfigProxy, dynamic, JSONConfig from calibre.utils.localization import set_qt_translator from calibre.ebooks.metadata import MetaInformation @@ -628,7 +628,7 @@ class Application(QApplication): st = self.style() if st is not None: st = unicode(st.objectName()).lower() - if (islinux or isfreebsd) and st in ('windows', 'motif', 'cde'): + if (islinux or isbsd) and st in ('windows', 'motif', 'cde'): from PyQt4.Qt import QStyleFactory styles = set(map(unicode, QStyleFactory.keys())) if 'Plastique' in styles and os.environ.get('KDE_FULL_SESSION', @@ -697,7 +697,7 @@ def open_local_file(path): def is_ok_to_use_qt(): global gui_thread, _store_app - if (islinux or isfreebsd) and ':' not in os.environ.get('DISPLAY', ''): + if (islinux or isbsd) and ':' not in os.environ.get('DISPLAY', ''): return False if _store_app is None and QApplication.instance() is None: _store_app = QApplication([]) diff --git a/src/calibre/gui2/lrf_renderer/main.py b/src/calibre/gui2/lrf_renderer/main.py index e68e04adcf..0575d106f4 100644 --- a/src/calibre/gui2/lrf_renderer/main.py +++ b/src/calibre/gui2/lrf_renderer/main.py @@ -5,7 +5,7 @@ import sys, logging, os, traceback, time from PyQt4.QtGui import QKeySequence, QPainter, QDialog, QSpinBox, QSlider, QIcon from PyQt4.QtCore import Qt, QObject, SIGNAL, QCoreApplication, QThread -from calibre import __appname__, setup_cli_handlers, islinux, isfreebsd +from calibre import __appname__, setup_cli_handlers, islinux, isbsd from calibre.ebooks.lrf.lrfparser import LRFDocument from calibre.gui2 import ORG_NAME, APP_UID, error_dialog, \ @@ -258,7 +258,7 @@ def file_renderer(stream, opts, parent=None, logger=None): level = logging.DEBUG if opts.verbose else logging.INFO logger = logging.getLogger('lrfviewer') setup_cli_handlers(logger, level) - if islinux or isfreebsd: + if islinux or isbsd: try: # Set lrfviewer as the default for LRF files for this user from subprocess import call call('xdg-mime default calibre-lrfviewer.desktop application/lrf', shell=True) @@ -307,7 +307,7 @@ def main(args=sys.argv, logger=None): if hasattr(opts, 'help'): parser.print_help() return 1 - pid = os.fork() if (islinux or isfreebsd) else -1 + pid = os.fork() if (islinux or isbsd) else -1 if pid <= 0: app = Application(args) app.setWindowIcon(QIcon(I('viewer.png'))) diff --git a/src/calibre/gui2/viewer/main.py b/src/calibre/gui2/viewer/main.py index 303d73dc11..e25d59c5ad 100644 --- a/src/calibre/gui2/viewer/main.py +++ b/src/calibre/gui2/viewer/main.py @@ -20,7 +20,7 @@ from calibre.gui2 import Application, ORG_NAME, APP_UID, choose_files, \ info_dialog, error_dialog, open_url, available_height from calibre.ebooks.oeb.iterator import EbookIterator from calibre.ebooks import DRMError -from calibre.constants import islinux, isfreebsd, isosx, filesystem_encoding +from calibre.constants import islinux, isbsd, isosx, filesystem_encoding from calibre.utils.config import Config, StringConfig, JSONConfig from calibre.gui2.search_box import SearchBox2 from calibre.ebooks.metadata import MetaInformation @@ -801,7 +801,7 @@ def main(args=sys.argv): parser = option_parser() opts, args = parser.parse_args(args) - pid = os.fork() if False and (islinux or isfreebsd) else -1 + pid = os.fork() if False and (islinux or isbsd) else -1 if pid <= 0: app = Application(args) app.setWindowIcon(QIcon(I('viewer.png'))) diff --git a/src/calibre/linux.py b/src/calibre/linux.py index d83bba061f..1e7a62b869 100644 --- a/src/calibre/linux.py +++ b/src/calibre/linux.py @@ -7,7 +7,7 @@ import sys, os, cPickle, textwrap, stat, importlib from subprocess import check_call from calibre import __appname__, prints, guess_type -from calibre.constants import islinux, isfreebsd +from calibre.constants import islinux, isnetbsd, isbsd from calibre.customize.ui import all_input_formats from calibre.ptempfile import TemporaryDirectory from calibre import CurrentDir @@ -136,17 +136,17 @@ class PostInstall: self.icon_resources = [] self.menu_resources = [] self.mime_resources = [] - if islinux or isfreebsd: + if islinux or isbsd: self.setup_completion() self.install_man_pages() - if islinux or isfreebsd: + if islinux or isbsd: self.setup_desktop_integration() self.create_uninstaller() from calibre.utils.config import config_dir if os.path.exists(config_dir): os.chdir(config_dir) - if islinux or isfreebsd: + if islinux or isbsd: for f in os.listdir('.'): if os.stat(f).st_uid == 0: import shutil @@ -196,7 +196,10 @@ class PostInstall: if os.path.exists(bc): f = os.path.join(bc, 'calibre') else: - f = os.path.join(self.opts.staging_etc, 'bash_completion.d/calibre') + if isnetbsd: + f = os.path.join(self.opts.staging_root, 'share/bash_completion.d/calibre') + else: + f = os.path.join(self.opts.staging_etc, 'bash_completion.d/calibre') if not os.path.exists(os.path.dirname(f)): os.makedirs(os.path.dirname(f)) self.manifest.append(f) @@ -300,7 +303,7 @@ class PostInstall: def install_man_pages(self): # {{{ try: from calibre.utils.help2man import create_man_page - if isfreebsd: + if isbsd: manpath = os.path.join(self.opts.staging_root, 'man/man1') else: manpath = os.path.join(self.opts.staging_sharedir, 'man/man1') @@ -316,7 +319,7 @@ class PostInstall: continue parser = parser() raw = create_man_page(prog, parser) - if isfreebsd: + if isbsd: manfile = os.path.join(manpath, prog+'.1') else: manfile = os.path.join(manpath, prog+'.1'+__appname__+'.bz2') diff --git a/src/calibre/utils/fonts/__init__.py b/src/calibre/utils/fonts/__init__.py index 3db3a1b285..7b4f0abea4 100644 --- a/src/calibre/utils/fonts/__init__.py +++ b/src/calibre/utils/fonts/__init__.py @@ -8,14 +8,14 @@ __docformat__ = 'restructuredtext en' import os, sys -from calibre.constants import plugins, iswindows, islinux, isfreebsd +from calibre.constants import plugins, iswindows, islinux, isbsd _fc, _fc_err = plugins['fontconfig'] if _fc is None: raise RuntimeError('Failed to load fontconfig with error:'+_fc_err) -if islinux or isfreebsd: +if islinux or isbsd: Thread = object else: from threading import Thread @@ -49,7 +49,7 @@ class FontConfig(Thread): self.failed = True def wait(self): - if not (islinux or isfreebsd): + if not (islinux or isbsd): self.join() if self.failed: raise RuntimeError('Failed to initialize fontconfig') @@ -149,7 +149,7 @@ class FontConfig(Thread): return fonts if all else (fonts[0] if fonts else None) fontconfig = FontConfig() -if islinux or isfreebsd: +if islinux or isbsd: # On X11 Qt also uses fontconfig, so initialization must happen in the # main thread. In any case on X11 initializing fontconfig should be very # fast diff --git a/src/calibre/utils/help2man.py b/src/calibre/utils/help2man.py index 7acf3e0c21..00989a168d 100644 --- a/src/calibre/utils/help2man.py +++ b/src/calibre/utils/help2man.py @@ -4,7 +4,7 @@ __copyright__ = '2009, Kovid Goyal ' __docformat__ = 'restructuredtext en' import time, bz2 -from calibre.constants import isfreebsd +from calibre.constants import isbsd from calibre.constants import __version__, __appname__, __author__ @@ -58,7 +58,7 @@ def create_man_page(prog, parser): lines = [x if isinstance(x, unicode) else unicode(x, 'utf-8', 'replace') for x in lines] - if not isfreebsd: + if not isbsd: return bz2.compress((u'\n'.join(lines)).encode('utf-8')) else: return (u'\n'.join(lines)).encode('utf-8') diff --git a/src/calibre/utils/network.py b/src/calibre/utils/network.py index 7e840207cf..c47eacbe3f 100644 --- a/src/calibre/utils/network.py +++ b/src/calibre/utils/network.py @@ -6,7 +6,7 @@ __license__ = 'GPL v3' __copyright__ = '2010, Kovid Goyal ' __docformat__ = 'restructuredtext en' -from calibre.constants import iswindows, islinux, isfreebsd +from calibre.constants import iswindows, islinux, isbsd class LinuxNetworkStatus(object): @@ -47,7 +47,7 @@ class DummyNetworkStatus(object): return True _network_status = WindowsNetworkStatus() if iswindows else \ - LinuxNetworkStatus() if (islinux or isfreebsd) else \ + LinuxNetworkStatus() if (islinux or isbsd) else \ DummyNetworkStatus() def internet_connected(): From a6ece012ea51b4a5a07522e6823f909ac61f51f0 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 21 May 2011 18:02:37 -0600 Subject: [PATCH 7/7] Windows installer: Remember and use previous installation folder when upgrading --- setup/installer/windows/wix-template.xml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/setup/installer/windows/wix-template.xml b/setup/installer/windows/wix-template.xml index 9835ae8f6b..8526c27720 100644 --- a/setup/installer/windows/wix-template.xml +++ b/setup/installer/windows/wix-template.xml @@ -26,6 +26,11 @@ + + + + @@ -43,6 +48,9 @@ + + + @@ -87,7 +95,8 @@ ConfigurableDirectory="APPLICATIONFOLDER"> + Description="All the files needed to run {app}" Absent="disallow"> +