⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oggplay.cpp

📁 OggPlay for Symbian 是symbian上的一个媒体播放程序的源码。它支持ogg,wav等等多媒体格式。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		CleanupStack::PopAndDestroy(ds);
		return;
	}

	CDir* c = NULL;	
	TFileName fullname;
	for(;;) {
		ds->NextL(c);
		if (!c)
			break;
		
		for (TInt i=0; i<c->Count(); i++) 
		{
			const TEntry e= (*c)[i];
			
			fullname.Copy(ds->FullPath());
			fullname.Append(e.iName);

			TParsePtrC p(fullname);			
			if (p.Ext()==_L(".skn") || p.Ext()==_L(".SKN")) {
				iSkins->AppendL(p.NameAndExt());
				if (iSkins->Count()==10) break;
			}
		}
		delete c; c=NULL;
    }
	
	CleanupStack::PopAndDestroy(ds);
}

void
COggPlayAppUi::ReadIniFile()
{
    // Set some default values (for first time users)
#if defined(SERIES60)
	iSettings.iSoftKeysIdle[0] = TOggplaySettings::EHotKeyExit;
    iSettings.iSoftKeysPlay[0] = TOggplaySettings::EHotKeyExit;
#else
#if defined(SERIES80)
	iSettings.iSoftKeysIdle[0] = TOggplaySettings::EPlay;
    iSettings.iSoftKeysIdle[1] = TOggplaySettings::EHotKeyBack;
    iSettings.iSoftKeysIdle[2] = TOggplaySettings::EHotkeyVolumeHelp;
    iSettings.iSoftKeysIdle[3] = TOggplaySettings::EHotKeyExit;
    iSettings.iSoftKeysPlay[0] = TOggplaySettings::EPause;
    iSettings.iSoftKeysPlay[1] = TOggplaySettings::ENextSong;
    iSettings.iSoftKeysPlay[2] = TOggplaySettings::EFastForward;
    iSettings.iSoftKeysPlay[3] = TOggplaySettings::EHotKeyExit;
	iSettings.iCustomScanDir = KFullScanString;
#endif
#endif
 
    iSettings.iWarningsEnabled = ETrue;
	iSettings.iGainType = ENoGain;
	iVolume = KMaxVolume;

	iSettings.iAlarmTime.Set(_L("20030101:120000.000000"));
	iSettings.iAlarmVolume = 7;
	iSettings.iAlarmGain = ENoGain;
	iSettings.iAlarmSnooze = 1;

    iAnalyzerState = EDecay; 

#if defined(MULTI_THREAD_PLAYBACK)
	iSettings.iBufferingMode = ENoBuffering;
	iSettings.iThreadPriority = ENormal;
#endif

    // Open the file
    RFile in;
    TInt err = in.Open(iCoeEnv->FsSession(), iIniFileName, EFileRead | EFileStreamText);    
    if (err != KErrNone)
    {
        TRACEF(COggLog::VA(_L("ReadIni:%d"), err ));
        return;
    }
	
	TFileText tf;
	tf.Set(in);

   // Read in the fields
   TInt ini_version = 0;

   TInt val = (TInt) IniRead32( tf );
   if ( val == 0xdb ) // Our magic number ! (see writeini below)
   {
      // Followed by version number
      ini_version = (TInt) IniRead32( tf );
      TRACEF(COggLog::VA(_L("Inifile version %d"), ini_version ));
   }
   else
   {
      // Not the magic number so this must be an old version
      // Seek back to beginning of the file and start parsing from there
      tf.Seek( ESeekStart );
    }
	
   iHotkey = (int)   IniRead32( tf, 0, KMaxKeyCodes );
   iSettings.iRepeat = (TBool) IniRead32( tf, 1, 1 );
   iVolume = (int)   IniRead32( tf, KMaxVolume, KMaxVolume );
	
   TInt64 tmp64 = IniRead64( tf );
   TTime t(tmp64);
   iSettings.iAlarmTime= t;

   iAnalyzerState = (int)  IniRead32( tf, 0, 3 );
   val            =        IniRead32( tf );  // For backward compatibility
   iCurrentSkin   = (TInt) IniRead32( tf, 0, (iSkins->Count() - 1) );
   
   if ( ini_version >= 2 )
   {
      TInt restore_stack_count = (TInt) IniRead32( tf );      
      for( TInt i = 0; i < restore_stack_count; i++ )
         iRestoreStack.Append((TInt) IniRead32( tf ));
	
      iRestoreCurrent            = (TInt) IniRead32( tf );
      iSettings.iScanmode        = (TInt) IniRead32( tf );
#ifdef SERIES80      
      IniReadDes( tf ,iSettings.iCustomScanDir,KMmcSearchDir);
#endif
      iSettings.iAutoplay        = (TInt) IniRead32( tf );
      iSettings.iManeuvringSpeed = (TInt) IniRead32( tf );
      
      // For backwards compatibility for number of hotkeys
      TInt num_of_hotkeys = 0;
      if (ini_version<7) 
      {
          num_of_hotkeys = ( ini_version >= 5 ) ? TOggplaySettings::ENofHotkeysV5 : TOggplaySettings::ENofHotkeysV4;
      }
      else 
      { 
      	  num_of_hotkeys = (TInt)  IniRead32( tf );
      }
 
      for ( TInt j = TOggplaySettings::KFirstHotkeyIndex; j < num_of_hotkeys; j++ ) 
      {
         iSettings.iUserHotkeys[j] = (TInt) IniRead32( tf );
      }
      
      iSettings.iWarningsEnabled      = (TInt)  IniRead32( tf );
      if (ini_version<7) 
        {
            // The way the softkeys is stored has changed, ignore the value
            // from the ini file.
            IniRead32( tf ); 
        	IniRead32( tf );
        	iSettings.iSoftKeysIdle[0] = TOggplaySettings::EHotKeyExit;
        	iSettings.iSoftKeysPlay[0] = TOggplaySettings::EHotKeyExit;
        }
        else
        {
      		iSettings.iSoftKeysIdle[0]      = (TInt)  IniRead32( tf );
      		iSettings.iSoftKeysPlay[0]      = (TInt)  IniRead32( tf );
        }
#ifdef SERIES80
      iSettings.iSoftKeysIdle[1]      = (TInt)  IniRead32( tf );
      iSettings.iSoftKeysPlay[1]      = (TInt)  IniRead32( tf );
      iSettings.iSoftKeysIdle[2]      = (TInt)  IniRead32( tf );
      iSettings.iSoftKeysPlay[2]      = (TInt)  IniRead32( tf );
      iSettings.iSoftKeysIdle[3]      = (TInt)  IniRead32( tf );
      iSettings.iSoftKeysPlay[3]      = (TInt)  IniRead32( tf );
 #endif
      iSettings.iRandom                    = (TBool) IniRead32( tf, 0, 1 );

   } // version 2 onwards

#ifdef PLUGIN_SYSTEM
    TInt nbController = IniRead32(tf) ;
    TBuf<10> extension;
    TInt32 uid;
    for ( TInt j=0; j<nbController; j++ )
    {
        if ( tf.Read(extension) != KErrNone)
            extension = KNullDesC;
        uid = IniRead32(tf);
        TUid aUid;
        aUid.iUid = uid;
        TRAPD(newermind,
        iOggPlayback->GetPluginListL().SelectPluginL(extension, aUid); )
        
        TRACEF(COggLog::VA(_L("Looking for controller %S:%x Result:%i"), &extension, uid, newermind));
    }
#endif

	if (ini_version>=7)
	{
		iSettings.iGainType = IniRead32(tf);
		iOggPlayback->SetVolumeGain((TGainType) iSettings.iGainType);
	}

#if defined(MULTI_THREAD_PLAYBACK)
	if (ini_version>=8)
	{
		iSettings.iBufferingMode = IniRead32(tf);
		TInt err = ((COggPlayback*) iOggPlayback)->SetBufferingMode((TBufferingMode) iSettings.iBufferingMode);
		if (err != KErrNone)
			iSettings.iBufferingMode = ENoBuffering;

		iSettings.iThreadPriority = IniRead32(tf);
		((COggPlayback*) iOggPlayback)->SetThreadPriority((TStreamingThreadPriority) iSettings.iThreadPriority);
	}
#endif

	if (ini_version>=11)
		{
		iSettings.iAlarmActive = IniRead32(tf);
		iSettings.iAlarmVolume = IniRead32(tf);
		iSettings.iAlarmGain = IniRead32(tf);
		iSettings.iAlarmSnooze = IniRead32(tf);
		}

   in.Close();
	}

TInt32 
COggPlayAppUi::IniRead32( TFileText& aFile, TInt32 aDefault, TInt32 aMaxValue )
{
   TInt32   val = aDefault;
   TBuf<128> line;

   if ( aFile.Read(line) == KErrNone )
   {
		TLex parse(line);
      if ( parse.Val(val) == KErrNone )
      {
         if ( val > aMaxValue ) val = aDefault;
	  }
      else
      {
         val = aDefault;
      }
    }

   return ( val );
	  }
  
TInt64 
COggPlayAppUi::IniRead64( TFileText& aFile, TInt64 aDefault )
{
   TInt64   val = aDefault;
   TBuf<128> line;

   if ( aFile.Read(line) == KErrNone )
   {
		TLex parse(line);
      if ( parse.Val(val) != KErrNone )
    {
         val = aDefault;
      }
  	}

   return ( val );
}
#ifdef SERIES80
void COggPlayAppUi::IniReadDes( TFileText& aFile, TDes& value,const TDesC& defaultValue )
{
   TBuf<255> line;

   if ( aFile.Read(line) == KErrNone )
   {
		   value.Copy(line);
		   
    } else 
    {
    	   value.Copy(defaultValue);
    	   
    }
}
#endif

void
COggPlayAppUi::WriteIniFile()
{
    RFile out;
    
    TRACEF(COggLog::VA(_L("COggPlayAppUi::WriteIniFile() %S, %d"), &iIniFileName, iIsRunningEmbedded));
    
    // Accessing the MMC , using the TFileText is extremely slow. 
    // We'll do everything using the C:\ drive then move the file to it's final destination
    // in MMC.
    
    TParsePtrC p(iIniFileName);
	TBool useTemporaryFile = EFalse;
	TFileName fileName = iIniFileName;
    if (p.Drive() != _L("C:"))
    {
    	useTemporaryFile = ETrue;
    	// Create the c:\tmp\ directory
        TInt errorCode = iCoeEnv->FsSession().MkDir(_L("C:\\tmp\\"));
        if ((errorCode != KErrNone) && (errorCode !=  KErrAlreadyExists) )
          return;
          
        // Create the file
    	fileName = _L("C:\\tmp\\");
    	fileName.Append(p.NameAndExt());
    }
    
    if ( out.Replace( iCoeEnv->FsSession(), fileName, EFileWrite | EFileStreamText) != KErrNone ) return;
    
    TRACEF(_L("Writing Inifile..."));
    TInt j;
    TFileText tf;
    tf.Set(out);
    
    TBuf<64> num;
    
    // this should do the trick for forward compatibility:
    TInt magic=0xdb;
    TInt iniversion=11;

    num.Num(magic);
    tf.Write(num);
    
    num.Num(iniversion);
    tf.Write(num);

	num.Num(iHotkey);
	tf.Write(num);
	
	num.Num(iSettings.iRepeat);
	tf.Write(num);

	num.Num(iVolume);
	tf.Write(num);

	num.Num(iSettings.iAlarmTime.Int64());
	tf.Write(num);
	
	num.Num(iAnalyzerState);
	tf.Write(num);
	
	// for backward compatibility:
	num.Num(iAnalyzerState);
	tf.Write(num);
	
	num.Num(iCurrentSkin);
	tf.Write(num);
	
    // from iniversion 2 onwards:
	if (iIsRunningEmbedded)
	{
	    num.Num(iRestoreStack.Count());
		tf.Write(num);
    
		for ( TInt i = 0; i < iRestoreStack.Count(); i++ )
		{
			num.Num(iRestoreStack[i]);
			tf.Write(num);
		}
    
		num.Num(iRestoreCurrent);
		tf.Write(num);
	}
	else
	{
	    num.Num(iViewHistoryStack.Count());
		tf.Write(num);
    
		for ( TInt i = 0; i < iViewHistoryStack.Count(); i++ )
		{
			num.Num(iViewHistoryStack[i]);
			tf.Write(num);
		}
    
	    num.Num(iAppView->GetSelectedIndex());
		tf.Write(num);
	}
	
	num.Num(iSettings.iScanmode);
	tf.Write(num);
#ifdef SERIES80	
	tf.Write(iSettings.iCustomScanDir);
#endif
	num.Num(iSettings.iAutoplay);
	tf.Write(num);

 	num.Num(iSettings.iManeuvringSpeed);
	tf.Write(num);
    
    num.Num((TUint) TOggplaySettings::ENofHotkeys);
    tf.Write(num);
    
    for( j=TOggplaySettings::KFirstHotkeyIndex; j<TOggplaySettings::ENofHotkeys; j++ ) 
    {
        num.Num(iSettings.iUserHotkeys[j]);
        tf.Write(num);
    }
    
    num.Num(iSettings.iWarningsEnabled);
    tf.Write(num);
    
    for( j=0; j<KNofSoftkeys; j++ ) 
    {
        num.Num(iSettings.iSoftKeysIdle[j]);
        tf.Write(num);
    
        num.Num(iSettings.iSoftKeysPlay[j]);
        tf.Write(num);
    }
    
    num.Num(iSettings.iRandom);
    tf.Write(num);

#ifdef PLUGIN_SYSTEM
    CDesCArrayFlat * supportedExtensionList = iOggPlayback->GetPluginListL().SupportedExtensions();
    TRAPD(err,
    {
        CleanupStack::PushL(supportedExtensionList);
        
        num.Num(supportedExtensionList->Count());
        tf.Write(num);
        for ( j=0; j<supportedExtensionList->Count(); j++ )
        {
            tf.Write( (*supportedExtensionList)[j]);
            CPluginInfo * selected = iOggPlayback->GetPluginListL().GetSelectedPluginInfo((*supportedExtensionList)[j]);
            if (selected)
            	num.Num((TInt)selected->iControllerUid.iUid) ;
            else
            	num.Num(0);
            tf.Write(num);
        }
        
        CleanupStack::PopAndDestroy(1);
    } 
    ) // End of TRAP
#endif
    
    num.Num(iSettings.iGainType);
    tf.Write(num);

#if defined(MULTI_THREAD_PLAYBACK)
    num.Num(iSettings.iBufferingMode);
    tf.Write(num);

	num.Num(iSettings.iThreadPriority);
    tf.Write(num);
#endif

	num.Num(iSettings.iAlarmActive);
	tf.Write(num);

	num.Num(iSettings.iAlarmVolume);
	tf.Write(num);

	num.Num(iSettings.iAlarmGain);
	tf.Write(num);

	num.Num(iSettings.iAlarmSnooze);
	tf.Write(num);

	// Please increase ini_version when adding stuff
	
	out.Close();
	if (useTemporaryFile) 
	{
		// Move the file to the MMC
		CFileMan* fileMan = NULL;
	    TRAPD(err2, fileMan = CFileMan::NewL(iCoeEnv->FsSession()));
		if (err2 == KErrNone)
		{
			fileMan->Move( fileName, iIniFileName,CFileMan::EOverWrite);
			delete (fileMan);
		}
	}

     TRACEF(_L("Writing Inifile 10..."));
}

void
COggPlayAppUi::HandleForegroundEventL(TBool aForeground)
{
	iForeground = aForeground;

#if defined(SERIES60)
	CAknAppUi::HandleForegroundEventL(aForeground);
#elif defined(UIQ)
	CQikAppUi::HandleForegroundEventL(aForeground);
#else
	CEikAppUi::HandleForegroundEventL(aForeground);
#endif

	if (iStartUpState != EStartUpComplete)
		return;

	if (aForeground)
		{
#if defined(UIQ)
		// UIQ deactivates our view when we are moved to the background
		// Consequently we need to re-activate it when we are moved back into the foreground
		ActivateOggViewL();
#endif

		iAppView->RestartCallBack();
		}
	else
		iAppView->StopCallBack();
}

void COggPlayAppUi::ToggleRandom()
{
	if (iSettings.iRandom)
	      SetRandomL(EFalse);
	    else
	      SetRandomL(ETrue);
}

void
COggPlayAppUi::SetRandomL(TBool aRandom)
{
    // Toggle random
    iSettings.iRandom = aRandom;
	COggSongList* songList;
    if (iSettings.iRandom)
		songList = COggRandomPlay::NewL(iAppView, iOggPlayback, iSongList);
    else
		songList = COggNormalPlay::NewL(iAppView, iOggPlayback, iSongList);

	delete iSongList;
	iSongList = songList;

    iSongList->SetRepeat(iSettings.iRepeat);
    iAppView->UpdateRandom();
}

void 
COggPlayAppUi::ToggleRepeat()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -