From: Felix Domke Date: Sun, 16 Nov 2008 23:00:43 +0000 (+0100) Subject: allows to configure the path for timeshift recordings via gui, by Moritz Venn. closes... X-Git-Tag: 2.6.0~595 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/eea4ecaf18d01dbdbe1590bc7b6e4c6f9da1fe8b allows to configure the path for timeshift recordings via gui, by Moritz Venn. closes #64. --- diff --git a/data/menu.xml b/data/menu.xml index 93455b23..369b20e0 100644 --- a/data/menu.xml +++ b/data/menu.xml @@ -70,6 +70,7 @@ --> + diff --git a/lib/python/Components/UsageConfig.py b/lib/python/Components/UsageConfig.py index 714d366d..6ed87840 100644 --- a/lib/python/Components/UsageConfig.py +++ b/lib/python/Components/UsageConfig.py @@ -1,5 +1,5 @@ from Components.Harddisk import harddiskmanager -from config import ConfigSubsection, ConfigYesNo, config, ConfigSelection, ConfigText, ConfigNumber, ConfigSet +from config import ConfigSubsection, ConfigYesNo, config, ConfigSelection, ConfigText, ConfigNumber, ConfigSet, ConfigLocations from enigma import Misc_Options, setTunerTypePriorityOrder; from SystemInfo import SystemInfo import os @@ -30,6 +30,9 @@ def InitUsageConfig(): ("standard", _("standard")), ("swap", _("swap PiP and main picture")), ("swapstop", _("move PiP to main picture")), ("stop", _("stop PiP")) ]) + config.usage.allowed_timeshift_paths = ConfigLocations(default = ["/media/hdd/"]) + config.usage.timeshift_path = ConfigText(default = "/media/hdd") + config.usage.on_movie_start = ConfigSelection(default = "ask", choices = [ ("ask", _("Ask user")), ("resume", _("Resume from last position")), ("beginning", _("Start from the beginning")) ]) config.usage.on_movie_stop = ConfigSelection(default = "ask", choices = [ diff --git a/lib/python/Screens/LocationBox.py b/lib/python/Screens/LocationBox.py index 7cd6cbf9..68d4f772 100644 --- a/lib/python/Screens/LocationBox.py +++ b/lib/python/Screens/LocationBox.py @@ -503,3 +503,32 @@ class MovieLocationBox(LocationBox): def __init__(self, session, text, dir, minFree = None): inhibitDirs = ["/bin", "/boot", "/dev", "/etc", "/lib", "/proc", "/sbin", "/sys", "/usr", "/var"] LocationBox.__init__(self, session, text = text, currDir = dir, bookmarks = config.movielist.videodirs, autoAdd = True, editDir = True, inhibitDirs = inhibitDirs, minFree = minFree) + +class TimeshiftLocationBox(LocationBox): + + skinName = "LocationBox" # XXX: though we could use a custom skin or inherit the hardcoded one we stick with the original :-) + + def __init__(self, session): + inhibitDirs = ["/bin", "/boot", "/dev", "/etc", "/lib", "/proc", "/sbin", "/sys", "/usr", "/var"] + LocationBox.__init__( + self, + session, + text = _("Where to save temporary timeshift recordings?"), + currDir = config.usage.timeshift_path.value, + bookmarks = config.usage.allowed_timeshift_paths, + autoAdd = True, + editDir = True, + inhibitDirs = inhibitDirs, + minFree = 1024 # XXX: the same requirement is hardcoded in servicedvb.cpp + ) + + def cancel(self): + config.usage.timeshift_path.cancel() + LocationBox.cancel(self) + + def selectConfirmed(self, ret): + if ret: + config.usage.timeshift_path.value = self.getPreferredFolder() + config.usage.timeshift_path.save() + LocationBox.selectConfirmed(self, ret) + diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 6c1e46f7..4141236a 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -31,8 +31,6 @@ #error no byte order defined! #endif -#define TSPATH "/media/hdd" - class eStaticServiceDVBInformation: public iStaticServiceInformation { DECLARE_REF(eStaticServiceDVBInformation); @@ -1494,9 +1492,16 @@ RESULT eDVBServicePlay::timeshift(ePtr &ptr) { if (!m_timeshift_enabled) { - /* we need enough diskspace */ + /* query config path */ + std::string tspath; + if(ePythonConfigQuery::getConfigValue("config.usage.timeshift_path", tspath) == -1){ + eDebug("could not query ts path from config"); + return -4; + } + tspath.append("/"); + /* we need enough diskspace */ struct statfs fs; - if (statfs(TSPATH "/.", &fs) < 0) + if (statfs(tspath.c_str(), &fs) < 0) { eDebug("statfs failed!"); return -2; @@ -2114,12 +2119,23 @@ RESULT eDVBServicePlay::startTimeshift() if (!m_record) return -3; - char templ[]=TSPATH "/timeshift.XXXXXX"; + std::string tspath; + if(ePythonConfigQuery::getConfigValue("config.usage.timeshift_path", tspath) == -1){ + eDebug("could not query ts path"); + return -5; + } + tspath.append("/timeshift.XXXXXX"); + char* templ; + templ = new char[tspath.length() + 1]; + strcpy(templ, tspath.c_str()); + m_timeshift_fd = mkstemp(templ); - m_timeshift_file = templ; - + m_timeshift_file = std::string(templ); + eDebug("recording to %s", templ); - + + delete [] templ; + if (m_timeshift_fd < 0) { m_record = 0;