191 lines
6.9 KiB
Python
191 lines
6.9 KiB
Python
|
# -*- coding: utf-8 -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||
|
import ulib.base.i_need_py23
|
||
|
|
||
|
__all__ = ('TasksrcFile',)
|
||
|
|
||
|
from os import path
|
||
|
|
||
|
from ulib.base.base import scriptdir, isseq
|
||
|
from ulib.base.uio import _u
|
||
|
from ulib.base.config import ShConfigFile
|
||
|
from ulib.base.paths import abspath2
|
||
|
|
||
|
class TasksrcFile(ShConfigFile):
|
||
|
TASKSRC = "tasksrc"
|
||
|
DEFAULT_TASKSFILE = "Tasks.txt"
|
||
|
DEFAULT_PURGEDFILE = "Purged.txt"
|
||
|
|
||
|
def __init__(self, file=None, raise_exception=True):
|
||
|
if file is None:
|
||
|
testdir = path.join(scriptdir, "../../test")
|
||
|
utoolsrcdir = path.join(path.expanduser("~"), ".utools")
|
||
|
if path.isdir(testdir): file = path.join(testdir, self.TASKSRC)
|
||
|
else: file = path.join(utoolsrcdir, self.TASKSRC)
|
||
|
raise_exception = False
|
||
|
ShConfigFile.__init__(self, file=file, raise_exception=raise_exception)
|
||
|
|
||
|
TASKSDIR = "tasksdir"
|
||
|
PROJDIRS = "projdirs"
|
||
|
STORES = "stores"
|
||
|
TASKSFILE = "tasksfile"
|
||
|
PURGEDFILE = "purgedfile"
|
||
|
URGENT_COLOR = "urgent_color"
|
||
|
NORMAL_COLOR = "normal_color"
|
||
|
PLANNED_COLOR = "planned_color"
|
||
|
OBSOLETE_COLOR = "obsolete_color"
|
||
|
DONE_COLOR = "done_color"
|
||
|
EVENT_COLOR = "event_color"
|
||
|
IDEA_COLOR = "idea_color"
|
||
|
ACTIVITY_COLOR = "activity_color"
|
||
|
PROJECT_COLOR = "project_color"
|
||
|
CONTEXT_COLOR = "context_color"
|
||
|
TAG_COLOR = "tag_color"
|
||
|
|
||
|
def __p(self, p, refdir=None):
|
||
|
if refdir is not None:
|
||
|
if path.isfile(refdir): refdir = path.split(refdir)[0]
|
||
|
return abspath2(path.expanduser(p), refdir)
|
||
|
def __ptd(self, p):
|
||
|
return self.__p(p, self.get_tasksdir())
|
||
|
|
||
|
def __get(self, name, default, list=False, strip=False, fix_path=True):
|
||
|
if fix_path is True: fix_path = self.__ptd
|
||
|
if self.has_key(name):
|
||
|
if list:
|
||
|
values = self.get_list(name, strip)
|
||
|
if fix_path: values = [fix_path(value) for value in values]
|
||
|
value = values
|
||
|
else:
|
||
|
value = self[name]
|
||
|
if fix_path: value = fix_path(value)
|
||
|
else:
|
||
|
value = default
|
||
|
return value
|
||
|
|
||
|
def __join(self, values):
|
||
|
if isseq(values): values = u"\n".join(map(lambda v: _u(v), values))
|
||
|
else: values = _u(values)
|
||
|
return values
|
||
|
|
||
|
def __set(self, name, value, list=False):
|
||
|
if value is None:
|
||
|
if self.has_key(name): del self[name]
|
||
|
else:
|
||
|
self[name] = self.__join(value)
|
||
|
|
||
|
def get_tasksdir(self):
|
||
|
"""Retourner le répertoire de base pour les fichiers de tâche
|
||
|
Par défaut, il s'agit de ~/.utools
|
||
|
"""
|
||
|
return self.__get(self.TASKSDIR, self.absfiledir, list=True, strip=True, fix_path=self.__p)
|
||
|
def set_tasksdir(self, tasksdir=None):
|
||
|
self.__set(self.TASKSDIR, tasksdir, list=True)
|
||
|
|
||
|
def get_projdirs(self):
|
||
|
"""Retourner la liste des répertoires de base pour les projets.
|
||
|
"""
|
||
|
return self.__get(self.PROJDIRS, (), list=True, strip=True)
|
||
|
def set_projdirs(self, projdirs=None):
|
||
|
self.__set(self.PROJDIRS, projdirs, list=True)
|
||
|
|
||
|
def get_stores(self):
|
||
|
"""Retourner la liste des stores à considérer pour la lecture des tâches
|
||
|
"""
|
||
|
return self.__get(self.STORES, (), list=True, strip=True)
|
||
|
def set_stores(self, stores=None):
|
||
|
self.__set(self.STORES, stores, list=True)
|
||
|
|
||
|
def get_default_tasksfile(self):
|
||
|
return self.__ptd(self.DEFAULT_TASKSFILE)
|
||
|
|
||
|
def get_tasksfile(self, default=True):
|
||
|
"""Retourner la valeur tasksfile si elle est définie, default sinon.
|
||
|
Il s'agit du fichier qui contient les tâches par défaut.
|
||
|
Si default==True, retourner la première valeur de get_stores(), sinon
|
||
|
la valeur par défaut ~/.utools/Tasks.txt
|
||
|
"""
|
||
|
if default is True:
|
||
|
stores = self.get_stores()
|
||
|
if stores: default = stores[0]
|
||
|
else: default = self.get_default_tasksfile()
|
||
|
return self.__get(self.TASKSFILE, default)
|
||
|
def set_tasksfile(self, tasksfile):
|
||
|
self.set_stores(tasksfile)
|
||
|
self.__set(self.TASKSFILE, tasksfile)
|
||
|
|
||
|
def get_tasksfiles(self):
|
||
|
"""Retourner la valeur de get_stores() si elle définie, sinon la valeur
|
||
|
[get_tasksfile()]
|
||
|
"""
|
||
|
stores = self.get_stores()
|
||
|
if not stores: stores = [self.get_tasksfile()]
|
||
|
return stores
|
||
|
|
||
|
def get_default_purgedfile(self):
|
||
|
return self.__ptd(self.DEFAULT_PURGEDFILE)
|
||
|
|
||
|
def get_purgedfile(self, default=True):
|
||
|
"""Retourner la valeur purgedfile si elle est définie, default sinon.
|
||
|
Il s'agit du fichier qui contient les tâches par défaut.
|
||
|
Si default==True, retourner la valeur par défaut ~/.utools/Purged.txt
|
||
|
"""
|
||
|
if default is True: default = self.get_default_purgedfile()
|
||
|
return self.__get(self.TASKSFILE, default)
|
||
|
def set_purgedfile(self, purgedfile):
|
||
|
self.__set(self.PURGEDFILE, purgedfile)
|
||
|
|
||
|
def get_urgent_color(self):
|
||
|
return self.get(self.URGENT_COLOR, "red")
|
||
|
def set_urgent_color(self, urgent_color):
|
||
|
self[self.URGENT_COLOR] = urgent_color
|
||
|
|
||
|
def get_normal_color(self):
|
||
|
return self.get(self.NORMAL_COLOR, "") or None
|
||
|
def set_normal_color(self, normal_color):
|
||
|
self[self.NORMAL_COLOR] = normal_color
|
||
|
|
||
|
def get_planned_color(self):
|
||
|
return self.get(self.PLANNED_COLOR, "") or None
|
||
|
def set_planned_color(self, planned_color):
|
||
|
self[self.PLANNED_COLOR] = planned_color
|
||
|
|
||
|
def get_obsolete_color(self):
|
||
|
return self.get(self.OBSOLETE_COLOR, "faint") or None
|
||
|
def set_obsolete_color(self, obsolete_color):
|
||
|
self[self.OBSOLETE_COLOR] = obsolete_color
|
||
|
|
||
|
def get_done_color(self):
|
||
|
return self.get(self.DONE_COLOR, "faint")
|
||
|
def set_done_color(self, done_color):
|
||
|
self[self.DONE_COLOR] = done_color
|
||
|
|
||
|
def get_event_color(self):
|
||
|
return self.get(self.EVENT_COLOR, "yellow") or None
|
||
|
def set_event_color(self, event_color):
|
||
|
self[self.EVENT_COLOR] = event_color
|
||
|
|
||
|
def get_idea_color(self):
|
||
|
return self.get(self.IDEA_COLOR, "yellow")
|
||
|
def set_idea_color(self, idea_color):
|
||
|
self[self.IDEA_COLOR] = idea_color
|
||
|
|
||
|
def get_activity_color(self):
|
||
|
return self.get(self.IDEA_COLOR, "green")
|
||
|
def set_activity_color(self, activity_color):
|
||
|
self[self.IDEA_COLOR] = activity_color
|
||
|
|
||
|
def get_project_color(self):
|
||
|
return self.get(self.PROJECT_COLOR, "blue")
|
||
|
def set_project_color(self, project_color):
|
||
|
self[self.PROJECT_COLOR] = project_color
|
||
|
|
||
|
def get_context_color(self):
|
||
|
return self.get(self.CONTEXT_COLOR, "blue")
|
||
|
def set_context_color(self, context_color):
|
||
|
self[self.CONTEXT_COLOR] = context_color
|
||
|
|
||
|
def get_tag_color(self):
|
||
|
return self.get(self.TAG_COLOR, "faint,blue")
|
||
|
def set_tag_color(self, tag_color):
|
||
|
self[self.TAG_COLOR] = tag_color
|