rework files

This commit is contained in:
j 2011-08-23 19:39:34 +02:00
commit 3259e710ed
9 changed files with 138 additions and 98 deletions

View file

@ -9,7 +9,7 @@ import models
class FileAdmin(admin.ModelAdmin):
search_fields = ['name', 'folder','oshash', 'video_codec']
list_display = ['available', 'is_main', '__unicode__', 'itemId']
list_display = ['available', 'wanted', 'active', '__unicode__', 'itemId']
list_display_links = ('__unicode__', )
def itemId(self, obj):

View file

@ -30,7 +30,7 @@ class File(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
verified = models.BooleanField(default=False)
active = models.BooleanField(default=False)
auto = models.BooleanField(default=True)
oshash = models.CharField(max_length=16, unique=True)
@ -69,34 +69,17 @@ class File(models.Model):
#This is true if derivative is available or subtitles where uploaded
available = models.BooleanField(default = False)
wanted = models.BooleanField(default = False)
uploading = models.BooleanField(default = False)
is_audio = models.BooleanField(default=False)
is_video = models.BooleanField(default=False)
is_extra = models.BooleanField(default=False)
is_main = models.BooleanField(default=False)
is_subtitle = models.BooleanField(default=False)
is_version = models.BooleanField(default=False)
def __unicode__(self):
return self.name
def set_state(self):
instance = self.get_instance()
if instance:
if instance.name.lower().startswith('extras/'):
self.is_extra = True
self.is_main = False
elif instance.name.lower().startswith('versions/'):
self.is_version = True
self.is_main = False
else:
self.is_extra = False
self.is_main = True
else:
self.is_main = False
self.is_extra = False
self.is_version = False
self.name = self.get_name()
self.folder = self.get_folder()
self.sort_name = utils.sort_string(canonicalTitle(self.name))
@ -284,8 +267,8 @@ class File(models.Model):
'available': self.available,
'duration': duration,
'framerate': self.framerate,
'height': self.height,
'width': self.width,
#'height': self.height,
#'width': self.width,
'resolution': resolution,
'id': self.oshash,
'samplerate': self.samplerate,
@ -293,12 +276,12 @@ class File(models.Model):
'audio_codec': self.audio_codec,
'name': self.name,
'size': self.size,
'info': self.info,
'users': list(set([i.volume.user.username for i in self.instances.all()])),
#'info': self.info,
'users': list(set([u.username
for u in User.objects.filter(volumes__files__in=self.instances.all())])),
'instances': [i.json() for i in self.instances.all()],
'folder': self.get_folder(),
'type': self.get_type(),
'is_main': self.is_main,
'part': self.get_part()
}
if keys:
@ -314,12 +297,12 @@ class File(models.Model):
if self.language:
name = name[-(len(self.language)+1)]
qs = self.item.files.filter(Q(is_video=True)|Q(is_audio=True),
is_main=True, name__startswith=name)
active=True, name__startswith=name)
if qs.count()>0:
return qs[0].part
if not self.is_extra:
if self.active:
files = list(self.item.files.filter(type=self.type, language=self.language,
is_main=self.is_main).order_by('sort_name'))
active=self.active).order_by('sort_name'))
if self in files:
return files.index(self) + 1
return None
@ -412,6 +395,7 @@ class Instance(models.Model):
name = models.CharField(max_length=2048)
folder = models.CharField(max_length=2048)
extra = models.BooleanField(default=False)
file = models.ForeignKey(File, related_name='instances')
volume = models.ForeignKey(Volume, related_name='files')

View file

@ -66,6 +66,9 @@ def update_or_create_instance(volume, f):
instance.file = get_or_create_file(volume, f, volume.user, item)
for key in _INSTANCE_KEYS:
setattr(instance, key, f[key])
if instance.name.lower().startswith('extras/') or \
instance.name.lower().startswith('versions/'):
instance.extra = True
instance.save()
instance.file.save()
return instance

View file

@ -98,11 +98,12 @@ def update(request):
if volume:
files = files.filter(volume=volume)
response['data']['info'] = [f.file.oshash for f in files.filter(file__info='{}')]
#needs some flag to find those that are actually used main is to generic
response['data']['data'] = [f.file.oshash for f in files.filter(file__is_video=True,
file__is_main=True)]
file__available=False,
file__wanted=True)]
response['data']['data'] += [f.file.oshash for f in files.filter(file__is_audio=True,
file__is_main=True)]
file__available=False,
file__wanted=True)]
response['data']['file'] = [f.file.oshash for f in files.filter(file__is_subtitle=True,
name__endswith='.srt')]
@ -188,6 +189,7 @@ def firefogg_upload(request):
response['result'] = -1
elif form.cleaned_data['done']:
f.available = True
f.uploading = False
f.save()
#FIXME: this fails badly if rabbitmq goes down
try:
@ -205,6 +207,7 @@ def firefogg_upload(request):
if f.editable(request.user):
f.streams.all().delete()
f.available = False
f.uploading = True
f.save()
response = {
#is it possible to no hardcode url here?