コード例 #1
0
    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)
コード例 #2
0
ファイル: views.py プロジェクト: hanleybrand/rooibos-apps
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))
コード例 #3
0
ファイル: views.py プロジェクト: hanleybrand/rooibos-apps
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))
コード例 #4
0
 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
コード例 #5
0
 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
コード例 #6
0
    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)
コード例 #7
0
ファイル: views.py プロジェクト: hanleybrand/rooibos-apps
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
コード例 #8
0
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'])
コード例 #9
0
ファイル: urls.py プロジェクト: pombredanne/rooibos-apps
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"])