def sync_files(self, user): # create directories if missing for type in FILE_TYPES.keys(): d = self.path(os.path.join(user.username, type)) if not os.path.isdir(d): os.makedirs(d) def unify_paths(list): return map(lambda s: s.replace('\\', '/').lower(), list) logging.debug("Synching files for %s" % user.username) media = unify_paths([ m.url for m in Media.objects.select_related('record').filter( record__owner=user, storage=get_jmutube_storage()) ]) # for m in media: # logging.info("Found existing media object %s for %s" % (m, user.username)) for type, extensions in FILE_TYPES.iteritems(): subdir = os.path.join(user.username, type) files = unify_paths(self.list_files(subdir, extensions)) for m in media: try: files.remove(m) except ValueError: pass for file in files: logging.debug("Creating record for %s owned by %s" % (file, user.username)) self.create_record_for_file(user, file, type)
def migrate_files(request): path = os.path.join(settings.JMUTUBE_MEDIA_ROOT, request.user.username) if request.method == 'POST': for file in request.POST.getlist('file'): shutil.copy2(os.path.join(path, file), os.path.join(path, 'video')) get_jmutube_storage().storage_system.sync_files(request.user) return HttpResponseRedirect(reverse('jmutube-media', args=['video'])) files = map(lambda f: {'name': os.path.split(f)[1], 'exists': os.path.exists(os.path.join(path, 'video', os.path.split(f)[1])) }, filter(lambda f: os.path.split(f)[1][0] != ".", all_files(path, patterns=';'.join(FILE_TYPES['video']), single_level=True))) return render_to_response('media/jmutube-migrate.html', { 'files': files, 'path': path }, context_instance = RequestContext(request))
def upload_file(request): uploader = request.user.is_superuser or request.user.groups.filter(id=get_jmutube_uploaders_users_group().id).count() > 0 if uploader: available_users = User.objects.filter(is_active=True).order_by('username').values_list('id', 'username') else: available_users = [(request.user.id, request.user.username)] class UploadFileForm(forms.Form): file = forms.FileField(label="Upload new file") tag = forms.CharField(label="Tag uploads with:", required=False) for_user = forms.ChoiceField(label="Target user:"******"' + tag + '"') if request.POST.get('swfupload') == 'true': return HttpResponse(content='ok', mimetype='text/plain') return HttpResponseRedirect(reverse('jmutube-media', args=[type])) else: if request.POST.get('swfupload') == 'true': return HttpResponseForbidden(content='invalid type', mimetype='text/plain') request.user.message_set.create(message="The file you uploaded does not have a valid extension." + "Valid files are %s." % (','.join(filter(None, [','.join(x) for x in FILE_TYPES.values()])))) return HttpResponseRedirect(reverse('jmutube-upload')) else: uploadform = UploadFileForm(initial={'for_user': request.user.id}) return render_to_response('jmutube-upload.html', { 'form': uploadform, 'uploader': uploader, }, context_instance=RequestContext(request))
def create_record_for_file(self, user, file, type): title = us_to_sp(os.path.splitext(os.path.split(file)[1])[0]) mimetype = MIME_TYPES.get(os.path.splitext(file)[1]) record = Record.objects.create(owner=user, name=title, source='jmutube-%s' % type) media = Media.objects.create(record=record, url=file, storage=get_jmutube_storage(), mimetype=mimetype) title_field = Field.objects.get(name='title', standard__prefix='dc') CollectionItem.objects.create(collection=get_jmutube_collection(), record=record, hidden=True) FieldValue.objects.create(record=record, field=title_field, value=title, order=1) Tag.objects.add_tag(OwnedWrapper.objects.get_for_object(user=user, object=record), 'JMUtube') return record
def create_record_for_file(self, user, file, type): title = us_to_sp(os.path.splitext(os.path.split(file)[1])[0]) mimetype = MIME_TYPES.get(os.path.splitext(file)[1]) record = Record.objects.create(owner=user, name=title, source='jmutube-%s' % type) media = Media.objects.create(record=record, url=file, storage=get_jmutube_storage(), mimetype=mimetype) title_field = Field.objects.get(name='title', standard__prefix='dc') CollectionItem.objects.create(collection=get_jmutube_collection(), record=record, hidden=True) FieldValue.objects.create(record=record, field=title_field, value=title, order=1) Tag.objects.add_tag( OwnedWrapper.objects.get_for_object(user=user, object=record), 'JMUtube') return record
def sync_files(self, user): # create directories if missing for type in FILE_TYPES.keys(): d = self.path(os.path.join(user.username, type)) if not os.path.isdir(d): os.makedirs(d) def unify_paths(list): return map(lambda s: s.replace('\\', '/').lower(), list) logging.debug("Synching files for %s" % user.username) media = unify_paths([m.url for m in Media.objects.select_related('record').filter(record__owner=user, storage=get_jmutube_storage())]) # for m in media: # logging.info("Found existing media object %s for %s" % (m, user.username)) for type, extensions in FILE_TYPES.iteritems(): subdir = os.path.join(user.username, type) files = unify_paths(self.list_files(subdir, extensions)) for m in media: try: files.remove(m) except ValueError: pass for file in files: logging.debug("Creating record for %s owned by %s" % (file, user.username)) self.create_record_for_file(user, file, type)
def jmutube_login(request, *args, **kwargs): response = login(request, login_url=reverse('jmutube-login'), *args, **kwargs) if type(response) == HttpResponseRedirect and request.user.is_authenticated(): logging.debug("JMUtube login for %s" % request.user) get_jmutube_storage().storage_system.sync_files(request.user) return response
def sync_on_impersonate(sender, **kwargs): logging.debug("Running impersonation sync for %s" % kwargs['user'].username) get_jmutube_storage().storage_system.sync_files(kwargs['user'])
def sync_on_impersonate(sender, **kwargs): logging.debug("Running impersonation sync for %s" % kwargs["user"].username) get_jmutube_storage().storage_system.sync_files(kwargs["user"])