📄 oggplay.cpp
字号:
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 + -