00001
00002
00003 #include <QDateTime>
00004 #include <QMutex>
00005
00006 #include "programtypes.h"
00007
00008 const char *kPlayerInUseID = "player";
00009 const char *kPIPPlayerInUseID = "pipplayer";
00010 const char *kPBPPlayerInUseID = "pbpplayer";
00011 const char *kImportRecorderInUseID = "import_recorder";
00012 const char *kRecorderInUseID = "recorder";
00013 const char *kFileTransferInUseID = "filetransfer";
00014 const char *kTruncatingDeleteInUseID = "truncatingdelete";
00015 const char *kFlaggerInUseID = "flagger";
00016 const char *kTranscoderInUseID = "transcoder";
00017 const char *kPreviewGeneratorInUseID = "preview_generator";
00018 const char *kJobQueueInUseID = "jobqueue";
00019 const char *kCCExtractorInUseID = "ccextractor";
00020
00021 QString toString(MarkTypes type)
00022 {
00023 switch (type)
00024 {
00025 case MARK_UNSET: return "UNSET";
00026 case MARK_TMP_CUT_END: return "TMP_CUT_END";
00027 case MARK_TMP_CUT_START:return "TMP_CUT_START";
00028 case MARK_UPDATED_CUT: return "UPDATED_CUT";
00029 case MARK_PLACEHOLDER: return "PLACEHOLDER";
00030 case MARK_CUT_END: return "CUT_END";
00031 case MARK_CUT_START: return "CUT_START";
00032 case MARK_BOOKMARK: return "BOOKMARK";
00033 case MARK_BLANK_FRAME: return "BLANK_FRAME";
00034 case MARK_COMM_START: return "COMM_START";
00035 case MARK_COMM_END: return "COMM_END";
00036 case MARK_GOP_START: return "GOP_START";
00037 case MARK_KEYFRAME: return "KEYFRAME";
00038 case MARK_SCENE_CHANGE: return "SCENE_CHANGE";
00039 case MARK_GOP_BYFRAME: return "GOP_BYFRAME";
00040 }
00041
00042 return "unknown";
00043 }
00044
00045 QString toUIState(RecStatusType recstatus)
00046 {
00047 if (recstatus == rsRecorded || recstatus == rsWillRecord ||
00048 recstatus == rsOtherShowing)
00049 return "normal";
00050
00051 if (recstatus == rsRecording || recstatus == rsTuning ||
00052 recstatus == rsOtherRecording || recstatus == rsOtherTuning)
00053 return "running";
00054
00055 if (recstatus == rsConflict || recstatus == rsOffLine ||
00056 recstatus == rsTunerBusy || recstatus == rsFailed ||
00057 recstatus == rsAborted || recstatus == rsMissed)
00058 {
00059 return "error";
00060 }
00061
00062 if (recstatus == rsRepeat ||
00063 recstatus == rsNeverRecord || recstatus == rsDontRecord ||
00064 (recstatus != rsDontRecord && recstatus <= rsEarlierShowing))
00065 {
00066 return "disabled";
00067 }
00068
00069 return "warning";
00070 }
00071
00073 QString toString(RecStatusType recstatus, uint id)
00074 {
00075 QString ret = "-";
00076 switch (recstatus)
00077 {
00078 case rsAborted:
00079 ret = QObject::tr("A", "RecStatusChar rsAborted");
00080 break;
00081 case rsRecorded:
00082 ret = QObject::tr("R", "RecStatusChar rsRecorded");
00083 break;
00084 case rsRecording:
00085 ret = QString::number(id);
00086 break;
00087 case rsTuning:
00088 ret = QString::number(id);
00089 break;
00090 case rsWillRecord:
00091 ret = QString::number(id);
00092 break;
00093 case rsDontRecord:
00094 ret = QObject::tr("X", "RecStatusChar rsDontRecord");
00095 break;
00096 case rsPreviousRecording:
00097 ret = QObject::tr("P", "RecStatusChar rsPreviousRecording");
00098 break;
00099 case rsCurrentRecording:
00100 ret = QObject::tr("R", "RecStatusChar rsCurrentRecording");
00101 break;
00102 case rsEarlierShowing:
00103 ret = QObject::tr("E", "RecStatusChar rsEarlierShowing");
00104 break;
00105 case rsTooManyRecordings:
00106 ret = QObject::tr("T", "RecStatusChar rsTooManyRecordings");
00107 break;
00108 case rsCancelled:
00109 ret = QObject::tr("c", "RecStatusChar rsCancelled");
00110 break;
00111 case rsMissed:
00112 ret = QObject::tr("M", "RecStatusChar rsMissed");
00113 break;
00114 case rsMissedFuture:
00115 ret = "M";
00116 break;
00117 case rsConflict:
00118 ret = QObject::tr("C", "RecStatusChar rsConflict");
00119 break;
00120 case rsLaterShowing:
00121 ret = QObject::tr("L", "RecStatusChar rsLaterShowing");
00122 break;
00123 case rsRepeat:
00124 ret = QObject::tr("r", "RecStatusChar rsRepeat");
00125 break;
00126 case rsInactive:
00127 ret = QObject::tr("x", "RecStatusChar rsInactive");
00128 break;
00129 case rsLowDiskSpace:
00130 ret = QObject::tr("K", "RecStatusChar rsLowDiskSpace");
00131 break;
00132 case rsTunerBusy:
00133 ret = QObject::tr("B", "RecStatusChar rsTunerBusy");
00134 break;
00135 case rsFailed:
00136 ret = QObject::tr("f", "RecStatusChar rsFailed");
00137 break;
00138 case rsNotListed:
00139 ret = QObject::tr("N", "RecStatusChar rsNotListed");
00140 break;
00141 case rsNeverRecord:
00142 ret = QObject::tr("V", "RecStatusChar rsNeverRecord");
00143 break;
00144 case rsOffLine:
00145 ret = QObject::tr("F", "RecStatusChar rsOffLine");
00146 break;
00147 case rsOtherShowing:
00148 ret = QString::number(id);
00149 break;
00150 case rsOtherRecording:
00151 ret = QString::number(id);
00152 break;
00153 case rsOtherTuning:
00154 ret = QString::number(id);
00155 break;
00156 }
00157
00158 return (ret.isEmpty()) ? QString("-") : ret;
00159 }
00160
00162 QString toString(RecStatusType recstatus, RecordingType rectype)
00163 {
00164 if (recstatus == rsUnknown && rectype == kNotRecording)
00165 return QObject::tr("Not Recording");
00166
00167 switch (recstatus)
00168 {
00169 case rsAborted:
00170 return QObject::tr("Aborted");
00171 case rsRecorded:
00172 return QObject::tr("Recorded");
00173 case rsRecording:
00174 return QObject::tr("Recording");
00175 case rsTuning:
00176 return QObject::tr("Tuning");
00177 case rsWillRecord:
00178 return QObject::tr("Will Record");
00179 case rsDontRecord:
00180 return QObject::tr("Don't Record");
00181 case rsPreviousRecording:
00182 return QObject::tr("Previously Recorded");
00183 case rsCurrentRecording:
00184 return QObject::tr("Currently Recorded");
00185 case rsEarlierShowing:
00186 return QObject::tr("Earlier Showing");
00187 case rsTooManyRecordings:
00188 return QObject::tr("Max Recordings");
00189 case rsCancelled:
00190 return QObject::tr("Manual Cancel");
00191 case rsMissed:
00192 return QObject::tr("Missed");
00193 case rsMissedFuture:
00194 return "Missed Future";
00195 case rsConflict:
00196 return QObject::tr("Conflicting");
00197 case rsLaterShowing:
00198 return QObject::tr("Later Showing");
00199 case rsRepeat:
00200 return QObject::tr("Repeat");
00201 case rsInactive:
00202 return QObject::tr("Inactive");
00203 case rsLowDiskSpace:
00204 return QObject::tr("Low Disk Space");
00205 case rsTunerBusy:
00206 return QObject::tr("Tuner Busy");
00207 case rsFailed:
00208 return QObject::tr("Recorder Failed");
00209 case rsNotListed:
00210 return QObject::tr("Not Listed");
00211 case rsNeverRecord:
00212 return QObject::tr("Never Record");
00213 case rsOffLine:
00214 return QObject::tr("Recorder Off-Line");
00215 case rsOtherShowing:
00216 return QObject::tr("Other Showing");
00217 case rsOtherRecording:
00218 return QObject::tr("Other Recording");
00219 case rsOtherTuning:
00220 return QObject::tr("Other Tuning");
00221 }
00222
00223 return QObject::tr("Unknown");
00224 }
00225
00227 QString toDescription(RecStatusType recstatus, RecordingType rectype,
00228 const QDateTime &recstartts)
00229 {
00230 if (recstatus == rsUnknown && rectype == kNotRecording)
00231 return QObject::tr("This showing is not scheduled to record");
00232
00233 QString message;
00234 QDateTime now = QDateTime::currentDateTime();
00235
00236 if (recstatus <= rsWillRecord)
00237 {
00238 switch (recstatus)
00239 {
00240 case rsWillRecord:
00241 message = QObject::tr("This showing will be recorded.");
00242 break;
00243 case rsRecording:
00244 message = QObject::tr("This showing is being recorded.");
00245 break;
00246 case rsTuning:
00247 message = QObject::tr("The showing is being tuned.");
00248 break;
00249 case rsOtherRecording:
00250 message = QObject::tr("This showing is being recorded on "
00251 "a different channel.");
00252 break;
00253 case rsOtherTuning:
00254 message = QObject::tr("The showing is being tuned on a "
00255 "different channel.");
00256 break;
00257 case rsRecorded:
00258 message = QObject::tr("This showing was recorded.");
00259 break;
00260 case rsAborted:
00261 message = QObject::tr(
00262 "This showing was recorded but was aborted "
00263 "before recording was completed.");
00264 break;
00265 case rsMissed:
00266 message = QObject::tr(
00267 "This showing was not recorded because the "
00268 "master backend was hung or not running.");
00269 break;
00270 case rsMissedFuture:
00271 message =
00272 "This showing was not recorded because the "
00273 "master backend was hung or not running.";
00274 break;
00275 case rsCancelled:
00276 message = QObject::tr(
00277 "This showing was not recorded because it "
00278 "was manually cancelled.");
00279 break;
00280 case rsLowDiskSpace:
00281 message = QObject::tr(
00282 "There wasn't enough disk space available.");
00283 break;
00284 case rsTunerBusy:
00285 message = QObject::tr("The tuner card was already being used.");
00286 break;
00287 case rsFailed:
00288 message = QObject::tr("The recorder failed to record.");
00289 break;
00290 default:
00291 message = QObject::tr(
00292 "The status of this showing is unknown.");
00293 break;
00294 }
00295
00296 return message;
00297 }
00298
00299 if (recstartts > now)
00300 message = QObject::tr("This showing will not be recorded because ");
00301 else
00302 message = QObject::tr("This showing was not recorded because ");
00303
00304 switch (recstatus)
00305 {
00306 case rsDontRecord:
00307 message += QObject::tr("it was manually set to not record.");
00308 break;
00309 case rsPreviousRecording:
00310 message += QObject::tr("this episode was previously recorded "
00311 "according to the duplicate policy chosen "
00312 "for this title.");
00313 break;
00314 case rsCurrentRecording:
00315 message += QObject::tr("this episode was previously recorded and "
00316 "is still available in the list of "
00317 "recordings.");
00318 break;
00319 case rsEarlierShowing:
00320 message += QObject::tr("this episode will be recorded at an "
00321 "earlier time instead.");
00322 break;
00323 case rsTooManyRecordings:
00324 message += QObject::tr("too many recordings of this program have "
00325 "already been recorded.");
00326 break;
00327 case rsConflict:
00328 message += QObject::tr("another program with a higher priority "
00329 "will be recorded.");
00330 break;
00331 case rsLaterShowing:
00332 message += QObject::tr("this episode will be recorded at a "
00333 "later time.");
00334 break;
00335 case rsRepeat:
00336 message += QObject::tr("this episode is a repeat.");
00337 break;
00338 case rsInactive:
00339 message += QObject::tr("this recording rule is inactive.");
00340 break;
00341 case rsNotListed:
00342 message += QObject::tr("this rule does not match any showings in "
00343 "the current program listings.");
00344 break;
00345 case rsNeverRecord:
00346 message += QObject::tr("it was marked to never be recorded.");
00347 break;
00348 case rsOffLine:
00349 message += QObject::tr("the backend recorder is off-line.");
00350 break;
00351 case rsOtherShowing:
00352 message += QObject::tr("this episode will be recorded on a "
00353 "different channel in this time slot.");
00354 break;
00355 default:
00356 if (recstartts > now)
00357 message = QObject::tr("This showing will not be recorded.");
00358 else
00359 message = QObject::tr("This showing was not recorded.");
00360 break;
00361 }
00362
00363 return message;
00364 }
00365
00366 QString toString(AvailableStatusType status)
00367 {
00368 switch (status)
00369 {
00370 case asAvailable: return "Available";
00371 case asNotYetAvailable: return "NotYetAvailable";
00372 case asPendingDelete: return "PendingDelete";
00373 case asFileNotFound: return "FileNotFound";
00374 case asZeroByte: return "ZeroByte";
00375 case asDeleted: return "Deleted";
00376 }
00377 return QString("Unknown(%1)").arg((int)status);
00378 }
00379
00380