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 = ( |
---|