rename Chunk.comment to Chunk.title
[redakcja.git] / apps / catalogue / models.py
index ebeb9ae..00e1d30 100644 (file)
@@ -69,7 +69,7 @@ class Book(models.Model):
             if i < book_len:
                 chunk = instance[i]
                 chunk.slug = slug
             if i < book_len:
                 chunk = instance[i]
                 chunk.slug = slug
-                chunk.comment = title
+                chunk.title = title
                 chunk.save()
             else:
                 chunk = instance.add(slug, title, creator, adjust_slug=True)
                 chunk.save()
             else:
                 chunk = instance.add(slug, title, creator, adjust_slug=True)
@@ -159,37 +159,51 @@ class Book(models.Model):
         i = 1
         new_slug = proposed
         while new_slug in slugs:
         i = 1
         new_slug = proposed
         while new_slug in slugs:
-            new_slug = "%s-%d" % (proposed, i)
+            new_slug = "%s_%d" % (proposed, i)
             i += 1
         return new_slug
 
             i += 1
         return new_slug
 
-    def append(self, other):
+    def append(self, other, slugs=None, titles=None):
         """Add all chunks of another book to self."""
         number = self[len(self) - 1].number + 1
         """Add all chunks of another book to self."""
         number = self[len(self) - 1].number + 1
-        single = len(other) == 1
-        for chunk in other:
+        len_other = len(other)
+        single = len_other == 1
+
+        if slugs is not None:
+            assert len(slugs) == len_other
+        if titles is not None:
+            assert len(titles) == len_other
+            if slugs is None:
+                slugs = [slughifi(t) for t in titles]
+
+        for i, chunk in enumerate(other):
             # move chunk to new book
             chunk.book = self
             chunk.number = number
 
             # move chunk to new book
             chunk.book = self
             chunk.number = number
 
-            # try some title guessing
-            if other.title.startswith(self.title):
-                other_title_part = other.title[len(self.title):].lstrip(' /')
-            else:
-                other_title_part = other.title
-
-            if single:
-                # special treatment for appending one-parters:
-                # just use the guessed title and original book slug
-                chunk.comment = other_title_part
-                if other.slug.startswith(self.slug):
-                    chunk_slug = other.slug[len(self.slug):].lstrip('-_')
+            if titles is None:
+                # try some title guessing
+                if other.title.startswith(self.title):
+                    other_title_part = other.title[len(self.title):].lstrip(' /')
                 else:
                 else:
-                    chunk_slug = other.slug
-                chunk.slug = self.make_chunk_slug(chunk_slug)
+                    other_title_part = other.title
+
+                if single:
+                    # special treatment for appending one-parters:
+                    # just use the guessed title and original book slug
+                    chunk.title = other_title_part
+                    if other.slug.startswith(self.slug):
+                        chunk_slug = other.slug[len(self.slug):].lstrip('-_')
+                    else:
+                        chunk_slug = other.slug
+                    chunk.slug = self.make_chunk_slug(chunk_slug)
+                else:
+                    chunk.title = "%s, %s" % (other_title_part, chunk.title)
             else:
             else:
-                chunk.comment = "%s, %s" % (other_title_part, chunk.comment)
-                chunk.slug = self.make_chunk_slug(chunk.slug)
+                chunk.slug = slugs[i]
+                chunk.title = titles[i]
+
+            chunk.slug = self.make_chunk_slug(chunk.slug)
             chunk.save()
             number += 1
         other.delete()
             chunk.save()
             number += 1
         other.delete()
@@ -212,14 +226,14 @@ class Chunk(dvcs_models.Document):
     book = models.ForeignKey(Book, editable=False)
     number = models.IntegerField()
     slug = models.SlugField()
     book = models.ForeignKey(Book, editable=False)
     number = models.IntegerField()
     slug = models.SlugField()
-    comment = models.CharField(max_length=255, blank=True)
+    title = models.CharField(max_length=255, blank=True)
 
     class Meta:
         unique_together = [['book', 'number'], ['book', 'slug']]
         ordering = ['number']
 
     def __unicode__(self):
 
     class Meta:
         unique_together = [['book', 'number'], ['book', 'slug']]
         ordering = ['number']
 
     def __unicode__(self):
-        return "%d-%d: %s" % (self.book_id, self.number, self.comment)
+        return "%d:%d: %s" % (self.book_id, self.number, self.title)
 
     def get_absolute_url(self):
         return reverse("wiki_editor", args=[self.book.slug, self.slug])
 
     def get_absolute_url(self):
         return reverse("wiki_editor", args=[self.book.slug, self.slug])
@@ -233,28 +247,24 @@ class Chunk(dvcs_models.Document):
 
     def pretty_name(self, book_length=None):
         title = self.book.title
 
     def pretty_name(self, book_length=None):
         title = self.book.title
-        if self.comment:
-            title += ", %s" % self.comment
+        if self.title:
+            title += ", %s" % self.title
         if book_length > 1:
             title += " (%d/%d)" % (self.number, book_length)
         return title
 
         if book_length > 1:
             title += " (%d/%d)" % (self.number, book_length)
         return title
 
-    def split(self, slug, comment='', creator=None, adjust_slug=False):
+    def split(self, slug, title='', creator=None, adjust_slug=False):
         """ Create an empty chunk after this one """
         self.book.chunk_set.filter(number__gt=self.number).update(
                 number=models.F('number')+1)
         """ Create an empty chunk after this one """
         self.book.chunk_set.filter(number__gt=self.number).update(
                 number=models.F('number')+1)
-        tries = 1
-        new_slug = slug
         new_chunk = None
         while not new_chunk:
         new_chunk = None
         while not new_chunk:
+            new_slug = self.book.make_chunk_slug(slug)
             try:
                 new_chunk = self.book.chunk_set.create(number=self.number+1,
             try:
                 new_chunk = self.book.chunk_set.create(number=self.number+1,
-                    creator=creator, slug=new_slug, comment=comment)
+                    creator=creator, slug=new_slug, title=title)
             except IntegrityError:
             except IntegrityError:
-                if not adjust_slug:
-                    raise
-                new_slug = "%s_%d" % (slug, tries)
-                tries += 1
+                pass
         return new_chunk
 
     @staticmethod
         return new_chunk
 
     @staticmethod