private function getMovieList() { $page = (int) Param("page"); if ($page < 1 || $page > 10000) { $page = 1; } if (Param("restore") === 'true' && is_object($_SESSION['lastMovieSelection'])) { $params = $_SESSION['lastMovieSelection']; } else { $params = new StdClass(); $params->search = Param('search'); $params->series = Param('series'); $params->skipTranscoded = Param('skipTranscoded') ? 1 : 0; $params->skipHasCutlist = Param('skipHasCutlist') ? 1 : 0; $params->hpp = (int) Param('hpp') > 0 && (int) Param('hpp') <= 1000 ? (int) Param('hpp') : HPP; } $_SESSION['lastMovieSelection'] = $params; $q = new Query("select title, chanid,\n\t\t\t\t unix_timestamp(starttime) as unix,\n\t\t\t\t filesize\n\t\t\t\t from recorded r\n\t\t\t\t where deletepending = 0"); if ($params->skipTranscoded) { $q->Append(" and transcoded=0"); } if (strlen($params->series) > 0) { $q->Append("and title = :series"); $q->series = $params->series; } $words = preg_split('!\\s+!', $params->search); $row = 0; foreach ($words as $v) { $v = trim(chop($v)); if ($v > '') { $row++; $w1 = '%' . strtr($v, array('%' => '\\%')) . '%'; $q->Append("and concat(coalesce(title, ''), ' ', coalesce(subtitle, ''), ' ', coalesce(description, '')) like :word" . $row); $q->Set('word' . $row, $w1); } } if ($params->skipHasCutlist) { $q->Append(" and not exists (select 1 from recordedmarkup m where m.chanid=r.chanid and m.starttime=r.starttime and m.type in (0,1))"); } $sort_by_size = Param('sort_by_size'); if ($sort_by_size) { $q->Append(" order by filesize desc"); } else { $q->Append("order by starttime desc"); } $data = array(); $row = 0; $hits = 0; $series = array(); $movies_to_load = array(); $range_from = ($page - 1) * $params->hpp; $range_to = $page * $params->hpp; foreach ($q->Execute() as $v) { $c = new StdClass(); $c->Chanid = $v->chanid; $c->Unixtime = $v->unix; $c->Title = $v->title; $c->Filesize = $v->filesize; $data[] = $c; if (!isset($series[$c->Title])) { $e = new StdClass(); $e->Title = $c->Title; $e->NumRecordings = 0; $e->Filesize = 0.0; $e->LastRecording = 0; $e->Recordings = array(); $series[$c->Title] = $e; } $series[$c->Title]->Filesize += DoubleVal($c->Filesize); $series[$c->Title]->LastRecording = max($series[$c->Title]->LastRecording, $c->Unixtime); $series[$c->Title]->NumRecordings++; $series[$c->Title]->Recordings[] = $c; if ($row >= $range_from && $row < $range_to) { $key = sprintf("%d.%d", $c->Chanid, $c->Unixtime); $movies_to_load[$key] = $c; } $row++; $hits++; } if (count($movies_to_load) > 0) { $q = new Query("select r.subtitle, r.description, r.chanid,\n\t\t\t\t\t\t\t \t unix_timestamp(r.starttime) as unix,\n\t\t\t\t\t\t\t \t c.name as channel,\n\t\t\t\t\t\t\t \t r.filesize\t\t\t\t\t\t\t \t \n\t\t\t\t\t\t\t from recorded r\n\t\t\t\t\t\t\t \t\t left join channel c on (c.chanid = r.chanid)\n\t\t\t\t\t\t\t where (\n\t\t\t 0 = 1"); $row = 0; foreach ($movies_to_load as $v) { $row++; $q->Set("chanid" . $row, $v->Chanid); $q->Set("starttime" . $row, date("Y-m-d H:i:s", $v->Unixtime)); $q->Append(sprintf(" or (r.chanid = :chanid%d and r.starttime=:starttime%s)", $row, $row)); } unset($v); $q->Append(")"); foreach ($q->Execute() as $v) { $key = sprintf("%d.%d", $v->chanid, $v->unix); $c = $movies_to_load[$key]; $c->Subtitle = $v->subtitle; $c->Description = $v->description; $c->Channel = $v->channel; $c->Selector = $key; $c->Date = self::JsonDate($v->unix); $c->Filesize = (double) $v->filesize; $c->FilesizeGB = (double) sprintf("%.1f", $c->Filesize / 1024.0 / 1024.0 / 1024.0); $c->IsSeries = $series[$c->Title]->NumRecordings > 1; if ($c->IsSeries) { $e = new StdClass(); $e->NumEpisodes = $series[$c->Title]->NumRecordings; $e->Filesize = $series[$c->Title]->Filesize; $e->FilesizeGB = (double) sprintf("%.1f", $series[$c->Title]->Filesize / 1024.0 / 1024.0 / 1024.0); $c->Episodes = $e; } unset($c); } } $result = new StdClass(); $result->TotalHits = $hits; $result->Pages = Floor(($hits + $params->hpp - 1) / $params->hpp); $result->CurrentPage = $page; $result->EntriesPerPage = $params->hpp; $result->Movies = array_values($movies_to_load); $result->PageList = array(); $url = sprintf("?action=json&call=getMovieList&tpp=%d&search=%s&series=%s", $params->hpp, urlencode($params->search), urlencode($params->series)); $pagelist = new Pagelist($url); $pagelist->HitsPerPage = $params->hpp; $result->BaseHREF = $url; $result->PageList = $pagelist->Get($result->Pages, $page); $result->Params = $params; return $this->successResult($result); }
protected function process(ViewBag $viewbag) { $this->SetView("MovieSelector"); $viewbag->Query = $search = Param('search') == '' ? '' : Param('search'); if (Param('series') === null) { $series = isset($_COOKIE['__mc_series']) ? trim($_COOKIE['__mc_series']) : ''; $skip_cutted = isset($_COOKIE['__mc_skip_cutted']) ? $_COOKIE['__mc_skip_cutted'] == 'J' : ''; } else { $series = trim(Param('series')); $skip_cutted = Param('skip_cutted') == 'J'; } $viewbag->SkipCutted = $skip_cutted; if (Param('submit')) { list($chanid, $starttime) = explode(".", Param('Movie')); $_SESSION['SelectedMovie'] = new SelectedMovie(); $_SESSION['SelectedMovie']->chanid = $chanid; $_SESSION['SelectedMovie']->starttime = $starttime; unset($_SESSION['list']); Thumbnailer::CleanCache(); $this->Redirect('?rand=' . rand(0, 10000000)); } setCookie("__mc_skip_cutted", $skip_cutted ? 'J' : 'N'); setCookie("__mc_series", $series); $q = new Query("select title, count(1) as cnt, sum(filesize) as size\n\t\t from recorded r\n\t\t where transcoded = 0\n\t\t and deletepending = 0"); if ($skip_cutted) { $q->Append("and not exists (select 1 from recordedmarkup m where m.chanid=r.chanid and m.starttime=r.starttime and m.type in (0,1))"); } $q->Append("group by title order by size desc"); $available_series = array(); $viewbag->Series = array(); foreach ($q->Execute() as $v) { $size = sprintf("%.1f", DoubleVal($v->size) / 1024.0 / 1024.0 / 1024.0); $c = new StdClass(); $c->Title = $v->title; $c->Size = $size; $c->Recordings = $v->cnt; $c->Selected = $series == $c->Title; $viewbag->Series[] = $c; } $q = new Query("select *,\n\t\t unix_timestamp(starttime) as unix\n\t\t from recorded r\n\t\t where transcoded = 0\n\t\t and deletepending = 0"); if ($series) { $q->Append("and title = :series"); $q->series = $series; } $words = preg_split('!\\s+!', $viewbag->Query); $row = 0; foreach ($words as $v) { $v = trim(chop($v)); if ($v > '') { $row++; $w1 = '%' . strtr($v, array('%' => '\\%')) . '%'; $q->Append("and concat(coalesce(title, ''), ' ', coalesce(subtitle, ''), ' ', coalesce(description, '')) like :word" . $row); $q->Set('word' . $row, $w1); } } if ($skip_cutted) { $q->Append(" and not exists (select 1 from recordedmarkup m where m.chanid=r.chanid and m.starttime=r.starttime and m.type in (0,1))"); } $sort_by_size = Param('sort_by_size'); if ($sort_by_size) { $q->Append(" order by filesize desc"); } else { $q->Append("order by starttime desc"); } $viewbag->Movies = array(); foreach ($q->Execute() as $item) { $c = new StdClass(); $c->Value = $item->chanid . '.' . $item->unix; $c->Title = $item->title; $c->Subtitle = $item->subtitle; $c->Size = sprintf("%.1f", DoubleVal($item->filesize / 1024.0 / 1024.0 / 1024.0)); $c->Starttime = $item->starttime; $viewbag->Movies[] = $c; } }