fix NPE and codec issues

This commit is contained in:
Taah
2022-05-28 19:12:18 -07:00
parent d0b1d09f38
commit 9f19bd14ca
5 changed files with 74 additions and 24 deletions

View File

@ -1,5 +1,8 @@
package dev.plex.storage;
import com.mongodb.ConnectionString;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoClientSettings;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import dev.morphia.Datastore;
@ -7,7 +10,9 @@ import dev.morphia.Morphia;
import dev.morphia.mapping.MapperOptions;
import dev.plex.PlexBase;
import dev.plex.player.PlexPlayer;
import dev.plex.storage.codec.ZonedDateTimeCodec;
import dev.plex.util.PlexLog;
import org.bson.codecs.configuration.CodecRegistries;
public class MongoConnection implements PlexBase
{
@ -42,7 +47,7 @@ public class MongoConnection implements PlexBase
connectionString = "mongodb://" + host + ":" + port + "/?uuidRepresentation=STANDARD";
}
PlexLog.debug("Using mongo connection string: " + connectionString);
MongoClient client = MongoClients.create(connectionString);
MongoClient client = MongoClients.create(MongoClientSettings.builder().codecRegistry(CodecRegistries.fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), CodecRegistries.fromCodecs(new ZonedDateTimeCodec()))).applyConnectionString(new ConnectionString(connectionString)).build());
Datastore datastore = Morphia.createDatastore(client, database == null ? "admin" : database, MapperOptions.DEFAULT);
datastore.getMapper().map(PlexPlayer.class);
datastore.ensureIndexes();

View File

@ -0,0 +1,39 @@
package dev.plex.storage.codec;
import org.bson.BsonReader;
import org.bson.BsonWriter;
import org.bson.codecs.Codec;
import org.bson.codecs.DecoderContext;
import org.bson.codecs.EncoderContext;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import static dev.plex.util.TimeUtils.TIMEZONE;
/**
* @author Taah
* @project Plex
* @since 6:53 PM [28-05-2022]
*/
public class ZonedDateTimeCodec implements Codec<ZonedDateTime>
{
@Override
public ZonedDateTime decode(BsonReader reader, DecoderContext decoderContext)
{
return ZonedDateTime.ofInstant(Instant.ofEpochMilli(reader.readDateTime()), ZoneId.of(TIMEZONE));
}
@Override
public void encode(BsonWriter writer, ZonedDateTime value, EncoderContext encoderContext)
{
writer.writeDateTime(value.toInstant().toEpochMilli());
}
@Override
public Class<ZonedDateTime> getEncoderClass()
{
return ZonedDateTime.class;
}
}