Browse Source

Handle user list response.

main
Titouan Rigoudy 4 years ago
parent
commit
532a771e8d
1 changed files with 42 additions and 15 deletions
  1. +42
    -15
      src/modules/user/message.ts

+ 42
- 15
src/modules/user/message.ts View File

@ -1,34 +1,61 @@
import { AppDispatch } from "app/store"; import { AppDispatch } from "app/store";
import { userGetAll, userSetAll } from "modules/user/slice";
import {
UserState,
UserStatus,
userGetAll,
userSetAll,
} from "modules/user/slice";
import { SocketMessage, SocketMessageMiddleware } from "modules/socket/message"; import { SocketMessage, SocketMessageMiddleware } from "modules/socket/message";
function userListRequest(): SocketMessage { function userListRequest(): SocketMessage {
return "UserListRequest"; return "UserListRequest";
} }
// TODO: Adapt to new response format.
function handleUserListResponse(dispatch: AppDispatch, outerFields: any[]) {
if (outerFields.length !== 1) {
console.log("UserListResponse has wrong number of fields:", outerFields);
return;
function convertUserStatus(s: string): UserStatus {
switch (s) {
case "Offline":
return UserStatus.Offline;
case "Away":
return UserStatus.Away;
case "Online":
return UserStatus.Online;
default:
throw new TypeError(`invalid user status ${s}`);
} }
}
function convertUserListEntry(entry: any): UserState {
return {
name: entry.user_name,
status: convertUserStatus(entry.status),
averageSpeed: entry.average_speed,
numDownloads: entry.num_downloads,
numFiles: entry.num_files,
numFolders: entry.num_folders,
numFreeSlots: entry.num_free_slots,
country: entry.country,
};
}
const { users } = outerFields[0];
function handleUserListResponse(dispatch: AppDispatch, response: any): void {
const { users } = response;
if (users === undefined) { if (users === undefined) {
console.log("UserListResponse field has wrong shape:", outerFields[0]);
console.log("UserListResponse has wrong shape:", response);
return; return;
} }
dispatch(userSetAll(users));
const payload = [];
for (const [name, user] of users) {
payload.push(convertUserListEntry(user));
}
dispatch(userSetAll(payload));
} }
export const userSocketMessageMiddleware: SocketMessageMiddleware = { export const userSocketMessageMiddleware: SocketMessageMiddleware = {
// TODO: Adapt to new response format.
handleMessage: (dispatch, { variant, fields }) => {
switch (variant) {
case "UserListResponse":
handleUserListResponse(dispatch, fields);
break;
handleMessage: (dispatch, message) => {
if ("UserListResponse" in message) {
handleUserListResponse(dispatch, message["UserListResponse"]);
} }
}, },


Loading…
Cancel
Save