static int internal_play_media(const QString &mrl, const QString &plot, const QString &title, const QString &subtitle, const QString &director, int season, int episode, int lenMins, const QString &year) { int res = -1; QFile checkFile(mrl); if ((!checkFile.exists() && !mrl.startsWith("dvd:") && !mrl.startsWith("bd:") && !mrl.startsWith("myth:"))) { QString errorText = QObject::tr("Failed to open \n '%1' in %2 \n" "Check if the video exists") .arg(mrl.section('/', -1)) .arg(mrl.section('/', 0, -2)); ShowOkPopup(errorText); return res; } ProgramInfo *pginfo = new ProgramInfo( mrl, plot, title, subtitle, director, season, episode, lenMins, (year.toUInt()) ? year.toUInt() : 1900); int64_t pos = 0; if (pginfo->IsVideoDVD()) { RingBuffer *tmprbuf = RingBuffer::Create(pginfo->GetPathname(), false); if (!tmprbuf) { delete pginfo; return res; } QString name; QString serialid; if (tmprbuf->IsDVD() && tmprbuf->DVD()->GetNameAndSerialNum(name, serialid)) { QStringList fields = pginfo->QueryDVDBookmark(serialid); if (!fields.empty()) { QStringList::Iterator it = fields.begin(); pos = (int64_t)((*++it).toLongLong() & 0xffffffffLL); } } delete tmprbuf; } else if (pginfo->IsVideo()) pos = pginfo->QueryBookmark(); if (pos > 0) { MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack(); BookmarkDialog *bookmarkdialog = new BookmarkDialog(pginfo, mainStack); if (!bookmarkdialog->Create()) { delete bookmarkdialog; delete pginfo; return res; } } else { TV::StartTV(pginfo, kStartTVNoFlags); res = 0; delete pginfo; } return res; }