def get_config(): config = {} # get useful things from recoll.conf rclconf = rclconfig.RclConfig() config['confdir'] = rclconf.getConfDir() config['dirs'] = [ os.path.expanduser(d) for d in shlex.split(rclconf.getConfParam('topdirs')) ] config['stemlang'] = rclconf.getConfParam('indexstemminglanguages') # get config from cookies or defaults for k, v in DEFAULTS.items(): value = select([bottle.request.get_cookie(k), v]) config[k] = type(v)(value) # Fix csvfields: get rid of invalid ones to avoid needing tests in the dump function cf = config['csvfields'].split() ncf = [f for f in cf if f in FIELDS] config['csvfields'] = ' '.join(ncf) config['fields'] = ' '.join(FIELDS) # get mountpoints config['mounts'] = {} for d in config['dirs']: name = 'mount_%s' % urllib.quote(d, '') config['mounts'][d] = select([ bottle.request.get_cookie(name), DEFAULTS['mounts'].get(d), 'file://%s' % d ], [None, '']) return config
def get_config(request): config = {} # get useful things from recoll.conf rclconf = rclconfig.RclConfig() config['confdir'] = rclconf.getConfDir() config['dirs'] = [ os.path.expanduser(d) for d in shlex.split(rclconf.getConfParam('topdirs')) ] config['stemlang'] = rclconf.getConfParam('indexstemminglanguages') # get config from cookies or defaults for k, v in DEFAULTS.items(): if k in available_settings and k in request.cookies: config[k] = type(v)(request.cookies.get(k)) else: config[k] = v # Fix csvfields: get rid of invalid ones to avoid needing tests in the dump function cf = config['csvfields'].split() ncf = [f for f in cf if f in FIELDS] config['csvfields'] = ' '.join(ncf) config['fields'] = ' '.join(FIELDS) # get mountpoints config['mounts'] = {} for d in config['dirs']: config['mounts'][d] = 'aseemsdb.me%s' % d return config
def get_config(): config = {} envdir = safe_envget('RECOLL_CONFDIR') # get useful things from recoll.conf rclconf = rclconfig.RclConfig(envdir) config['confdir'] = rclconf.getConfDir() config['dirs'] = dict.fromkeys([ os.path.expanduser(d) for d in shlex.split(rclconf.getConfParam('topdirs')) ], config['confdir']) # add topdirs from extra config dirs extraconfdirs = safe_envget('RECOLL_EXTRACONFDIRS') if extraconfdirs: config['extraconfdirs'] = shlex.split(extraconfdirs) for e in config['extraconfdirs']: config['dirs'].update( dict.fromkeys([ os.path.expanduser(d) for d in shlex.split(get_topdirs(e)) ], e)) config['extradbs'] = list(map(get_dbdir, config['extraconfdirs'])) else: config['extraconfdirs'] = None config['extradbs'] = None config['stemlang'] = rclconf.getConfParam('indexstemminglanguages') # get config from cookies or defaults for k, v in DEFAULTS.items(): value = select([bottle.request.get_cookie(k), v]) config[k] = type(v)(value) # Fix csvfields: get rid of invalid ones to avoid needing tests in # the dump function cf = config['csvfields'].split() ncf = [f for f in cf if f in FIELDS] config['csvfields'] = ' '.join(ncf) config['fields'] = ' '.join(FIELDS) # get mountpoints config['mounts'] = {} for d in config['dirs']: name = 'mount_%s' % urlquote(d, '') config['mounts'][d] = select( [bottle.request.get_cookie(name), 'file://%s' % d], [None, '']) # Parameters set by the admin in the recoll configuration # file. These override anything else, so read them last val = rclconf.getConfParam('webui_nojsoncsv') val = 0 if val is None else int(val) config['rclc_nojsoncsv'] = val val = rclconf.getConfParam('webui_maxperpage') val = 0 if val is None else int(val) if val: if config['perpage'] == 0 or config['perpage'] > val: config['perpage'] = val val = rclconf.getConfParam('webui_nosettings') val = 0 if val is None else int(val) config['rclc_nosettings'] = val return config
def get_dbdir(confdir): confdir = os.path.expanduser(confdir) rclconf = rclconfig.RclConfig(confdir) dbdir = rclconf.getConfParam('dbdir') if not dbdir: dbdir = 'xapiandb' if not os.path.isabs(dbdir): cachedir = rclconf.getConfParam('cachedir') if not cachedir: cachedir = confdir dbdir = os.path.join(cachedir, dbdir) # recoll API expects bytes, not strings return os.path.normpath(dbdir).encode(g_fscharset)
num = "(0)" num = int(num.strip("()")) if mc == 'm': mfiles.append([hash, num, fn]) else: cfiles.append([hash, num, fn]) return mfiles, cfiles ####################### def usage(): print("Usage: recoll-we-move-files.py [<downloaddir>]", file=sys.stderr) sys.exit(1) config = rclconfig.RclConfig() # Source dir is parameter, else from config else default Downloads directory downloadsdir = config.getConfParam("webdownloadsdir") if not downloadsdir: downloadsdir = os.path.expanduser("~/Downloads") if len(sys.argv) == 2: mydir = sys.argv[1] elif len(sys.argv) == 1: mydir = downloadsdir else: usage() if not os.path.isdir(mydir): usage() # Get target webqueue recoll directory from recoll configuration
def get_topdirs(confdir): rclconf = rclconfig.RclConfig(confdir) return rclconf.getConfParam('topdirs')
def trextdbs(): config = rclconfig.RclConfig("/home/dockes/.recoll-prod") extradbs = rclconfig.RclExtraDbs(config) print extradbs.getActDbs()
def trconfig(): config = rclconfig.RclConfig() names = ("topdirs", "indexallfilenames") for nm in names: print "%s: [%s]" % (nm, config.getConfParam(nm))
def _rcl2folders(self, confdir): self._dirvec = [] self._xid2idx = {} # This is used to store the diridx for the playlists during # the initial walk, for initialization when the tree is # complete. self._playlists = [] start = timer() rclconf = rclconfig.RclConfig(confdir) topdirs = [os.path.expanduser(d) for d in shlex.split(rclconf.getConfParam('topdirs'))] topdirs = [d.rstrip('/') for d in topdirs] # Create the 1st entry. This is special because it holds the # recoll topdirs, which are paths instead of simple names. There # does not seem any need to build the tree between a topdir and / self._dirvec.append({}) self._dirvec[0][".."] = (0, -1) for d in topdirs: self._dirvec.append({}) self._dirvec[0][d] = (len(self._dirvec)-1, -1) self._dirvec[-1][".."] = (0, -1) # Walk the doc list and update the directory tree according to the # url: create intermediary directories if needed, create leaf # entry. # # Binary path issue: at the moment the python rclconfig can't # handle binary (the underlying conftree.py can, we'd need a # binary stringToStrings). So the topdirs entries have to be # strings, and so we decode the binurl too. This probably # could be changed we wanted to support binary, (non utf-8) # paths. For now, for python3 all dir/file names in the tree # are str for docidx in range(len(self._rcldocs)): doc = self._rcldocs[docidx] # Only include selected mtypes: tracks, playlists, # directories etc. if doc.mtype not in audiomtypes: continue # For linking item search results to the main # array. Deactivated for now as it does not seem to be # needed. #self._xid2idx[doc.xdocid] = docidx # Possibly enrich the doc entry with a cover art uri. arturi = docarturi(doc, self._httphp, self._pprefix) if arturi: # The uri is quoted, so it's ascii and we can just store # it as a doc attribute doc.albumarturi = arturi fathidx, path = self._pathbeyondtopdirs(doc) if not fathidx: continue #uplog("%s"%path, file=sys.stderr) for idx in range(len(path)): elt = path[idx] if elt in self._dirvec[fathidx]: # This path element was already seen # If this is the last entry in the path, maybe update # the doc idx (previous entries were created for # intermediate elements without a Doc). if idx == len(path) -1: self._dirvec[fathidx][elt] = \ (self._dirvec[fathidx][elt][0], docidx) # Update fathidx for next iteration fathidx = self._dirvec[fathidx][elt][0] else: # Element has no entry in father directory (hence no # self._dirvec entry either). if idx != len(path) -1: # This is an intermediate element. Create a # Doc-less directory fathidx = self._createdir(fathidx, -1, elt) else: # Last element. If directory, needs a self._dirvec entry if doc.mtype == 'inode/directory': fathidx = self._createdir(fathidx, docidx, elt) elif doc.mtype == 'audio/x-mpegurl': fathidx = self._createpldir(fathidx, docidx,doc,elt) else: self._dirvec[fathidx][elt] = (-1, docidx) if False: for ent in self._dirvec: uplog("%s" % ent) self._initplaylists() end = timer() uplog("_rcl2folders took %.2f Seconds" % (end - start))
def _rcl2folders(docs, confdir, httphp, pathprefix): global dirvec dirvec = [] start = timer() rclconf = rclconfig.RclConfig(confdir) topdirs = [ os.path.expanduser(d) for d in shlex.split(rclconf.getConfParam('topdirs')) ] topdirs = [d.rstrip('/') for d in topdirs] dirvec.append({}) dirvec[0][".."] = (0, -1) for d in topdirs: dirvec.append({}) dirvec[0][d] = (len(dirvec) - 1, -1) dirvec[-1][".."] = (0, -1) # Walk the doc list and update the directory tree according to the # url (create intermediary directories if needed, create leaf # entry for docidx in range(len(docs)): doc = docs[docidx] arturi = docarturi(doc, httphp, pathprefix) if arturi: # The uri is quoted, so it's ascii and we can just store # it as a doc attribute doc.albumarturi = arturi # No need to include non-audio types in the visible tree. if doc.mtype not in audiomtypes: continue url = doc.getbinurl() url = url[7:] try: decoded = url.decode('utf-8') except: decoded = urllib.quote(url).decode('utf-8') # Determine the root entry (topdirs element). Special because # path not simple name fathidx = -1 for rtpath, idx in dirvec[0].iteritems(): if url.startswith(rtpath): fathidx = idx[0] break if fathidx == -1: uplog("No parent in topdirs: %s" % decoded) continue # Compute rest of path url1 = url[len(rtpath):] if len(url1) == 0: continue # If there is a contentgroup field, just add it as a virtual # directory in the path. This only affects the visible tree, # not the 'real' URLs of course. if doc.contentgroup: a = os.path.dirname(url1).decode('utf-8', errors='replace') b = os.path.basename(url1).decode('utf-8', errors='replace') url1 = os.path.join(a, doc.contentgroup, b) # Split path, then walk the vector, possibly creating # directory entries as needed path = url1.split('/')[1:] #uplog("%s"%path, file=sys.stderr) for idx in range(len(path)): elt = path[idx] if elt in dirvec[fathidx]: # This path element was already seen # If this is the last entry in the path, maybe update # the doc idx (previous entries were created for # intermediate elements without a Doc). if idx == len(path) - 1: dirvec[fathidx][elt] = (dirvec[fathidx][elt][0], docidx) #uplog("updating docidx for %s" % decoded) # Update fathidx for next iteration fathidx = dirvec[fathidx][elt][0] else: # Element has no entry in father directory (hence no # dirvec entry either). if idx != len(path) - 1: # This is an intermediate element. Create a # Doc-less directory fathidx = _createdir(dirvec, fathidx, -1, elt) else: # Last element. If directory, needs a dirvec entry if doc.mtype == 'inode/directory': fathidx = _createdir(dirvec, fathidx, docidx, elt) #uplog("Setting docidx for %s" % decoded) else: dirvec[fathidx][elt] = (-1, docidx) if False: for ent in dirvec: uplog("%s" % ent) end = timer() uplog("_rcl2folders took %.2f Seconds" % (end - start)) return dirvec