Skip to content

Commit b05f167

Browse files
committed
allow messages to be read without marking them read
1 parent a2f6bc1 commit b05f167

File tree

3 files changed

+69
-6
lines changed

3 files changed

+69
-6
lines changed

src/requests/messages.js

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ const getAnnouncements = (limit) => {
276276
});
277277
}
278278

279-
const getMessageByID = (auth, id) => {
279+
const getMessageByID = (auth, id, autoUnread) => {
280280
return new Promise((resolve, reject) => {
281281

282282
if (Object.keys(announcements.messages).includes(id)) return resolve([announcements.messages[id]]);
@@ -299,8 +299,48 @@ const getMessageByID = (auth, id) => {
299299
.then(() => {
300300
try {
301301
const content = JSON.parse(response.body);
302-
const parsed = parseMessageContent(content.messages);
303-
return resolve(parsed);
302+
const parsed = parseMessageContent(content.messages, autoUnread);
303+
304+
if (autoUnread) {
305+
markMessageUnread(auth, id)
306+
.then(() => {
307+
return resolve(parsed);
308+
})
309+
.catch(err => {
310+
return reject(err);
311+
})
312+
} else {
313+
return resolve(parsed);
314+
}
315+
} catch (err) {
316+
console.log(err);
317+
return reject({ err: 'Failed to parse message content', message: err, status: 500 })
318+
}
319+
})
320+
.catch(err => {
321+
return reject(err);
322+
});
323+
});
324+
});
325+
}
326+
327+
const markMessageUnread = (auth, id) => {
328+
return new Promise((resolve, reject) => {
329+
const options = {
330+
'method': 'GET',
331+
'url': `https://espoo.inschool.fi/messages/markunread?mid=${id}`,
332+
'headers': {
333+
'Cookie': `Wilma2SID=${auth.Wilma2SID}`,
334+
'Content-Type': 'application/x-www-form-urlencoded'
335+
},
336+
'followRedirect': false,
337+
};
338+
339+
request(options, function (error, response) {
340+
messages.validateMessageUnread(response)
341+
.then(() => {
342+
try {
343+
return resolve({ success: true });
304344

305345
} catch (err) {
306346
console.log(err);
@@ -384,9 +424,10 @@ const parseAppointmentList = (raw, limit) => {
384424
}
385425

386426

387-
const parseMessageContent = (raw) => {
427+
const parseMessageContent = (raw, autoUnread) => {
388428
return raw.map(message => {
389429
return {
430+
autoUnread,
390431
fromWilma: true,
391432
id: message.Id,
392433
subject: message.Subject,
@@ -414,5 +455,6 @@ module.exports = {
414455
getMessageOutbox,
415456
getAppointments,
416457
getAnnouncements,
417-
getMessageByID
458+
getMessageByID,
459+
markMessageUnread
418460
}

src/requests/responses.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,24 @@ const validateMessageGetByID = (res) => {
8888
});
8989
}
9090

91+
92+
const validateMessageUnread = (res) => {
93+
const disallowed = ['Käyttö estetty - Wilma']
94+
return new Promise((resolve, reject) => {
95+
96+
97+
switch (res.statusCode) {
98+
case 302:
99+
return resolve(true);
100+
case 403:
101+
return reject({ err: "Invalid credentials (StudentID)", message: res.statusCode, status: 401 });
102+
default:
103+
return reject({ err: "Wilma responded with an unknown statuscode", message: res.statusCode, status: 501 });
104+
}
105+
106+
});
107+
}
108+
91109
const validateAbsencesGet = (res) => {
92110
return new Promise((resolve, reject) => {
93111
if (!res.body) {
@@ -268,6 +286,7 @@ module.exports = {
268286
validateMessagePost,
269287
validateMessageGet,
270288
validateMessageGetByID,
289+
validateMessageUnread
271290
},
272291
schedule: {
273292
validateScheduleGet

src/routers/messages.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ router.get('/messages/:id', async (req, res) => {
8989
const auth = await authentication.validateToken(req, res);
9090
if (!auth) return;
9191

92-
getMessageByID(auth, request.id)
92+
const autoUnread = req.query.autoUnread ? true : false;
93+
94+
getMessageByID(auth, request.id, autoUnread)
9395
.then(session => {
9496
res.json(session);
9597
})

0 commit comments

Comments
 (0)