Fix.
[redakcja.git] / src / sources / models.py
index 0b55c89..ed2775e 100644 (file)
@@ -38,6 +38,10 @@ class Source(models.Model):
     def get_ocr_directory(self):
         return f'sources/ocr/{self.pk}/'
 
+    def has_upload_files(self):
+        d = os.path.join(settings.MEDIA_ROOT, self.get_upload_directory())
+        return os.path.isdir(d) and os.listdir(d)
+    
     def get_view_files(self):
         d = self.get_view_directory()
         return [
@@ -47,6 +51,10 @@ class Source(models.Model):
             ))
         ]
 
+    def has_view_files(self):
+        d = os.path.join(settings.MEDIA_ROOT, self.get_view_directory())
+        return os.path.isdir(d) and os.listdir(d)
+    
     def get_ocr_files(self):
         d = os.path.join(settings.MEDIA_ROOT, self.get_ocr_directory())
         return [
@@ -54,7 +62,12 @@ class Source(models.Model):
             for name in sorted(os.listdir(d))
         ]
 
+    def has_ocr_files(self):
+        d = os.path.join(settings.MEDIA_ROOT, self.get_ocr_directory())
+        return os.path.isdir(d) and os.listdir(d)
+
     def process(self):
+        processed_at = now()
         updir = os.path.join(
             settings.MEDIA_ROOT,
             self.get_upload_directory()
@@ -71,7 +84,7 @@ class Source(models.Model):
             self.build_view_directory(updir, d)
         with utils.replace_dir(ocr_dir) as d:
             self.build_ocr_directory(updir, d)
-        self.processed_at = now()
+        self.processed_at = processed_at
         self.save(update_fields=['processed_at'])
     
     def build_view_directory(self, srcpath, targetpath):
@@ -106,17 +119,18 @@ class Source(models.Model):
 class BookSource(models.Model):
     book = models.ForeignKey('catalogue.Book', models.CASCADE)
     source = models.ForeignKey(Source, models.CASCADE)
+    ordering = models.IntegerField(default=1)
     page_start = models.IntegerField(null=True, blank=True)
     page_end = models.IntegerField(null=True, blank=True)
         
     class Meta:
-        ordering = ('page_start',)
+        ordering = ('ordering', 'page_start',)
 
     def __str__(self):
         return f'{self.source} -> {self.book}'
 
     def get_absolute_url(self):
-        return reverse('source_book_prepare', args=[self.pk])
+        return reverse('source_book_prepare', args=[self.book.pk])
 
     def get_view_files(self):
         # TODO: won't work for PDFs.
@@ -138,16 +152,18 @@ class BookSource(models.Model):
 
     def get_document(self):
         return self.book.document_books.first()
-        
-    def prepare_document(self, user=None):
+
+    @classmethod
+    def prepare_document(cls, book, user=None):
         DBook = apps.get_model('documents', 'Book')
-        texts = document.build_document_texts(self)
+        texts = document.build_document_texts(book)
 
-        dbook = self.get_document()
+        dbook = book.document_books.first()
         if dbook is None:
             dbook = DBook.create(
                 user, texts[0],
-                title=self.book.title,
+                catalogue_book=book,
+                title=book.title,
                 slug=str(uuid.uuid4()),
             )
         else: