Ludger Kraemer on Sat, 1 Mar 2008 18:40:18 +0100 (CET)


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

apps/tuxbox/enigma/src enigma_main.cpp enigma_main.h enigma_setup.cpp enigma_setup.h sselect.cpp


dbluelle    08/03/01 18:40:18

  Modified:    tuxbox/enigma/src enigma_main.cpp enigma_main.h
                        enigma_setup.cpp enigma_setup.h sselect.cpp
  Log:
  Add support for permanent timeshift
  
  Revision  Changes    Path
  1.334     +105 -8    apps/tuxbox/enigma/src/enigma_main.cpp
  
  file : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_main.cpp?rev=1.334&content-type=text/vnd.viewcvs-markup
  plain: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_main.cpp?rev=1.334&content-type=text/plain
  revision graph: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_main.cpp?graph=1.334
  diff : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_main.cpp.diff?r1=1.333&r2=1.334
  
  Index: enigma_main.cpp
  ===================================================================
  RCS file: /cvs/tuxbox/apps/tuxbox/enigma/src/enigma_main.cpp,v
  retrieving revision 1.333
  retrieving revision 1.334
  diff -u -r1.333 -r1.334
  --- enigma_main.cpp	19 Jan 2008 16:54:05 -0000	1.333
  +++ enigma_main.cpp	1 Mar 2008 17:40:17 -0000	1.334
  @@ -60,15 +60,12 @@
   #include <src/time_correction.h>
   #include <lib/driver/audiodynamic.h>
   
  -		// bis waldi das in nen .h tut
  -#define MOVIEDIR "/hdd/movie"
  -
   struct enigmaMainActions
   {
   	eActionMap map;
   	eAction showMainMenu, standby_press, standby_nomenu_press, standby_repeat, standby_release,
   		showInfobar, hideInfobar, showInfobarEPG, showServiceSelector,
  -		showSubservices, showAudio, pluginVTXT, pluginExt, showEPGList, showEPG,
  +		showSubservices, showAudioOrPause, showAudio, pluginVTXT, pluginExt, showEPGList, showEPG,
   		nextSubService, prevSubService, nextService, prevService,
   		playlistNextService, playlistPrevService, serviceListDown,
   		serviceListUp, volumeUp, volumeDown, toggleMute,
  @@ -94,6 +91,7 @@
   		showInfobarEPG(map, "showInfobarEPG", _("show infobar or EPG"), eAction::prioDialog),
   		showServiceSelector(map, "showServiceSelector", _("show service selector"), eAction::prioDialog),
   		showSubservices(map, "showSubservices", _("show subservices/NVOD"), eAction::prioDialog),
  +		showAudioOrPause(map, "showAudioOrPause", _("show audio selector"), eAction::prioDialog),
   		showAudio(map, "showAudio", _("show audio selector"), eAction::prioDialog),
   		pluginVTXT(map, "pluginVTXT", _("show Videotext"), eAction::prioDialog),
   		pluginExt(map, "pluginExt", _("show extension Plugins"), eAction::prioDialog),
  @@ -1561,7 +1559,7 @@
   	,timeout(eApp)
   	,clocktimer(eApp), messagetimeout(eApp), progresstimer(eApp)
   	,volumeTimer(eApp), recStatusBlink(eApp), doubleklickTimer(eApp)
  -	,unusedTimer(eApp), currentSelectedUserBouquet(0), timeshift(0)
  +	,unusedTimer(eApp), permanentTimeshiftTimer(eApp), currentSelectedUserBouquet(0), timeshift(0)
   	,skipping(0)
   	,state(0)
   	,wasSleeping(0)
  @@ -1727,6 +1725,7 @@
   	ASSIGN(ButtonGreenDis, eLabel, "button_green_disabled");
   	ASSIGN(ButtonYellowDis, eLabel, "button_yellow_disabled");
   	ASSIGN(ButtonBlueDis, eLabel, "button_blue_disabled");
  +	ASSIGN(AudioOrPause,eLabel, "AudioOrPause");
   
   	ASSIGN(DolbyOn, eLabel, "osd_dolby_on");
   	ASSIGN(CryptOn, eLabel, "osd_crypt_on");
  @@ -1778,6 +1777,7 @@
   	CONNECT(volumeTimer.timeout, eZapMain::hideVolumeSlider );
   #ifndef DISABLE_FILE
   	CONNECT(recStatusBlink.timeout, eZapMain::blinkRecord);
  +	CONNECT(permanentTimeshiftTimer.timeout, eZapMain::startPermanentTimeshift);
   #endif
   
   	CONNECT( eFrontend::getInstance()->s_RotorRunning, eZapMain::onRotorStart );
  @@ -2964,6 +2964,12 @@
   
   void eZapMain::showInfobar(bool startTimeout)
   {
  +	int tmp = 0;
  +	eConfig::getInstance()->getKey("/enigma/timeshift/activatepausebutton", tmp );
  +	unsigned char pause = (unsigned char) tmp;
  +	AudioOrPause->setText(pause ? _("Pause") : _("audio track"));
  +		
  +
   	if ( !isVisible() && eApp->looplevel() == 1 &&
   		( !currentFocus || currentFocus == this ) )
   		show();
  @@ -3088,6 +3094,13 @@
   				}
   			}
   		}
  +		else if (timeshift == 2) // permanent timeshift
  +		{
  +			Decoder::Pause(2);  // freeze frame
  +			Decoder::setAutoFlushScreen(0);
  +			handler->serviceCommand(eServiceCommand(eServiceCommand::cmdSetSpeed, 0));
  +			Decoder::setAutoFlushScreen(1);
  +		}
   		else
   			handler->serviceCommand(eServiceCommand(eServiceCommand::cmdSetSpeed, 0));
   	}
  @@ -3129,6 +3142,7 @@
   
   	if (onoff) //  start recording
   	{
  +		stopPermanentTimeshift();
   		if ( freeRecordSpace() < 10) // less than 10MB free (or directory not found)
   		{
   			handleServiceEvent(eServiceEvent(eServiceEvent::evtRecordFailed));
  @@ -3400,7 +3414,9 @@
   		{
   			switch (handler->getState())
   			{
  -				case eServiceHandler::statePause:
  +				case eServiceHandler::statePause: 
  +					pause();// continue playing in preparation for skipping
  +					break;
   				case eServiceHandler::stateStopped:
   					return;
   				default:
  @@ -3735,9 +3751,12 @@
   			int ret = mb.exec();
   			mb.hide();
   			if (ret == eMessageBox::btYes)
  +			{
  +				stopPermanentTimeshift();
   		// we do hardly shutdown the box..
   		// any pending timers are ignored
   				eZap::getInstance()->quit();
  +			}
   			break;
   		}
   		case 6: // force .. ( Sleeptimer )
  @@ -3755,9 +3774,12 @@
   				int ret = mb.exec();
   				mb.hide();
   				if (ret == eMessageBox::btYes)
  +				{
  +					stopPermanentTimeshift();
   					// use message_notifier to goto sleep...
   					// we will not block the mainloop...
   					gotoStandby();
  +				}
   			}
   			else
   				eZapStandby::getInstance()->renewSleep();
  @@ -4604,6 +4626,62 @@
   	currentSelectedUserBouquet->getList().push_back(service);
   }
   
  +#ifndef DISABLE_FILE
  +void eZapMain::startPermanentTimeshift()
  +{
  +	
  +	if ( state & stateRecording ) // no timeshift when recording
  +		return;
  +	if ( freeRecordSpace() < 10) // less than 10MB free
  +		return;
  +	eDebug("starting permanent timeshift ...");
  +
  +	state |= recPermanentTimeshift;
  +	eServiceHandler *handler=eServiceInterface::getInstance()->getService();
  +	if (handler->serviceCommand(eServiceCommand(eServiceCommand::cmdRecordOpenPermanentTimeshift)))
  +	{
  +		state &= ~(recPermanentTimeshift);
  +		eDebug("couldn't start permanent timeshift ... :/");
  +	} else
  +	{
  +		handler->serviceCommand(eServiceCommand(eServiceCommand::cmdRecordStart));
  +		timeshift = 2;
  +	}
  +}
  +void eZapMain::stopPermanentTimeshift()
  +{
  +	eDebug("stopping permanent timeshift ...");
  +	permanentTimeshiftTimer.stop();
  +	eServiceHandler *handler=eServiceInterface::getInstance()->getServiceHandler(eServiceReference::idDVB);
  +	timeshift = 0;
  +	if (state & recPermanentTimeshift)
  +	{
  +		if (!handler)
  +			return;
  +		eDebug("stopping permanent timeshift with handler...");
  +		state &= ~(recPermanentTimeshift);
  +		handler->serviceCommand(eServiceCommand(eServiceCommand::cmdRecordStop));
  +		handler->serviceCommand(eServiceCommand(eServiceCommand::cmdRecordClose));
  +	}
  +}
  +
  +void eZapMain::beginPermanentTimeshift()
  +{
  +	if ( !(state & stateRecording) && !(state & recPermanentTimeshift) && (mode == modeTV || mode == modeRadio))
  +	{
  +		int permanentOn = 0;
  +		eConfig::getInstance()->getKey("/enigma/timeshift/permanent", permanentOn );
  +		if (permanentOn)
  +		{
  +			// start timer for permanent timeshift
  +			int permanentdelay = 0;
  +			eConfig::getInstance()->getKey("/enigma/timeshift/permanentdelay", permanentdelay );
  +			eDebug("starting timeout for permanent timeshift:%d",permanentdelay);
  +			permanentTimeshiftTimer.start(permanentdelay*1000, 1);
  +		}
  +	}
  +}
  +#endif
   void eZapMain::playService(const eServiceReference &service, int flags)
   {
   	int first=0;
  @@ -4615,6 +4693,7 @@
   		goto zap;
   
   #ifndef DISABLE_FILE
  +	stopPermanentTimeshift();
   	if ( !canPlayService(service) )
  	<<Truncated>>
  
  
  1.106     +7 -3      apps/tuxbox/enigma/src/enigma_main.h
  
  file : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_main.h?rev=1.106&content-type=text/vnd.viewcvs-markup
  plain: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_main.h?rev=1.106&content-type=text/plain
  revision graph: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_main.h?graph=1.106
  diff : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_main.h.diff?r1=1.105&r2=1.106
  
  Index: enigma_main.h
  ===================================================================
  RCS file: /cvs/tuxbox/apps/tuxbox/enigma/src/enigma_main.h,v
  retrieving revision 1.105
  retrieving revision 1.106
  diff -u -r1.105 -r1.106
  --- enigma_main.h	21 Feb 2007 09:39:54 -0000	1.105
  +++ enigma_main.h	1 Mar 2008 17:40:17 -0000	1.106
  @@ -331,7 +331,7 @@
   	friend class eSubServiceSelector;
   public:
   	enum { modeTV, modeRadio, modeFile, modeEnd };
  -	enum { stateSleeping=2, stateInTimerMode=4, stateRecording=8, recDVR=16, recVCR=32, recNgrab=64, statePaused=128 };
  +	enum { stateSleeping=2, stateInTimerMode=4, stateRecording=8, recDVR=16, recVCR=32, recNgrab=64, statePaused=128, recPermanentTimeshift=256 };
   	enum { messageGoSleep=2, messageShutdown, messageNoRecordSpaceLeft, messageWakeUp, messageCheckVCR };
   	enum { pathBouquets=1, pathProvider=2, pathRecordings=4, pathPlaylist=8, pathAll=16, pathRoot=32, pathSatellites=64 };
   	enum { listAll, listSatellites, listProvider, listBouquets };
  @@ -346,7 +346,7 @@
   		*ButtonBlueEn, *ButtonBlueDis,
   		*DolbyOn, *DolbyOff, *CryptOn, *CryptOff, *WideOn, *WideOff, *recstatus,
   		mute, volume,
  -		*DVRSpaceLeft;
  +		*DVRSpaceLeft,*AudioOrPause;
   
   	eWidget *dvrInfoBar, *dvbInfoBar, *fileInfoBar;
   	
  @@ -378,7 +378,7 @@
   
   	eTimer timeout, clocktimer, messagetimeout,
   					progresstimer, volumeTimer, recStatusBlink,
  -					doubleklickTimer, unusedTimer;
  +					doubleklickTimer, unusedTimer, permanentTimeshiftTimer;
   /* SNR,AGC,BER DISPLAY */
   	eTimer *snrTimer;
   /* SNR,AGC,BER DISPLAY */
  @@ -457,6 +457,7 @@
   	void skipLoop();
   	enum { skipForward, skipReverse };
   	int isRecording() {return state & stateRecording;}
  +	int isRecordingPermanentTimeshift() {return state & recPermanentTimeshift;}
   	int dvrActive(void) {return dvrfunctions;}
   #endif
   	int isSleeping() {return state & stateSleeping;}
  @@ -564,6 +565,7 @@
   	void deleteFile(eServiceSelector *);
   	void renameFile(eServiceSelector *);
   	void showHDDSpaceLeft(eLabel *);
  +	void startPermanentTimeshift();
   #endif // DISABLE_FILE
   
   // both called from other context.. 	
  @@ -615,6 +617,8 @@
   	void saveRecordings( bool destory = false );
   	void clearRecordings();
   	int isSkipping() { return skipping; }
  +	void stopPermanentTimeshift();
  +	void beginPermanentTimeshift();
   #endif
   	int get16_9Logo() {return is16_9;}
   	int getSmartcardLogo() {return isCrypted;}
  
  
  
  1.44      +24 -1     apps/tuxbox/enigma/src/enigma_setup.cpp
  
  file : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_setup.cpp?rev=1.44&content-type=text/vnd.viewcvs-markup
  plain: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_setup.cpp?rev=1.44&content-type=text/plain
  revision graph: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_setup.cpp?graph=1.44
  diff : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_setup.cpp.diff?r1=1.43&r2=1.44
  
  Index: enigma_setup.cpp
  ===================================================================
  RCS file: /cvs/tuxbox/apps/tuxbox/enigma/src/enigma_setup.cpp,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- enigma_setup.cpp	15 Jul 2006 13:22:49 -0000	1.43
  +++ enigma_setup.cpp	1 Mar 2008 17:40:17 -0000	1.44
  @@ -17,7 +17,7 @@
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
    *
  - * $Id: enigma_setup.cpp,v 1.43 2006/07/15 13:22:49 ghostrider Exp $
  + * $Id: enigma_setup.cpp,v 1.44 2008/03/01 17:40:17 dbluelle Exp $
    */
   
   #include <enigma_setup.h>
  @@ -26,6 +26,7 @@
   #include <lib/system/econfig.h>
   #include <lib/system/info.h>
   #include <system_settings.h>
  +#include <setup_timeshift.h>
   #include <enigma_bouquet.h>
   #include <enigma_ci.h>
   #include <enigma_scan.h>
  @@ -49,6 +50,12 @@
   	CONNECT((new eListBoxEntryMenu(&list, _("Parental Lock"), eString().sprintf("(%d) %s", ++entry, _("open parental setup")) ))->selected, eZapSetup::parental_lock );
   	new eListBoxEntryMenuSeparator(&list, eSkin::getActive()->queryImage("listbox.separator"), 0, true );
   	CONNECT((new eListBoxEntryMenu(&list, _("Expert Setup"), eString().sprintf("(%d) %s", ++entry, _("open expert setup")) ))->selected, eZapSetup::expert_setup);
  +#ifndef DISABLE_HDD
  +#ifndef DISABLE_FILE
  +	new eListBoxEntryMenuSeparator(&list, eSkin::getActive()->queryImage("listbox.separator"), 0, true );
  +	CONNECT((new eListBoxEntryMenu(&list, _("Timeshift"), eString().sprintf("(%d) %s", ++entry, _("open timeshift setup")) ))->selected, eZapSetup::timeshift_setup);
  +#endif
  +#endif
   	/* emit */ setupHook(this, &entry);
   }
   
  @@ -133,3 +140,19 @@
   	show();
   }
   
  +#ifndef DISABLE_HDD
  +#ifndef DISABLE_FILE
  +void eZapSetup::timeshift_setup()
  +{
  +	hide();
  +	eZapTimeshiftSetup setup;
  +#ifndef DISABLE_LCD
  +	setup.setLCD(LCDTitle, LCDElement);
  +#endif
  +	setup.show();
  +	setup.exec();
  +	setup.hide();
  +	show();
  +}
  +#endif
  +#endif
  
  
  
  1.27      +5 -0      apps/tuxbox/enigma/src/enigma_setup.h
  
  file : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_setup.h?rev=1.27&content-type=text/vnd.viewcvs-markup
  plain: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_setup.h?rev=1.27&content-type=text/plain
  revision graph: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_setup.h?graph=1.27
  diff : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_setup.h.diff?r1=1.26&r2=1.27
  
  Index: enigma_setup.h
  ===================================================================
  RCS file: /cvs/tuxbox/apps/tuxbox/enigma/src/enigma_setup.h,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- enigma_setup.h	14 Feb 2004 03:32:04 -0000	1.26
  +++ enigma_setup.h	1 Mar 2008 17:40:17 -0000	1.27
  @@ -14,6 +14,11 @@
   #endif
   	void expert_setup();
   	void parental_lock();
  +#ifndef DISABLE_HDD
  +#ifndef DISABLE_FILE
  +	void timeshift_setup();
  +#endif
  +#endif
   public:
   	eZapSetup();
   };
  
  
  
  1.140     +6 -6      apps/tuxbox/enigma/src/sselect.cpp
  
  file : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/sselect.cpp?rev=1.140&content-type=text/vnd.viewcvs-markup
  plain: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/sselect.cpp?rev=1.140&content-type=text/plain
  revision graph: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/sselect.cpp?graph=1.140
  diff : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/sselect.cpp.diff?r1=1.139&r2=1.140
  
  Index: sselect.cpp
  ===================================================================
  RCS file: /cvs/tuxbox/apps/tuxbox/enigma/src/sselect.cpp,v
  retrieving revision 1.139
  retrieving revision 1.140
  diff -u -r1.139 -r1.140
  --- sselect.cpp	26 Jul 2007 22:03:28 -0000	1.139
  +++ sselect.cpp	1 Mar 2008 17:40:17 -0000	1.140
  @@ -582,7 +582,7 @@
   		serviceentryflags|=eListBoxEntryService::flagSameTransponder;
   	}
   	if ( eZap::getInstance()->getServiceSelector() == this
  -		&& (eDVB::getInstance()->recorder || ref.data[0] == -6) 
  +		&& (eDVB::getInstance()->recorder || ref.data[0] == -6)  && !eZapMain::getInstance()->isRecordingPermanentTimeshift()
   		&& eZapMain::getInstance()->getMode() != eZapMain::modeFile )
   	{
   		int mask = eZapMain::getInstance()->getMode() == eZapMain::modeTV ? (1<<4)|(1<<1) : ( 1<<2 );
  @@ -906,7 +906,7 @@
   		{
   			// dont change path in radio and tv mode when recording is running
   			if ( eZap::getInstance()->getServiceSelector() == this
  -				&& eDVB::getInstance()->recorder
  +				&& eDVB::getInstance()->recorder  && !eZapMain::getInstance()->isRecordingPermanentTimeshift()
   				&& eZapMain::getInstance()->getMode() != eZapMain::modeFile )
   				return;
   			pathUp();
  @@ -1149,7 +1149,7 @@
   			{
   				// dont change path in radio and tv mode when recording is running
   				if ( eZap::getInstance()->getServiceSelector() == this
  -					&& eDVB::getInstance()->recorder
  +					&& eDVB::getInstance()->recorder && !eZapMain::getInstance()->isRecordingPermanentTimeshift()
   					&& eZapMain::getInstance()->getMode() != eZapMain::modeFile )
   					return 1;
   				ci->clear();
  @@ -1185,7 +1185,7 @@
   			{
   				// dont change path in radio and tv mode when recording is running
   				if ( eZap::getInstance()->getServiceSelector() == this
  -					&& eDVB::getInstance()->recorder
  +					&& eDVB::getInstance()->recorder  && !eZapMain::getInstance()->isRecordingPermanentTimeshift()
   					&& eZapMain::getInstance()->getMode() != eZapMain::modeFile )
   					return 1;
   				ci->clear();
  @@ -1267,7 +1267,7 @@
   			{
   				// dont change path in radio and tv mode when recording is running
   				if ( eZap::getInstance()->getServiceSelector() == this
  -					&& eDVB::getInstance()->recorder
  +					&& eDVB::getInstance()->recorder  && !eZapMain::getInstance()->isRecordingPermanentTimeshift()
   					&& eZapMain::getInstance()->getMode() != eZapMain::modeFile )
   					return 1;
   				pathUp();
  @@ -1492,7 +1492,7 @@
   			{
   				// dont change path in radio and tv mode when recording is running
   				if ( eZap::getInstance()->getServiceSelector() == this
  -					&& eDVB::getInstance()->recorder
  +					&& eDVB::getInstance()->recorder  && !eZapMain::getInstance()->isRecordingPermanentTimeshift()
   					&& eZapMain::getInstance()->getMode() != eZapMain::modeFile )
   					return 1;
   				ci->clear();
  
  
  

-- 
To UNSUBSCRIBE, email to tuxbox-cvs-request@cvs.tuxbox.org
with a subject of "unsubscribe". Trouble? Contact listmaster@cvs.tuxbox.org