1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00

The new member function cSkinDisplayReplay::SetRecording() allows a skin to display more information about the currently played recording

This commit is contained in:
Klaus Schmidinger 2012-05-12 14:20:41 +02:00
parent 2193ea32f6
commit 5f93700e07
8 changed files with 61 additions and 33 deletions

View File

@ -7052,7 +7052,7 @@ Video Disk Recorder Revision History
- Fixed handling IDLEPRIORITY in cDvbDevice::ProvidesChannel() (thanks to Frank - Fixed handling IDLEPRIORITY in cDvbDevice::ProvidesChannel() (thanks to Frank
Schmirler). Schmirler).
2012-05-11: Version 1.7.28 2012-05-12: Version 1.7.28
- Fixed cPixmapMemory::DrawEllipse() for quadrants -1 and -4. - Fixed cPixmapMemory::DrawEllipse() for quadrants -1 and -4.
- Fixed getting the maximum short channel name length in case there are no short names - Fixed getting the maximum short channel name length in case there are no short names
@ -7104,3 +7104,5 @@ Video Disk Recorder Revision History
bonded devices (reported by Michael Schneider). bonded devices (reported by Michael Schneider).
- Making sure setup strings don't contain any newline characters (thanks to Joachim - Making sure setup strings don't contain any newline characters (thanks to Joachim
Wilke). Wilke).
- The new member function cSkinDisplayReplay::SetRecording() allows a skin to display
more information about the currently played recording.

38
menu.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: menu.c 2.53 2012/04/28 11:13:09 kls Exp $ * $Id: menu.c 2.54 2012/05/12 13:08:23 kls Exp $
*/ */
#include "menu.h" #include "menu.h"
@ -2305,7 +2305,7 @@ eOSState cMenuRecordings::Play(void)
else { else {
cRecording *recording = GetRecording(ri); cRecording *recording = GetRecording(ri);
if (recording) { if (recording) {
cReplayControl::SetRecording(recording->FileName(), recording->Title()); cReplayControl::SetRecording(recording->FileName());
return osReplay; return osReplay;
} }
} }
@ -4132,7 +4132,7 @@ cRecordControl::cRecordControl(cDevice *Device, cTimer *Timer, bool Pause)
else { else {
Timers.Del(timer); Timers.Del(timer);
if (!cReplayControl::LastReplayed()) // an instant recording, maybe from cRecordControls::PauseLiveVideo() if (!cReplayControl::LastReplayed()) // an instant recording, maybe from cRecordControls::PauseLiveVideo()
cReplayControl::SetRecording(fileName, Recording.Name()); cReplayControl::SetRecording(fileName);
} }
timer = NULL; timer = NULL;
return; return;
@ -4147,7 +4147,7 @@ cRecordControl::cRecordControl(cDevice *Device, cTimer *Timer, bool Pause)
Recording.WriteInfo(); Recording.WriteInfo();
cStatus::MsgRecording(device, Recording.Name(), Recording.FileName(), true); cStatus::MsgRecording(device, Recording.Name(), Recording.FileName(), true);
if (!Timer && !cReplayControl::LastReplayed()) // an instant recording, maybe from cRecordControls::PauseLiveVideo() if (!Timer && !cReplayControl::LastReplayed()) // an instant recording, maybe from cRecordControls::PauseLiveVideo()
cReplayControl::SetRecording(fileName, Recording.Name()); cReplayControl::SetRecording(fileName);
Recordings.AddByName(fileName); Recordings.AddByName(fileName);
return; return;
} }
@ -4301,7 +4301,7 @@ void cRecordControls::Stop(const char *InstantId)
bool cRecordControls::PauseLiveVideo(void) bool cRecordControls::PauseLiveVideo(void)
{ {
Skins.Message(mtStatus, tr("Pausing live video...")); Skins.Message(mtStatus, tr("Pausing live video..."));
cReplayControl::SetRecording(NULL, NULL); // make sure the new cRecordControl will set cReplayControl::LastReplayed() cReplayControl::SetRecording(NULL); // make sure the new cRecordControl will set cReplayControl::LastReplayed()
if (Start(NULL, true)) { if (Start(NULL, true)) {
cReplayControl *rc = new cReplayControl(true); cReplayControl *rc = new cReplayControl(true);
cControl::Launch(rc); cControl::Launch(rc);
@ -4402,8 +4402,7 @@ bool cRecordControls::StateChanged(int &State)
// --- cReplayControl -------------------------------------------------------- // --- cReplayControl --------------------------------------------------------
cReplayControl *cReplayControl::currentReplayControl = NULL; cReplayControl *cReplayControl::currentReplayControl = NULL;
char *cReplayControl::fileName = NULL; cString cReplayControl::fileName;
char *cReplayControl::title = NULL;
cReplayControl::cReplayControl(bool PauseLive) cReplayControl::cReplayControl(bool PauseLive)
:cDvbPlayerControl(fileName, PauseLive) :cDvbPlayerControl(fileName, PauseLive)
@ -4433,7 +4432,7 @@ cReplayControl::~cReplayControl()
void cReplayControl::Stop(void) void cReplayControl::Stop(void)
{ {
if (Setup.DelTimeshiftRec && fileName) { if (Setup.DelTimeshiftRec && *fileName) {
cRecordControl* rc = cRecordControls::GetRecordControl(fileName); cRecordControl* rc = cRecordControls::GetRecordControl(fileName);
if (rc && rc->InstantId()) { if (rc && rc->InstantId()) {
if (Active()) { if (Active()) {
@ -4446,7 +4445,7 @@ void cReplayControl::Stop(void)
Timers.SetModified(); Timers.SetModified();
} }
cDvbPlayerControl::Stop(); cDvbPlayerControl::Stop();
cRecording *recording = Recordings.GetByName(fileName);; cRecording *recording = Recordings.GetByName(fileName);
if (recording) { if (recording) {
if (recording->Delete()) { if (recording->Delete()) {
Recordings.DelByName(fileName); Recordings.DelByName(fileName);
@ -4463,17 +4462,14 @@ void cReplayControl::Stop(void)
cDvbPlayerControl::Stop(); cDvbPlayerControl::Stop();
} }
void cReplayControl::SetRecording(const char *FileName, const char *Title) void cReplayControl::SetRecording(const char *FileName)
{ {
free(fileName); fileName = FileName;
free(title);
fileName = FileName ? strdup(FileName) : NULL;
title = Title ? strdup(Title) : NULL;
} }
const char *cReplayControl::NowReplaying(void) const char *cReplayControl::NowReplaying(void)
{ {
return currentReplayControl ? fileName : NULL; return currentReplayControl ? *fileName : NULL;
} }
const char *cReplayControl::LastReplayed(void) const char *cReplayControl::LastReplayed(void)
@ -4483,11 +4479,9 @@ const char *cReplayControl::LastReplayed(void)
void cReplayControl::ClearLastReplayed(const char *FileName) void cReplayControl::ClearLastReplayed(const char *FileName)
{ {
if (fileName && FileName && strcmp(fileName, FileName) == 0) { if (*fileName && FileName && strcmp(fileName, FileName) == 0)
free(fileName);
fileName = NULL; fileName = NULL;
} }
}
void cReplayControl::ShowTimed(int Seconds) void cReplayControl::ShowTimed(int Seconds)
{ {
@ -4558,8 +4552,10 @@ bool cReplayControl::ShowProgress(bool Initial)
visible = true; visible = true;
} }
if (Initial) { if (Initial) {
if (title) if (*fileName) {
displayReplay->SetTitle(title); if (cRecording *Recording = Recordings.GetByName(fileName))
displayReplay->SetRecording(Recording);
}
lastCurrent = lastTotal = -1; lastCurrent = lastTotal = -1;
} }
if (Current != lastCurrent || Total != lastTotal) { if (Current != lastCurrent || Total != lastTotal) {
@ -4731,7 +4727,7 @@ void cReplayControl::MarkMove(bool Forward)
void cReplayControl::EditCut(void) void cReplayControl::EditCut(void)
{ {
if (fileName) { if (*fileName) {
Hide(); Hide();
if (!cCutter::Active()) { if (!cCutter::Active()) {
if (!marks.Count()) if (!marks.Count())

7
menu.h
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: menu.h 2.8 2012/04/28 11:13:03 kls Exp $ * $Id: menu.h 2.9 2012/05/12 11:48:04 kls Exp $
*/ */
#ifndef __MENU_H #ifndef __MENU_H
@ -269,8 +269,7 @@ private:
void TimeSearch(void); void TimeSearch(void);
void ShowTimed(int Seconds = 0); void ShowTimed(int Seconds = 0);
static cReplayControl *currentReplayControl; static cReplayControl *currentReplayControl;
static char *fileName; static cString fileName;
static char *title;
void ShowMode(void); void ShowMode(void);
bool ShowProgress(bool Initial); bool ShowProgress(bool Initial);
void MarkToggle(void); void MarkToggle(void);
@ -288,7 +287,7 @@ public:
virtual void Show(void); virtual void Show(void);
virtual void Hide(void); virtual void Hide(void);
bool Visible(void) { return visible; } bool Visible(void) { return visible; }
static void SetRecording(const char *FileName, const char *Title); static void SetRecording(const char *FileName);
static const char *NowReplaying(void); static const char *NowReplaying(void);
static const char *LastReplayed(void); static const char *LastReplayed(void);
static void ClearLastReplayed(const char *FileName); static void ClearLastReplayed(const char *FileName);

17
skins.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: skins.c 2.7 2012/04/28 10:40:16 kls Exp $ * $Id: skins.c 2.8 2012/05/12 11:27:23 kls Exp $
*/ */
#include "skins.h" #include "skins.h"
@ -172,6 +172,21 @@ cSkinDisplayReplay::cSkinDisplayReplay(void)
marks = NULL; marks = NULL;
} }
void cSkinDisplayReplay::SetRecording(const cRecording *Recording)
{
const char *Title = NULL;
const char *ShortText = NULL;
const cRecordingInfo *RecordingInfo = Recording->Info();
if ((Title = RecordingInfo->Title()) != NULL)
ShortText = RecordingInfo->ShortText();
else
Title = Recording->Name();
if (ShortText)
SetTitle(cString::sprintf("%s: %s", Title, ShortText));
else
SetTitle(Title);
}
void cSkinDisplayReplay::SetMarks(const cMarks *Marks) void cSkinDisplayReplay::SetMarks(const cMarks *Marks)
{ {
marks = Marks; marks = Marks;

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: skins.h 2.4 2012/04/28 10:39:54 kls Exp $ * $Id: skins.h 2.5 2012/05/12 11:10:30 kls Exp $
*/ */
#ifndef __SKINS_H #ifndef __SKINS_H
@ -213,6 +213,11 @@ public:
virtual void SetMarks(const cMarks *Marks); virtual void SetMarks(const cMarks *Marks);
///< Sets the editing marks to Marks, which shall be used to display the ///< Sets the editing marks to Marks, which shall be used to display the
///< progress bar through a cProgressBar object. ///< progress bar through a cProgressBar object.
virtual void SetRecording(const cRecording *Recording);
///< Sets the recording that is currently being played.
///< The default implementation calls SetTitle() with the title and short
///< text of the Recording. A derived class can use any information provided
///< by the given Recording and display it.
virtual void SetTitle(const char *Title) = 0; virtual void SetTitle(const char *Title) = 0;
///< Sets the title of the recording. ///< Sets the title of the recording.
virtual void SetMode(bool Play, bool Forward, int Speed) = 0; virtual void SetMode(bool Play, bool Forward, int Speed) = 0;

View File

@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured * and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection. * graphical interface that sits on top of an SVDRP connection.
* *
* $Id: svdrp.c 2.18 2012/05/08 11:23:56 kls Exp $ * $Id: svdrp.c 2.19 2012/05/12 11:55:18 kls Exp $
*/ */
#include "svdrp.h" #include "svdrp.h"
@ -1371,7 +1371,7 @@ void cSVDRP::CmdPLAY(const char *Option)
if (recording) { if (recording) {
if (c) if (c)
option = skipspace(++option); option = skipspace(++option);
cReplayControl::SetRecording(NULL, NULL); cReplayControl::SetRecording(NULL);
cControl::Shutdown(); cControl::Shutdown();
if (*option) { if (*option) {
int pos = 0; int pos = 0;
@ -1383,7 +1383,7 @@ void cSVDRP::CmdPLAY(const char *Option)
else else
resume.Save(pos); resume.Save(pos);
} }
cReplayControl::SetRecording(recording->FileName(), recording->Title()); cReplayControl::SetRecording(recording->FileName());
cControl::Launch(new cReplayControl); cControl::Launch(new cReplayControl);
cControl::Attach(); cControl::Attach();
Reply(250, "Playing recording \"%s\" [%s]", num, recording->Title()); Reply(250, "Playing recording \"%s\" [%s]", num, recording->Title());

11
tools.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: tools.c 2.23 2012/05/08 11:13:13 kls Exp $ * $Id: tools.c 2.24 2012/05/12 13:29:20 kls Exp $
*/ */
#include "tools.h" #include "tools.h"
@ -1042,6 +1042,15 @@ cString DateString(time_t t)
return buf; return buf;
} }
cString ShortDateString(time_t t)
{
char buf[32];
struct tm tm_r;
tm *tm = localtime_r(&t, &tm_r);
strftime(buf, sizeof(buf), "%d.%m.%y", tm);
return buf;
}
cString TimeString(time_t t) cString TimeString(time_t t)
{ {
char buf[25]; char buf[25];

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: tools.h 2.18 2012/05/08 11:11:33 kls Exp $ * $Id: tools.h 2.19 2012/05/12 13:27:56 kls Exp $
*/ */
#ifndef __TOOLS_H #ifndef __TOOLS_H
@ -244,6 +244,8 @@ cString TimeToString(time_t t);
///< Converts the given time to a string of the form "www mmm dd hh:mm:ss yyyy". ///< Converts the given time to a string of the form "www mmm dd hh:mm:ss yyyy".
cString DateString(time_t t); cString DateString(time_t t);
///< Converts the given time to a string of the form "www dd.mm.yyyy". ///< Converts the given time to a string of the form "www dd.mm.yyyy".
cString ShortDateString(time_t t);
///< Converts the given time to a string of the form "dd.mm.yy".
cString TimeString(time_t t); cString TimeString(time_t t);
///< Converts the given time to a string of the form "hh:mm". ///< Converts the given time to a string of the form "hh:mm".
uchar *RgbToJpeg(uchar *Mem, int Width, int Height, int &Size, int Quality = 100); uchar *RgbToJpeg(uchar *Mem, int Width, int Height, int &Size, int Quality = 100);