Moderate code cleanup
This commit is contained in:
parent
7528ec271a
commit
ad6d87a4bf
4 changed files with 81 additions and 79 deletions
|
@ -107,15 +107,15 @@ public class FTLModManager {
|
||||||
boolean writeConfig = false;
|
boolean writeConfig = false;
|
||||||
Properties props = new Properties();
|
Properties props = new Properties();
|
||||||
props.setProperty( SlipstreamConfig.ALLOW_ZIP, "false" );
|
props.setProperty( SlipstreamConfig.ALLOW_ZIP, "false" );
|
||||||
props.setProperty( SlipstreamConfig.FTL_DATS_PATH, "" ); // Prompt.
|
props.setProperty( SlipstreamConfig.FTL_DATS_PATH, "" ); // Prompt.
|
||||||
props.setProperty( SlipstreamConfig.STEAM_DISTRO, "" ); // Prompt.
|
props.setProperty( SlipstreamConfig.STEAM_DISTRO, "" ); // Prompt.
|
||||||
props.setProperty( SlipstreamConfig.STEAM_EXE_PATH, "" ); // Prompt.
|
props.setProperty( SlipstreamConfig.STEAM_EXE_PATH, "" ); // Prompt.
|
||||||
props.setProperty( SlipstreamConfig.RUN_STEAM_FTL, "" ); // Prompt.
|
props.setProperty( SlipstreamConfig.RUN_STEAM_FTL, "" ); // Prompt.
|
||||||
props.setProperty( SlipstreamConfig.NEVER_RUN_FTL, "false" );
|
props.setProperty( SlipstreamConfig.NEVER_RUN_FTL, "false" );
|
||||||
|
props.setProperty( SlipstreamConfig.UPDATE_CATALOG, "" ); // Prompt.
|
||||||
|
props.setProperty( SlipstreamConfig.UPDATE_APP, "" ); // Prompt.
|
||||||
props.setProperty( SlipstreamConfig.USE_DEFAULT_UI, "false" );
|
props.setProperty( SlipstreamConfig.USE_DEFAULT_UI, "false" );
|
||||||
props.setProperty( SlipstreamConfig.REMEMBER_GEOMETRY, "true" );
|
props.setProperty( SlipstreamConfig.REMEMBER_GEOMETRY, "true" );
|
||||||
// "update_catalog" doesn't have a default.
|
|
||||||
// "update_app" doesn't have a default.
|
|
||||||
// "manager_geometry" doesn't have a default.
|
// "manager_geometry" doesn't have a default.
|
||||||
|
|
||||||
// Read the config file.
|
// Read the config file.
|
||||||
|
|
|
@ -95,7 +95,7 @@ public class SlipstreamConfig {
|
||||||
|
|
||||||
List<String> allFieldsList = new ArrayList<String>( userFieldsMap.size() + appFieldsMap.size() );
|
List<String> allFieldsList = new ArrayList<String>( userFieldsMap.size() + appFieldsMap.size() );
|
||||||
allFieldsList.addAll( userFieldsMap.keySet() );
|
allFieldsList.addAll( userFieldsMap.keySet() );
|
||||||
allFieldsList.addAll( userFieldsMap.keySet() );
|
allFieldsList.addAll( appFieldsMap.keySet() );
|
||||||
int fieldWidth = 0;
|
int fieldWidth = 0;
|
||||||
for ( String fieldName : allFieldsList ) {
|
for ( String fieldName : allFieldsList ) {
|
||||||
fieldWidth = Math.max( fieldName.length(), fieldWidth );
|
fieldWidth = Math.max( fieldName.length(), fieldWidth );
|
||||||
|
|
|
@ -405,20 +405,20 @@ public class ManagerFrame extends JFrame implements ActionListener, ModsScanObse
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extra initialization that must be called after the constructor.
|
* Extra initialization that must be called after the constructor.
|
||||||
* This must be called on the Swing event thread (use invokeLater()).
|
|
||||||
*/
|
*/
|
||||||
public void init() {
|
public void init() {
|
||||||
|
|
||||||
ManagerInitThread initThread = new ManagerInitThread( this,
|
ManagerInitThread initThread = new ManagerInitThread(
|
||||||
new SlipstreamConfig( appConfig ),
|
this,
|
||||||
modsDir,
|
new SlipstreamConfig( appConfig ),
|
||||||
modsTableStateFile,
|
modsDir,
|
||||||
metadataFile,
|
modsTableStateFile,
|
||||||
catalogFile,
|
metadataFile,
|
||||||
catalogETagFile,
|
catalogFile,
|
||||||
appUpdateFile,
|
catalogETagFile,
|
||||||
appUpdateETagFile
|
appUpdateFile,
|
||||||
);
|
appUpdateETagFile
|
||||||
|
);
|
||||||
initThread.setDaemon( true );
|
initThread.setDaemon( true );
|
||||||
initThread.setPriority( Thread.MIN_PRIORITY );
|
initThread.setPriority( Thread.MIN_PRIORITY );
|
||||||
initThread.setDefaultUncaughtExceptionHandler( this );
|
initThread.setDefaultUncaughtExceptionHandler( this );
|
||||||
|
@ -551,7 +551,7 @@ public class ManagerFrame extends JFrame implements ActionListener, ModsScanObse
|
||||||
// Links.
|
// Links.
|
||||||
infoArea.appendRegularText( String.format( "Version %s: ", appUpdateInfo.getLatestVersion().toString() ) );
|
infoArea.appendRegularText( String.format( "Version %s: ", appUpdateInfo.getLatestVersion().toString() ) );
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
for ( Map.Entry<String,String> entry : appUpdateInfo.getLatestURLs().entrySet() ) {
|
for ( Map.Entry<String, String> entry : appUpdateInfo.getLatestURLs().entrySet() ) {
|
||||||
if ( !first ) infoArea.appendRegularText( " " );
|
if ( !first ) infoArea.appendRegularText( " " );
|
||||||
infoArea.appendRegularText( "[" );
|
infoArea.appendRegularText( "[" );
|
||||||
infoArea.appendLinkText( entry.getValue(), entry.getKey() );
|
infoArea.appendLinkText( entry.getValue(), entry.getKey() );
|
||||||
|
@ -569,7 +569,7 @@ public class ManagerFrame extends JFrame implements ActionListener, ModsScanObse
|
||||||
}
|
}
|
||||||
|
|
||||||
// Changelog.
|
// Changelog.
|
||||||
for ( Map.Entry<ComparableVersion,List<String>> entry : appUpdateInfo.getChangelog().entrySet() ) {
|
for ( Map.Entry<ComparableVersion, List<String>> entry : appUpdateInfo.getChangelog().entrySet() ) {
|
||||||
if ( appVersion.compareTo( entry.getKey() ) >= 0 ) break;
|
if ( appVersion.compareTo( entry.getKey() ) >= 0 ) break;
|
||||||
|
|
||||||
if ( buf.length() > 0 ) buf.append( "\n" );
|
if ( buf.length() > 0 ) buf.append( "\n" );
|
||||||
|
@ -1032,32 +1032,20 @@ public class ManagerFrame extends JFrame implements ActionListener, ModsScanObse
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the ModDB for the catalog. (thread-safe)
|
* Sets the ModDB for the catalog.
|
||||||
*/
|
*/
|
||||||
public void setCatalogModDB( final ModDB newDB ) {
|
public void setCatalogModDB( ModDB newDB ) {
|
||||||
Runnable r = new Runnable() {
|
catalogModDB = newDB;
|
||||||
@Override
|
|
||||||
public void run() { catalogModDB = newDB; }
|
|
||||||
};
|
|
||||||
if ( SwingUtilities.isEventDispatchThread() ) r.run();
|
|
||||||
else SwingUtilities.invokeLater( r );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets info about available app updates. (thread-safe)
|
* Sets info about available app updates.
|
||||||
*/
|
*/
|
||||||
public void setAppUpdateInfo( final AutoUpdateInfo aui ) {
|
public void setAppUpdateInfo( AutoUpdateInfo aui ) {
|
||||||
Runnable r = new Runnable() {
|
appUpdateInfo = aui;
|
||||||
@Override
|
boolean isUpdateAvailable = ( appVersion.compareTo(appUpdateInfo.getLatestVersion()) < 0 );
|
||||||
public void run() {
|
updateBtn.setForeground( isUpdateAvailable ? updateBtnEnabledColor : updateBtnDisabledColor );
|
||||||
appUpdateInfo = aui;
|
updateBtn.setEnabled( isUpdateAvailable );
|
||||||
boolean isUpdateAvailable = ( appVersion.compareTo(appUpdateInfo.getLatestVersion()) < 0 );
|
|
||||||
updateBtn.setForeground( isUpdateAvailable ? updateBtnEnabledColor : updateBtnDisabledColor );
|
|
||||||
updateBtn.setEnabled( isUpdateAvailable );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
if ( SwingUtilities.isEventDispatchThread() ) r.run();
|
|
||||||
else SwingUtilities.invokeLater( r );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@ import java.io.IOException;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.locks.Lock;
|
import java.util.concurrent.locks.Lock;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
|
@ -53,6 +52,7 @@ public class ManagerInitThread extends Thread {
|
||||||
|
|
||||||
|
|
||||||
public ManagerInitThread( ManagerFrame frame, SlipstreamConfig appConfig, File modsDir, File modsTableStateFile, File metadataFile, File catalogFile, File catalogETagFile, File appUpdateFile, File appUpdateETagFile ) {
|
public ManagerInitThread( ManagerFrame frame, SlipstreamConfig appConfig, File modsDir, File modsTableStateFile, File metadataFile, File catalogFile, File catalogETagFile, File appUpdateFile, File appUpdateETagFile ) {
|
||||||
|
super( "init" );
|
||||||
this.frame = frame;
|
this.frame = frame;
|
||||||
this.appConfig = appConfig;
|
this.appConfig = appConfig;
|
||||||
this.modsDir = modsDir;
|
this.modsDir = modsDir;
|
||||||
|
@ -77,6 +77,7 @@ public class ManagerInitThread extends Thread {
|
||||||
|
|
||||||
|
|
||||||
private void init() throws InterruptedException {
|
private void init() throws InterruptedException {
|
||||||
|
|
||||||
if ( metadataFile.exists() ) {
|
if ( metadataFile.exists() ) {
|
||||||
// Load cached metadata first, before scanning for new info.
|
// Load cached metadata first, before scanning for new info.
|
||||||
ModDB cachedDB = JacksonCatalogReader.parse( metadataFile );
|
ModDB cachedDB = JacksonCatalogReader.parse( metadataFile );
|
||||||
|
@ -105,27 +106,24 @@ public class ManagerInitThread extends Thread {
|
||||||
int catalogUpdateInterval = appConfig.getPropertyAsInt( "update_catalog", 0 );
|
int catalogUpdateInterval = appConfig.getPropertyAsInt( "update_catalog", 0 );
|
||||||
boolean needNewCatalog = false;
|
boolean needNewCatalog = false;
|
||||||
|
|
||||||
if ( catalogFile.exists() ) {
|
// Load the catalog first, before downloading.
|
||||||
// Load the catalog first, before updating.
|
if ( catalogFile.exists() ) reloadCatalog();
|
||||||
reloadCatalog();
|
|
||||||
|
|
||||||
if ( catalogUpdateInterval > 0 ) {
|
if ( catalogUpdateInterval > 0 ) {
|
||||||
|
if ( catalogFile.exists() ) {
|
||||||
// Check if the downloaded catalog is stale.
|
// Check if the downloaded catalog is stale.
|
||||||
if ( isFileStale( catalogFile, catalogUpdateInterval ) ) {
|
if ( isFileStale( catalogFile, catalogUpdateInterval ) ) {
|
||||||
log.debug( String.format( "Catalog is older than %d days.", catalogUpdateInterval ) );
|
log.debug( String.format( "Catalog is older than %d days", catalogUpdateInterval ) );
|
||||||
needNewCatalog = true;
|
needNewCatalog = true;
|
||||||
} else {
|
} else {
|
||||||
log.debug( "Catalog isn't stale yet." );
|
log.debug( "Catalog isn't stale yet" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
// Catalog file doesn't exist.
|
||||||
|
needNewCatalog = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
// Catalog file doesn't exist.
|
|
||||||
needNewCatalog = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Don't update if the user doesn't want to.
|
|
||||||
if ( catalogUpdateInterval <= 0 ) needNewCatalog = false;
|
|
||||||
|
|
||||||
if ( needNewCatalog ) {
|
if ( needNewCatalog ) {
|
||||||
boolean fetched = URLFetcher.refetchURL( ManagerFrame.CATALOG_URL, catalogFile, catalogETagFile );
|
boolean fetched = URLFetcher.refetchURL( ManagerFrame.CATALOG_URL, catalogFile, catalogETagFile );
|
||||||
|
@ -134,30 +132,27 @@ public class ManagerInitThread extends Thread {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int appUpdateInterval = appConfig.getPropertyAsInt( "update_app", 0 );
|
// Load the cached info first, before downloading.
|
||||||
|
if ( appUpdateFile.exists() ) reloadAppUpdateInfo();
|
||||||
|
|
||||||
|
int appUpdateInterval = appConfig.getPropertyAsInt( SlipstreamConfig.UPDATE_APP, 0 );
|
||||||
boolean needAppUpdate = false;
|
boolean needAppUpdate = false;
|
||||||
|
|
||||||
if ( appUpdateFile.exists() ) {
|
if ( appUpdateInterval > 0 ) {
|
||||||
// Load the info first, before downloading.
|
if ( appUpdateFile.exists() ) {
|
||||||
reloadAppUpdateInfo();
|
|
||||||
|
|
||||||
if ( appUpdateInterval > 0 ) {
|
|
||||||
// Check if the app update info is stale.
|
// Check if the app update info is stale.
|
||||||
if ( isFileStale( appUpdateFile, appUpdateInterval ) ) {
|
if ( isFileStale( appUpdateFile, appUpdateInterval ) ) {
|
||||||
log.debug( String.format( "App update info is older than %d days.", appUpdateInterval ) );
|
log.debug( String.format( "App update info is older than %d days", appUpdateInterval ) );
|
||||||
needAppUpdate = true;
|
needAppUpdate = true;
|
||||||
} else {
|
} else {
|
||||||
log.debug( "App update info isn't stale yet." );
|
log.debug( "App update info isn't stale yet" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
// App update file doesn't exist.
|
||||||
|
needAppUpdate = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
// App update file doesn't exist.
|
|
||||||
needAppUpdate = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Don't update if the user doesn't want to.
|
|
||||||
if ( appUpdateInterval <= 0 ) needAppUpdate = false;
|
|
||||||
|
|
||||||
if ( needAppUpdate ) {
|
if ( needAppUpdate ) {
|
||||||
boolean fetched = URLFetcher.refetchURL( ManagerFrame.APP_UPDATE_URL, appUpdateFile, appUpdateETagFile );
|
boolean fetched = URLFetcher.refetchURL( ManagerFrame.APP_UPDATE_URL, appUpdateFile, appUpdateETagFile );
|
||||||
|
@ -186,7 +181,7 @@ public class ManagerInitThread extends Thread {
|
||||||
catch ( FileNotFoundException e ) {
|
catch ( FileNotFoundException e ) {
|
||||||
}
|
}
|
||||||
catch ( IOException e ) {
|
catch ( IOException e ) {
|
||||||
log.error( String.format( "Error reading \"%s\".", modsTableStateFile.getName() ), e );
|
log.error( String.format( "Error reading \"%s\"", modsTableStateFile.getName() ), e );
|
||||||
fileNames.clear();
|
fileNames.clear();
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
|
@ -207,13 +202,27 @@ public class ManagerInitThread extends Thread {
|
||||||
|
|
||||||
|
|
||||||
private void reloadCatalog() {
|
private void reloadCatalog() {
|
||||||
ModDB currentDB = JacksonCatalogReader.parse( catalogFile );
|
final ModDB currentDB = JacksonCatalogReader.parse( catalogFile );
|
||||||
if ( currentDB != null ) frame.setCatalogModDB( currentDB );
|
if ( currentDB != null ) {
|
||||||
|
SwingUtilities.invokeLater(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
frame.setCatalogModDB( currentDB );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reloadAppUpdateInfo() {
|
private void reloadAppUpdateInfo() {
|
||||||
AutoUpdateInfo aui = JacksonAutoUpdateReader.parse( appUpdateFile );
|
final AutoUpdateInfo aui = JacksonAutoUpdateReader.parse( appUpdateFile );
|
||||||
if ( aui != null ) frame.setAppUpdateInfo( aui );
|
if ( aui != null ) {
|
||||||
|
SwingUtilities.invokeLater(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
frame.setAppUpdateInfo( aui );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -221,9 +230,14 @@ public class ManagerInitThread extends Thread {
|
||||||
* Returns true if a file is older than N days.
|
* Returns true if a file is older than N days.
|
||||||
*/
|
*/
|
||||||
private boolean isFileStale( File f, int maxDays ) {
|
private boolean isFileStale( File f, int maxDays ) {
|
||||||
Date modifiedDate = new Date( f.lastModified() );
|
Calendar fileCal = Calendar.getInstance();
|
||||||
Calendar cal = Calendar.getInstance();
|
fileCal.setTimeInMillis( f.lastModified() );
|
||||||
cal.add( Calendar.DATE, maxDays * -1 );
|
fileCal.getTimeInMillis(); // Re-calculate calendar fields.
|
||||||
return modifiedDate.before( cal.getTime() );
|
|
||||||
|
Calendar freshCal = Calendar.getInstance();
|
||||||
|
freshCal.add( Calendar.DATE, maxDays * -1 );
|
||||||
|
freshCal.getTimeInMillis(); // Re-calculate calendar fields.
|
||||||
|
|
||||||
|
return (fileCal.compareTo( freshCal ) < 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue