| 1 | Index: libs/libmythtv/programinfo.h
|
|---|
| 2 | ===================================================================
|
|---|
| 3 | --- libs/libmythtv/programinfo.h (revision 17406)
|
|---|
| 4 | +++ libs/libmythtv/programinfo.h (working copy)
|
|---|
| 5 | @@ -21,7 +21,7 @@
|
|---|
| 6 | mythtv/bindings/perl/MythTV.pm
|
|---|
| 7 | mythtv/bindings/python/MythTV.py
|
|---|
| 8 | */
|
|---|
| 9 | -#define NUMPROGRAMLINES 46
|
|---|
| 10 | +#define NUMPROGRAMLINES 47
|
|---|
| 11 |
|
|---|
| 12 | typedef enum {
|
|---|
| 13 | MARK_UNSET = -10,
|
|---|
| 14 | @@ -332,6 +332,7 @@
|
|---|
| 15 | int chancommfree;
|
|---|
| 16 |
|
|---|
| 17 | QString pathname;
|
|---|
| 18 | + QString dirname;
|
|---|
| 19 | long long filesize;
|
|---|
| 20 | QString hostname;
|
|---|
| 21 | QString storagegroup;
|
|---|
| 22 | Index: libs/libmythtv/programinfo.cpp
|
|---|
| 23 | ===================================================================
|
|---|
| 24 | --- libs/libmythtv/programinfo.cpp (revision 17406)
|
|---|
| 25 | +++ libs/libmythtv/programinfo.cpp (working copy)
|
|---|
| 26 | @@ -189,6 +189,7 @@
|
|---|
| 27 | chanOutputFilters = QDeepCopy<QString>(other.chanOutputFilters);
|
|---|
| 28 |
|
|---|
| 29 | pathname = QDeepCopy<QString>(other.pathname);
|
|---|
| 30 | + dirname = QDeepCopy<QString>(other.dirname);
|
|---|
| 31 | storagegroup = QDeepCopy<QString>(other.storagegroup);
|
|---|
| 32 | filesize = other.filesize;
|
|---|
| 33 | hostname = QDeepCopy<QString>(other.hostname);
|
|---|
| 34 | @@ -339,6 +340,7 @@
|
|---|
| 35 | INT_TO_LIST(audioproperties)
|
|---|
| 36 | INT_TO_LIST(videoproperties)
|
|---|
| 37 | INT_TO_LIST(subtitleType)
|
|---|
| 38 | + STR_TO_LIST(dirname)
|
|---|
| 39 | /* do not forget to update the NUMPROGRAMLINES defines! */
|
|---|
| 40 | }
|
|---|
| 41 |
|
|---|
| 42 | @@ -452,6 +454,7 @@
|
|---|
| 43 | INT_FROM_LIST(audioproperties)
|
|---|
| 44 | INT_FROM_LIST(videoproperties)
|
|---|
| 45 | INT_FROM_LIST(subtitleType)
|
|---|
| 46 | + STR_FROM_LIST(dirname)
|
|---|
| 47 |
|
|---|
| 48 | return true;
|
|---|
| 49 | }
|
|---|
| 50 | @@ -865,7 +868,7 @@
|
|---|
| 51 | "lastmodified,stars,previouslyshown,originalairdate, "
|
|---|
| 52 | "hostname,recordid,transcoder,playgroup, "
|
|---|
| 53 | "recorded.recpriority,progstart,progend,basename,recgroup, "
|
|---|
| 54 | - "storagegroup "
|
|---|
| 55 | + "storagegroup, dirname "
|
|---|
| 56 | "FROM recorded "
|
|---|
| 57 | "LEFT JOIN channel "
|
|---|
| 58 | "ON recorded.chanid = channel.chanid "
|
|---|
| 59 | @@ -936,6 +939,7 @@
|
|---|
| 60 | proginfo->recpriority = query.value(22).toInt();
|
|---|
| 61 |
|
|---|
| 62 | proginfo->pathname = QString::fromUtf8(query.value(25).toString());
|
|---|
| 63 | + proginfo->dirname = QString::fromUtf8(query.value(28).toString());
|
|---|
| 64 |
|
|---|
| 65 | return proginfo;
|
|---|
| 66 | }
|
|---|
| 67 | @@ -1559,7 +1563,7 @@
|
|---|
| 68 | {
|
|---|
| 69 | // Check to see if the file exists locally
|
|---|
| 70 | StorageGroup sgroup(storagegroup);
|
|---|
| 71 | - tmpURL = sgroup.FindRecordingFile(basename);
|
|---|
| 72 | + tmpURL = sgroup.FindRecordingFile(basename,dirname);
|
|---|
| 73 |
|
|---|
| 74 | if (tmpURL != "")
|
|---|
| 75 | {
|
|---|
| 76 | @@ -1606,12 +1610,15 @@
|
|---|
| 77 | *
|
|---|
| 78 | * This method, of course, only works if a recording has been scheduled
|
|---|
| 79 | * and started.
|
|---|
| 80 | + *
|
|---|
| 81 | + * The sheduler sticks the best dir in pathname, then this function replces it
|
|---|
| 82 | + * with the basename to store it, then puts the full pathname.
|
|---|
| 83 | *
|
|---|
| 84 | * \param ext File extension for recording
|
|---|
| 85 | */
|
|---|
| 86 | void ProgramInfo::StartedRecording(QString ext)
|
|---|
| 87 | {
|
|---|
| 88 | - QString dirname = pathname;
|
|---|
| 89 | + dirname = pathname;
|
|---|
| 90 |
|
|---|
| 91 | if (!record)
|
|---|
| 92 | {
|
|---|
| 93 | @@ -1727,7 +1734,7 @@
|
|---|
| 94 | " programid, stars, previouslyshown, originalairdate, "
|
|---|
| 95 | " findid, transcoder, playgroup, recpriority, "
|
|---|
| 96 | " basename, progstart, progend, profile, "
|
|---|
| 97 | - " duplicate, storagegroup) "
|
|---|
| 98 | + " duplicate, storagegroup, dirname) "
|
|---|
| 99 | "VALUES"
|
|---|
| 100 | " (:CHANID, :STARTS, :ENDS, :TITLE, "
|
|---|
| 101 | " :SUBTITLE, :DESC, :HOSTNAME, :CATEGORY, "
|
|---|
| 102 | @@ -1735,7 +1742,7 @@
|
|---|
| 103 | " :PROGRAMID,:STARS, :REPEAT, :ORIGAIRDATE, "
|
|---|
| 104 | " :FINDID, :TRANSCODER, :PLAYGROUP, :RECPRIORITY, "
|
|---|
| 105 | " :BASENAME, :PROGSTART, :PROGEND, :PROFILE, "
|
|---|
| 106 | - " 0, :STORGROUP) "
|
|---|
| 107 | + " 0, :STORGROUP, :DIRNAME) "
|
|---|
| 108 | );
|
|---|
| 109 |
|
|---|
| 110 | if (pg->rectype == kOverrideRecord)
|
|---|
| 111 | @@ -1767,6 +1774,7 @@
|
|---|
| 112 | query.bindValue(":PLAYGROUP", pg->playgroup.utf8());
|
|---|
| 113 | query.bindValue(":RECPRIORITY", schd->getRecPriority());
|
|---|
| 114 | query.bindValue(":BASENAME", pg->pathname);
|
|---|
| 115 | + query.bindValue(":DIRNAME", pg->dirname);
|
|---|
| 116 | query.bindValue(":STORGROUP", pg->storagegroup.utf8());
|
|---|
| 117 | query.bindValue(":PROGSTART", pg->startts);
|
|---|
| 118 | query.bindValue(":PROGEND", pg->endts);
|
|---|
| 119 | @@ -4795,7 +4803,7 @@
|
|---|
| 120 | "recorded.progend, recorded.stars, "
|
|---|
| 121 | "recordedprogram.audioprop+0, recordedprogram.videoprop+0, "
|
|---|
| 122 | "recordedprogram.subtitletypes+0, recorded.watched, "
|
|---|
| 123 | - "recorded.storagegroup "
|
|---|
| 124 | + "recorded.storagegroup, recorded.dirname "
|
|---|
| 125 | "FROM recorded "
|
|---|
| 126 | "LEFT JOIN record ON recorded.recordid = record.recordid "
|
|---|
| 127 | "LEFT JOIN channel ON recorded.chanid = channel.chanid "
|
|---|
| 128 | @@ -4921,6 +4929,7 @@
|
|---|
| 129 | proginfo->recgroup = QString::fromUtf8(query.value(16).toString());
|
|---|
| 130 | proginfo->playgroup = QString::fromUtf8(query.value(27).toString());
|
|---|
| 131 | proginfo->storagegroup = QString::fromUtf8(query.value(36).toString());
|
|---|
| 132 | + proginfo->dirname = QString::fromUtf8(query.value(37).toString());
|
|---|
| 133 | proginfo->recstatus = rsRecorded;
|
|---|
| 134 |
|
|---|
| 135 | if ((pSchedList != NULL) && (proginfo->recendts > rectime))
|
|---|
| 136 | Index: libs/libmyth/storagegroup.cpp
|
|---|
| 137 | ===================================================================
|
|---|
| 138 | --- libs/libmyth/storagegroup.cpp (revision 17406)
|
|---|
| 139 | +++ libs/libmyth/storagegroup.cpp (working copy)
|
|---|
| 140 | @@ -115,12 +115,12 @@
|
|---|
| 141 | }
|
|---|
| 142 | }
|
|---|
| 143 |
|
|---|
| 144 | -QString StorageGroup::FindRecordingFile(QString filename)
|
|---|
| 145 | +QString StorageGroup::FindRecordingFile(QString filename, QString hint)
|
|---|
| 146 | {
|
|---|
| 147 | VERBOSE(VB_FILE, LOC + QString("FindRecordingFile: Searching for '%1'")
|
|---|
| 148 | .arg(filename));
|
|---|
| 149 |
|
|---|
| 150 | - QString recDir = FindRecordingDir(filename);
|
|---|
| 151 | + QString recDir = FindRecordingDir(filename, hint);
|
|---|
| 152 | QString result = "";
|
|---|
| 153 |
|
|---|
| 154 | if (!recDir.isEmpty())
|
|---|
| 155 | @@ -139,11 +139,21 @@
|
|---|
| 156 | return result;
|
|---|
| 157 | }
|
|---|
| 158 |
|
|---|
| 159 | -QString StorageGroup::FindRecordingDir(QString filename)
|
|---|
| 160 | +QString StorageGroup::FindRecordingDir(QString filename, QString hint)
|
|---|
| 161 | {
|
|---|
| 162 | QString result = "";
|
|---|
| 163 | QFile checkFile("");
|
|---|
| 164 |
|
|---|
| 165 | + if( ! hint.isEmpty() )
|
|---|
| 166 | + {
|
|---|
| 167 | + QString testFile = hint + "/" + filename;
|
|---|
| 168 | + VERBOSE(VB_FILE, LOC + QString("FindRecordingDir: Checking hint '%1'")
|
|---|
| 169 | + .arg(hint));
|
|---|
| 170 | + checkFile.setName(testFile);
|
|---|
| 171 | + if (checkFile.exists())
|
|---|
| 172 | + return hint;
|
|---|
| 173 | + }
|
|---|
| 174 | +
|
|---|
| 175 | unsigned int curDir = 0;
|
|---|
| 176 | while (curDir < m_dirlist.size())
|
|---|
| 177 | {
|
|---|
| 178 | Index: libs/libmyth/storagegroup.h
|
|---|
| 179 | ===================================================================
|
|---|
| 180 | --- libs/libmyth/storagegroup.h (revision 17406)
|
|---|
| 181 | +++ libs/libmyth/storagegroup.h (working copy)
|
|---|
| 182 | @@ -21,8 +21,8 @@
|
|---|
| 183 | QStringList GetDirList(void) const
|
|---|
| 184 | { return QDeepCopy<QStringList>(m_dirlist); }
|
|---|
| 185 |
|
|---|
| 186 | - QString FindRecordingFile(QString filename);
|
|---|
| 187 | - QString FindRecordingDir(QString filename);
|
|---|
| 188 | + QString FindRecordingFile(QString filename, QString hint = "");
|
|---|
| 189 | + QString FindRecordingDir(QString filename, QString hint = "");
|
|---|
| 190 |
|
|---|
| 191 | QString FindNextDirMostFree(void);
|
|---|
| 192 |
|
|---|
| 193 | Index: programs/mythbackend/mainserver.cpp
|
|---|
| 194 | ===================================================================
|
|---|
| 195 | --- programs/mythbackend/mainserver.cpp (revision 17406)
|
|---|
| 196 | +++ programs/mythbackend/mainserver.cpp (working copy)
|
|---|
| 197 | @@ -1128,7 +1128,7 @@
|
|---|
| 198 | "recordedprogram.audioprop+0, recordedprogram.videoprop+0, "
|
|---|
| 199 | "recordedprogram.subtitletypes+0, transcoded, "
|
|---|
| 200 | "recorded.recpriority, watched, recorded.preserve, "
|
|---|
| 201 | - "recorded.storagegroup "
|
|---|
| 202 | + "recorded.storagegroup, recorded.dirname "
|
|---|
| 203 | "FROM recorded "
|
|---|
| 204 | "LEFT JOIN record ON recorded.recordid = record.recordid "
|
|---|
| 205 | "LEFT JOIN channel ON recorded.chanid = channel.chanid "
|
|---|
| 206 | @@ -1214,6 +1214,7 @@
|
|---|
| 207 | }
|
|---|
| 208 |
|
|---|
| 209 | proginfo->pathname = QString::fromUtf8(query.value(28).toString());
|
|---|
| 210 | + proginfo->dirname = QString::fromUtf8(query.value(40).toString());
|
|---|
| 211 |
|
|---|
| 212 | if (proginfo->hostname.isEmpty() || proginfo->hostname.isNull())
|
|---|
| 213 | proginfo->hostname = gContext->GetHostName();
|
|---|
| 214 | Index: bindings/python/MythTV/MythTV.py
|
|---|
| 215 | ===================================================================
|
|---|
| 216 | --- bindings/python/MythTV/MythTV.py (revision 17406)
|
|---|
| 217 | +++ bindings/python/MythTV/MythTV.py (working copy)
|
|---|
| 218 | @@ -45,7 +45,7 @@
|
|---|
| 219 |
|
|---|
| 220 | BACKEND_SEP = '[]:[]'
|
|---|
| 221 | PROTO_VERSION = 40
|
|---|
| 222 | -PROGRAM_FIELDS = 46
|
|---|
| 223 | +PROGRAM_FIELDS = 47
|
|---|
| 224 |
|
|---|
| 225 | class MythTV:
|
|---|
| 226 | """
|
|---|
| 227 | @@ -302,6 +302,7 @@
|
|---|
| 228 | self.audio_props = data[43]
|
|---|
| 229 | self.video_props = data[44]
|
|---|
| 230 | self.subtitle_type = data[45]
|
|---|
| 231 | + self.dirname = data[46]
|
|---|
| 232 |
|
|---|
| 233 | if __name__ == '__main__':
|
|---|
| 234 | banner = '\'m\' is a MythTV instance.'
|
|---|
| 235 | Index: bindings/perl/MythTV.pm
|
|---|
| 236 | ===================================================================
|
|---|
| 237 | --- bindings/perl/MythTV.pm (revision 17406)
|
|---|
| 238 | +++ bindings/perl/MythTV.pm (working copy)
|
|---|
| 239 | @@ -98,7 +98,7 @@
|
|---|
| 240 | # NUMPROGRAMLINES is defined in mythtv/libs/libmythtv/programinfo.h and is
|
|---|
| 241 | # the number of items in a ProgramInfo QStringList group used by
|
|---|
| 242 | # ProgramInfo::ToSringList and ProgramInfo::FromStringList.
|
|---|
| 243 | - our $NUMPROGRAMLINES = 46;
|
|---|
| 244 | + our $NUMPROGRAMLINES = 47;
|
|---|
| 245 |
|
|---|
| 246 | # Reasons a recording wouldn't be happening (from libs/libmythtv/programinfo.h)
|
|---|
| 247 | our %RecStatus_Types = (
|
|---|