mirror of
https://github.com/arcan1s/ffxivbis.git
synced 2025-07-07 10:55:53 +00:00
Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
feea01a47e | |||
fcacd9f15c | |||
b2256784dd | |||
fee87ddbc8 | |||
dc882b74bf |
@ -6,17 +6,17 @@
|
|||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
<link href="/static/favicon.ico" rel="shortcut icon">
|
<link rel="shortcut icon" href="/static/favicon.ico">
|
||||||
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous" type="text/css">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous" type="text/css">
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css" type="text/css">
|
||||||
|
|
||||||
<link href="https://unpkg.com/bootstrap-table@1.19.1/dist/bootstrap-table.min.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="https://unpkg.com/bootstrap-table@1.19.1/dist/bootstrap-table.min.css" type="text/css">
|
||||||
|
|
||||||
|
|
||||||
<link href="https://unpkg.com/jquery-resizable-columns@0.2.3/dist/jquery.resizableColumns.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="https://unpkg.com/jquery-resizable-columns@0.2.3/dist/jquery.resizableColumns.css" type="text/css">
|
||||||
|
|
||||||
<link href="/static/styles.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="/static/styles.css" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
@ -86,23 +86,24 @@
|
|||||||
|
|
||||||
<div id="update-bis-dialog" tabindex="-1" role="dialog" class="modal fade">
|
<div id="update-bis-dialog" tabindex="-1" role="dialog" class="modal fade">
|
||||||
<div class="modal-dialog" role="document">
|
<div class="modal-dialog" role="document">
|
||||||
<form class="modal-content">
|
<form class="modal-content" action="javascript:" onsubmit="updateBis()">
|
||||||
<div class="modal-header">
|
<div class="modal-header form-group row">
|
||||||
<div class="btn-group" role="group" aria-label="Update bis">
|
<div class="btn-group" role="group" aria-label="Update bis">
|
||||||
<input id="add-piece-btn" name="update-bis" type="radio" class="btn-check" autocomplete="off" checked>
|
<input id="add-piece-btn" name="update-bis" type="radio" class="btn-check" autocomplete="off" checked>
|
||||||
<label class="btn btn-outline-primary" for="add-piece-btn">add piece</label>
|
<label class="btn btn-outline-primary" for="add-piece-btn">add piece</label>
|
||||||
|
|
||||||
<input id="update-bis-btn" name="update-bis" type="radio" class="btn-check" autocomplete="off">
|
<input id="update-bis-btn" name="update-bis" type="radio" class="btn-check" autocomplete="off">
|
||||||
<label class="btn btn-outline-primary" for="update-bis-btn">update bis</label>
|
<label class="btn btn-outline-primary" for="update-bis-btn">update bis</label>
|
||||||
|
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="close"></button>
|
||||||
</div>
|
</div>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="close"></button>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-4 col-form-label" for="player">player</label>
|
<label class="col-sm-4 col-form-label" for="player">player</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<select id="player" name="player" class="form-control" title="player"></select>
|
<select id="player" name="player" class="form-control" title="player" required></select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="piece-row" class="form-group row">
|
<div id="piece-row" class="form-group row">
|
||||||
@ -120,14 +121,14 @@
|
|||||||
<div id="bis-link-row" class="form-group row" style="display: none">
|
<div id="bis-link-row" class="form-group row" style="display: none">
|
||||||
<label class="col-sm-4 col-form-label" for="bis-link">link</label>
|
<label class="col-sm-4 col-form-label" for="bis-link">link</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input id="bis-link" name="link" class="form-control" placeholder="link to bis" onkeyup="disableSubmitBisButton()">
|
<input id="bis-link" name="link" class="form-control" placeholder="link to bis">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-danger" data-bs-dismiss="modal">close</button>
|
<button type="button" class="btn btn-danger" data-bs-dismiss="modal">close</button>
|
||||||
<button id="submit-add-bis-btn" type="button" class="btn btn-primary" data-bs-dismiss="modal" onclick="addPiece()" disabled>add</button>
|
<button id="submit-add-bis-btn" type="submit" class="btn btn-primary">add</button>
|
||||||
<button id="submit-update-bis-btn" type="button" class="btn btn-primary" data-bs-dismiss="modal" onclick="setBis()" style="display: none" disabled>set</button>
|
<button id="submit-set-bis-btn" type="submit" class="btn btn-primary" style="display: none">set</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
@ -171,7 +172,7 @@
|
|||||||
const updateButton = $("#update-btn");
|
const updateButton = $("#update-btn");
|
||||||
|
|
||||||
const submitAddBisButton = $("#submit-add-bis-btn");
|
const submitAddBisButton = $("#submit-add-bis-btn");
|
||||||
const submitUpdateBisButton = $("#submit-update-bis-btn");
|
const submitSetBisButton = $("#submit-set-bis-btn");
|
||||||
const updateBisDialog = $("#update-bis-dialog");
|
const updateBisDialog = $("#update-bis-dialog");
|
||||||
|
|
||||||
const addPieceButton = $("#add-piece-btn");
|
const addPieceButton = $("#add-piece-btn");
|
||||||
@ -208,12 +209,8 @@
|
|||||||
success: function (_) { reload(); },
|
success: function (_) { reload(); },
|
||||||
error: function (jqXHR, _, errorThrown) { requestAlert(jqXHR, errorThrown); },
|
error: function (jqXHR, _, errorThrown) { requestAlert(jqXHR, errorThrown); },
|
||||||
});
|
});
|
||||||
}
|
updateBisDialog.modal("hide");
|
||||||
|
return true; // action expects boolean result
|
||||||
function disableSubmitBisButton() {
|
|
||||||
const nonEmpty = (playerInput.val() !== null); // well lol
|
|
||||||
submitUpdateBisButton.attr("disabled", !(nonEmpty && linkInput.val()));
|
|
||||||
submitAddBisButton.attr("disabled", !(nonEmpty));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function hideControls() {
|
function hideControls() {
|
||||||
@ -222,20 +219,24 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function hideLinkPart() {
|
function hideLinkPart() {
|
||||||
disableSubmitBisButton();
|
|
||||||
bisLinkRow.hide();
|
bisLinkRow.hide();
|
||||||
submitUpdateBisButton.hide();
|
linkInput.prop("required", false);
|
||||||
|
submitSetBisButton.hide();
|
||||||
pieceRow.show();
|
pieceRow.show();
|
||||||
pieceTypeRow.show();
|
pieceTypeRow.show();
|
||||||
|
pieceInput.prop("required", true);
|
||||||
|
pieceTypeInput.prop("required", true);
|
||||||
submitAddBisButton.show();
|
submitAddBisButton.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
function hidePiecePart() {
|
function hidePiecePart() {
|
||||||
disableSubmitBisButton();
|
|
||||||
bisLinkRow.show();
|
bisLinkRow.show();
|
||||||
submitUpdateBisButton.show();
|
linkInput.prop("required", true);
|
||||||
|
submitSetBisButton.show();
|
||||||
pieceRow.hide();
|
pieceRow.hide();
|
||||||
pieceTypeRow.hide();
|
pieceTypeRow.hide();
|
||||||
|
pieceInput.prop("required", false);
|
||||||
|
pieceTypeInput.prop("required", false);
|
||||||
submitAddBisButton.hide();
|
submitAddBisButton.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -269,7 +270,6 @@
|
|||||||
return option;
|
return option;
|
||||||
});
|
});
|
||||||
playerInput.empty().append(options);
|
playerInput.empty().append(options);
|
||||||
disableSubmitBisButton();
|
|
||||||
},
|
},
|
||||||
error: function (jqXHR, _, errorThrown) { requestAlert(jqXHR, errorThrown); },
|
error: function (jqXHR, _, errorThrown) { requestAlert(jqXHR, errorThrown); },
|
||||||
});
|
});
|
||||||
@ -327,6 +327,18 @@
|
|||||||
success: function (_) { reload(); },
|
success: function (_) { reload(); },
|
||||||
error: function (jqXHR, _, errorThrown) { requestAlert(jqXHR, errorThrown); },
|
error: function (jqXHR, _, errorThrown) { requestAlert(jqXHR, errorThrown); },
|
||||||
});
|
});
|
||||||
|
updateBisDialog.modal("hide");
|
||||||
|
return true; // action expects boolean result
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateBis() {
|
||||||
|
if (updateBisButton.is(":checked")) {
|
||||||
|
return setBis();
|
||||||
|
}
|
||||||
|
if (addPieceButton.is(":checked")) {
|
||||||
|
return addPiece();
|
||||||
|
}
|
||||||
|
return false; // should not happen
|
||||||
}
|
}
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
@ -344,6 +356,7 @@
|
|||||||
|
|
||||||
table.bootstrapTable({});
|
table.bootstrapTable({});
|
||||||
reload();
|
reload();
|
||||||
|
reset();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -6,11 +6,11 @@
|
|||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
<link href="/static/favicon.ico" rel="shortcut icon">
|
<link rel="shortcut icon" href="/static/favicon.ico">
|
||||||
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous" type="text/css">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous" type="text/css">
|
||||||
|
|
||||||
<link href="/static/styles.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="/static/styles.css" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
@ -6,17 +6,17 @@
|
|||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
<link href="/static/favicon.ico" rel="shortcut icon">
|
<link rel="shortcut icon" href="/static/favicon.ico">
|
||||||
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous" type="text/css">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous" type="text/css">
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css" type="text/css">
|
||||||
|
|
||||||
<link href="https://unpkg.com/bootstrap-table@1.19.1/dist/bootstrap-table.min.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="https://unpkg.com/bootstrap-table@1.19.1/dist/bootstrap-table.min.css" type="text/css">
|
||||||
|
|
||||||
|
|
||||||
<link href="https://unpkg.com/jquery-resizable-columns@0.2.3/dist/jquery.resizableColumns.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="https://unpkg.com/jquery-resizable-columns@0.2.3/dist/jquery.resizableColumns.css" type="text/css">
|
||||||
|
|
||||||
<link href="/static/styles.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="/static/styles.css" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
@ -88,35 +88,35 @@
|
|||||||
|
|
||||||
<div id="add-loot-dialog" tabindex="-1" role="dialog" class="modal fade">
|
<div id="add-loot-dialog" tabindex="-1" role="dialog" class="modal fade">
|
||||||
<div class="modal-dialog modal-lg" role="document">
|
<div class="modal-dialog modal-lg" role="document">
|
||||||
<div class="modal-content">
|
<form class="modal-content" action="javascript:" onsubmit="addLoot()">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h4 class="modal-title">add looted piece</h4>
|
<h4 class="modal-title">add looted piece</h4>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="close"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="close"></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form class="modal-body">
|
<div class="modal-body">
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-4 col-form-label" for="player">player</label>
|
<label class="col-sm-4 col-form-label" for="player">player</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<select id="player" name="player" class="form-control" title="player"></select>
|
<select id="player" name="player" class="form-control" title="player" required></select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-4 col-form-label" for="piece">piece</label>
|
<label class="col-sm-4 col-form-label" for="piece">piece</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<select id="piece" name="piece" class="form-control" title="piece"></select>
|
<select id="piece" name="piece" class="form-control" title="piece" required></select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-4 col-form-label" for="piece-type">piece type</label>
|
<label class="col-sm-4 col-form-label" for="piece-type">piece type</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<select id="piece-type" name="pieceType" class="form-control" title="pieceType"></select>
|
<select id="piece-type" name="pieceType" class="form-control" title="pieceType" required></select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-4 col-form-label" for="job">job</label>
|
<label class="col-sm-4 col-form-label" for="job">job</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<select id="job" name="job" class="form-control" title="job"></select>
|
<select id="job" name="job" class="form-control" title="job" required></select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
@ -141,14 +141,14 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
</table>
|
</table>
|
||||||
</form>
|
</div>
|
||||||
|
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-danger" data-bs-dismiss="modal">close</button>
|
<button type="button" class="btn btn-danger" data-bs-dismiss="modal">close</button>
|
||||||
<button type="button" class="btn btn-secondary" onclick="suggestLoot()">suggest</button>
|
<button type="button" class="btn btn-secondary" onclick="suggestLoot()">suggest</button>
|
||||||
<button id="submit-btn" type="button" class="btn btn-primary" data-bs-dismiss="modal" onclick="addLoot()" disabled>add</button>
|
<button type="submit" class="btn btn-primary">add</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -189,7 +189,6 @@
|
|||||||
const addButton = $("#add-btn");
|
const addButton = $("#add-btn");
|
||||||
const removeButton = $("#remove-btn");
|
const removeButton = $("#remove-btn");
|
||||||
|
|
||||||
const submitLootButton = $("#submit-btn");
|
|
||||||
const addLootDialog = $("#add-loot-dialog");
|
const addLootDialog = $("#add-loot-dialog");
|
||||||
|
|
||||||
const freeLootInput = $("#free-loot");
|
const freeLootInput = $("#free-loot");
|
||||||
@ -221,6 +220,8 @@
|
|||||||
success: function (_) { reload(); },
|
success: function (_) { reload(); },
|
||||||
error: function (jqXHR, _, errorThrown) { requestAlert(jqXHR, errorThrown); },
|
error: function (jqXHR, _, errorThrown) { requestAlert(jqXHR, errorThrown); },
|
||||||
});
|
});
|
||||||
|
addLootDialog.modal("hide");
|
||||||
|
return true; // action expects boolean result
|
||||||
}
|
}
|
||||||
|
|
||||||
function hideControls() {
|
function hideControls() {
|
||||||
@ -260,7 +261,6 @@
|
|||||||
return option;
|
return option;
|
||||||
});
|
});
|
||||||
playerInput.empty().append(options);
|
playerInput.empty().append(options);
|
||||||
submitLootButton.attr("disabled", options.length === 0);
|
|
||||||
},
|
},
|
||||||
error: function (jqXHR, _, errorThrown) { requestAlert(jqXHR, errorThrown); },
|
error: function (jqXHR, _, errorThrown) { requestAlert(jqXHR, errorThrown); },
|
||||||
});
|
});
|
||||||
@ -310,7 +310,7 @@
|
|||||||
return {
|
return {
|
||||||
nick: stat.nick,
|
nick: stat.nick,
|
||||||
job: stat.job,
|
job: stat.job,
|
||||||
isRequired: stat.isRequired,
|
isRequired: stat.isRequired ? "yes" : "no",
|
||||||
lootCount: stat.lootCount,
|
lootCount: stat.lootCount,
|
||||||
lootCountBiS: stat.lootCountBiS,
|
lootCountBiS: stat.lootCountBiS,
|
||||||
lootCountTotal: stat.lootCountTotal,
|
lootCountTotal: stat.lootCountTotal,
|
||||||
|
@ -6,17 +6,17 @@
|
|||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
<link href="/static/favicon.ico" rel="shortcut icon">
|
<link rel="shortcut icon" href="/static/favicon.ico">
|
||||||
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous" type="text/css">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous" type="text/css">
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css" type="text/css">
|
||||||
|
|
||||||
<link href="https://unpkg.com/bootstrap-table@1.19.1/dist/bootstrap-table.min.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="https://unpkg.com/bootstrap-table@1.19.1/dist/bootstrap-table.min.css" type="text/css">
|
||||||
|
|
||||||
|
|
||||||
<link href="https://unpkg.com/jquery-resizable-columns@0.2.3/dist/jquery.resizableColumns.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="https://unpkg.com/jquery-resizable-columns@0.2.3/dist/jquery.resizableColumns.css" type="text/css">
|
||||||
|
|
||||||
<link href="/static/styles.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="/static/styles.css" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
@ -84,23 +84,23 @@
|
|||||||
|
|
||||||
<div id="add-player-dialog" tabindex="-1" role="dialog" class="modal fade">
|
<div id="add-player-dialog" tabindex="-1" role="dialog" class="modal fade">
|
||||||
<div class="modal-dialog" role="document">
|
<div class="modal-dialog" role="document">
|
||||||
<div class="modal-content">
|
<form class="modal-content" action="javascript:" onsubmit="addPlayer()">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h4 class="modal-title">add new player</h4>
|
<h4 class="modal-title">add new player</h4>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="close"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="close"></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form class="modal-body">
|
<div class="modal-body">
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-4 col-form-label" for="nick">player name</label>
|
<label class="col-sm-4 col-form-label" for="nick">player name</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input id="nick" name="nick" class="form-control" placeholder="nick" onkeyup="disableAddPlayerForm()">
|
<input id="nick" name="nick" class="form-control" placeholder="nick" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-4 col-form-label" for="job">player job</label>
|
<label class="col-sm-4 col-form-label" for="job">player job</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<select id="job" name="job" class="form-control" title="job"></select>
|
<select id="job" name="job" class="form-control" title="job" required></select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
@ -115,13 +115,13 @@
|
|||||||
<input id="priority" name="priority" type="number" class="form-control" value="0">
|
<input id="priority" name="priority" type="number" class="form-control" value="0">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</div>
|
||||||
|
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-danger" data-bs-dismiss="modal">close</button>
|
<button type="button" class="btn btn-danger" data-bs-dismiss="modal">close</button>
|
||||||
<button id="submit-player-btn" type="button" class="btn btn-primary" data-bs-dismiss="modal" onclick="addPlayer()" disabled>add</button>
|
<button type="submit" class="btn btn-primary">add</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -162,7 +162,6 @@
|
|||||||
const removeButton = $("#remove-btn");
|
const removeButton = $("#remove-btn");
|
||||||
|
|
||||||
const addPlayerDialog = $("#add-player-dialog");
|
const addPlayerDialog = $("#add-player-dialog");
|
||||||
const submitPlayerButton = $("#submit-player-btn");
|
|
||||||
|
|
||||||
const jobInput = $("#job");
|
const jobInput = $("#job");
|
||||||
const linkInput = $("#link");
|
const linkInput = $("#link");
|
||||||
@ -187,6 +186,8 @@
|
|||||||
success: function (_) { reload(); },
|
success: function (_) { reload(); },
|
||||||
error: function (jqXHR, _, errorThrown) { requestAlert(jqXHR, errorThrown); },
|
error: function (jqXHR, _, errorThrown) { requestAlert(jqXHR, errorThrown); },
|
||||||
});
|
});
|
||||||
|
addPlayerDialog.modal("hide");
|
||||||
|
return true; // action expects boolean result
|
||||||
}
|
}
|
||||||
|
|
||||||
function bisLinkFormatter(link, row) {
|
function bisLinkFormatter(link, row) {
|
||||||
@ -197,10 +198,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function disableAddPlayerForm() {
|
|
||||||
submitPlayerButton.attr("disabled", !nickInput.val());
|
|
||||||
}
|
|
||||||
|
|
||||||
function hideControls() {
|
function hideControls() {
|
||||||
addButton.attr("hidden", isReadOnly);
|
addButton.attr("hidden", isReadOnly);
|
||||||
removeButton.attr("hidden", isReadOnly);
|
removeButton.attr("hidden", isReadOnly);
|
||||||
|
@ -6,9 +6,9 @@
|
|||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
<link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700" type="text/css">
|
||||||
|
|
||||||
<link href="/static/favicon.ico" rel="shortcut icon">
|
<link rel="shortcut icon" href="/static/favicon.ico">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
|
@ -6,17 +6,17 @@
|
|||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
<link href="/static/favicon.ico" rel="shortcut icon">
|
<link rel="shortcut icon" href="/static/favicon.ico">
|
||||||
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous" type="text/css">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous" type="text/css">
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css" type="text/css">
|
||||||
|
|
||||||
<link href="https://unpkg.com/bootstrap-table@1.19.1/dist/bootstrap-table.min.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="https://unpkg.com/bootstrap-table@1.19.1/dist/bootstrap-table.min.css" type="text/css">
|
||||||
|
|
||||||
|
|
||||||
<link href="https://unpkg.com/jquery-resizable-columns@0.2.3/dist/jquery.resizableColumns.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="https://unpkg.com/jquery-resizable-columns@0.2.3/dist/jquery.resizableColumns.css" type="text/css">
|
||||||
|
|
||||||
<link href="/static/styles.css" rel="stylesheet" type="text/css">
|
<link rel="stylesheet" href="/static/styles.css" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
@ -84,38 +84,38 @@
|
|||||||
|
|
||||||
<div id="add-user-dialog" tabindex="-1" role="dialog" class="modal fade">
|
<div id="add-user-dialog" tabindex="-1" role="dialog" class="modal fade">
|
||||||
<div class="modal-dialog" role="document">
|
<div class="modal-dialog" role="document">
|
||||||
<div class="modal-content">
|
<form class="modal-content" action="javascript:" onsubmit="addUser()">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h4 class="modal-title">add new user</h4>
|
<h4 class="modal-title">add new user</h4>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="close"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="close"></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form class="modal-body">
|
<div class="modal-body">
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-4 col-form-label" for="username">login</label>
|
<label class="col-sm-4 col-form-label" for="username">login</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input id="username" name="username" class="form-control" placeholder="username" onkeyup="disableAddUserForm()">
|
<input id="username" name="username" class="form-control" placeholder="username" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-4 col-form-label" for="password">password</label>
|
<label class="col-sm-4 col-form-label" for="password">password</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input id="password" name="password" type="password" class="form-control" placeholder="password" onkeyup="disableAddUserForm()">
|
<input id="password" name="password" type="password" class="form-control" placeholder="password" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-4 col-form-label" for="permission">permission</label>
|
<label class="col-sm-4 col-form-label" for="permission">permission</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<select id="permission" name="permission" class="form-control" title="permission"></select>
|
<select id="permission" name="permission" class="form-control" title="permission" required></select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</div>
|
||||||
|
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-danger" data-bs-dismiss="modal">close</button>
|
<button type="button" class="btn btn-danger" data-bs-dismiss="modal">close</button>
|
||||||
<button id="submit-btn" type="button" class="btn btn-primary" data-bs-dismiss="modal" onclick="addUser()" disabled>add</button>
|
<button type="submit" class="btn btn-primary">add</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -156,7 +156,6 @@
|
|||||||
const removeButton = $("#remove-btn");
|
const removeButton = $("#remove-btn");
|
||||||
|
|
||||||
const addUserDialog = $("#add-user-dialog");
|
const addUserDialog = $("#add-user-dialog");
|
||||||
const submitUserButton = $("#submit-btn");
|
|
||||||
|
|
||||||
const usernameInput = $("#username");
|
const usernameInput = $("#username");
|
||||||
const passwordInput = $("#password");
|
const passwordInput = $("#password");
|
||||||
@ -176,10 +175,8 @@
|
|||||||
success: function (_) { reload(); },
|
success: function (_) { reload(); },
|
||||||
error: function (jqXHR, _, errorThrown) { requestAlert(jqXHR, errorThrown); },
|
error: function (jqXHR, _, errorThrown) { requestAlert(jqXHR, errorThrown); },
|
||||||
});
|
});
|
||||||
}
|
addUserDialog.modal("hide");
|
||||||
|
return true; // action expects boolean result
|
||||||
function disableAddUserForm() {
|
|
||||||
submitUserButton.attr("disabled", !(usernameInput.val() && passwordInput.val()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function hideControls() {
|
function hideControls() {
|
||||||
|
@ -37,7 +37,7 @@ function loadTypes(url, selector) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function setupFormClear(dialog, reset) {
|
function setupFormClear(dialog, reset) {
|
||||||
dialog.on("shown.bs.modal", function () {
|
dialog.on("hide.bs.modal", function () {
|
||||||
$(this).find("form").trigger("reset");
|
$(this).find("form").trigger("reset");
|
||||||
$(this).find("table").bootstrapTable("removeAll");
|
$(this).find("table").bootstrapTable("removeAll");
|
||||||
if (reset) {
|
if (reset) {
|
||||||
|
@ -8,30 +8,32 @@
|
|||||||
*/
|
*/
|
||||||
package me.arcanis.ffxivbis.service.database.impl
|
package me.arcanis.ffxivbis.service.database.impl
|
||||||
|
|
||||||
|
import akka.actor.typed.Behavior
|
||||||
import akka.actor.typed.scaladsl.Behaviors
|
import akka.actor.typed.scaladsl.Behaviors
|
||||||
import me.arcanis.ffxivbis.messages._
|
import me.arcanis.ffxivbis.messages._
|
||||||
import me.arcanis.ffxivbis.service.database.Database
|
import me.arcanis.ffxivbis.service.database.Database
|
||||||
|
|
||||||
trait DatabaseBiSHandler { this: Database =>
|
trait DatabaseBiSHandler { this: Database =>
|
||||||
|
|
||||||
def bisHandler: DatabaseMessage.Handler = {
|
def bisHandler(msg: BisDatabaseMessage): Behavior[DatabaseMessage] =
|
||||||
case AddPieceToBis(playerId, piece, client) =>
|
msg match {
|
||||||
run(profile.insertPieceBiS(playerId, piece))(_ => client ! ())
|
case AddPieceToBis(playerId, piece, client) =>
|
||||||
Behaviors.same
|
run(profile.insertPieceBiS(playerId, piece))(_ => client ! ())
|
||||||
|
Behaviors.same
|
||||||
|
|
||||||
case GetBiS(partyId, maybePlayerId, client) =>
|
case GetBiS(partyId, maybePlayerId, client) =>
|
||||||
run {
|
run {
|
||||||
getParty(partyId, withBiS = true, withLoot = false)
|
getParty(partyId, withBiS = true, withLoot = false)
|
||||||
.map(filterParty(_, maybePlayerId))
|
.map(filterParty(_, maybePlayerId))
|
||||||
}(client ! _)
|
}(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case RemovePieceFromBiS(playerId, piece, client) =>
|
case RemovePieceFromBiS(playerId, piece, client) =>
|
||||||
run(profile.deletePieceBiS(playerId, piece))(_ => client ! ())
|
run(profile.deletePieceBiS(playerId, piece))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case RemovePiecesFromBiS(playerId, client) =>
|
case RemovePiecesFromBiS(playerId, client) =>
|
||||||
run(profile.deletePiecesBiS(playerId))(_ => client ! ())
|
run(profile.deletePiecesBiS(playerId))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ package me.arcanis.ffxivbis.service.database.impl
|
|||||||
import akka.actor.typed.scaladsl.{AbstractBehavior, ActorContext}
|
import akka.actor.typed.scaladsl.{AbstractBehavior, ActorContext}
|
||||||
import akka.actor.typed.{Behavior, DispatcherSelector}
|
import akka.actor.typed.{Behavior, DispatcherSelector}
|
||||||
import com.typesafe.config.Config
|
import com.typesafe.config.Config
|
||||||
import me.arcanis.ffxivbis.messages.DatabaseMessage
|
import me.arcanis.ffxivbis.messages.{BisDatabaseMessage, DatabaseMessage, LootDatabaseMessage, PartyDatabaseMessage, UserDatabaseMessage}
|
||||||
import me.arcanis.ffxivbis.service.database.Database
|
import me.arcanis.ffxivbis.service.database.Database
|
||||||
import me.arcanis.ffxivbis.storage.DatabaseProfile
|
import me.arcanis.ffxivbis.storage.DatabaseProfile
|
||||||
|
|
||||||
@ -32,8 +32,12 @@ class DatabaseImpl(context: ActorContext[DatabaseMessage])
|
|||||||
override val config: Config = context.system.settings.config
|
override val config: Config = context.system.settings.config
|
||||||
override val profile: DatabaseProfile = new DatabaseProfile(executionContext, config)
|
override val profile: DatabaseProfile = new DatabaseProfile(executionContext, config)
|
||||||
|
|
||||||
override def onMessage(msg: DatabaseMessage): Behavior[DatabaseMessage] = handle(msg)
|
override def onMessage(msg: DatabaseMessage): Behavior[DatabaseMessage] =
|
||||||
|
msg match {
|
||||||
|
case msg: BisDatabaseMessage => bisHandler(msg)
|
||||||
|
case msg: LootDatabaseMessage => lootHandler(msg)
|
||||||
|
case msg: PartyDatabaseMessage => partyHandler(msg)
|
||||||
|
case msg: UserDatabaseMessage => userHandler(msg)
|
||||||
|
}
|
||||||
|
|
||||||
private def handle: DatabaseMessage.Handler =
|
|
||||||
bisHandler.orElse(lootHandler).orElse(partyHandler).orElse(userHandler)
|
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
package me.arcanis.ffxivbis.service.database.impl
|
package me.arcanis.ffxivbis.service.database.impl
|
||||||
|
|
||||||
|
import akka.actor.typed.Behavior
|
||||||
import akka.actor.typed.scaladsl.Behaviors
|
import akka.actor.typed.scaladsl.Behaviors
|
||||||
import me.arcanis.ffxivbis.messages._
|
import me.arcanis.ffxivbis.messages._
|
||||||
import me.arcanis.ffxivbis.models.Loot
|
import me.arcanis.ffxivbis.models.Loot
|
||||||
@ -17,28 +18,29 @@ import java.time.Instant
|
|||||||
|
|
||||||
trait DatabaseLootHandler { this: Database =>
|
trait DatabaseLootHandler { this: Database =>
|
||||||
|
|
||||||
def lootHandler: DatabaseMessage.Handler = {
|
def lootHandler(msg: LootDatabaseMessage): Behavior[DatabaseMessage] =
|
||||||
case AddPieceTo(playerId, piece, isFreeLoot, client) =>
|
msg match {
|
||||||
val loot = Loot(-1, piece, Instant.now, isFreeLoot)
|
case AddPieceTo(playerId, piece, isFreeLoot, client) =>
|
||||||
run(profile.insertPiece(playerId, loot))(_ => client ! ())
|
val loot = Loot(-1, piece, Instant.now, isFreeLoot)
|
||||||
Behaviors.same
|
run(profile.insertPiece(playerId, loot))(_ => client ! ())
|
||||||
|
Behaviors.same
|
||||||
|
|
||||||
case GetLoot(partyId, maybePlayerId, client) =>
|
case GetLoot(partyId, maybePlayerId, client) =>
|
||||||
run {
|
run {
|
||||||
getParty(partyId, withBiS = false, withLoot = true)
|
getParty(partyId, withBiS = false, withLoot = true)
|
||||||
.map(filterParty(_, maybePlayerId))
|
.map(filterParty(_, maybePlayerId))
|
||||||
}(client ! _)
|
}(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case RemovePieceFrom(playerId, piece, isFreeLoot, client) =>
|
case RemovePieceFrom(playerId, piece, isFreeLoot, client) =>
|
||||||
run(profile.deletePiece(playerId, piece, isFreeLoot))(_ => client ! ())
|
run(profile.deletePiece(playerId, piece, isFreeLoot))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case SuggestLoot(partyId, piece, client) =>
|
case SuggestLoot(partyId, piece, client) =>
|
||||||
run {
|
run {
|
||||||
getParty(partyId, withBiS = true, withLoot = true)
|
getParty(partyId, withBiS = true, withLoot = true)
|
||||||
.map(_.suggestLoot(piece))
|
.map(_.suggestLoot(piece))
|
||||||
}(client ! _)
|
}(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
package me.arcanis.ffxivbis.service.database.impl
|
package me.arcanis.ffxivbis.service.database.impl
|
||||||
|
|
||||||
|
import akka.actor.typed.Behavior
|
||||||
import akka.actor.typed.scaladsl.Behaviors
|
import akka.actor.typed.scaladsl.Behaviors
|
||||||
import me.arcanis.ffxivbis.messages._
|
import me.arcanis.ffxivbis.messages._
|
||||||
import me.arcanis.ffxivbis.models.{BiS, Player}
|
import me.arcanis.ffxivbis.models.{BiS, Player}
|
||||||
@ -17,50 +18,51 @@ import scala.concurrent.Future
|
|||||||
|
|
||||||
trait DatabasePartyHandler { this: Database =>
|
trait DatabasePartyHandler { this: Database =>
|
||||||
|
|
||||||
def partyHandler: DatabaseMessage.Handler = {
|
def partyHandler(msg: PartyDatabaseMessage): Behavior[DatabaseMessage] =
|
||||||
case AddPlayer(player, client) =>
|
msg match {
|
||||||
run(profile.insertPlayer(player))(_ => client ! ())
|
case AddPlayer(player, client) =>
|
||||||
Behaviors.same
|
run(profile.insertPlayer(player))(_ => client ! ())
|
||||||
|
Behaviors.same
|
||||||
|
|
||||||
case GetParty(partyId, client) =>
|
case GetParty(partyId, client) =>
|
||||||
run(getParty(partyId, withBiS = true, withLoot = true))(client ! _)
|
run(getParty(partyId, withBiS = true, withLoot = true))(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case GetPartyDescription(partyId, client) =>
|
case GetPartyDescription(partyId, client) =>
|
||||||
run(profile.getPartyDescription(partyId))(client ! _)
|
run(profile.getPartyDescription(partyId))(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case GetPlayer(playerId, client) =>
|
case GetPlayer(playerId, client) =>
|
||||||
run {
|
run {
|
||||||
profile
|
profile
|
||||||
.getPlayerFull(playerId)
|
.getPlayerFull(playerId)
|
||||||
.flatMap { maybePlayerData =>
|
.flatMap { maybePlayerData =>
|
||||||
Future.traverse(maybePlayerData.toSeq) { playerData =>
|
Future.traverse(maybePlayerData.toSeq) { playerData =>
|
||||||
for {
|
for {
|
||||||
bis <- profile.getPiecesBiS(playerId)
|
bis <- profile.getPiecesBiS(playerId)
|
||||||
loot <- profile.getPieces(playerId)
|
loot <- profile.getPieces(playerId)
|
||||||
} yield Player(
|
} yield Player(
|
||||||
playerData.id,
|
playerData.id,
|
||||||
playerId.partyId,
|
playerId.partyId,
|
||||||
playerId.job,
|
playerId.job,
|
||||||
playerId.nick,
|
playerId.nick,
|
||||||
BiS(bis.map(_.piece)),
|
BiS(bis.map(_.piece)),
|
||||||
loot,
|
loot,
|
||||||
playerData.link,
|
playerData.link,
|
||||||
playerData.priority
|
playerData.priority
|
||||||
)
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
.map(_.headOption)
|
||||||
.map(_.headOption)
|
}(client ! _)
|
||||||
}(client ! _)
|
Behaviors.same
|
||||||
Behaviors.same
|
|
||||||
|
|
||||||
case RemovePlayer(playerId, client) =>
|
case RemovePlayer(playerId, client) =>
|
||||||
run(profile.deletePlayer(playerId))(_ => client ! ())
|
run(profile.deletePlayer(playerId))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case UpdateParty(description, client) =>
|
case UpdateParty(description, client) =>
|
||||||
run(profile.insertPartyDescription(description))(_ => client ! ())
|
run(profile.insertPartyDescription(description))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,32 +8,34 @@
|
|||||||
*/
|
*/
|
||||||
package me.arcanis.ffxivbis.service.database.impl
|
package me.arcanis.ffxivbis.service.database.impl
|
||||||
|
|
||||||
|
import akka.actor.typed.Behavior
|
||||||
import akka.actor.typed.scaladsl.Behaviors
|
import akka.actor.typed.scaladsl.Behaviors
|
||||||
import me.arcanis.ffxivbis.messages._
|
import me.arcanis.ffxivbis.messages._
|
||||||
import me.arcanis.ffxivbis.service.database.Database
|
import me.arcanis.ffxivbis.service.database.Database
|
||||||
|
|
||||||
trait DatabaseUserHandler { this: Database =>
|
trait DatabaseUserHandler { this: Database =>
|
||||||
|
|
||||||
def userHandler: DatabaseMessage.Handler = {
|
def userHandler(msg: UserDatabaseMessage): Behavior[DatabaseMessage] =
|
||||||
case AddUser(user, isHashedPassword, client) =>
|
msg match {
|
||||||
val toInsert = if (isHashedPassword) user else user.withHashedPassword
|
case AddUser(user, isHashedPassword, client) =>
|
||||||
run(profile.insertUser(toInsert))(_ => client ! ())
|
val toInsert = if (isHashedPassword) user else user.withHashedPassword
|
||||||
Behaviors.same
|
run(profile.insertUser(toInsert))(_ => client ! ())
|
||||||
|
Behaviors.same
|
||||||
|
|
||||||
case DeleteUser(partyId, username, client) =>
|
case DeleteUser(partyId, username, client) =>
|
||||||
run(profile.deleteUser(partyId, username))(_ => client ! ())
|
run(profile.deleteUser(partyId, username))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case Exists(partyId, client) =>
|
case Exists(partyId, client) =>
|
||||||
run(profile.exists(partyId))(client ! _)
|
run(profile.exists(partyId))(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case GetUser(partyId, username, client) =>
|
case GetUser(partyId, username, client) =>
|
||||||
run(profile.getUser(partyId, username))(client ! _)
|
run(profile.getUser(partyId, username))(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case GetUsers(partyId, client) =>
|
case GetUsers(partyId, client) =>
|
||||||
run(profile.getUsers(partyId))(client ! _)
|
run(profile.getUsers(partyId))(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1 +1 @@
|
|||||||
version := "0.12.1"
|
version := "0.12.2"
|
||||||
|
Reference in New Issue
Block a user