➕ Adding hooks to reqest channel messages
✨ DOM manipulation for channel buttons moved to new module ❗ Message hooks themselves still require actual implementation but all the required fallbacks are there
This commit is contained in:
parent
33716e5b7b
commit
231141221b
@ -1,11 +1,13 @@
|
|||||||
// Requesting channel data here
|
// Requesting channel data here
|
||||||
const { ipcRenderer } = require('electron')
|
const { ipcRenderer } = require('electron')
|
||||||
const auth = require('./auth.js')
|
|
||||||
const { Request, BuildUrl } = require('./request.js')
|
|
||||||
|
|
||||||
const $ = require('jquery')
|
const $ = require('jquery')
|
||||||
const got = require('got')
|
const got = require('got')
|
||||||
|
|
||||||
|
const auth = require('./auth.js')
|
||||||
|
const { Request, BuildUrl } = require('./request.js')
|
||||||
|
const msg = require('./messages.js')
|
||||||
|
|
||||||
|
|
||||||
const VOICE_KIND = 1
|
const VOICE_KIND = 1
|
||||||
const TEXT_KIND = 2
|
const TEXT_KIND = 2
|
||||||
|
|
||||||
@ -52,8 +54,19 @@ function update_channels_list(proto, hostname, port, params) {
|
|||||||
console.log(channel)
|
console.log(channel)
|
||||||
let ref = document.getElementById(channel['name'])
|
let ref = document.getElementById(channel['name'])
|
||||||
ref.addEventListener('click', function() {
|
ref.addEventListener('click', function() {
|
||||||
$('#channel-name').text(`#${channel['name']}`)
|
// Collect parameters to pass into the actual handler
|
||||||
$('#channel-description').text(channel['description'])
|
const server = {
|
||||||
|
hostname: hostname,
|
||||||
|
port: port,
|
||||||
|
protocol: proto
|
||||||
|
}
|
||||||
|
const user = {
|
||||||
|
id: params['id'],
|
||||||
|
jwt: params['jwt']
|
||||||
|
}
|
||||||
|
|
||||||
|
// now for the actual handler where we deal with clicks
|
||||||
|
msg.recent_messages(user, server, channel)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
104
freechat-client/src/messages.js
Normal file
104
freechat-client/src/messages.js
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
const got = require('got')
|
||||||
|
const $ = require('jquery')
|
||||||
|
|
||||||
|
exports.Message = class _Message {
|
||||||
|
|
||||||
|
static TYPES = ['text', 'jpeg', 'png', 'webm', 'mp4']
|
||||||
|
|
||||||
|
constructor(id, time, content, type, uid, cid) {
|
||||||
|
this.id = id
|
||||||
|
this.time = time
|
||||||
|
this.uid = uid
|
||||||
|
this.cid = cid
|
||||||
|
|
||||||
|
this.type = type
|
||||||
|
|
||||||
|
// basically throw away the content since its not valid and we don't
|
||||||
|
// bother dealing with invalid data
|
||||||
|
if(Message.TYPES.indexOf(type) == -1) {
|
||||||
|
this.content = null
|
||||||
|
} else {
|
||||||
|
this.content = content
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {String} auth.jwt | jwt for quick auth
|
||||||
|
* @param {u64} auth.id user | id required by most/all endpoints
|
||||||
|
*
|
||||||
|
* @param {String} server.hostname | Hostname of target server
|
||||||
|
* @param {u16} server.port | Port to use for server
|
||||||
|
* @param {String} server.protocol | http/https (no colon)
|
||||||
|
*
|
||||||
|
* @param {u64} channel_id | Channel id to query
|
||||||
|
* @param {i64} start_time | Unix time to start fetching messages from
|
||||||
|
* @param {i64} end_time | Unix time to stop fetching messages from
|
||||||
|
*
|
||||||
|
* @returns Array<Message>
|
||||||
|
*
|
||||||
|
* @throws HTTPResponseError
|
||||||
|
*/
|
||||||
|
async function get_range(auth, server, channel_id, start_time, end_time, limit) {
|
||||||
|
const url = `${server.protocol}://${server.hostname}:${server.port}/message/get_range`
|
||||||
|
|
||||||
|
const response = await got(url, {
|
||||||
|
searchParams: {
|
||||||
|
id: auth.id,
|
||||||
|
jwt: auth.jwt,
|
||||||
|
channel_id: channel_id,
|
||||||
|
start_time: start_time,
|
||||||
|
end_time: end_time,
|
||||||
|
limit: limit // backend allows for fucked up values
|
||||||
|
},
|
||||||
|
responseType: 'json'
|
||||||
|
});
|
||||||
|
// assming 200 from this point out
|
||||||
|
let messages = []
|
||||||
|
for(const msg of response.body['messages']) {
|
||||||
|
messages.push(new Message(
|
||||||
|
msg['id'],
|
||||||
|
msg['time'],
|
||||||
|
msg['content'],
|
||||||
|
msg['type'],
|
||||||
|
msg['author_id'],
|
||||||
|
msg['channel_id']
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
return messages
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {String} auth.jwt | jwt for quick auth
|
||||||
|
* @param {u64} auth.id user | id required by most/all endpoints
|
||||||
|
*
|
||||||
|
* @param {String} server.hostname | Hostname of target server
|
||||||
|
* @param {u16} server.port | Port to use for server
|
||||||
|
* @param {String} server.protocol | http/https (no colon)
|
||||||
|
*
|
||||||
|
* @param {String} channel.description | Description of channel
|
||||||
|
* @params {u64} channel.id | channel id to query
|
||||||
|
* @returns void
|
||||||
|
*/
|
||||||
|
exports.recent_messages = function (auth, server, channel, start_time, end_time, limit) {
|
||||||
|
|
||||||
|
$('#channel-name').text('#' + channel['id'])
|
||||||
|
$('#channel-description').text(channel['description'])
|
||||||
|
|
||||||
|
const now = Math.floor(new Date().getTime() / 1000)
|
||||||
|
const yesterday = now - (60 * 60 * 24)
|
||||||
|
|
||||||
|
get_range(auth, server, channel['id'], yesterday, now, 1000)
|
||||||
|
.then(messages => {
|
||||||
|
console.log(messages)
|
||||||
|
},
|
||||||
|
http_err => {
|
||||||
|
console.log('Couldn\'t fetch data from server', http_err)
|
||||||
|
console.log(http_err.request)
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.log('Hanlding built in error')
|
||||||
|
})
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user