2010-11-06 23:04:47 +01:00
///////////////////////////////////////////////////////////////////////////////
// LameXP - Audio Encoder Front-End
2011-01-01 17:04:25 +01:00
// Copyright (C) 2004-2011 LoRd_MuldeR <MuldeR2@GMX.de>
2010-11-06 23:04:47 +01:00
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//
// http://www.gnu.org/licenses/gpl-2.0.txt
///////////////////////////////////////////////////////////////////////////////
//LameXP includes
# include "Global.h"
# include "Dialog_SplashScreen.h"
# include "Dialog_MainWindow.h"
2010-11-17 19:35:50 +01:00
# include "Dialog_Processing.h"
2010-11-06 23:04:47 +01:00
# include "Thread_Initialization.h"
2010-11-09 22:06:11 +01:00
# include "Thread_MessageProducer.h"
2010-11-12 21:02:14 +01:00
# include "Model_Settings.h"
2010-11-19 21:11:54 +01:00
# include "Model_FileList.h"
# include "Model_AudioFile.h"
2010-11-20 02:14:22 +01:00
# include "Encoder_Abstract.h"
2010-11-06 23:04:47 +01:00
//Qt includes
# include <QApplication>
# include <QMessageBox>
# include <QDate>
2010-11-19 13:31:45 +01:00
# include <QMutex>
2010-11-20 02:14:22 +01:00
# include <QDir>
2010-11-21 21:51:22 +01:00
# include <QInputDialog>
2010-11-06 23:04:47 +01:00
///////////////////////////////////////////////////////////////////////////////
// Main function
///////////////////////////////////////////////////////////////////////////////
int lamexp_main ( int argc , char * argv [ ] )
{
2010-11-09 22:06:11 +01:00
int iResult = - 1 ;
2010-11-19 21:11:54 +01:00
bool bAccepted = true ;
2011-03-18 01:12:17 +01:00
bool bShutdown = false ;
2010-11-09 22:06:11 +01:00
2010-11-07 23:06:30 +01:00
//Init console
lamexp_init_console ( argc , argv ) ;
2010-11-22 21:45:00 +01:00
2010-11-06 23:04:47 +01:00
//Print version info
2010-11-07 23:06:30 +01:00
qDebug ( " LameXP - Audio Encoder Front-End " ) ;
2010-11-20 22:14:10 +01:00
qDebug ( " Version %d.%02d %s, Build %d [%s], compiled with %s " , lamexp_version_major ( ) , lamexp_version_minor ( ) , lamexp_version_release ( ) , lamexp_version_build ( ) , lamexp_version_date ( ) . toString ( Qt : : ISODate ) . toLatin1 ( ) . constData ( ) , lamexp_version_compiler ( ) ) ;
2010-11-07 23:06:30 +01:00
qDebug ( " Copyright (C) 2004-%04d LoRd_MuldeR <MuldeR2@GMX.de> \n " , max ( lamexp_version_date ( ) . year ( ) , QDate : : currentDate ( ) . year ( ) ) ) ;
2010-11-06 23:04:47 +01:00
//print license info
qDebug ( " This program is free software: you can redistribute it and/or modify " ) ;
2010-11-08 00:24:54 +01:00
qDebug ( " it under the terms of the GNU General Public License <http://www.gnu.org/>. " ) ;
2010-11-06 23:04:47 +01:00
qDebug ( " This program comes with ABSOLUTELY NO WARRANTY. \n " ) ;
2010-11-13 02:11:15 +01:00
2010-11-06 23:04:47 +01:00
//Print warning, if this is a "debug" build
LAMEXP_CHECK_DEBUG_BUILD ;
2010-11-09 22:06:11 +01:00
2010-11-15 04:42:06 +01:00
//Detect CPU capabilities
lamexp_cpu_t cpuFeatures = lamexp_detect_cpu_features ( ) ;
2010-11-26 00:29:53 +01:00
qDebug ( " CPU vendor id : %s (Intel: %d) " , cpuFeatures . vendor , ( cpuFeatures . intel ? 1 : 0 ) ) ;
2010-11-20 22:14:10 +01:00
qDebug ( " CPU brand string : %s " , cpuFeatures . brand ) ;
qDebug ( " CPU signature : Family: %d, Model: %d, Stepping: %d " , cpuFeatures . family , cpuFeatures . model , cpuFeatures . stepping ) ;
qDebug ( " CPU capabilities : MMX: %s, SSE: %s, SSE2: %s, SSE3: %s, SSSE3: %s, x64: %s " , LAMEXP_BOOL ( cpuFeatures . mmx ) , LAMEXP_BOOL ( cpuFeatures . sse ) , LAMEXP_BOOL ( cpuFeatures . sse2 ) , LAMEXP_BOOL ( cpuFeatures . sse3 ) , LAMEXP_BOOL ( cpuFeatures . ssse3 ) , LAMEXP_BOOL ( cpuFeatures . x64 ) ) ;
2010-11-24 21:00:59 +01:00
qDebug ( " Number of CPU's : %d \n " , cpuFeatures . count ) ;
2010-11-15 04:42:06 +01:00
2010-11-06 23:04:47 +01:00
//Initialize Qt
2010-12-27 01:50:22 +01:00
if ( ! lamexp_init_qt ( argc , argv ) )
{
return - 1 ;
}
2010-11-21 21:51:22 +01:00
2010-11-06 23:04:47 +01:00
//Check for expiration
if ( lamexp_version_demo ( ) )
{
2011-01-20 22:06:59 +01:00
qWarning ( QString ( " Note: This demo (pre-release) version of LameXP will expire at %1. \n " ) . arg ( lamexp_version_expires ( ) . toString ( Qt : : ISODate ) ) . toLatin1 ( ) . constData ( ) ) ;
2010-11-06 23:04:47 +01:00
}
2010-11-08 21:47:35 +01:00
//Check for multiple instances of LameXP
2010-11-09 22:06:11 +01:00
if ( ( iResult = lamexp_init_ipc ( ) ) ! = 0 )
2010-11-08 21:47:35 +01:00
{
qDebug ( " LameXP is already running, connecting to running instance... " ) ;
2010-11-09 22:06:11 +01:00
if ( iResult = = 1 )
{
MessageProducerThread * messageProducerThread = new MessageProducerThread ( ) ;
messageProducerThread - > start ( ) ;
if ( ! messageProducerThread - > wait ( 30000 ) )
{
messageProducerThread - > terminate ( ) ;
QMessageBox messageBox ( QMessageBox : : Critical , " LameXP " , " LameXP is already running, but the running instance doesn't respond! " , QMessageBox : : NoButton , NULL , Qt : : Dialog | Qt : : MSWindowsFixedSizeDialogHint | Qt : : WindowStaysOnTopHint ) ;
messageBox . exec ( ) ;
messageProducerThread - > wait ( ) ;
LAMEXP_DELETE ( messageProducerThread ) ;
return - 1 ;
}
LAMEXP_DELETE ( messageProducerThread ) ;
}
2010-11-08 21:47:35 +01:00
return 0 ;
}
2010-11-09 22:06:11 +01:00
//Kill application?
for ( int i = 0 ; i < argc ; i + + )
2010-11-08 21:47:35 +01:00
{
2010-11-09 22:06:11 +01:00
if ( ! _stricmp ( " --kill " , argv [ i ] ) | | ! _stricmp ( " --force-kill " , argv [ i ] ) )
{
return 0 ;
}
2010-11-08 21:47:35 +01:00
}
2010-11-06 23:04:47 +01:00
2010-11-19 21:11:54 +01:00
//Create models
FileListModel * fileListModel = new FileListModel ( ) ;
AudioFileModel * metaInfo = new AudioFileModel ( ) ;
SettingsModel * settingsModel = new SettingsModel ( ) ;
2010-11-06 23:04:47 +01:00
//Show splash screen
InitializationThread * poInitializationThread = new InitializationThread ( ) ;
SplashScreen : : showSplash ( poInitializationThread ) ;
LAMEXP_DELETE ( poInitializationThread ) ;
2010-12-03 23:01:17 +01:00
//Validate settings
settingsModel - > validate ( ) ;
2010-11-20 22:14:10 +01:00
//Create main window
MainWindow * poMainWindow = new MainWindow ( fileListModel , metaInfo , settingsModel ) ;
//Main application loop
2011-03-18 01:12:17 +01:00
while ( bAccepted & & ! bShutdown )
2010-11-19 21:11:54 +01:00
{
2010-11-20 22:14:10 +01:00
//Show main window
2010-11-19 21:11:54 +01:00
poMainWindow - > show ( ) ;
iResult = QApplication : : instance ( ) - > exec ( ) ;
bAccepted = poMainWindow - > isAccepted ( ) ;
//Show processing dialog
if ( bAccepted & & fileListModel - > rowCount ( ) > 0 )
{
2010-11-20 19:16:04 +01:00
ProcessingDialog * processingDialog = new ProcessingDialog ( fileListModel , metaInfo , settingsModel ) ;
2010-11-19 21:11:54 +01:00
processingDialog - > exec ( ) ;
2011-03-18 01:12:17 +01:00
bShutdown = processingDialog - > getShutdownFlag ( ) ;
2010-11-19 21:11:54 +01:00
LAMEXP_DELETE ( processingDialog ) ;
}
}
2010-11-06 23:04:47 +01:00
2010-11-19 21:11:54 +01:00
//Free models
2010-11-20 22:14:10 +01:00
LAMEXP_DELETE ( poMainWindow ) ;
2010-11-19 21:11:54 +01:00
LAMEXP_DELETE ( fileListModel ) ;
LAMEXP_DELETE ( metaInfo ) ;
LAMEXP_DELETE ( settingsModel ) ;
2011-02-07 22:01:06 +01:00
2010-11-06 23:04:47 +01:00
//Final clean-up
qDebug ( " Shutting down, please wait... \n " ) ;
2010-11-12 21:02:14 +01:00
2011-03-18 01:12:17 +01:00
//Shotdown computer
if ( bShutdown )
{
if ( ! lamexp_shutdown_computer ( " LameXP planned computer shutdown! " , 12 ) )
{
QMessageBox messageBox ( QMessageBox : : Critical , " LameXP " , " Sorry, LameXP was unable to shutdown your computer! " , QMessageBox : : NoButton , NULL , Qt : : Dialog | Qt : : MSWindowsFixedSizeDialogHint | Qt : : WindowStaysOnTopHint ) ;
}
}
2010-11-06 23:04:47 +01:00
//Terminate
return iResult ;
}
///////////////////////////////////////////////////////////////////////////////
// Applicaton entry point
///////////////////////////////////////////////////////////////////////////////
int main ( int argc , char * argv [ ] )
{
2010-12-03 23:01:17 +01:00
# ifdef _DEBUG
2011-03-08 01:12:40 +01:00
int iResult = - 1 ;
2010-12-03 23:01:17 +01:00
qInstallMsgHandler ( lamexp_message_handler ) ;
LAMEXP_MEMORY_CHECK ( iResult = lamexp_main ( argc , argv ) ) ;
lamexp_finalization ( ) ;
return iResult ;
# else
2010-11-06 23:04:47 +01:00
try
{
2011-03-08 01:12:40 +01:00
int iResult = - 1 ;
2010-11-06 23:04:47 +01:00
qInstallMsgHandler ( lamexp_message_handler ) ;
2010-12-03 23:01:17 +01:00
iResult = lamexp_main ( argc , argv ) ;
2010-11-06 23:04:47 +01:00
lamexp_finalization ( ) ;
return iResult ;
}
catch ( char * error )
{
fflush ( stdout ) ;
fflush ( stderr ) ;
2010-12-22 01:01:01 +01:00
fprintf ( stderr , " \n GURU MEDITATION: %s \n " , error ) ;
2010-11-06 23:04:47 +01:00
FatalAppExit ( 0 , L " Unhandeled exception error, application will exit! " ) ;
TerminateProcess ( GetCurrentProcess ( ) , - 1 ) ;
}
catch ( int error )
{
fflush ( stdout ) ;
fflush ( stderr ) ;
2010-12-22 01:01:01 +01:00
fprintf ( stderr , " \n GURU MEDITATION: Error code 0x%X \n " , error ) ;
2010-11-06 23:04:47 +01:00
FatalAppExit ( 0 , L " Unhandeled exception error, application will exit! " ) ;
TerminateProcess ( GetCurrentProcess ( ) , - 1 ) ;
}
catch ( . . . )
{
fflush ( stdout ) ;
fflush ( stderr ) ;
2010-12-22 01:01:01 +01:00
fprintf ( stderr , " \n GURU MEDITATION !!! \n " ) ;
2010-11-06 23:04:47 +01:00
FatalAppExit ( 0 , L " Unhandeled exception error, application will exit! " ) ;
TerminateProcess ( GetCurrentProcess ( ) , - 1 ) ;
}
2010-12-03 23:01:17 +01:00
# endif
2010-11-06 23:04:47 +01:00
}
2011-03-04 23:40:09 +01:00
extern " C "
{
void __declspec ( dllexport ) __stdcall Test ( HWND hwnd , HINSTANCE hinst , LPSTR lpszCmdLine , int nCmdShow )
{
2011-03-05 01:56:00 +01:00
OutputDebugStringA ( lpszCmdLine ) ;
2011-03-05 03:51:12 +01:00
MessageBoxA ( 0 , lpszCmdLine , " LameXP is here! " , MB_ICONINFORMATION ) ;
2011-03-04 23:40:09 +01:00
}
2011-03-05 01:56:00 +01:00
}