Skip to content

Commit

Permalink
Merge branch 'release/0.11.6'
Browse files Browse the repository at this point in the history
  • Loading branch information
Kruptein committed Nov 11, 2018
2 parents 7868065 + 3051fd6 commit 79e168c
Show file tree
Hide file tree
Showing 14 changed files with 153 additions and 58 deletions.
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,21 @@ All notable changes to this project will be documented in this file.

## Unreleased

## 0.11.6

A collection of small improvements and fixes.

### Added
- host option in server_config.cfg [Issue 99]

### Changed
- GridLayer.size from IntegerField to FloatField [Issue 105]
- Location.unit_size from IntegerField to FloatField [Issue 105]

### Fixed
- Tokens appear as black/red with all lighting settings disabled [Issues 90/91]
- Trackers and Auras were not saved server side. [Issue 106]

## 0.11.5

Hotfixes for 0.10.0
Expand Down
2 changes: 1 addition & 1 deletion PlanarAlly/VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.11.5
0.11.6
65 changes: 49 additions & 16 deletions PlanarAlly/api/shape.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,17 @@ async def add_shape(sid, data):
shape = Shape.create(**reduce_data_to_model(Shape, data["shape"]))
# Subshape
type_table = get_table(shape.type_)
type_table.create(**reduce_data_to_model(type_table, data["shape"]))
type_table.create(
**reduce_data_to_model(type_table, data["shape"]))
# Owners
ShapeOwner.create(shape=shape, user=user)
# Trackers
for tracker in data["shape"]["trackers"]:
Tracker.create(**reduce_data_to_model(Tracker, tracker))
Tracker.create(
**reduce_data_to_model(Tracker, tracker), shape=shape)
# Auras
for aura in data["shape"]["auras"]:
Aura.create(**reduce_data_to_model(Aura, aura))
Aura.create(**reduce_data_to_model(Aura, aura), shape=shape)

if layer.player_visible:
for room_player in room.players:
Expand Down Expand Up @@ -90,16 +92,19 @@ async def update_shape(sid, data):
# Ownership validatation
if room.creator != user:
if not layer.player_editable:
logger.warning(f"{user.name} attempted to move a shape on a dm layer")
logger.warning(
f"{user.name} attempted to move a shape on a dm layer")
return

if data["temporary"]:
if user.name not in shape["owners"]:
logger.warning(f"{user.name} attempted to move asset it does not own")
logger.warning(
f"{user.name} attempted to move asset it does not own")
return
else:
if not ShapeOwner.get_or_none(shape=shape, user=user):
logger.warning(f"{user.name} attempted to move asset it does not own")
logger.warning(
f"{user.name} attempted to move asset it does not own")
return

# Overwrite the old data with the new data
Expand All @@ -108,15 +113,18 @@ async def update_shape(sid, data):
data["shape"]["layer"] = Layer.get(
location=location, name=data["shape"]["layer"]
)
# Otherwise backrefs can cause errors as they need to be handled separately
update_model_from_dict(shape, reduce_data_to_model(Shape, data["shape"]))
# Shape
update_model_from_dict(
shape, reduce_data_to_model(Shape, data["shape"]))
shape.save()
# Subshape
type_table = get_table(shape.type_)
type_instance = type_table.get(uuid=shape.uuid)
# no backrefs on these tables
update_model_from_dict(type_instance, data["shape"], ignore_unknown=True)
update_model_from_dict(
type_instance, data["shape"], ignore_unknown=True)
type_instance.save()

# Owners
old_owners = {owner.user.name for owner in shape.owners}
new_owners = set(data["shape"]["owners"])
for owner in old_owners ^ new_owners:
Expand All @@ -126,8 +134,29 @@ async def update_shape(sid, data):
if owner in new_owners:
ShapeOwner.create(shape=shape, user=delta_owner)
else:
ShapeOwner.get(shape=shape, user=delta_owner).delete_instance(True)
ShapeOwner.get(
shape=shape, user=delta_owner).delete_instance(True)
await send_client_initiatives(room, location, delta_owner)
# Trackers
for tracker in data["shape"]["trackers"]:
tracker_db = Tracker.get_or_none(uuid=tracker['uuid'])
reduced = reduce_data_to_model(Tracker, tracker)
reduced['shape'] = shape
if tracker_db:
update_model_from_dict(tracker_db, reduced)
tracker_db.save()
else:
Tracker.create(**reduced)
# Auras
for aura in data["shape"]["auras"]:
aura_db = Aura.get_or_none(uuid=aura['uuid'])
reduced = reduce_data_to_model(Aura, aura)
reduced['shape'] = shape
if aura_db:
update_model_from_dict(aura_db, reduced)
aura_db.save()
else:
Aura.create(**reduced)

# Send to players
if layer.player_visible:
Expand Down Expand Up @@ -173,22 +202,25 @@ async def remove_shape(sid, data):
# Ownership validatation
if room.creator != user:
if not layer.player_editable:
logger.warning(f"{user.name} attempted to remove a shape on a dm layer")
logger.warning(
f"{user.name} attempted to remove a shape on a dm layer")
return

if data["temporary"]:
if user.name not in shape["owners"]:
logger.warning(f"{user.name} attempted to remove asset it does not own")
logger.warning(
f"{user.name} attempted to remove asset it does not own")
return
else:
if not ShapeOwner.get_or_none(shape=shape, user=user):
logger.warning(f"{user.name} attempted to remove asset it does not own")
logger.warning(
f"{user.name} attempted to remove asset it does not own")
return

if data["temporary"]:
state.remove_temp(sid, data["shape"]["uuid"])
else:
shape.delete_instance()
shape.delete_instance(True)

if layer.player_visible:
await sio.emit(
Expand Down Expand Up @@ -245,7 +277,8 @@ async def move_shape_order(sid, data):
layer = shape.layer

if room.creator != user and not layer.player_editable:
logger.warning(f"{user.name} attempted to move a shape order on a dm layer")
logger.warning(
f"{user.name} attempted to move a shape order on a dm layer")
return

target = data["index"] + 1
Expand Down
13 changes: 8 additions & 5 deletions PlanarAlly/models/campaign.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@

class Room(BaseModel):
name = TextField()
creator = ForeignKeyField(User, backref="rooms_created", on_delete="CASCADE")
creator = ForeignKeyField(
User, backref="rooms_created", on_delete="CASCADE")
invitation_code = TextField(default=uuid.uuid4, unique=True)
player_location = TextField(null=True)
dm_location = TextField(null=True)
Expand Down Expand Up @@ -58,7 +59,7 @@ def __repr__(self):
class Location(BaseModel):
room = ForeignKeyField(Room, backref="locations", on_delete="CASCADE")
name = TextField()
unit_size = IntegerField(default=5)
unit_size = FloatField(default=5)
use_grid = BooleanField(default=True)
full_fow = BooleanField(default=False)
fow_opacity = FloatField(default=0.3)
Expand Down Expand Up @@ -121,8 +122,10 @@ class Meta:


class LocationUserOption(BaseModel):
location = ForeignKeyField(Location, backref="user_options", on_delete="CASCADE")
user = ForeignKeyField(User, backref="location_options", on_delete="CASCADE")
location = ForeignKeyField(
Location, backref="user_options", on_delete="CASCADE")
user = ForeignKeyField(
User, backref="location_options", on_delete="CASCADE")
pan_x = IntegerField(default=0)
pan_y = IntegerField(default=0)
zoom_factor = FloatField(default=1.0)
Expand Down Expand Up @@ -202,4 +205,4 @@ class Meta:


class GridLayer(BaseModel):
size = IntegerField(default=50)
size = FloatField(default=50)
8 changes: 5 additions & 3 deletions PlanarAlly/planarserver.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,12 @@ async def on_shutdown(_):

ctx = ssl.SSLContext()
ctx.load_cert_chain(
config["Webserver"]["ssl_fullchain"], config["Webserver"]["ssl_privkey"]
config.get("Webserver", "ssl_fullchain"), config.get(
"Webserver", "ssl_privkey")
)
web.run_app(app, port=config.getint(
web.run_app(app, host=config.get("Webserver", "host"), port=config.getint(
"Webserver", "port"), ssl_context=ctx)
else:
logger.warning(" RUNNING IN NON SSL CONTEXT ")
web.run_app(app, port=config.getint("Webserver", "port"))
web.run_app(app, host=config.get("Webserver", "host"),
port=config.getint("Webserver", "port"))
59 changes: 51 additions & 8 deletions PlanarAlly/save.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,48 @@
import logging
import os
import secrets
import shutil
import sys

from peewee import FloatField
from playhouse.migrate import *

from config import SAVE_FILE
from models import ALL_MODELS, Constants
from models.db import db

SAVE_VERSION = 3
SAVE_VERSION = 5
logger: logging.Logger = logging.getLogger("PlanarAllyServer")


def upgrade(version):
if version == 3:
from models import GridLayer
db.execute_sql(
"CREATE TEMPORARY TABLE _grid_layer AS SELECT * FROM grid_layer")
db.drop_tables([GridLayer])
db.create_tables([GridLayer])
db.execute_sql("INSERT INTO grid_layer SELECT * FROM _grid_layer")
Constants.update(save_version=Constants.save_version + 1).execute()
elif version == 4:
from models import Location
db.foreign_keys = False
db.execute_sql(
"CREATE TEMPORARY TABLE _location AS SELECT * FROM location")
db.execute_sql("DROP TABLE location")
db.create_tables([Location])
db.execute_sql("INSERT INTO location SELECT * FROM _location")
db.foreign_keys = True
Constants.update(save_version=Constants.save_version + 1).execute()
else:
raise Exception(
f"No upgrade code for save format {version} was found.")


def check_save():
if not os.path.isfile(SAVE_FILE):
logger.warning("Provided save file does not exist. Creating a new one.")
logger.warning(
"Provided save file does not exist. Creating a new one.")
db.create_tables(ALL_MODELS)
Constants.create(
save_version=SAVE_VERSION, secret_token=secrets.token_bytes(32)
Expand All @@ -27,9 +56,23 @@ def check_save():
sys.exit(2)
if constants.save_version != SAVE_VERSION:
logger.warning(
f"Save version {constants.save_version} does not match expected {SAVE_VERSION}!"
)
logger.info(
"Conversion scripts can potentially be applied to upgrade. For more information see the docs."
)
sys.exit(2)
f"Save format {constants.save_version} does not match the required version {SAVE_VERSION}!")
logger.warning("Attempting upgrade")
while constants.save_version != SAVE_VERSION:
logger.warning(
f"Backing up old save as {SAVE_FILE}.{constants.save_version}")
shutil.copyfile(SAVE_FILE, f"{SAVE_FILE}.{constants.save_version}")
logger.warning(f"Starting upgrade to {constants.save_version + 1}")
try:
upgrade(constants.save_version)
except Exception as e:
logger.warning(e)
logger.error("ERROR: Could not start server")
sys.exit(2)
break
else:
logger.warning(
f"Upgrade to {constants.save_version + 1} done.")
constants = Constants.get()
else:
logger.warning("Upgrade process completed successfully.")
1 change: 1 addition & 0 deletions PlanarAlly/server_config.cfg
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
[Webserver]
host = 0.0.0.0
port = 8000
ssl = false
# the ssl_ options are only required if ssl is set
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion PlanarAlly/templates/assets.jinja2
Original file line number Diff line number Diff line change
Expand Up @@ -69,5 +69,5 @@
<prompt ref="prompt"></prompt>
<confirm ref="confirm"></confirm>
</div>
<script type="text/javascript" src="/static/js/assets.45a2c924f4f1647c4a68.js"></script></body>
<script type="text/javascript" src="/static/js/assets.79bdc9531e9bf5445798.js"></script></body>
</html>
2 changes: 1 addition & 1 deletion PlanarAlly/templates/planarally.jinja2
Original file line number Diff line number Diff line change
Expand Up @@ -63,5 +63,5 @@
<prompt-dialog ref="prompt"></prompt-dialog>
<confirm-dialog ref="confirm"></confirm-dialog>
</div>
<script type="text/javascript" src="/static/js/planarally.45a2c924f4f1647c4a68.js"></script></body>
<script type="text/javascript" src="/static/js/planarally.79bdc9531e9bf5445798.js"></script></body>
</html>
26 changes: 11 additions & 15 deletions ts_src/assetManager/assets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,12 @@ const vm = new Vue({
},
computed: {
currentFolder(): number {
if (this.path.length)
return this.path[this.path.length - 1];
if (this.path.length) return this.path[this.path.length - 1];
return this.root;
},
parentFolder(): number {
let parent = this.path[this.path.length - 2]
if (parent === undefined)
parent = this.root;
let parent = this.path[this.path.length - 2];
if (parent === undefined) parent = this.root;
return parent;
},
firstSelectedFile(): Asset | null {
Expand All @@ -42,7 +40,7 @@ const vm = new Vue({
}
}
return null;
}
},
},
methods: {
isFile(inode: number): boolean {
Expand All @@ -61,10 +59,8 @@ const vm = new Vue({
}
},
moveInode(inode: number, target: number) {
if (this.isFile(inode))
this.files.splice(this.files.indexOf(inode), 1);
else
this.folders.splice(this.folders.indexOf(inode), 1);
if (this.isFile(inode)) this.files.splice(this.files.indexOf(inode), 1);
else this.folders.splice(this.folders.indexOf(inode), 1);
this.idMap.delete(inode);
socket.emit("Inode.Move", { inode, target });
},
Expand All @@ -73,8 +69,7 @@ const vm = new Vue({
const inodes = [...this.files, ...this.folders];
const start = inodes.indexOf(this.selected[this.selected.length - 1]);
const end = inodes.indexOf(inode);
for (let i = start; i !== end; start < end ? i++ : i--)
this.selected.push(inodes[i]);
for (let i = start; i !== end; start < end ? i++ : i--) this.selected.push(inodes[i]);
this.selected.push(inodes[end]);
} else {
if (!event.ctrlKey) {
Expand All @@ -84,7 +79,8 @@ const vm = new Vue({
}
},
startDrag(event: DragEvent, file: number) {
event.dataTransfer.setData('Hack', 'ittyHack');
if (event.dataTransfer === null) return;
event.dataTransfer.setData("Hack", "ittyHack");
event.dataTransfer.dropEffect = "move";
if (!this.selected.includes(file)) this.selected.push(file);
this.draggingSelection = true;
Expand All @@ -106,7 +102,7 @@ const vm = new Vue({
}
}
this.selected = [];
} else if (event.dataTransfer.files.length > 0) {
} else if (event.dataTransfer && event.dataTransfer.files.length > 0) {
this.upload(event.dataTransfer.files, target);
}
this.draggingSelection = false;
Expand Down Expand Up @@ -151,4 +147,4 @@ const vm = new Vue({
});

(<any>window).vm = vm;
export default vm;
export default vm;
Loading

0 comments on commit 79e168c

Please sign in to comment.