diff --git a/spa/models/Mix.py b/spa/models/Mix.py index 65601d8..865a8e7 100644 --- a/spa/models/Mix.py +++ b/spa/models/Mix.py @@ -1,5 +1,6 @@ from django.contrib.sites.models import Site from django.db.models.signals import post_save +from django.db.models.signals import pre_save from django.dispatch import Signal, receiver import os import rfc822 @@ -51,6 +52,7 @@ class Mix(_BaseModel): if os.path.isfile(self.get_waveform_path()): self.waveform_generated = True + self.clean_image('mix_image', Mix) super(Mix, self).save(force_insert, force_update, using) def get_absolute_url(self): diff --git a/spa/models/Release.py b/spa/models/Release.py index c49738c..320d2d9 100644 --- a/spa/models/Release.py +++ b/spa/models/Release.py @@ -32,6 +32,7 @@ class Release(_BaseModel): return self.release_title def save(self, force_insert=False, force_update=False, using=None): + self.clean_image('release_image', Release) super(Release, self).save(force_insert, force_update, using) def get_absolute_url(self): diff --git a/spa/models/_BaseModel.py b/spa/models/_BaseModel.py index a94fc88..7e6c571 100644 --- a/spa/models/_BaseModel.py +++ b/spa/models/_BaseModel.py @@ -1,6 +1,5 @@ import logging from django.db import models -from django.db.models import get_model from django.utils import simplejson import os from core.utils import url @@ -41,4 +40,13 @@ class _BaseModel(models.Model): for field in field_list: if field.endswith("name") or field.endswith("description"): return field - return "description" \ No newline at end of file + return "description" + + def base_pre_save(self, sender, instance, created, **kwargs): + pass + + def clean_image(self, image_field, sender): + if self.__dict__[image_field] == "DONOTSEND": + old_instance = sender.objects.get(pk=self.pk) + if old_instance is not None: + self.__dict__[image_field] = old_instance.__dict__[image_field] \ No newline at end of file diff --git a/spa/signals.py b/spa/signals.py index 622d604..84c9324 100644 --- a/spa/signals.py +++ b/spa/signals.py @@ -1,8 +1,10 @@ from django.core.exceptions import ObjectDoesNotExist +from django.db.models.signals import pre_save from django.dispatch import receiver, Signal from django.db.models import signals from django.contrib.auth.management import create_superuser from django.contrib.auth import models as auth_app +from spa.models import _BaseModel, Release from spa.models.Mix import Mix waveform_generated = Signal() @@ -18,6 +20,17 @@ def waveform_generated_callback(sender, **kwargs): except ObjectDoesNotExist: pass waveform_generated.connect(waveform_generated_callback) + +""" +def handle_image_updating(sender, field, instance, **kwargs): + #Don't over + if instance.id: + if instance[field] == 'DONOTSEND': + old_item = Mix.objects.get(pk=instance.id) + instance[field] = old_item[field] + instance.post.save() +""" + """ signals.post_syncdb.disconnect( create_superuser, diff --git a/static/js/app/models/mix.js b/static/js/app/models/mix.js index 76b89a9..620a18c 100644 --- a/static/js/app/models/mix.js +++ b/static/js/app/models/mix.js @@ -11,6 +11,13 @@ window.Mix = DSSModel.extend({ schema:{ title:'Text', description:'Text' + }, + isValid:function () { + this.errors = {}; + if (com.podnoms.utils.isEmpty(this.get('title'))) { + return this.addError('title', 'Please enter a title'); + } + return ""; } }); window.MixCollection = TastypieCollection.extend({ diff --git a/static/js/app/views/mix.js b/static/js/app/views/mix.js index c8d6dc5..4d9ad2b 100644 --- a/static/js/app/views/mix.js +++ b/static/js/app/views/mix.js @@ -28,13 +28,15 @@ window.MixListItemView = Backbone.View.extend({ var id = this.model.get("id"); this.setLikeButton(id, this.model.get('liked')); this.setFavouriteButton(id, this.model.get('favourited')); - $('#mix-link-' + id, this.el).popover({ - animation: true, - placement: 'bottom', - trigger: 'hover', - html: 'true', - delay: { show: 500, hide: 500 } - }); + /* + $('#mix-link-' + id, this.el).popover({ + animation: true, + placement: 'bottom', + trigger: 'hover', + html: 'true', + delay: { show: 500, hide: 500 } + }); + */ return this; }, setLikeButton:function (id, liked) { @@ -244,41 +246,43 @@ window.MixCreateView = DSSEditableView.extend({ var parent = this; this.model.set('upload-hash', this.guid); this.model.set('upload-extension', $('#upload-extension', this.el).val()); - this.model.save( - null, { - success:function () { - if (parent.sendImage) { - $.ajaxFileUpload({ - url:'/ajax/upload_image/' + model.get('id') + '/', - secureuri:false, - fileElementId:'mix_image', - success:function (data, status) { - if (typeof(data.error) != 'undefined') { - if (data.error != '') { - alert(data.error); - } else { - alert(data.msg); - } + if (!parent.sendImage) + this.model.set('mix_image', 'DONOTSEND'); + + this._saveChanges({ + success:function () { + if (parent.sendImage) { + $.ajaxFileUpload({ + url:'/ajax/upload_image/' + model.get('id') + '/', + secureuri:false, + fileElementId:'mix_image', + success:function (data, status) { + if (typeof(data.error) != 'undefined') { + if (data.error != '') { + alert(data.error); } else { - $('#mix-details', this.el).hide(); - parent.state++; - parent.checkRedirect(); + alert(data.msg); } - }, - error:function (data, status, e) { - alert(e); + } else { + $('#mix-details', this.el).hide(); + parent.state++; + parent.checkRedirect(); } - }); - } else { - $('#mix-details', this.el).hide(); - parent.state++; - parent.checkRedirect(); - } - }, - error:function () { - com.podnoms.utils.showAlert("Error", "Something went wrong", "alert-info", false); + }, + error:function (data, status, e) { + alert(e); + } + }); + } else { + $('#mix-details', this.el).hide(); + parent.state++; + parent.checkRedirect(); } - }); + }, + error:function () { + com.podnoms.utils.showAlert("Error", "Something went wrong", "alert-info", false); + } + }); return false; }, imageChanged:function (evt) { diff --git a/static/js/app/views/release.js b/static/js/app/views/release.js index aabc9e8..edefa5f 100644 --- a/static/js/app/views/release.js +++ b/static/js/app/views/release.js @@ -80,6 +80,7 @@ var ReleaseView = Backbone.View.extend({ var ReleaseCreateView = DSSEditableView.extend({ events:{ "click #save-changes":"saveChanges", + "change #release_image":"imageChanged", "change input":"changed", "change textarea":"changed", "change select":"changeSelect" @@ -88,6 +89,7 @@ var ReleaseCreateView = DSSEditableView.extend({ this.render(); }, render:function () { + this.sendImage = false; $(this.el).html(this.template({"item":this.model.toJSON()})); this._bakeForm(this.el, 'label'); }, @@ -99,7 +101,6 @@ var ReleaseCreateView = DSSEditableView.extend({ this.model.set('release_description', $('#release-description', this.el).html()); this.model.set('release_date', $('#release_date', this.el).val()); this.model.set('embed_code', $('#embed_code', this.el).val()); - this._saveChanges({ success:function () { com.podnoms.utils.showAlert("Success", "Release successfully added", "alert-info", true); @@ -107,5 +108,8 @@ var ReleaseCreateView = DSSEditableView.extend({ } }); return false; + }, + imageChanged:function (evt) { + this.sendImage = true; } }); \ No newline at end of file diff --git a/templates/views/MixCreateView.html b/templates/views/MixCreateView.html index 7696f2e..34652e7 100644 --- a/templates/views/MixCreateView.html +++ b/templates/views/MixCreateView.html @@ -14,25 +14,26 @@