diff --git a/pandora/clip/models.py b/pandora/clip/models.py index 9736adb1..fcdae282 100644 --- a/pandora/clip/models.py +++ b/pandora/clip/models.py @@ -8,6 +8,7 @@ import ox from archive import extract from . import managers +from .utils import add_cuts def get_layers(item, interval=None, user=None): @@ -155,7 +156,7 @@ class MetaClip(object): if value: data[key] = value data['duration'] = data['out'] - data['in'] - data['cuts'] = tuple([c for c in self.item.get('cuts', []) if c > self.start and c < self.end]) + add_cuts(data, self.item, self.start, self.end) data['layers'] = self.get_layers(user) data['streams'] = [s.file.oshash for s in self.item.streams()] return data diff --git a/pandora/clip/utils.py b/pandora/clip/utils.py new file mode 100644 index 00000000..7d6d03fe --- /dev/null +++ b/pandora/clip/utils.py @@ -0,0 +1,22 @@ + + +def add_cuts(data, item, start, end): + cuts = [] + last = False + outer = [] + first = 0 + for cut in item.get('cuts', []): + if cut > start and cut < end: + if not cuts: + outer.append(first) + cuts.append(cut) + last = True + elif cut <= start: + first = cut + elif cut >= end: + if not len(outer): + outer.append(first) + if len(outer) == 1: + outer.append(cut) + data['cuts'] = tuple(cuts) + data['outerCuts'] = tuple(outer) diff --git a/pandora/edit/models.py b/pandora/edit/models.py index d71525a0..f0a5abce 100644 --- a/pandora/edit/models.py +++ b/pandora/edit/models.py @@ -24,6 +24,7 @@ import clip.models from archive import extract from user.utils import update_groups from user.models import Group +from clip.utils import add_cuts from . import managers @@ -507,7 +508,7 @@ class Clip(models.Model): if value: data[key] = value data['duration'] = data['out'] - data['in'] - data['cuts'] = tuple([c for c in self.item.get('cuts', []) if c > self.start and c < self.end]) + add_cuts(data, self.item, self.start, self.end) data['layers'] = self.get_layers(user) data['streams'] = [s.file.oshash for s in self.item.streams()] return data