2016-08-14 01:33:31 +01:00
# include "Env.h"
# include "LibrariesTask.h"
2017-07-24 08:01:37 +01:00
# include "minecraft/MinecraftInstance.h"
2017-10-11 22:04:24 +01:00
# include "minecraft/ComponentList.h"
2016-08-14 01:33:31 +01:00
2017-07-24 08:01:37 +01:00
LibrariesTask : : LibrariesTask ( MinecraftInstance * inst )
2016-08-14 01:33:31 +01:00
{
2018-07-15 13:51:05 +01:00
m_inst = inst ;
2016-08-14 01:33:31 +01:00
}
void LibrariesTask : : executeTask ( )
{
2018-07-15 13:51:05 +01:00
setStatus ( tr ( " Getting the library files from Mojang... " ) ) ;
qDebug ( ) < < m_inst - > name ( ) < < " : downloading libraries " ;
MinecraftInstance * inst = ( MinecraftInstance * ) m_inst ;
2016-08-14 01:33:31 +01:00
2018-07-15 13:51:05 +01:00
// Build a list of URLs that will need to be downloaded.
auto components = inst - > getComponentList ( ) ;
auto profile = components - > getProfile ( ) ;
2016-08-14 01:33:31 +01:00
2018-07-15 13:51:05 +01:00
auto job = new NetJob ( tr ( " Libraries for instance %1 " ) . arg ( inst - > name ( ) ) ) ;
downloadJob . reset ( job ) ;
2016-08-14 01:33:31 +01:00
2018-07-15 13:51:05 +01:00
auto metacache = ENV . metacache ( ) ;
2018-11-26 02:06:58 +00:00
2018-11-26 08:57:51 +00:00
auto processArtifactPool = [ & ] ( const QList < LibraryPtr > & pool , QStringList & errors , const QString & localPath )
2018-07-15 13:51:05 +01:00
{
2018-11-26 08:57:51 +00:00
for ( auto lib : pool )
2018-07-15 13:51:05 +01:00
{
2018-11-26 08:57:51 +00:00
if ( ! lib )
{
emitFailed ( tr ( " Null jar is specified in the metadata, aborting. " ) ) ;
return false ;
}
auto dls = lib - > getDownloads ( currentSystem , metacache . get ( ) , errors , localPath ) ;
for ( auto dl : dls )
{
downloadJob - > addNetAction ( dl ) ;
}
2018-07-15 13:51:05 +01:00
}
2018-11-26 08:57:51 +00:00
return true ;
} ;
2017-04-06 22:31:23 +01:00
2018-11-26 08:57:51 +00:00
QStringList failedLocalLibraries ;
QList < LibraryPtr > libArtifactPool ;
libArtifactPool . append ( profile - > getLibraries ( ) ) ;
libArtifactPool . append ( profile - > getNativeLibraries ( ) ) ;
libArtifactPool . append ( profile - > getMainJar ( ) ) ;
processArtifactPool ( libArtifactPool , failedLocalLibraries , inst - > getLocalLibraryPath ( ) ) ;
QStringList failedLocalJarMods ;
2018-12-05 23:33:49 +00:00
processArtifactPool ( profile - > getJarMods ( ) , failedLocalJarMods , inst - > jarModsDir ( ) ) ;
2018-11-26 08:57:51 +00:00
if ( ! failedLocalJarMods . empty ( ) | | ! failedLocalLibraries . empty ( ) )
2018-07-15 13:51:05 +01:00
{
downloadJob . reset ( ) ;
2018-11-26 08:57:51 +00:00
QString failed_all = ( failedLocalLibraries + failedLocalJarMods ) . join ( " \n " ) ;
emitFailed ( tr ( " Some artifacts marked as 'local' are missing their files: \n %1 \n \n You need to either add the files, or removed the packages that requires them. \n You'll have to correct this problem manually. " ) . arg ( failed_all ) ) ;
2018-07-15 13:51:05 +01:00
return ;
}
2018-11-26 08:57:51 +00:00
2018-07-15 13:51:05 +01:00
connect ( downloadJob . get ( ) , & NetJob : : succeeded , this , & LibrariesTask : : emitSucceeded ) ;
connect ( downloadJob . get ( ) , & NetJob : : failed , this , & LibrariesTask : : jarlibFailed ) ;
connect ( downloadJob . get ( ) , & NetJob : : progress , this , & LibrariesTask : : progress ) ;
downloadJob - > start ( ) ;
2016-08-14 01:33:31 +01:00
}
bool LibrariesTask : : canAbort ( ) const
{
2018-07-15 13:51:05 +01:00
return true ;
2016-08-14 01:33:31 +01:00
}
void LibrariesTask : : jarlibFailed ( QString reason )
{
2018-07-15 13:51:05 +01:00
emitFailed ( tr ( " Game update failed: it was impossible to fetch the required libraries. \n Reason: \n %1 " ) . arg ( reason ) ) ;
2016-08-14 01:33:31 +01:00
}
bool LibrariesTask : : abort ( )
{
2018-07-15 13:51:05 +01:00
if ( downloadJob )
{
return downloadJob - > abort ( ) ;
}
else
{
qWarning ( ) < < " Prematurely aborted LibrariesTask " ;
}
return true ;
2016-08-14 01:33:31 +01:00
}