Fixes #613 (multiplayer failing due to folder not existing)

This commit is contained in:
James Seibel
2024-01-17 07:44:58 -06:00
parent e61f6bb802
commit b0c2874e71
3 changed files with 37 additions and 33 deletions
@@ -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.
@@ -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
{
@@ -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); }