# -*- coding: utf-8 -*- # vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 ############################################################################### # ScribeEngine - Open Source Blog Software # # --------------------------------------------------------------------------- # # Copyright (c) 2010 Raoul Snyman # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # # under the terms of the GNU General Public License as published by the Free # # Software Foundation; version 2 of the License. # # # # This program is distributed in the hope that it will be useful, but WITHOUT # # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # # more details. # # # # You should have received a copy of the GNU General Public License along # # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### import os import logging from pprint import pprint, pformat from pylons.decorators import jsonify from scribeengine.lib.base import * from scribeengine.lib import utils from scribeengine.model import MediaType, File from scribeengine.model.meta import Session try: import json except ImportError: import simplejson as json log = logging.getLogger(__name__) class MediaController(BaseController): def __before__(self): BaseController.__before__(self) self._add_javascript(u'tinymce/tiny_mce_popup.js') self._add_javascript(u'ScribeEngine.Media.js') def _get_directories(self, parent=None, tree=[]): old_root = parent dirname = os.path.split(parent)[1] node = {u'data': dirname, u'state': u'open'} for root, dirs, files in os.walk(parent): if root != old_root: break if dirs: node[u'children'] = [] for dirpath in dirs: full_dirpath = os.path.join(root, dirpath) self._get_directories(full_dirpath, node[u'children']) tree.append(node) def _get_files(self, dirpath): for root, dirs, files in os.walk(os.path.abspath(dirpath)): filelist = [] for filename in files: if os.path.splitext(filename)[1] in [u'.png', u'.jpg', u'.gif']: filelist.append({u'name': filename, u'type': u'/images/file-image.png'}) else: filelist.append({u'name': filename, u'type': u'/images/file-unknown.png'}) return filelist break def index(self): self._add_javascript(u'jstree/jquery.jstree.js') directories = [] path = os.path.join(config[u'paths.media'], u'user%s' % c.current_user.id) if not os.path.exists(path): os.makedirs(path) self._get_directories(path, directories) c.directories = json.dumps(directories) c.files = self._get_files(path) c.page_title = u'Media Browser' return render(u'/media/index.mako') @jsonify def get_files(self): path = request.GET.get(u'path', u'').split(u',') dirpath = os.path.join(config[u'paths.media'], *path) log.debug("Path: %s", path) return {u'results': self._get_files(dirpath)} @jsonify def create_directory(self): """ Create a directory, called via AJAX. """ dirname = request.GET.get(u'directory') parent = request.GET.get(u'parent') if dirname and parent: parent = os.path.abspath(parent) log.debug(parent) #os.makedirs(os.path.join(parent, dirname)) return u'1' else: return u'0'