2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
3
from __future__ import with_statement
6
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
7
__docformat__ = 'restructuredtext en'
11
from calibre.utils.config import config_dir
12
from calibre.utils.lock import ExclusiveFile
13
from calibre import sanitize_file_name
14
from calibre.customize.conversion import OptionRecommendation
17
config_dir = os.path.join(config_dir, 'conversion')
18
if not os.path.exists(config_dir):
19
os.makedirs(config_dir)
21
def name_to_path(name):
22
return os.path.join(config_dir, sanitize_file_name(name)+'.py')
24
def save_defaults(name, recs):
25
path = name_to_path(name)
27
with open(path, 'wb'):
29
with ExclusiveFile(path) as f:
32
def load_defaults(name):
33
path = name_to_path(name)
34
if not os.path.exists(path):
35
open(path, 'wb').close()
36
with ExclusiveFile(path) as f:
38
r = GuiRecommendations()
43
def save_specifics(db, book_id, recs):
45
db.set_conversion_options(book_id, 'PIPE', raw)
47
def load_specifics(db, book_id):
48
raw = db.conversion_options(book_id, 'PIPE')
49
r = GuiRecommendations()
54
class GuiRecommendations(dict):
56
def __new__(cls, *args):
58
obj = super(GuiRecommendations, cls).__new__(cls, *args)
59
obj.disabled_options = set([])
62
def to_recommendations(self, level=OptionRecommendation.LOW):
64
for key, val in self.items():
65
ans.append((key, val, level))
70
for key, val in self.items():
71
ans.append('\t'+repr(key)+' : '+repr(val)+',')
75
def from_string(self, raw):
83
def merge_recommendations(self, get_option, level, options,
86
if only_existing and name not in self:
88
opt = get_option(name)
89
if opt is None: continue
90
if opt.level == OptionRecommendation.HIGH:
91
self[name] = opt.recommended_value
92
self.disabled_options.add(name)
93
elif opt.level > level or name not in self:
94
self[name] = opt.recommended_value