X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/dd5ca8bb0dc7051c2860be668065c968f92c222c..af8a54f4fbb7956ffbdb4e7b2aaddd7659de4f57:/src/catalogue/models/book.py diff --git a/src/catalogue/models/book.py b/src/catalogue/models/book.py index ecde5563d..eae021b18 100644 --- a/src/catalogue/models/book.py +++ b/src/catalogue/models/book.py @@ -471,10 +471,9 @@ class Book(models.Model): None, ContentFile(sync) ) - def get_sync(self): if not self.has_sync_file(): - return '[]' + return [] with self.get_media('sync').first().file.open('r') as f: sync = f.read().split('\n') offset = float(sync[0]) @@ -484,8 +483,22 @@ class Book(models.Model): continue start, end, elid = line.split() items.append([elid, float(start) + offset]) - return json.dumps(items) - + return items + + def sync_ts(self, ts): + elid = None + for cur_id, t in self.get_sync(): + if ts >= t: + elid = cur_id + else: + break + return elid + + def sync_elid(self, elid): + for cur_id, t in self.get_sync(): + if cur_id == elid: + return t + def has_audio_epub_file(self): return self.has_media("audio.epub") @@ -988,6 +1001,12 @@ class Book(models.Model): elif isinstance(publisher, list): return ', '.join(publisher) + def recommended(self, limit=4): + books_qs = type(self).objects.filter(findable=True) + books_qs = books_qs.exclude(common_slug=self.common_slug).exclude(ancestor=self) + books = type(self).tagged.related_to(self, books_qs)[:limit] + return books + @classmethod def tagged_top_level(cls, tags): """ Returns top-level books tagged with `tags`. @@ -1108,7 +1127,10 @@ class Book(models.Model): return 'https://ridero.eu/%s/books/wl_%s/' % (get_language(), self.slug.replace('-', '_')) def elevenreader_link(self): - return 'https://elevenreader.io/audiobooks/wolnelektury:' + self.get_first_text().slug + first_text = self.get_first_text() + if first_text is None: + return None + return 'https://elevenreader.io/audiobooks/wolnelektury:' + first_text.slug def content_warnings(self): warnings_def = {