Small changes and fixes

This commit is contained in:
Natsumi
2023-08-07 19:48:12 +12:00
parent eb0503ad85
commit 9e082145c5
10 changed files with 217 additions and 79 deletions

View File

@@ -179,8 +179,8 @@ namespace VRCX
using (var stream = File.OpenRead(DownloadTempLocation)) using (var stream = File.OpenRead(DownloadTempLocation))
{ {
var hashBytes = sha256.ComputeHash(stream); var hashBytes = sha256.ComputeHash(stream);
var hashString = BitConverter.ToString(hashBytes).Replace("-", "").ToLowerInvariant(); var hashString = BitConverter.ToString(hashBytes).Replace("-", "");
if (hashString != hash[0]) if (!hashString.Equals(hash[0], StringComparison.OrdinalIgnoreCase))
{ {
logger.Error($"Updater: Hash check failed file:{hashString} remote:{hash[0]}"); logger.Error($"Updater: Hash check failed file:{hashString} remote:{hash[0]}");
// can't delete file yet because it's in use // can't delete file yet because it's in use

View File

@@ -305,6 +305,8 @@ namespace VRCX
var sb = new StringBuilder(256); var sb = new StringBuilder(256);
var state = new VRControllerState_t(); var state = new VRControllerState_t();
var poses = new TrackedDevicePose_t[OpenVR.k_unMaxTrackedDeviceCount];
system.GetDeviceToAbsoluteTrackingPose(ETrackingUniverseOrigin.TrackingUniverseStanding, 0, poses);
for (var i = 0u; i < OpenVR.k_unMaxTrackedDeviceCount; ++i) for (var i = 0u; i < OpenVR.k_unMaxTrackedDeviceCount; ++i)
{ {
var devClass = system.GetTrackedDeviceClass(i); var devClass = system.GetTrackedDeviceClass(i);
@@ -393,7 +395,8 @@ namespace VRCX
isCharging isCharging
? "charging" ? "charging"
: "discharging", : "discharging",
(batteryPercentage * 100).ToString() (batteryPercentage * 100).ToString(),
poses[i].eTrackingResult.ToString()
}; };
_deviceListLock.EnterWriteLock(); _deviceListLock.EnterWriteLock();
try try

View File

@@ -108,9 +108,12 @@ speechSynthesis.getVoices();
this.Set(key, JSON.stringify(value)); this.Set(key, JSON.stringify(value));
}; };
workerTimers.setInterval(function () { workerTimers.setInterval(
() => {
VRCXStorage.Flush(); VRCXStorage.Flush();
}, 5 * 60 * 1000); },
5 * 60 * 1000
);
// #endregion // #endregion
// #region | Init: Noty, Vue, Vue-Markdown, ElementUI, VueI18n, VueLazyLoad, Vue filters, dark stylesheet // #region | Init: Noty, Vue, Vue-Markdown, ElementUI, VueI18n, VueLazyLoad, Vue filters, dark stylesheet
@@ -5485,10 +5488,39 @@ speechSynthesis.getVoices();
pendingUpdate: false pendingUpdate: false
}; };
$app.data.updateSharedFeedTimer = null;
$app.data.updateSharedFeedPending = false;
$app.data.updateSharedFeedPendingForceUpdate = false;
$app.methods.updateSharedFeed = function (forceUpdate) { $app.methods.updateSharedFeed = function (forceUpdate) {
if (!this.friendLogInitStatus) { if (!this.friendLogInitStatus) {
return; return;
} }
if (this.updateSharedFeedTimer) {
if (forceUpdate) {
this.updateSharedFeedPendingForceUpdate = true;
}
this.updateSharedFeedPending = true;
} else {
this.updateSharedExecute(forceUpdate);
this.updateSharedFeedTimer = setTimeout(() => {
if (this.updateSharedFeedPending) {
this.updateSharedExecute(
this.updateSharedFeedPendingForceUpdate
);
}
this.updateSharedFeedTimer = null;
}, 150);
}
};
$app.methods.updateSharedExecute = function (forceUpdate) {
this.updateSharedFeedDebounce(forceUpdate);
this.updateSharedFeedTimer = null;
this.updateSharedFeedPending = false;
this.updateSharedFeedPendingForceUpdate = false;
};
$app.methods.updateSharedFeedDebounce = function (forceUpdate) {
this.updateSharedFeedGameLog(forceUpdate); this.updateSharedFeedGameLog(forceUpdate);
this.updateSharedFeedFeedTable(forceUpdate); this.updateSharedFeedFeedTable(forceUpdate);
this.updateSharedFeedNotificationTable(forceUpdate); this.updateSharedFeedNotificationTable(forceUpdate);
@@ -5684,6 +5716,14 @@ speechSynthesis.getVoices();
} }
} }
} }
// add tag colour
var tagColour = '';
if (ctx.userId) {
var tagRef = this.customUserTags.get(ctx.userId);
if (typeof tagRef !== 'undefined') {
tagColour = tagRef.colour;
}
}
// BlockedOnPlayerJoined, BlockedOnPlayerLeft, MutedOnPlayerJoined, MutedOnPlayerLeft // BlockedOnPlayerJoined, BlockedOnPlayerLeft, MutedOnPlayerJoined, MutedOnPlayerLeft
if (ctx.type === 'OnPlayerJoined' || ctx.type === 'OnPlayerLeft') { if (ctx.type === 'OnPlayerJoined' || ctx.type === 'OnPlayerLeft') {
for (var ref of this.playerModerationTable.data) { for (var ref of this.playerModerationTable.data) {
@@ -5725,6 +5765,7 @@ speechSynthesis.getVoices();
) { ) {
wristArr.push({ wristArr.push({
...ctx, ...ctx,
tagColour,
isFriend, isFriend,
isFavorite isFavorite
}); });
@@ -6043,6 +6084,12 @@ speechSynthesis.getVoices();
} }
var isFriend = this.friends.has(ctx.userId); var isFriend = this.friends.has(ctx.userId);
var isFavorite = API.cachedFavoritesByObjectId.has(ctx.userId); var isFavorite = API.cachedFavoritesByObjectId.has(ctx.userId);
// add tag colour
var tagColour = '';
var tagRef = this.customUserTags.get(ctx.userId);
if (typeof tagRef !== 'undefined') {
tagColour = tagRef.colour;
}
if ( if (
w < 20 && w < 20 &&
wristFilter[ctx.type] && wristFilter[ctx.type] &&
@@ -6051,7 +6098,8 @@ speechSynthesis.getVoices();
wristArr.push({ wristArr.push({
...ctx, ...ctx,
isFriend, isFriend,
isFavorite isFavorite,
tagColour
}); });
++w; ++w;
} }
@@ -7828,7 +7876,9 @@ speechSynthesis.getVoices();
$app.methods.getAvatarMemo = async function (avatarId) { $app.methods.getAvatarMemo = async function (avatarId) {
try { try {
return await database.getAvatarMemoDB(avatarId); return await database.getAvatarMemoDB(avatarId);
} catch (err) {console.error(err);} } catch (err) {
console.error(err);
}
return { return {
avatarId: '', avatarId: '',
editedAt: '', editedAt: '',
@@ -10121,6 +10171,13 @@ speechSynthesis.getVoices();
break; break;
} }
if (entry) { if (entry) {
// add tag colour
if (entry.userId) {
var tagRef = this.customUserTags.get(entry.userId);
if (typeof tagRef !== 'undefined') {
entry.tagColour = tagRef.colour;
}
}
this.queueGameLogNoty(entry); this.queueGameLogNoty(entry);
this.addGameLog(entry); this.addGameLog(entry);
} }
@@ -10523,7 +10580,7 @@ speechSynthesis.getVoices();
var isFavorite = API.cachedFavoritesByObjectId.has(userId); var isFavorite = API.cachedFavoritesByObjectId.has(userId);
var colour = ''; var colour = '';
var tagRef = this.customUserTags.get(userId); var tagRef = this.customUserTags.get(userId);
if (typeof tagRef !== 'undefined' && tagRef.colour) { if (typeof tagRef !== 'undefined') {
colour = tagRef.colour; colour = tagRef.colour;
} }
var feed = { var feed = {
@@ -16348,7 +16405,32 @@ speechSynthesis.getVoices();
} }
}); });
$app.data.updatePlayerListTimer = null;
$app.data.updatePlayerListPending = false;
$app.methods.getCurrentInstanceUserList = function () { $app.methods.getCurrentInstanceUserList = function () {
if (!this.friendLogInitStatus) {
return;
}
if (this.updatePlayerListTimer) {
this.updatePlayerListPending = true;
} else {
this.updatePlayerListExecute();
this.updatePlayerListTimer = setTimeout(() => {
if (this.updatePlayerListPending) {
this.updatePlayerListExecute();
}
this.updatePlayerListTimer = null;
}, 150);
}
};
$app.methods.updatePlayerListExecute = function () {
this.updatePlayerListDebounce();
this.updatePlayerListTimer = null;
this.updatePlayerListPending = false;
};
$app.methods.updatePlayerListDebounce = function () {
var users = []; var users = [];
var pushUser = function (ref) { var pushUser = function (ref) {
var photonId = ''; var photonId = '';
@@ -17880,7 +17962,7 @@ speechSynthesis.getVoices();
$app.data.ignoreAvatarMemoSave = false; $app.data.ignoreAvatarMemoSave = false;
$app.watch['avatarDialog.memo'] = function (value) { $app.watch['avatarDialog.memo'] = function () {
if (this.ignoreAvatarMemoSave) { if (this.ignoreAvatarMemoSave) {
this.ignoreAvatarMemoSave = false; this.ignoreAvatarMemoSave = false;
return; return;
@@ -17889,7 +17971,7 @@ speechSynthesis.getVoices();
if (D.visible === false) { if (D.visible === false) {
return; return;
} }
this.saveAvatarMemo(D.id, value == null ? D.memo : value); this.saveAvatarMemo(D.id, D.memo);
}; };
API.$on('LOGOUT', function () { API.$on('LOGOUT', function () {
@@ -21586,8 +21668,7 @@ speechSynthesis.getVoices();
} }
var name = ref.displayName; var name = ref.displayName;
if (ref.statusDescription) { if (ref.statusDescription) {
var statusRegex = var statusRegex = /(?:discord|dc|dis)(?: |=|:|˸|;)(.*)/gi.exec(
/(?:^|\n*)(?:(?:[^\n:])*(?::|˸|discord)[\t\v\f\r]*)?([^\n]*(#|)(?: )?\d{4})/gi.exec(
ref.statusDescription ref.statusDescription
); );
if (statusRegex) { if (statusRegex) {
@@ -21595,8 +21676,7 @@ speechSynthesis.getVoices();
} }
} }
if (!discord && ref.bio) { if (!discord && ref.bio) {
var bioRegex = var bioRegex = /(?:discord|dc|dis)(?: |=|:|˸|;)(.*)/gi.exec(
/(?:^|\n*)(?:(?:[^\n:])*(?::|˸|discord)[\t\v\f\r]*)?([^\n]*(#|)(?: )?\d{4})/gi.exec(
ref.bio ref.bio
); );
if (bioRegex) { if (bioRegex) {
@@ -21606,10 +21686,7 @@ speechSynthesis.getVoices();
if (!discord) { if (!discord) {
continue; continue;
} }
discord = discord.replace('', '#'); discord = discord.trim();
if (discord.substring(0, 1) === '#') {
discord = `${_(name)}${_(discord)}`;
}
lines.push(`${_(name)},${_(discord)}`); lines.push(`${_(name)},${_(discord)}`);
} }
this.discordNamesContent = lines.join('\n'); this.discordNamesContent = lines.join('\n');
@@ -21717,6 +21794,11 @@ speechSynthesis.getVoices();
name: $t('dialog.config_json.cache_directory'), name: $t('dialog.config_json.cache_directory'),
default: '%AppData%\\..\\LocalLow\\VRChat\\vrchat' default: '%AppData%\\..\\LocalLow\\VRChat\\vrchat'
}, },
picture_output_folder: {
name: $t('dialog.config_json.picture_directory'),
// my pictures folder
default: `%UserProfile%\\Pictures\\VRChat`
},
// dynamic_bone_max_affected_transform_count: { // dynamic_bone_max_affected_transform_count: {
// name: 'Dynamic Bones Limit Max Transforms (0 disable all transforms)', // name: 'Dynamic Bones Limit Max Transforms (0 disable all transforms)',
// default: '32', // default: '32',
@@ -21747,7 +21829,12 @@ speechSynthesis.getVoices();
$app.methods.saveVRChatConfigFile = function () { $app.methods.saveVRChatConfigFile = function () {
for (var item in this.VRChatConfigFile) { for (var item in this.VRChatConfigFile) {
if (this.VRChatConfigFile[item] === '') { if (item === 'picture_output_split_by_date') {
// this one is default true, it's special
if (this.VRChatConfigFile[item]) {
delete this.VRChatConfigFile[item];
}
} else if (this.VRChatConfigFile[item] === '') {
delete this.VRChatConfigFile[item]; delete this.VRChatConfigFile[item];
} else if ( } else if (
typeof this.VRChatConfigFile[item] === 'boolean' && typeof this.VRChatConfigFile[item] === 'boolean' &&
@@ -23417,6 +23504,7 @@ speechSynthesis.getVoices();
} }
}); });
API.cachedAvatarNames = new Map(); API.cachedAvatarNames = new Map();
this.customUserTags = new Map();
this.updateInstanceInfo = 0; this.updateInstanceInfo = 0;
}; };
@@ -23569,6 +23657,7 @@ speechSynthesis.getVoices();
ref.$customTag = data.Tag; ref.$customTag = data.Tag;
ref.$customTagColour = data.TagColour; ref.$customTagColour = data.TagColour;
} }
this.updateSharedFeed(true);
}; };
$app.methods.eventVrcxMessage = function (data) { $app.methods.eventVrcxMessage = function (data) {

View File

@@ -582,6 +582,7 @@ html
el-tag.x-tag-platform-quest(v-if="worldDialog.isQuest" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") Quest el-tag.x-tag-platform-quest(v-if="worldDialog.isQuest" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") Quest
el-tag.x-tag-platform-ios(v-if="worldDialog.isIos" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") iOS el-tag.x-tag-platform-ios(v-if="worldDialog.isIos" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") iOS
el-tag(v-if="worldDialog.avatarScalingDisabled" type="warning" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.world.tags.avatar_scaling_disabled') }} el-tag(v-if="worldDialog.avatarScalingDisabled" type="warning" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.world.tags.avatar_scaling_disabled') }}
el-tag(v-if="worldDialog.ref.unityPackageUrl" type="success" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.world.tags.future_proofing') }}
el-tag(type="info" effect="plain" size="mini" v-text="worldDialog.fileSize" style="margin-right:5px;margin-top:5px") el-tag(type="info" effect="plain" size="mini" v-text="worldDialog.fileSize" style="margin-right:5px;margin-top:5px")
el-tag.x-link(v-if="worldDialog.inCache" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px" @click="openFolderGeneric(worldDialog.cachePath)") el-tag.x-link(v-if="worldDialog.inCache" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px" @click="openFolderGeneric(worldDialog.cachePath)")
span(v-text="worldDialog.cacheSize") span(v-text="worldDialog.cacheSize")
@@ -757,6 +758,7 @@ html
el-tag(v-if="avatarDialog.ref.releaseStatus === 'public'" type="success" effect="plain" size="mini" style="margin-right:5px") {{ $t('dialog.avatar.tags.public') }} el-tag(v-if="avatarDialog.ref.releaseStatus === 'public'" type="success" effect="plain" size="mini" style="margin-right:5px") {{ $t('dialog.avatar.tags.public') }}
el-tag(v-else type="danger" effect="plain" size="mini" style="margin-right:5px") {{ $t('dialog.avatar.tags.private') }} el-tag(v-else type="danger" effect="plain" size="mini" style="margin-right:5px") {{ $t('dialog.avatar.tags.private') }}
el-tag(v-if="avatarDialog.isQuestFallback" type="info" effect="plain" size="mini" style="margin-right:5px") {{ $t('dialog.avatar.tags.fallback') }} el-tag(v-if="avatarDialog.isQuestFallback" type="info" effect="plain" size="mini" style="margin-right:5px") {{ $t('dialog.avatar.tags.fallback') }}
el-tag(v-if="avatarDialog.ref.unityPackageUrl" type="success" effect="plain" size="mini" style="margin-right:5px") {{ $t('dialog.avatar.tags.future_proofing') }}
el-tag(v-if="avatarDialog.fileSize" type="info" effect="plain" size="mini" v-text="avatarDialog.fileSize" style="margin-right:5px") el-tag(v-if="avatarDialog.fileSize" type="info" effect="plain" size="mini" v-text="avatarDialog.fileSize" style="margin-right:5px")
el-tag.x-link(v-if="avatarDialog.inCache" type="info" effect="plain" size="mini" @click="openFolderGeneric(avatarDialog.cachePath)") el-tag.x-link(v-if="avatarDialog.inCache" type="info" effect="plain" size="mini" @click="openFolderGeneric(avatarDialog.cachePath)")
span(v-text="avatarDialog.cacheSize") span(v-text="avatarDialog.cacheSize")
@@ -1383,6 +1385,7 @@ html
span #[span(v-text="getVRChatScreenshotResolution()")] #[i.el-icon-arrow-down.el-icon--right] span #[span(v-text="getVRChatScreenshotResolution()")] #[i.el-icon-arrow-down.el-icon--right]
el-dropdown-menu(#default="dropdown") el-dropdown-menu(#default="dropdown")
el-dropdown-item(v-for="row in VRChatScreenshotResolutions" :key="row.index" v-text="row.name" :command="row") el-dropdown-item(v-for="row in VRChatScreenshotResolutions" :key="row.index" v-text="row.name" :command="row")
el-checkbox(v-model="VRChatConfigFile.picture_output_split_by_date" style="margin-top:5px;display:block" :checked="true") {{ $t('dialog.config_json.picture_sort_by_date') }}
el-checkbox(v-model="VRChatConfigFile.disableRichPresence" style="margin-top:5px;display:block") {{ $t('dialog.config_json.disable_discord_presence') }} el-checkbox(v-model="VRChatConfigFile.disableRichPresence" style="margin-top:5px;display:block") {{ $t('dialog.config_json.disable_discord_presence') }}
template(#footer) template(#footer)
el-button(size="small" @click="openExternalLink('https://docs.vrchat.com/docs/configuration-file')") {{ $t('dialog.config_json.vrchat_docs') }} el-button(size="small" @click="openExternalLink('https://docs.vrchat.com/docs/configuration-file')") {{ $t('dialog.config_json.vrchat_docs') }}

View File

@@ -634,6 +634,7 @@
"public": "Public", "public": "Public",
"private": "Private", "private": "Private",
"avatar_scaling_disabled": "Avatar Scaling Disabled", "avatar_scaling_disabled": "Avatar Scaling Disabled",
"future_proofing": "Future Proofing",
"labs": "Labs", "labs": "Labs",
"cache": "Cache" "cache": "Cache"
}, },
@@ -701,6 +702,7 @@
"public": "Public", "public": "Public",
"private": "Private", "private": "Private",
"fallback": "Fallback", "fallback": "Fallback",
"future_proofing": "Future Proofing",
"cache": "Cache" "cache": "Cache"
}, },
"labels": { "labels": {
@@ -915,9 +917,11 @@
"max_cache_size": "Max Cache Size [GB] (min 20)", "max_cache_size": "Max Cache Size [GB] (min 20)",
"cache_expiry_delay": "Cache Expiry [Days] (30 - 150)", "cache_expiry_delay": "Cache Expiry [Days] (30 - 150)",
"cache_directory": "Custom Cache Folder Location", "cache_directory": "Custom Cache Folder Location",
"picture_directory": "Custom Picture Folder Location",
"fpv_steadycam_fov": "First-Person Steadycam FOV", "fpv_steadycam_fov": "First-Person Steadycam FOV",
"camera_resolution": "Camera Resolution", "camera_resolution": "Camera Resolution",
"screenshot_resolution": "Screenshot Resolution", "screenshot_resolution": "Screenshot Resolution",
"picture_sort_by_date": "Sort pictures into folders by date",
"disable_discord_presence": "Disable Discord Rich Presence", "disable_discord_presence": "Disable Discord Rich Presence",
"vrchat_docs": "VRChat Docs", "vrchat_docs": "VRChat Docs",
"cancel": "Cancel", "cancel": "Cancel",
@@ -932,7 +936,7 @@
}, },
"set_world_tags": { "set_world_tags": {
"header": "Set World Tags", "header": "Set World Tags",
"avatar_scaling_disabled": "Avatar Scaling Disabled", "avatar_scaling_disabled": "Disable avatar scaling",
"enable_debugging": "Enable world debugging for others", "enable_debugging": "Enable world debugging for others",
"seprator": "Enter tags comma separated", "seprator": "Enter tags comma separated",
"cancel": "Cancel", "cancel": "Cancel",

View File

@@ -736,7 +736,7 @@
"last_updated": "最終更新日時", "last_updated": "最終更新日時",
"version": "バージョン", "version": "バージョン",
"platform": "プラットフォーム", "platform": "プラットフォーム",
"memo":"メモ (VRCX)", "memo": "メモ (VRCX)",
"memo_placeholder": "クリックしてメモを追加" "memo_placeholder": "クリックしてメモを追加"
}, },
"json": { "json": {

View File

@@ -708,7 +708,7 @@
"last_updated": "最后更新", "last_updated": "最后更新",
"version": "版本", "version": "版本",
"platform": "平台", "platform": "平台",
"memo":"VRCX 本地备忘信息", "memo": "VRCX 本地备忘信息",
"memo_placeholder": "点击添加备忘录" "memo_placeholder": "点击添加备忘录"
}, },
"json": { "json": {

View File

@@ -795,6 +795,23 @@ Vue.component('marquee-text', MarqueeText);
} }
}; };
$app.methods.trackingResultToClass = function (deviceStatus) {
switch (deviceStatus) {
case 'Uninitialized':
case 'Calibrating_OutOfRange':
case 'Fallback_RotationOnly':
return 'tracker-error';
case 'Calibrating_InProgress':
case 'Running_OutOfRange':
return 'tracker-warning';
case 'Running_OK':
default:
return '';
}
};
$app = new Vue($app); $app = new Vue($app);
window.$app = $app; window.$app = $app;
})(); })();

View File

@@ -48,12 +48,12 @@ html
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| ▶️ #[span.name(v-text="feed.displayName")] | ▶️ #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")]
div(v-else-if="feed.type === 'OnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") div(v-else-if="feed.type === 'OnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| ◀️ #[span.name(v-text="feed.displayName")] | ◀️ #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")]
div(v-else-if="feed.type === 'OnPlayerJoining'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") div(v-else-if="feed.type === 'OnPlayerJoining'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail .detail
span.extra span.extra
@@ -69,7 +69,7 @@ html
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| 🎵 #[span.name(v-if="feed.displayName" v-text="feed.displayName" style="margin-right:5px")] | 🎵 #[span.name(v-if="feed.displayName" v-text="feed.displayName" style="margin-right:5px" :style="{'color':feed.tagColour}")]
template(v-if="feed.videoName") template(v-if="feed.videoName")
| #[span(v-text="feed.videoName")] | #[span(v-text="feed.videoName")]
template(v-else) template(v-else)
@@ -149,7 +149,7 @@ html
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
template(v-if="feed.displayName") template(v-if="feed.displayName")
| ✨ #[span.name(v-text="feed.displayName" style="margin-right:5px")] | ✨ #[span.name(v-text="feed.displayName" style="margin-right:5px" :style="{'color':feed.tagColour}")]
| #[location(:location="feed.instanceId" :hint="feed.worldName" :grouphint="feed.groupName")] | #[location(:location="feed.instanceId" :hint="feed.worldName" :grouphint="feed.groupName")]
template(v-else) template(v-else)
| ✨ User has spawned a portal | ✨ User has spawned a portal
@@ -157,7 +157,7 @@ html
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| 🧍 #[span.name(v-text="feed.displayName" style="margin-right:5px")] | 🧍 #[span.name(v-text="feed.displayName" style="margin-right:5px" :style="{'color':feed.tagColour}")]
template(v-if="feed.releaseStatus === 'public'") template(v-if="feed.releaseStatus === 'public'")
| #[i.x-user-status.online] | #[i.x-user-status.online]
template(v-else) template(v-else)
@@ -169,7 +169,7 @@ html
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| 💬 #[span.name(v-text="feed.displayName")] #[span(v-text="feed.text")] | 💬 #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")] #[span(v-text="feed.text")]
div(v-else-if="feed.type === 'Event'" class="x-friend-item") div(v-else-if="feed.type === 'Event'" class="x-friend-item")
.detail .detail
span.extra span.extra
@@ -179,7 +179,7 @@ html
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| 🟠 #[span.name(v-text="feed.message")] #[span.name(v-text="feed.displayName")] | 🟠 #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")] #[span.name(v-text="feed.message")]
div(v-else-if="feed.type === 'BlockedOnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") div(v-else-if="feed.type === 'BlockedOnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail .detail
span.extra span.extra
@@ -204,22 +204,22 @@ html
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| 🚫 #[span.name(v-text="feed.displayName")] | 🚫 #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")]
div(v-else-if="feed.type === 'Unblocked'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") div(v-else-if="feed.type === 'Unblocked'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| ⭕ #[span.name(v-text="feed.displayName")] | ⭕ #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")]
div(v-else-if="feed.type === 'Muted'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") div(v-else-if="feed.type === 'Muted'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| 🔇 #[span.name(v-text="feed.displayName")] | 🔇 #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")]
div(v-else-if="feed.type === 'Unmuted'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") div(v-else-if="feed.type === 'Unmuted'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| 🎤 #[span.name(v-text="feed.displayName")] | 🎤 #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")]
template(v-else) template(v-else)
template(v-for="feed in wristFeed") template(v-for="feed in wristFeed")
.x-friend-item(v-if="feed.type === 'GPS'" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") .x-friend-item(v-if="feed.type === 'GPS'" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
@@ -258,12 +258,12 @@ html
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] has joined | #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")] has joined
div(v-else-if="feed.type === 'OnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") div(v-else-if="feed.type === 'OnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] has left | #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")] has left
div(v-else-if="feed.type === 'OnPlayerJoining'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") div(v-else-if="feed.type === 'OnPlayerJoining'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail .detail
span.extra span.extra
@@ -278,7 +278,7 @@ html
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] | #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")]
span(style="margin-left:5px;margin-right:5px") changed video to span(style="margin-left:5px;margin-right:5px") changed video to
template(v-if="feed.videoName") template(v-if="feed.videoName")
| #[span(v-text="feed.videoName")] | #[span(v-text="feed.videoName")]
@@ -359,7 +359,7 @@ html
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
template(v-if="feed.displayName") template(v-if="feed.displayName")
| #[span.name(v-text="feed.displayName")] has spawned a portal to | #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")] has spawned a portal to
| #[location(:location="feed.instanceId" :hint="feed.worldName" :grouphint="feed.groupName" style="margin-left:5px")] | #[location(:location="feed.instanceId" :hint="feed.worldName" :grouphint="feed.groupName" style="margin-left:5px")]
template(v-else) template(v-else)
| User has spawned a portal | User has spawned a portal
@@ -367,7 +367,7 @@ html
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] | #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")]
span(style="margin-left:5px;margin-right:5px") changed into avatar span(style="margin-left:5px;margin-right:5px") changed into avatar
template(v-if="feed.releaseStatus === 'public'") template(v-if="feed.releaseStatus === 'public'")
| #[i.x-user-status.online] | #[i.x-user-status.online]
@@ -380,7 +380,7 @@ html
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] said #[span(v-text="feed.text")] | #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")] said #[span(v-text="feed.text")]
div(v-else-if="feed.type === 'Event'" class="x-friend-item") div(v-else-if="feed.type === 'Event'" class="x-friend-item")
.detail .detail
span.extra span.extra
@@ -390,7 +390,7 @@ html
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| External: #[span.name(v-text="feed.message")] #[span.name(v-text="feed.displayName")] | External: #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")] #[span.name(v-text="feed.message")]
div(v-else-if="feed.type === 'BlockedOnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") div(v-else-if="feed.type === 'BlockedOnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail .detail
span.extra span.extra
@@ -415,58 +415,58 @@ html
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] has blocked you | #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")] has blocked you
div(v-else-if="feed.type === 'Unblocked'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") div(v-else-if="feed.type === 'Unblocked'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] has unblocked you | #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")] has unblocked you
div(v-else-if="feed.type === 'Muted'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") div(v-else-if="feed.type === 'Muted'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] has muted you | #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")] has muted you
div(v-else-if="feed.type === 'Unmuted'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") div(v-else-if="feed.type === 'Unmuted'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail .detail
span.extra span.extra
span.time {{ feed.created_at | formatDate }} span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] has unmuted you | #[span.name(v-text="feed.displayName" :style="{'color':feed.tagColour}")] has unmuted you
.x-containerbottom .x-containerbottom
div(style="display:flex;flex-direction:row;flex-wrap:wrap") div(style="display:flex;flex-direction:row;flex-wrap:wrap")
div(v-for="device in devices" class="tracker-container") div(v-for="device in devices" class="tracker-container")
template(v-if="device[0] === 'leftController'") div(v-if="device[0] === 'leftController'" class="tracker-device" :class="trackingResultToClass(device[4])")
img(v-if="device[1] !== 'connected'" src="images/left_controller_status_off.png" class="tracker-device") img(v-if="device[1] !== 'connected'" src="images/left_controller_status_off.png" class="tracker-device" :class="trackingResultToClass(device[4])")
img(v-else-if="device[2] === 'charging'" src="images/left_controller_status_ready_charging.png" class="tracker-device") img(v-else-if="device[2] === 'charging'" src="images/left_controller_status_ready_charging.png")
img(v-else-if="device[3] < 20" src="images/left_controller_status_ready_low.png" class="tracker-device") img(v-else-if="device[3] < 20" src="images/left_controller_status_ready_low.png")
img(v-else src="images/left_controller_status_ready.png" class="tracker-device") img(v-else src="images/left_controller_status_ready.png")
span {{ device[3] }}% span {{ device[3] }}%
template(v-else-if="device[0] === 'rightController'") div(v-else-if="device[0] === 'rightController'" class="tracker-device" :class="trackingResultToClass(device[4])")
img(v-if="device[1] !== 'connected'" src="images/right_controller_status_off.png" class="tracker-device") img(v-if="device[1] !== 'connected'" src="images/right_controller_status_off.png")
img(v-else-if="device[2] === 'charging'" src="images/right_controller_status_ready_charging.png" class="tracker-device") img(v-else-if="device[2] === 'charging'" src="images/right_controller_status_ready_charging.png")
img(v-else-if="device[3] < 20" src="images/right_controller_status_ready_low.png" class="tracker-device") img(v-else-if="device[3] < 20" src="images/right_controller_status_ready_low.png")
img(v-else src="images/right_controller_status_ready.png" class="tracker-device") img(v-else src="images/right_controller_status_ready.png")
span {{ device[3] }}% span {{ device[3] }}%
template(v-else-if="device[0] === 'controller'") div(v-else-if="device[0] === 'controller'" class="tracker-device" :class="trackingResultToClass(device[4])")
img(v-if="device[1] !== 'connected'" src="images/controller_status_off.png" class="tracker-device") img(v-if="device[1] !== 'connected'" src="images/controller_status_off.png")
img(v-else-if="device[2] === 'charging'" src="images/controller_status_ready_charging.png" class="tracker-device") img(v-else-if="device[2] === 'charging'" src="images/controller_status_ready_charging.png")
img(v-else-if="device[3] < 20" src="images/controller_status_ready_low.png" class="tracker-device") img(v-else-if="device[3] < 20" src="images/controller_status_ready_low.png")
img(v-else src="images/controller_status_ready.png" class="tracker-device") img(v-else src="images/controller_status_ready.png")
span {{ device[3] }}% span {{ device[3] }}%
template(v-else-if="device[0] === 'tracker'") div(v-else-if="device[0] === 'tracker'" class="tracker-device" :class="trackingResultToClass(device[4])")
img(v-if="device[1] !== 'connected'" src="images/tracker_status_off.png" class="tracker-device") img(v-if="device[1] !== 'connected'" src="images/tracker_status_off.png")
img(v-else-if="device[2] === 'charging'" src="images/tracker_status_ready_charging.png" class="tracker-device") img(v-else-if="device[2] === 'charging'" src="images/tracker_status_ready_charging.png")
img(v-else-if="device[3] < 20" src="images/tracker_status_ready_low.png" class="tracker-device") img(v-else-if="device[3] < 20" src="images/tracker_status_ready_low.png")
img(v-else src="images/tracker_status_ready.png" class="tracker-device") img(v-else src="images/tracker_status_ready.png")
span {{ device[3] }}% span {{ device[3] }}%
template(v-else-if="device[0] === 'base'") div(v-else-if="device[0] === 'base'" class="tracker-device" :class="trackingResultToClass(device[4])")
img(v-if="device[1] !== 'connected'" src="images/base_status_off.png" class="tracker-device") img(v-if="device[1] !== 'connected'" src="images/base_status_off.png")
img(v-else src="images/base_status_ready.png" class="tracker-device") img(v-else src="images/base_status_ready.png")
span(v-if="device[3] !== 100") {{ device[3] }}x span(v-if="device[3] !== 100") {{ device[3] }}x
template(v-else) div(v-else class="tracker-device" :class="trackingResultToClass(device[4])")
img(v-if="device[1] !== 'connected'" src="images/other_status_off.png" class="tracker-device") img(v-if="device[1] !== 'connected'" src="images/other_status_off.png")
img(v-else-if="device[2] === 'charging'" src="images/other_status_ready_charging.png" class="tracker-device") img(v-else-if="device[2] === 'charging'" src="images/other_status_ready_charging.png")
img(v-else-if="device[3] < 20" src="images/other_status_ready_low.png" class="tracker-device") img(v-else-if="device[3] < 20" src="images/other_status_ready_low.png")
img(v-else src="images/other_status_ready.png" class="tracker-device") img(v-else src="images/other_status_ready.png")
span {{ device[3] }}% span {{ device[3] }}%
.x-containerbottom .x-containerbottom
template(v-if="nowPlaying.playing") template(v-if="nowPlaying.playing")

View File

@@ -178,8 +178,13 @@ button {
font-family: 'Noto Sans JP', 'Noto Sans KR', 'Noto Sans TC', 'Noto Sans SC', font-family: 'Noto Sans JP', 'Noto Sans KR', 'Noto Sans TC', 'Noto Sans SC',
'Meiryo UI', 'Malgun Gothic', 'Segoe UI', sans-serif; 'Meiryo UI', 'Malgun Gothic', 'Segoe UI', sans-serif;
line-height: normal; line-height: normal;
text-shadow: #000 0px 0px 3px, #000 0px 0px 3px, #000 0px 0px 3px, text-shadow:
#000 0px 0px 3px, #000 0px 0px 3px, #000 0px 0px 3px; #000 0px 0px 3px,
#000 0px 0px 3px,
#000 0px 0px 3px,
#000 0px 0px 3px,
#000 0px 0px 3px,
#000 0px 0px 3px;
} }
.x-app { .x-app {
@@ -411,4 +416,21 @@ i.x-user-status.busy {
.tracker-device img { .tracker-device img {
width: 32px; width: 32px;
height: 32px; height: 32px;
transition: all 0.25s linear;
}
.tracker-warning {
color: #fcfb00;
}
.tracker-warning img {
filter: saturate(250%) brightness(151%) hue-rotate(221deg);
}
.tracker-error {
color: #fd4444;
}
.tracker-error img {
filter: saturate(160%) brightness(88%) hue-rotate(161deg);
} }