12 _moduleLogger = logging.getLogger(__name__)
17 def __init__(self, ui):
18 self.storage = FileStorage.FileStorage(path = constants._data_path_)
19 if hildonize.IS_HILDON_SUPPORTED and not hildonize.IS_FREMANTLE_SUPPORTED:
20 import SimpleOSSOPlayer as _SimplePlayer
21 SimpleGStreamer = _SimplePlayer # silence PyFlakes
23 import SimpleGStreamer as SimplePlayer
24 self.player = SimplePlayer.SimplePlayer(self.next_chapter)
30 def get_books_path(self):
33 def load_books_path(self, booksPath):
34 _moduleLogger.info("Loading books %s" % booksPath)
35 if self.audiobook is not None:
36 position = self.player.elapsed()
37 self.storage.set_time(self.audiobook.current_chapter, position)
39 self._bookDir = booksPath
41 self._bookPaths = dict(
42 (self.__format_name(bookPath), bookPath)
43 for bookPath in self._find_books()
45 if self.ui is not None:
46 bookPaths = self._bookPaths.values()
48 self.ui.set_books(bookPaths)
50 lastBookName = self.storage.get_selected()
51 if lastBookName is not None:
52 _moduleLogger.info("continuing book: %s" % lastBookName)
54 bookPath = self._bookPaths[lastBookName]
55 self.set_book(bookPath)
57 _moduleLogger.info("Audiobook was not found")
59 _moduleLogger.info("Audiobook could not be loaded")
62 def __format_name(path):
63 if os.path.isfile(path):
64 return os.path.basename(path).rsplit(".", 1)[0]
66 return os.path.basename(path)
68 def set_book(self, bookPath):
69 oldBookName = self.storage.get_selected()
71 bookName = self.__format_name(bookPath)
72 self.storage.select_book(bookName)
73 chapter_num, _ = self.storage.get_time()
74 self.audiobook = Audiobook.Audiobook(
79 self.storage.select_book(oldBookName)
82 # self.player.set_file(self.audiobook.get_current_chapter())
83 # self.player.seek_time(time)
85 if self.ui is not None:
86 self.ui.set_book(bookPath, self.audiobook.get_cover_img())
87 self.ui.set_chapters(self.audiobook.chapters)
89 chapter_title = self.audiobook.chapters[chapter_num]
90 self.set_chapter(chapter_title, True)
92 def set_chapter(self, chapter, continuing = False):
93 _moduleLogger.info("set chapter:" + chapter + " : Continuing: " + str(continuing))
94 self.audiobook.set_chapter(chapter)
95 self.player.set_file(self.audiobook.get_current_chapter())
97 self.storage.set_time(self.audiobook.current_chapter, 0)
99 if self.ui is not None:
100 self.ui.set_chapter(self.audiobook.current_chapter)
102 def previous_chapter(self, *args):
103 _moduleLogger.info("Going back a chapter")
105 next_file = self.audiobook.get_previous_chapter()
106 if next_file is not False:
107 self.set_chapter(next_file)
109 else: # the book is over
110 self.storage.set_time(0, 0)
112 def next_chapter(self, *args):
113 _moduleLogger.info("Advancing a chapter")
115 next_file = self.audiobook.get_next_chapter()
116 if next_file is not False:
117 self.set_chapter(next_file)
119 else: # the book is over
120 self.storage.set_time(0, 0)
123 if self.audiobook is not None:
125 _, target_time = self.storage.get_time()
128 self.player.seek_time(target_time)
129 #print self.player.elapsed()
131 print "No book selected, find one in ", self._bookDir
134 position = self.player.elapsed()
137 if self.audiobook is not None:
138 self.storage.set_time(self.audiobook.current_chapter, position)
140 def is_playing(self):
141 return self.player.playing
143 def sleeptimer(self, secs):
144 #print "sleeper", secs
146 #print "now its time to sleep"
149 def start_sleeptimer(self, secs):
150 #print "startin sleep"
151 sleep_thread = threading.Thread(target=self.sleeptimer, args=(secs, ))
153 #print "started sleep"
155 def get_percentage(self):
157 return float(self.player.elapsed()) / float(self.player.duration())
158 except ZeroDivisionError:
161 def seek_percent(self, ratio):
163 target = int(self.player.duration() * ratio) # Calculate where to seek
164 self.player.seek_time(target) # seek
166 position = self.player.elapsed()
167 self.storage.set_time(self.audiobook.current_chapter, target) # save position
170 _moduleLogger.exception("Seek failed")
173 def _find_books(self):
176 os.path.join(self._bookDir, f)
177 for f in os.listdir(self._bookDir)
182 if Audiobook.is_book(path)