Fixes #613 (multiplayer failing due to folder not existing)
This commit is contained in:
+6
-3
@@ -62,8 +62,8 @@ public abstract class AbstractDataSourceHandler<TDataSource extends IDataSource<
|
||||
// constructor //
|
||||
//=============//
|
||||
|
||||
public AbstractDataSourceHandler(TDhLevel level, AbstractSaveStructure saveStructure, AbstractDataSourceRepo repo) { this(level, saveStructure, repo, null); }
|
||||
public AbstractDataSourceHandler(TDhLevel level, AbstractSaveStructure saveStructure, AbstractDataSourceRepo repo, @Nullable File saveDirOverride)
|
||||
public AbstractDataSourceHandler(TDhLevel level, AbstractSaveStructure saveStructure) { this(level, saveStructure, null); }
|
||||
public AbstractDataSourceHandler(TDhLevel level, AbstractSaveStructure saveStructure, @Nullable File saveDirOverride)
|
||||
{
|
||||
this.level = level;
|
||||
this.saveDir = (saveDirOverride == null) ? saveStructure.getFullDataFolder(level.getLevelWrapper()) : saveDirOverride;
|
||||
@@ -83,7 +83,7 @@ public abstract class AbstractDataSourceHandler<TDataSource extends IDataSource<
|
||||
this.queueSaveLockArray[i] = new ReentrantLock();
|
||||
}
|
||||
|
||||
this.repo = repo;
|
||||
this.repo = this.createRepo();
|
||||
|
||||
// determine the top detail level currently in the database
|
||||
int maxSectionDetailLevel = this.repo.getMaxSectionDetailLevel();
|
||||
@@ -97,6 +97,9 @@ public abstract class AbstractDataSourceHandler<TDataSource extends IDataSource<
|
||||
// abstract methods //
|
||||
//==================//
|
||||
|
||||
/** When this is called the parent folders should be created */
|
||||
protected abstract AbstractDataSourceRepo createRepo();
|
||||
|
||||
protected abstract TDataSource createDataSourceFromDto(DataSourceDto dto) throws InterruptedException, IOException;
|
||||
/**
|
||||
* Creates a new data source using any DTOs already present in the database.
|
||||
|
||||
+12
-14
@@ -31,6 +31,7 @@ import com.seibel.distanthorizons.core.level.IDhLevel;
|
||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||
import com.seibel.distanthorizons.core.pos.DhSectionPos;
|
||||
import com.seibel.distanthorizons.core.render.renderer.DebugRenderer;
|
||||
import com.seibel.distanthorizons.core.sql.AbstractDataSourceRepo;
|
||||
import com.seibel.distanthorizons.core.sql.FullDataRepo;
|
||||
import com.seibel.distanthorizons.core.sql.DataSourceDto;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
@@ -53,17 +54,20 @@ public class FullDataFileHandler extends AbstractDataSourceHandler<IFullDataSour
|
||||
//=============//
|
||||
|
||||
public FullDataFileHandler(IDhLevel level, AbstractSaveStructure saveStructure) { this(level, saveStructure, null); }
|
||||
public FullDataFileHandler(IDhLevel level, AbstractSaveStructure saveStructure, @Nullable File saveDirOverride)
|
||||
public FullDataFileHandler(IDhLevel level, AbstractSaveStructure saveStructure, @Nullable File saveDirOverride) { super(level, saveStructure, saveDirOverride); }
|
||||
|
||||
|
||||
|
||||
//====================//
|
||||
// Abstract overrides //
|
||||
//====================//
|
||||
|
||||
@Override
|
||||
protected AbstractDataSourceRepo createRepo()
|
||||
{
|
||||
super(level, saveStructure, createRepo(level, saveStructure), saveDirOverride);
|
||||
}
|
||||
private static FullDataRepo createRepo(IDhLevel level, AbstractSaveStructure saveStructure)
|
||||
{
|
||||
File saveDir = saveStructure.getFullDataFolder(level.getLevelWrapper());
|
||||
|
||||
try
|
||||
{
|
||||
return new FullDataRepo("jdbc:sqlite", saveDir.getPath() + "/" + AbstractSaveStructure.DATABASE_NAME);
|
||||
return new FullDataRepo("jdbc:sqlite", this.saveDir.getPath() + "/" + AbstractSaveStructure.DATABASE_NAME);
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
@@ -73,12 +77,6 @@ public class FullDataFileHandler extends AbstractDataSourceHandler<IFullDataSour
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//====================//
|
||||
// Abstract overrides //
|
||||
//====================//
|
||||
|
||||
@Override
|
||||
protected IFullDataSource createDataSourceFromDto(DataSourceDto dto) throws InterruptedException, IOException
|
||||
{
|
||||
|
||||
+19
-16
@@ -25,13 +25,16 @@ import com.seibel.distanthorizons.core.dataObjects.render.ColumnRenderSourceLoad
|
||||
import com.seibel.distanthorizons.core.dataObjects.transformers.FullDataToRenderDataTransformer;
|
||||
import com.seibel.distanthorizons.core.file.AbstractDataSourceHandler;
|
||||
import com.seibel.distanthorizons.core.file.structure.AbstractSaveStructure;
|
||||
import com.seibel.distanthorizons.core.level.IDhLevel;
|
||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||
import com.seibel.distanthorizons.core.logging.f3.F3Screen;
|
||||
import com.seibel.distanthorizons.core.pos.DhSectionPos;
|
||||
import com.seibel.distanthorizons.core.dataObjects.render.ColumnRenderSource;
|
||||
import com.seibel.distanthorizons.core.file.fullDatafile.IFullDataSourceProvider;
|
||||
import com.seibel.distanthorizons.core.level.IDhClientLevel;
|
||||
import com.seibel.distanthorizons.core.sql.AbstractDataSourceRepo;
|
||||
import com.seibel.distanthorizons.core.sql.DataSourceDto;
|
||||
import com.seibel.distanthorizons.core.sql.FullDataRepo;
|
||||
import com.seibel.distanthorizons.core.sql.RenderDataRepo;
|
||||
import com.seibel.distanthorizons.core.util.threading.ThreadPools;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
@@ -58,26 +61,11 @@ public class RenderSourceFileHandler extends AbstractDataSourceHandler<ColumnRen
|
||||
|
||||
public RenderSourceFileHandler(IFullDataSourceProvider sourceProvider, IDhClientLevel clientLevel, AbstractSaveStructure saveStructure)
|
||||
{
|
||||
super(clientLevel, saveStructure, createRepo(clientLevel, saveStructure));
|
||||
super(clientLevel, saveStructure);
|
||||
|
||||
this.fullDataSourceProvider = sourceProvider;
|
||||
this.threadPoolMsg = new F3Screen.NestedMessage(this::f3Log);
|
||||
}
|
||||
private static RenderDataRepo createRepo(IDhClientLevel clientLevel, AbstractSaveStructure saveStructure)
|
||||
{
|
||||
File saveDir = saveStructure.getRenderCacheFolder(clientLevel.getLevelWrapper());
|
||||
|
||||
try
|
||||
{
|
||||
return new RenderDataRepo("jdbc:sqlite", saveDir.getPath() + "/" + AbstractSaveStructure.DATABASE_NAME);
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
// should only happen if there is an issue with the database (it's locked or can't be created if missing)
|
||||
// or the database update failed
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -100,6 +88,21 @@ public class RenderSourceFileHandler extends AbstractDataSourceHandler<ColumnRen
|
||||
// Abstract overrides //
|
||||
//====================//
|
||||
|
||||
@Override
|
||||
protected AbstractDataSourceRepo createRepo()
|
||||
{
|
||||
try
|
||||
{
|
||||
return new RenderDataRepo("jdbc:sqlite", this.saveDir.getPath() + "/" + AbstractSaveStructure.DATABASE_NAME);
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
// should only happen if there is an issue with the database (it's locked or can't be created if missing)
|
||||
// or the database update failed
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ColumnRenderSource createDataSourceFromDto(DataSourceDto dto) throws InterruptedException, IOException
|
||||
{ return ColumnRenderSourceLoader.INSTANCE.loadRenderSource(dto, dto.getInputStream(), this.level); }
|
||||
|
||||
Reference in New Issue
Block a user