#include "global.h" /* ----------------------------------------------------------------------------- Class: AnnouncerManager Desc: See header. Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. Chris Danford ----------------------------------------------------------------------------- */ #include "AnnouncerManager.h" #include "RageLog.h" #include "arch/arch.h" AnnouncerManager* ANNOUNCER = NULL; // global object accessable from anywhere in the program const CString EMPTY_ANNOUNCER_NAME = "Empty"; const CString ANNOUNCERS_DIR = BASE_PATH "Announcers" SLASH; /* XXX: move to RageUtil when I feel like spending 20 minutes recompiling */ /* Return true if "dir" is empty or does not exist. */ static bool DirectoryIsEmpty( CString dir ) { if(dir == "") return true; if(!DoesFileExist(dir)) return true; CStringArray asFileNames; GetDirListing( dir, asFileNames ); return asFileNames.empty(); } AnnouncerManager::AnnouncerManager() { LOG->Trace("AnnouncerManager::AnnouncerManager()"); } void AnnouncerManager::GetAnnouncerNames( CStringArray& AddTo ) { GetDirListing( ANNOUNCERS_DIR+"*", AddTo, true ); // strip out the folder called "CVS" and EMPTY_ANNOUNCER_NAME int i; for( i=AddTo.size()-1; i>=0; i-- ) if( !stricmp( AddTo[i], "cvs" ) ) AddTo.erase(AddTo.begin()+i, AddTo.begin()+i+1 ); for( i=AddTo.size()-1; i>=0; i-- ) if( !stricmp( AddTo[i], EMPTY_ANNOUNCER_NAME ) ) AddTo.erase(AddTo.begin()+i, AddTo.begin()+i+1 ); } bool AnnouncerManager::DoesAnnouncerExist( CString sAnnouncerName ) { if( sAnnouncerName == "" ) return true; CStringArray asAnnouncerNames; GetAnnouncerNames( asAnnouncerNames ); for( unsigned i=0; iTrace( "The announcer in '%s' is missing the folder '%s'.", AnnouncerPath.c_str(), sFolderName.c_str() ); // MessageBeep( MB_OK ); CreateDirectories( AnnouncerPath+sFolderName ); #endif return ""; } CString AnnouncerManager::GetPathTo( CString sFolderName ) { CString sPath = GetPathTo(m_sCurAnnouncerName, sFolderName); if(sPath != "") return sPath; return GetPathTo(EMPTY_ANNOUNCER_NAME, sFolderName); } bool AnnouncerManager::HasSoundsFor( CString sFolderName ) { return !DirectoryIsEmpty( GetPathTo(sFolderName) ); } void AnnouncerManager::NextAnnouncer() { CStringArray as; GetAnnouncerNames( as ); if( as.size()==0 ) return; if( m_sCurAnnouncerName == "" ) SwitchAnnouncer( as[0] ); else { unsigned i; for( i=0; i