mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-19 06:43:51 +02:00
Group add last visited (#1351)
* Fixed compilation/project files on Visual Studio. * Add group instance last visit (#1286) * Fixed erroneous translation + remove x-link
This commit is contained in:
@@ -5,7 +5,9 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>net9</TargetFramework>
|
<TargetFramework>net9</TargetFramework>
|
||||||
<Platform>x64</Platform>
|
<Configurations>Debug;Release</Configurations>
|
||||||
|
<Platforms>x64</Platforms>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<ApplicationRevision>0</ApplicationRevision>
|
<ApplicationRevision>0</ApplicationRevision>
|
||||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||||
<AssemblyTitle>DBMerger</AssemblyTitle>
|
<AssemblyTitle>DBMerger</AssemblyTitle>
|
||||||
|
|||||||
@@ -5,7 +5,9 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<TargetFramework>net9-windows10.0.19041.0</TargetFramework>
|
<TargetFramework>net9-windows10.0.19041.0</TargetFramework>
|
||||||
<Platform>x64</Platform>
|
<Configurations>Debug;Release</Configurations>
|
||||||
|
<Platforms>x64</Platforms>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<UseWindowsForms>true</UseWindowsForms>
|
<UseWindowsForms>true</UseWindowsForms>
|
||||||
<ApplicationRevision>0</ApplicationRevision>
|
<ApplicationRevision>0</ApplicationRevision>
|
||||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||||
|
|||||||
@@ -7,7 +7,9 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net9.0</TargetFramework>
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
<OutputType>Library</OutputType>
|
<OutputType>Library</OutputType>
|
||||||
<Platform>x64</Platform>
|
<Configurations>Debug;Release</Configurations>
|
||||||
|
<Platforms>x64</Platforms>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<ApplicationRevision>0</ApplicationRevision>
|
<ApplicationRevision>0</ApplicationRevision>
|
||||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||||
<AssemblyTitle>VRCX</AssemblyTitle>
|
<AssemblyTitle>VRCX</AssemblyTitle>
|
||||||
|
|||||||
22
VRCX.sln
22
VRCX.sln
@@ -1,16 +1,10 @@
|
|||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
|
||||||
# Visual Studio Version 17
|
# Visual Studio Version 17
|
||||||
VisualStudioVersion = 17.8.34309.116
|
VisualStudioVersion = 17.8.34309.116
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VRCX-Cef", "Dotnet\VRCX-Cef.csproj", "{D9F66F2E-3ED9-4D53-A6AC-ADCC1513562A}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VRCX-Cef", "Dotnet\VRCX-Cef.csproj", "{D9F66F2E-3ED9-4D53-A6AC-ADCC1513562A}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8612F19B-3C1F-4B17-8679-A2747A53EC6B}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VRCX-Electron", "Dotnet\VRCX-Electron.csproj", "{B0275E4A-FE0F-410A-96F1-1D73DF2535FA}"
|
||||||
ProjectSection(SolutionItems) = preProject
|
|
||||||
.editorconfig = .editorconfig
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VRCX-Electron", "Dotnet\VRCX-Electron.csproj", "{B0275E4A-FE0F-410A-96F1-1D73DF2535FA}"
|
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DBMerger", "DBMerger\DBMerger.csproj", "{9BE1DD2F-CABC-4CF9-A53E-C62923760887}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DBMerger", "DBMerger\DBMerger.csproj", "{9BE1DD2F-CABC-4CF9-A53E-C62923760887}"
|
||||||
EndProject
|
EndProject
|
||||||
@@ -24,14 +18,16 @@ Global
|
|||||||
{D9F66F2E-3ED9-4D53-A6AC-ADCC1513562A}.Debug|x64.Build.0 = Debug|x64
|
{D9F66F2E-3ED9-4D53-A6AC-ADCC1513562A}.Debug|x64.Build.0 = Debug|x64
|
||||||
{D9F66F2E-3ED9-4D53-A6AC-ADCC1513562A}.Release|x64.ActiveCfg = Release|x64
|
{D9F66F2E-3ED9-4D53-A6AC-ADCC1513562A}.Release|x64.ActiveCfg = Release|x64
|
||||||
{D9F66F2E-3ED9-4D53-A6AC-ADCC1513562A}.Release|x64.Build.0 = Release|x64
|
{D9F66F2E-3ED9-4D53-A6AC-ADCC1513562A}.Release|x64.Build.0 = Release|x64
|
||||||
|
|
||||||
{B0275E4A-FE0F-410A-96F1-1D73DF2535FA}.Debug|x64.ActiveCfg = Debug|x64
|
{B0275E4A-FE0F-410A-96F1-1D73DF2535FA}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{B0275E4A-FE0F-410A-96F1-1D73DF2535FA}.Debug|x64.Build.0 = Debug|x64
|
{B0275E4A-FE0F-410A-96F1-1D73DF2535FA}.Debug|x64.Build.0 = Debug|x64
|
||||||
{B0275E4A-FE0F-410A-96F1-1D73DF2535FA}.Release|x64.ActiveCfg = Release|x64
|
{B0275E4A-FE0F-410A-96F1-1D73DF2535FA}.Release|x64.ActiveCfg = Release|x64
|
||||||
{B0275E4A-FE0F-410A-96F1-1D73DF2535FA}.Release|x64.Build.0 = Release|x64
|
{B0275E4A-FE0F-410A-96F1-1D73DF2535FA}.Release|x64.Build.0 = Release|x64
|
||||||
{9BE1DD2F-CABC-4CF9-A53E-C62923760887}.Debug|x64.ActiveCfg = Debug|Any CPU
|
|
||||||
{9BE1DD2F-CABC-4CF9-A53E-C62923760887}.Debug|x64.Build.0 = Debug|Any CPU
|
{9BE1DD2F-CABC-4CF9-A53E-C62923760887}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{9BE1DD2F-CABC-4CF9-A53E-C62923760887}.Release|x64.ActiveCfg = Release|Any CPU
|
{9BE1DD2F-CABC-4CF9-A53E-C62923760887}.Debug|x64.Build.0 = Debug|x64
|
||||||
{9BE1DD2F-CABC-4CF9-A53E-C62923760887}.Release|x64.Build.0 = Release|Any CPU
|
{9BE1DD2F-CABC-4CF9-A53E-C62923760887}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{9BE1DD2F-CABC-4CF9-A53E-C62923760887}.Release|x64.Build.0 = Release|x64
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@@ -39,4 +35,4 @@ Global
|
|||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {797D384F-D118-4CBB-9450-17949F9EFCA4}
|
SolutionGuid = {797D384F-D118-4CBB-9450-17949F9EFCA4}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
@@ -611,6 +611,14 @@
|
|||||||
<span class="extra">{{ formatDateFilter(groupDialog.ref.createdAt, 'long') }}</span>
|
<span class="extra">{{ formatDateFilter(groupDialog.ref.createdAt, 'long') }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<el-tooltip :disabled="hideTooltips" placement="top" :content="t('dialog.user.info.open_previous_instance')">
|
||||||
|
<div class="x-friend-item" @click="showPreviousInstancesGroupDialog(groupDialog.ref)">
|
||||||
|
<div class="detail">
|
||||||
|
<span class="name">{{ t('dialog.group.info.last_visited') }}</span>
|
||||||
|
<span class="extra">{{formatDateFilter(groupDialog.lastVisit,'long') }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-tooltip>
|
||||||
<div class="x-friend-item" style="cursor: default">
|
<div class="x-friend-item" style="cursor: default">
|
||||||
<div class="detail">
|
<div class="detail">
|
||||||
<span class="name">{{ t('dialog.group.info.links') }}</span>
|
<span class="name">{{ t('dialog.group.info.links') }}</span>
|
||||||
@@ -1166,6 +1174,10 @@
|
|||||||
<!--Nested-->
|
<!--Nested-->
|
||||||
<GroupPostEditDialog :dialog-data.sync="groupPostEditDialog" :selected-gallery-file="selectedGalleryFile" />
|
<GroupPostEditDialog :dialog-data.sync="groupPostEditDialog" :selected-gallery-file="selectedGalleryFile" />
|
||||||
<InviteGroupDialog />
|
<InviteGroupDialog />
|
||||||
|
<PreviousInstancesGroupDialog
|
||||||
|
:previous-instances-group-dialog.sync="previousInstancesGroupDialog"
|
||||||
|
:current-user="currentUser"
|
||||||
|
/>
|
||||||
</safe-dialog>
|
</safe-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -1203,6 +1215,7 @@
|
|||||||
} from '../../../stores';
|
} from '../../../stores';
|
||||||
import InviteGroupDialog from '../InviteGroupDialog.vue';
|
import InviteGroupDialog from '../InviteGroupDialog.vue';
|
||||||
import GroupPostEditDialog from './GroupPostEditDialog.vue';
|
import GroupPostEditDialog from './GroupPostEditDialog.vue';
|
||||||
|
import PreviousInstancesGroupDialog from "../PreviousInstancesDialog/PreviousInstancesGroupDialog.vue";
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
|
||||||
@@ -1253,6 +1266,12 @@
|
|||||||
groupId: ''
|
groupId: ''
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const previousInstancesGroupDialog = ref({
|
||||||
|
visible: false,
|
||||||
|
openFlg: false,
|
||||||
|
groupRef: {}
|
||||||
|
});
|
||||||
|
|
||||||
let loadMoreGroupMembersParams = ref({
|
let loadMoreGroupMembersParams = ref({
|
||||||
n: 100,
|
n: 100,
|
||||||
offset: 0,
|
offset: 0,
|
||||||
@@ -1285,6 +1304,14 @@
|
|||||||
inviteGroupDialog.value.visible = true;
|
inviteGroupDialog.value.visible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function showPreviousInstancesGroupDialog(groupRef) {
|
||||||
|
const D = previousInstancesGroupDialog.value;
|
||||||
|
D.groupRef = groupRef;
|
||||||
|
D.visible = true;
|
||||||
|
D.openFlg = true;
|
||||||
|
nextTick(() => (D.openFlg = false));
|
||||||
|
}
|
||||||
|
|
||||||
function setGroupRepresentation(groupId) {
|
function setGroupRepresentation(groupId) {
|
||||||
handleGroupRepresentationChange(groupId, true);
|
handleGroupRepresentationChange(groupId, true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,161 @@
|
|||||||
|
<template>
|
||||||
|
<safe-dialog
|
||||||
|
ref="previousInstancesGroupDialogRef"
|
||||||
|
:visible.sync="isVisible"
|
||||||
|
:title="t('dialog.previous_instances.header')"
|
||||||
|
width="1000px"
|
||||||
|
append-to-body
|
||||||
|
>
|
||||||
|
<div style="display: flex; align-items: center; justify-content: space-between">
|
||||||
|
<span style="font-size: 14px" v-text="previousInstancesGroupDialog.groupRef.name"></span>
|
||||||
|
<el-input
|
||||||
|
v-model="previousInstancesGroupDialogTable.filters[0].value"
|
||||||
|
:placeholder="t('dialog.previous_instances.search_placeholder')"
|
||||||
|
style="width: 150px"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<data-tables v-loading="loading" v-bind="previousInstancesGroupDialogTable" style="margin-top: 10px">
|
||||||
|
<el-table-column :label="t('table.previous_instances.date')" prop="created_at" sortable width="170">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ formatDateFilter(scope.row.created_at, 'long') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column :label="t('table.previous_instances.instance_name')" prop="name">
|
||||||
|
<template #default="scope">
|
||||||
|
<LocationWorld
|
||||||
|
:locationobject="scope.row.$location"
|
||||||
|
:grouphint="scope.row.groupName"
|
||||||
|
:currentuserid="currentUser.id"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column :label="t('table.previous_instances.instance_creator')" prop="location">
|
||||||
|
<template #default="scope">
|
||||||
|
<DisplayName
|
||||||
|
:userid="scope.row.$location.userId"
|
||||||
|
:location="scope.row.$location.tag"
|
||||||
|
:force-update-key="previousInstancesGroupDialog.forceUpdate"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column :label="t('table.previous_instances.time')" prop="time" width="100" sortable>
|
||||||
|
<template #default="scope">
|
||||||
|
<span v-text="scope.row.timer"></span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column :label="t('table.previous_instances.action')" width="90" align="right">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-s-data"
|
||||||
|
size="mini"
|
||||||
|
@click="showPreviousInstancesInfoDialog(scope.row.location)"
|
||||||
|
/>
|
||||||
|
<el-button
|
||||||
|
v-if="shiftHeld"
|
||||||
|
style="color: #f56c6c"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-close"
|
||||||
|
size="mini"
|
||||||
|
@click="deleteGameLogGroupInstance(scope.row)"
|
||||||
|
/>
|
||||||
|
<el-button
|
||||||
|
v-else
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-close"
|
||||||
|
size="mini"
|
||||||
|
@click="deleteGameLogGroupInstancePrompt(scope.row)"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</data-tables>
|
||||||
|
</safe-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, reactive, computed, watch, nextTick, getCurrentInstance } from 'vue';
|
||||||
|
import { parseLocation, compareByCreatedAt, timeToText, removeFromArray, adjustDialogZ, formatDateFilter } from '../../../shared/utils';
|
||||||
|
import { database } from '../../../service/database';
|
||||||
|
import { useI18n } from 'vue-i18n-bridge';
|
||||||
|
import { useInstanceStore, useUiStore, useUserStore } from '../../../stores';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const { showPreviousInstancesInfoDialog } = useInstanceStore();
|
||||||
|
const { shiftHeld } = useUiStore();
|
||||||
|
const { currentUser } = useUserStore();
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
|
const previousInstancesGroupDialogRef = ref(null);
|
||||||
|
const loading = ref(false);
|
||||||
|
|
||||||
|
const previousInstancesGroupDialogTable = reactive({
|
||||||
|
data: [],
|
||||||
|
filters: [{ prop: 'groupName', value: '' }],
|
||||||
|
tableProps: {
|
||||||
|
stripe: true,
|
||||||
|
size: 'mini',
|
||||||
|
defaultSort: { prop: 'created_at', order: 'descending' }
|
||||||
|
},
|
||||||
|
pageSize: 10,
|
||||||
|
paginationProps: { small: true, layout: 'sizes,prev,pager,next,total', pageSizes: [10, 25, 50, 100] }
|
||||||
|
});
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
previousInstancesGroupDialog: { type: Object, required: true },
|
||||||
|
});
|
||||||
|
const emit = defineEmits(['update:previousInstancesGroupDialog']);
|
||||||
|
|
||||||
|
const isVisible = computed({
|
||||||
|
get: () => props.previousInstancesGroupDialog.visible,
|
||||||
|
set: (value) => {
|
||||||
|
emit('update:previousInstancesGroupDialog', {
|
||||||
|
...props.previousInstancesGroupDialog,
|
||||||
|
visible: value
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
watch(() => props.previousInstancesGroupDialog.openFlg, () => {
|
||||||
|
if (props.previousInstancesGroupDialog.visible) {
|
||||||
|
nextTick(() => {
|
||||||
|
adjustDialogZ(previousInstancesGroupDialogRef.value.$el);
|
||||||
|
});
|
||||||
|
refreshPreviousInstancesGroupTable();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function refreshPreviousInstancesGroupTable() {
|
||||||
|
loading.value = true;
|
||||||
|
const D = props.previousInstancesGroupDialog;
|
||||||
|
database.getPreviousInstancesByGroupName(D.groupRef.name).then((data) => {
|
||||||
|
const array = [];
|
||||||
|
for (const ref of data.values()) {
|
||||||
|
ref.$location = parseLocation(ref.location);
|
||||||
|
ref.timer = ref.time > 0 ? timeToText(ref.time) : '';
|
||||||
|
array.push(ref);
|
||||||
|
}
|
||||||
|
array.sort(compareByCreatedAt);
|
||||||
|
previousInstancesGroupDialogTable.data = array;
|
||||||
|
loading.value = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteGameLogGroupInstance(row) {
|
||||||
|
database.deleteGameLogInstanceByInstanceId({ location: row.location });
|
||||||
|
removeFromArray(previousInstancesGroupDialogTable.data, row);
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteGameLogGroupInstancePrompt(row) {
|
||||||
|
proxy.$confirm('Continue? Delete GameLog Instance', 'Confirm', {
|
||||||
|
confirmButtonText: 'Confirm',
|
||||||
|
cancelButtonText: 'Cancel',
|
||||||
|
type: 'info',
|
||||||
|
callback: (action) => { if (action === 'confirm') deleteGameLogGroupInstance(row); }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -847,7 +847,7 @@
|
|||||||
<el-tooltip
|
<el-tooltip
|
||||||
:disabled="hideTooltips"
|
:disabled="hideTooltips"
|
||||||
placement="top"
|
placement="top"
|
||||||
:content="t('dialog.user.info.open_previouse_instance')">
|
:content="t('dialog.user.info.open_previous_instance')">
|
||||||
<div class="x-friend-item" @click="showPreviousInstancesUserDialog(userDialog.ref)">
|
<div class="x-friend-item" @click="showPreviousInstancesUserDialog(userDialog.ref)">
|
||||||
<div class="detail">
|
<div class="detail">
|
||||||
<span class="name">
|
<span class="name">
|
||||||
@@ -886,7 +886,7 @@
|
|||||||
<el-tooltip
|
<el-tooltip
|
||||||
:disabled="hideTooltips || currentUser.id !== userDialog.id"
|
:disabled="hideTooltips || currentUser.id !== userDialog.id"
|
||||||
placement="top"
|
placement="top"
|
||||||
:content="t('dialog.user.info.open_previouse_instance')">
|
:content="t('dialog.user.info.open_previous_instance')">
|
||||||
<div class="x-friend-item" @click="showPreviousInstancesUserDialog(userDialog.ref)">
|
<div class="x-friend-item" @click="showPreviousInstancesUserDialog(userDialog.ref)">
|
||||||
<div class="detail">
|
<div class="detail">
|
||||||
<span class="name">
|
<span class="name">
|
||||||
|
|||||||
@@ -682,7 +682,7 @@
|
|||||||
<el-tooltip
|
<el-tooltip
|
||||||
:disabled="hideTooltips"
|
:disabled="hideTooltips"
|
||||||
placement="top"
|
placement="top"
|
||||||
:content="t('dialog.user.info.open_previouse_instance')">
|
:content="t('dialog.user.info.open_previous_instance')">
|
||||||
<div class="x-friend-item" @click="showPreviousInstancesWorldDialog(worldDialog.ref)">
|
<div class="x-friend-item" @click="showPreviousInstancesWorldDialog(worldDialog.ref)">
|
||||||
<div class="detail">
|
<div class="detail">
|
||||||
<span class="name">
|
<span class="name">
|
||||||
|
|||||||
@@ -915,7 +915,8 @@
|
|||||||
"role_description": "Description:",
|
"role_description": "Description:",
|
||||||
"role_updated_at": "Updated At:",
|
"role_updated_at": "Updated At:",
|
||||||
"role_created_at": "Created At:",
|
"role_created_at": "Created At:",
|
||||||
"role_permissions": "Permissions:"
|
"role_permissions": "Permissions:",
|
||||||
|
"last_visited": "Last Visited"
|
||||||
},
|
},
|
||||||
"posts": {
|
"posts": {
|
||||||
"header": "Posts",
|
"header": "Posts",
|
||||||
|
|||||||
@@ -829,7 +829,7 @@
|
|||||||
"instance_hard_closed": "hard closed",
|
"instance_hard_closed": "hard closed",
|
||||||
"close_instance": "Close Instance",
|
"close_instance": "Close Instance",
|
||||||
"instance_age_gated": "age gated",
|
"instance_age_gated": "age gated",
|
||||||
"open_previouse_instance": "Open Previous Instance"
|
"open_previous_instance": "Open Previous Instance"
|
||||||
},
|
},
|
||||||
"groups": {
|
"groups": {
|
||||||
"header": "Groups",
|
"header": "Groups",
|
||||||
@@ -1091,7 +1091,8 @@
|
|||||||
"role_description": "Description:",
|
"role_description": "Description:",
|
||||||
"role_updated_at": "Updated At:",
|
"role_updated_at": "Updated At:",
|
||||||
"role_created_at": "Created At:",
|
"role_created_at": "Created At:",
|
||||||
"role_permissions": "Permissions:"
|
"role_permissions": "Permissions:",
|
||||||
|
"last_visited": "Last Visited"
|
||||||
},
|
},
|
||||||
"posts": {
|
"posts": {
|
||||||
"header": "Posts",
|
"header": "Posts",
|
||||||
|
|||||||
@@ -1035,7 +1035,8 @@
|
|||||||
"role_description": "Descripción:",
|
"role_description": "Descripción:",
|
||||||
"role_updated_at": "Actualizado el:",
|
"role_updated_at": "Actualizado el:",
|
||||||
"role_created_at": "Creado el:",
|
"role_created_at": "Creado el:",
|
||||||
"role_permissions": "Permisos:"
|
"role_permissions": "Permisos:",
|
||||||
|
"last_visited": "Última visita"
|
||||||
},
|
},
|
||||||
"posts": {
|
"posts": {
|
||||||
"header": "Publicaciones",
|
"header": "Publicaciones",
|
||||||
|
|||||||
@@ -985,7 +985,8 @@
|
|||||||
"role_description": "Description :",
|
"role_description": "Description :",
|
||||||
"role_updated_at": "Mis à jour le :",
|
"role_updated_at": "Mis à jour le :",
|
||||||
"role_created_at": "Créé le :",
|
"role_created_at": "Créé le :",
|
||||||
"role_permissions": "Permissions :"
|
"role_permissions": "Permissions :",
|
||||||
|
"last_visited": "Dernière visite"
|
||||||
},
|
},
|
||||||
"posts": {
|
"posts": {
|
||||||
"header": "Publications",
|
"header": "Publications",
|
||||||
|
|||||||
@@ -869,7 +869,8 @@
|
|||||||
"role_description": "Description:",
|
"role_description": "Description:",
|
||||||
"role_updated_at": "Updated At:",
|
"role_updated_at": "Updated At:",
|
||||||
"role_created_at": "Created At:",
|
"role_created_at": "Created At:",
|
||||||
"role_permissions": "Permissions:"
|
"role_permissions": "Permissions:",
|
||||||
|
"last_visited": "Last Visited"
|
||||||
},
|
},
|
||||||
"posts": {
|
"posts": {
|
||||||
"header": "Posts",
|
"header": "Posts",
|
||||||
|
|||||||
@@ -798,7 +798,7 @@
|
|||||||
"instance_hard_closed": "hard closed",
|
"instance_hard_closed": "hard closed",
|
||||||
"close_instance": "インスタンスを閉じる",
|
"close_instance": "インスタンスを閉じる",
|
||||||
"instance_age_gated": "年齢制限あり",
|
"instance_age_gated": "年齢制限あり",
|
||||||
"open_previouse_instance": "前回のインスタンスを開く"
|
"open_previous_instance": "前回のインスタンスを開く"
|
||||||
},
|
},
|
||||||
"groups": {
|
"groups": {
|
||||||
"header": "グループ",
|
"header": "グループ",
|
||||||
@@ -1058,7 +1058,8 @@
|
|||||||
"role_description": "説明:",
|
"role_description": "説明:",
|
||||||
"role_updated_at": "更新日:",
|
"role_updated_at": "更新日:",
|
||||||
"role_created_at": "作成日:",
|
"role_created_at": "作成日:",
|
||||||
"role_permissions": "権限:"
|
"role_permissions": "権限:",
|
||||||
|
"last_visited": "最終訪問"
|
||||||
},
|
},
|
||||||
"posts": {
|
"posts": {
|
||||||
"header": "投稿",
|
"header": "投稿",
|
||||||
|
|||||||
@@ -869,7 +869,8 @@
|
|||||||
"role_description": "설명:",
|
"role_description": "설명:",
|
||||||
"role_updated_at": "업데이트:",
|
"role_updated_at": "업데이트:",
|
||||||
"role_created_at": "생성일:",
|
"role_created_at": "생성일:",
|
||||||
"role_permissions": "권한:"
|
"role_permissions": "권한:",
|
||||||
|
"last_visited": "마지막 방문"
|
||||||
},
|
},
|
||||||
"posts": {
|
"posts": {
|
||||||
"header": "Posts",
|
"header": "Posts",
|
||||||
|
|||||||
@@ -869,7 +869,8 @@
|
|||||||
"role_description": "Opis:",
|
"role_description": "Opis:",
|
||||||
"role_updated_at": "Zaktualizowano:",
|
"role_updated_at": "Zaktualizowano:",
|
||||||
"role_created_at": "Data utworzenia:",
|
"role_created_at": "Data utworzenia:",
|
||||||
"role_permissions": "Uprawnienia:"
|
"role_permissions": "Uprawnienia:",
|
||||||
|
"last_visited": "Ostatnia wizyta"
|
||||||
},
|
},
|
||||||
"posts": {
|
"posts": {
|
||||||
"header": "Posty",
|
"header": "Posty",
|
||||||
|
|||||||
@@ -869,7 +869,8 @@
|
|||||||
"role_description": "Descrição:",
|
"role_description": "Descrição:",
|
||||||
"role_updated_at": "Atualizado Em:",
|
"role_updated_at": "Atualizado Em:",
|
||||||
"role_created_at": "Criado Em:",
|
"role_created_at": "Criado Em:",
|
||||||
"role_permissions": "Permissões:"
|
"role_permissions": "Permissões:",
|
||||||
|
"last_visited": "Última visita"
|
||||||
},
|
},
|
||||||
"posts": {
|
"posts": {
|
||||||
"header": "Publicações",
|
"header": "Publicações",
|
||||||
|
|||||||
@@ -783,7 +783,7 @@
|
|||||||
"instance_hard_closed": "жёстко закрыт",
|
"instance_hard_closed": "жёстко закрыт",
|
||||||
"close_instance": "Закрыть инстанс",
|
"close_instance": "Закрыть инстанс",
|
||||||
"instance_age_gated": "ограничение по возросту",
|
"instance_age_gated": "ограничение по возросту",
|
||||||
"open_previouse_instance": "Открыть предыдущий инстанс"
|
"open_previous_instance": "Открыть предыдущий инстанс"
|
||||||
},
|
},
|
||||||
"groups": {
|
"groups": {
|
||||||
"header": "Группы",
|
"header": "Группы",
|
||||||
@@ -1039,7 +1039,8 @@
|
|||||||
"role_description": "Описание:",
|
"role_description": "Описание:",
|
||||||
"role_updated_at": "Обновлена:",
|
"role_updated_at": "Обновлена:",
|
||||||
"role_created_at": "Создана:",
|
"role_created_at": "Создана:",
|
||||||
"role_permissions": "Права доступа:"
|
"role_permissions": "Права доступа:",
|
||||||
|
"last_visited": "Последний визит"
|
||||||
},
|
},
|
||||||
"posts": {
|
"posts": {
|
||||||
"header": "Объявления",
|
"header": "Объявления",
|
||||||
|
|||||||
@@ -802,7 +802,7 @@
|
|||||||
"instance_hard_closed": "ปิดถาวร",
|
"instance_hard_closed": "ปิดถาวร",
|
||||||
"close_instance": "ปิดอินสแตนซ์",
|
"close_instance": "ปิดอินสแตนซ์",
|
||||||
"instance_age_gated": "จำกัดอายุ",
|
"instance_age_gated": "จำกัดอายุ",
|
||||||
"open_previouse_instance": "เปิดอินสแตนซ์ก่อนหน้า"
|
"open_previous_instance": "เปิดอินสแตนซ์ก่อนหน้า"
|
||||||
},
|
},
|
||||||
"groups": {
|
"groups": {
|
||||||
"header": "กลุ่ม",
|
"header": "กลุ่ม",
|
||||||
@@ -1064,7 +1064,8 @@
|
|||||||
"role_description": "คำอธิบาย:",
|
"role_description": "คำอธิบาย:",
|
||||||
"role_updated_at": "อัปเดตเมื่อ:",
|
"role_updated_at": "อัปเดตเมื่อ:",
|
||||||
"role_created_at": "สร้างเมื่อ:",
|
"role_created_at": "สร้างเมื่อ:",
|
||||||
"role_permissions": "สิทธิ์:"
|
"role_permissions": "สิทธิ์:",
|
||||||
|
"last_visited": "เข้าชมล่าสุด"
|
||||||
},
|
},
|
||||||
"posts": {
|
"posts": {
|
||||||
"header": "โพสต์",
|
"header": "โพสต์",
|
||||||
|
|||||||
@@ -869,7 +869,8 @@
|
|||||||
"role_description": "Mô tả:",
|
"role_description": "Mô tả:",
|
||||||
"role_updated_at": "Cập nhật lúc:",
|
"role_updated_at": "Cập nhật lúc:",
|
||||||
"role_created_at": "Tạo lúc:",
|
"role_created_at": "Tạo lúc:",
|
||||||
"role_permissions": "Quyền:"
|
"role_permissions": "Quyền:",
|
||||||
|
"last_visited": "Lần truy cập cuối"
|
||||||
},
|
},
|
||||||
"posts": {
|
"posts": {
|
||||||
"header": "Posts",
|
"header": "Posts",
|
||||||
|
|||||||
@@ -804,7 +804,7 @@
|
|||||||
"instance_hard_closed": "房间已关闭",
|
"instance_hard_closed": "房间已关闭",
|
||||||
"close_instance": "关闭该房间",
|
"close_instance": "关闭该房间",
|
||||||
"instance_age_gated": "房间具有年龄限制",
|
"instance_age_gated": "房间具有年龄限制",
|
||||||
"open_previouse_instance": "打开上次加入的房间"
|
"open_previous_instance": "打开上次加入的房间"
|
||||||
},
|
},
|
||||||
"groups": {
|
"groups": {
|
||||||
"header": "群组",
|
"header": "群组",
|
||||||
@@ -1066,7 +1066,8 @@
|
|||||||
"role_description": "描述:",
|
"role_description": "描述:",
|
||||||
"role_updated_at": "更新时间:",
|
"role_updated_at": "更新时间:",
|
||||||
"role_created_at": "创建时间:",
|
"role_created_at": "创建时间:",
|
||||||
"role_permissions": "权限:"
|
"role_permissions": "权限:",
|
||||||
|
"last_visited": "上次访问"
|
||||||
},
|
},
|
||||||
"posts": {
|
"posts": {
|
||||||
"header": "帖子",
|
"header": "帖子",
|
||||||
|
|||||||
@@ -823,7 +823,7 @@
|
|||||||
"instance_hard_closed": "強制關閉",
|
"instance_hard_closed": "強制關閉",
|
||||||
"close_instance": "關閉房間",
|
"close_instance": "關閉房間",
|
||||||
"instance_age_gated": "年齡限制",
|
"instance_age_gated": "年齡限制",
|
||||||
"open_previouse_instance": "開啟上個房間"
|
"open_previous_instance": "開啟上個房間"
|
||||||
},
|
},
|
||||||
"groups": {
|
"groups": {
|
||||||
"header": "群組",
|
"header": "群組",
|
||||||
@@ -1085,7 +1085,8 @@
|
|||||||
"role_description": "敘述:",
|
"role_description": "敘述:",
|
||||||
"role_updated_at": "更新時間:",
|
"role_updated_at": "更新時間:",
|
||||||
"role_created_at": "創建時間:",
|
"role_created_at": "創建時間:",
|
||||||
"role_permissions": "權限:"
|
"role_permissions": "權限:",
|
||||||
|
"last_visited": "上次造訪"
|
||||||
},
|
},
|
||||||
"posts": {
|
"posts": {
|
||||||
"header": "貼文",
|
"header": "貼文",
|
||||||
|
|||||||
@@ -304,6 +304,55 @@ const gameLog = {
|
|||||||
return ref;
|
return ref;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
async getLastGroupVisit(groupName) {
|
||||||
|
var ref = {
|
||||||
|
created_at: '',
|
||||||
|
groupName: ''
|
||||||
|
};
|
||||||
|
await sqliteService.execute(
|
||||||
|
(row) => {
|
||||||
|
ref = {
|
||||||
|
created_at: row[0],
|
||||||
|
groupName: row[1]
|
||||||
|
};
|
||||||
|
},
|
||||||
|
`SELECT created_at, group_name FROM gamelog_location WHERE group_name = @groupName ORDER BY id DESC LIMIT 1`,
|
||||||
|
{
|
||||||
|
'@groupName': groupName
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return ref;
|
||||||
|
},
|
||||||
|
|
||||||
|
async getPreviousInstancesByGroupName(groupName) {
|
||||||
|
var data = new Map();
|
||||||
|
await sqliteService.execute(
|
||||||
|
(dbRow) => {
|
||||||
|
var time = 0;
|
||||||
|
if (dbRow[2]) {
|
||||||
|
time = dbRow[2];
|
||||||
|
}
|
||||||
|
var ref = data.get(dbRow[1]);
|
||||||
|
if (typeof ref !== 'undefined') {
|
||||||
|
time += ref.time;
|
||||||
|
}
|
||||||
|
var row = {
|
||||||
|
created_at: dbRow[0],
|
||||||
|
location: dbRow[1],
|
||||||
|
time,
|
||||||
|
worldName: dbRow[3],
|
||||||
|
groupName: dbRow[4]
|
||||||
|
};
|
||||||
|
data.set(row.location, row);
|
||||||
|
},
|
||||||
|
`SELECT created_at, location, time, world_name, group_name FROM gamelog_location WHERE group_name = @groupName ORDER BY id DESC`,
|
||||||
|
{
|
||||||
|
'@groupName': groupName
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return data;
|
||||||
|
},
|
||||||
|
|
||||||
async getLastSeen(input, inCurrentWorld) {
|
async getLastSeen(input, inCurrentWorld) {
|
||||||
if (inCurrentWorld) {
|
if (inCurrentWorld) {
|
||||||
var count = 2;
|
var count = 2;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import {
|
|||||||
import { $app } from '../app';
|
import { $app } from '../app';
|
||||||
import configRepository from '../service/config';
|
import configRepository from '../service/config';
|
||||||
import { watchState } from '../service/watchState';
|
import { watchState } from '../service/watchState';
|
||||||
|
import { database } from '../service/database.js';
|
||||||
import { groupDialogFilterOptions } from '../shared/constants/';
|
import { groupDialogFilterOptions } from '../shared/constants/';
|
||||||
import {
|
import {
|
||||||
replaceBioSymbols,
|
replaceBioSymbols,
|
||||||
@@ -45,6 +46,7 @@ export const useGroupStore = defineStore('Group', () => {
|
|||||||
memberSearchResults: [],
|
memberSearchResults: [],
|
||||||
instances: [],
|
instances: [],
|
||||||
memberRoles: [],
|
memberRoles: [],
|
||||||
|
lastVisit: '',
|
||||||
memberFilter: {
|
memberFilter: {
|
||||||
name: 'dialog.group.members.filters.everyone',
|
name: 'dialog.group.members.filters.everyone',
|
||||||
id: null
|
id: null
|
||||||
@@ -183,6 +185,7 @@ export const useGroupStore = defineStore('Group', () => {
|
|||||||
D.postsFiltered = [];
|
D.postsFiltered = [];
|
||||||
D.instances = [];
|
D.instances = [];
|
||||||
D.memberRoles = [];
|
D.memberRoles = [];
|
||||||
|
D.lastVisit = '';
|
||||||
D.memberSearch = '';
|
D.memberSearch = '';
|
||||||
D.memberSearchResults = [];
|
D.memberSearchResults = [];
|
||||||
D.galleries = {};
|
D.galleries = {};
|
||||||
@@ -215,6 +218,11 @@ export const useGroupStore = defineStore('Group', () => {
|
|||||||
D.ownerDisplayName = args1.ref.displayName;
|
D.ownerDisplayName = args1.ref.displayName;
|
||||||
return args1;
|
return args1;
|
||||||
});
|
});
|
||||||
|
database.getLastGroupVisit(D.ref.name).then((r) => {
|
||||||
|
if (D.id === args.ref.id) {
|
||||||
|
D.lastVisit = r.created_at;
|
||||||
|
}
|
||||||
|
});
|
||||||
instanceStore.applyGroupDialogInstances();
|
instanceStore.applyGroupDialogInstances();
|
||||||
getGroupDialogGroup(groupId);
|
getGroupDialogGroup(groupId);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user