// this is the method that initiates all searching for mailboxes. // it will assume that it has a directory like ~/Library/Mail/ NS_IMETHODIMP nsAppleMailImportMail::FindMailboxes(nsIFile *aMailboxFile, nsIArray **aResult) { NS_ENSURE_ARG_POINTER(aMailboxFile); NS_ENSURE_ARG_POINTER(aResult); IMPORT_LOG0("FindMailboxes for Apple mail invoked"); bool exists = false; nsresult rv = aMailboxFile->Exists(&exists); if (NS_FAILED(rv) || !exists) return NS_ERROR_FAILURE; nsCOMPtr<nsIImportService> importService(do_GetService(NS_IMPORTSERVICE_CONTRACTID, &rv)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIMutableArray> resultsArray(do_CreateInstance(NS_ARRAY_CONTRACTID, &rv)); if (!resultsArray) return NS_ERROR_OUT_OF_MEMORY; mCurDepth = 1; // 1. look for accounts with mailboxes FindAccountMailDirs(aMailboxFile, resultsArray, importService); mCurDepth--; if (NS_SUCCEEDED(rv)) { // 2. look for "global" mailboxes, that don't belong to any specific account. they are inside the // root's Mailboxes/ folder nsCOMPtr<nsIFile> mailboxesDir(do_CreateInstance(NS_LOCAL_FILE_CONTRACTID, &rv)); if (NS_SUCCEEDED(rv)) { mailboxesDir->InitWithFile(aMailboxFile); rv = mailboxesDir->Append(NS_LITERAL_STRING("Mailboxes")); if (NS_SUCCEEDED(rv)) { IMPORT_LOG0("Looking for global Apple mailboxes"); mCurDepth++; rv = FindMboxDirs(mailboxesDir, resultsArray, importService); mCurDepth--; } } } if (NS_SUCCEEDED(rv) && resultsArray) resultsArray.forget(aResult); return rv; }
//----------------------------------------------------------------------------- // Creates a single sfm file //----------------------------------------------------------------------------- void CSFMGenApp::GenerateSFMFile( const SFMGenInfo_t& sfmGenInfo, const SFMInfo_t &info, studiohdr_t *pStudioHdr, const char *pOutputDirectory, const char *pExportFacPath ) { CSFMSession session; session.Init(); char pAnimationSetName[256]; Q_FileBase( pStudioHdr->name, pAnimationSetName, sizeof(pAnimationSetName) ); // Set the file id( necessary for phoneme extraction) DmFileId_t fileid = g_pDataModel->FindOrCreateFileId( pAnimationSetName ); session.Root()->SetFileId( fileid, TD_DEEP ); g_pModelPresetGroupMgr->AssociatePresetsWithFile( fileid ); // Get the shot. CDmeFilmClip *pMovie = session.Root()->GetValueElement<CDmeFilmClip>( "activeClip" ); CDmeFilmClip* pShot = CastElement< CDmeFilmClip >( pMovie->GetFilmTrack()->GetClip( 0 ) ); // Create a camera for the shot DmeCameraParams_t cameraParams( pAnimationSetName, vec3_origin, QAngle( 0, 180, 0 ) ); cameraParams.origin.x = pStudioHdr->hull_max.x + 20; cameraParams.origin.z = Lerp( 0.95f, pStudioHdr->hull_min.z, pStudioHdr->hull_max.z ); cameraParams.fov = 75.0f; CDmeCamera* pCamera = session.CreateCamera( cameraParams ); pShot->SetCamera( pCamera ); // Create a game model for the studio hdr CDmeGameModel *pGameModel = session.CreateEditorGameModel( pStudioHdr, vec3_origin, Quaternion( 0, 0, 0, 1 ) ); // Create a scene for the shot CDmeDag *pScene = session.FindOrCreateScene( pShot, pAnimationSetName ); pScene->AddChild( pGameModel ); // Create a sound clip CDmeGameSound *pGameSound; CDmeSoundClip *pSoundClip = CreateSoundClip( pMovie, pAnimationSetName, info.m_GameSound, pStudioHdr, &pGameSound ); pShot->SetDuration( pSoundClip->GetDuration() ); pMovie->SetDuration( pSoundClip->GetDuration() ); // Create an animation set CDmeAnimationSet *pAnimationSet = CreateAnimationSet( pMovie, pShot, pGameModel, pAnimationSetName, 0, false ); // Extract phonemes if ( pSoundClip ) { CExtractInfo extractInfo; extractInfo.m_pClip = pSoundClip; extractInfo.m_pSound = pGameSound; extractInfo.m_sHintText = info.m_Text; extractInfo.m_bUseSentence = sfmGenInfo.m_bUsePhonemesInWavs; ExtractDesc_t extractDesc; extractDesc.m_nExtractType = EXTRACT_WIPE_CLIP; extractDesc.m_pMovie = pMovie; extractDesc.m_pShot = pShot; extractDesc.m_pSet = pAnimationSet; extractDesc.m_flSampleRateHz = sfmGenInfo.m_flSampleRateHz; extractDesc.m_flSampleFilterSize = sfmGenInfo.m_flSampleFilterSize; extractDesc.m_WorkList.AddToTail( extractInfo ); BuildFacialControlList( pShot, pAnimationSet, extractDesc.m_ControlList ); sfm_phonemeextractor->Extract( SPEECH_API_LIPSINC, extractDesc, sfmGenInfo.m_bWritePhonemesInWavs ); CExtractInfo &results = extractDesc.m_WorkList[ 0 ]; CDmElement *pExtractionSettings = pGameSound->FindOrAddPhonemeExtractionSettings(); pExtractionSettings->SetValue< float >( "duration", results.m_flDuration ); // Store off phonemes if ( !pExtractionSettings->HasAttribute( "results" ) ) { pExtractionSettings->AddAttribute( "results", AT_ELEMENT_ARRAY ); } CDmrElementArray< CDmElement > resultsArray( pExtractionSettings, "results" ); resultsArray.RemoveAll(); for ( int i = 0; i < results.m_ApplyTags.Count(); ++i ) { CBasePhonemeTag *tag = results.m_ApplyTags[ i ]; CDmElement *tagElement = CreateElement< CDmElement >( ConvertPhoneme( tag->GetPhonemeCode() ), pGameSound->GetFileId() ); tagElement->SetValue< float >( "start", tag->GetStartTime() ); tagElement->SetValue< float >( "end", tag->GetEndTime() ); resultsArray.AddToTail( tagElement ); } if ( pExportFacPath ) { char pFACFileName[MAX_PATH]; Q_ComposeFileName( pExportFacPath, info.m_DMXFileName, pFACFileName, sizeof(pFACFileName) ); Q_SetExtension( pFACFileName, ".dmx", sizeof(pFACFileName) ); ExportFacialAnimation( pFACFileName, pMovie, pShot, pAnimationSet ); } } SaveSFMFile( session.Root(), pOutputDirectory, info.m_DMXFileName ); session.Shutdown(); }