Skip to content

Instantly share code, notes, and snippets.

@marpontes
Created April 29, 2020 15:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marpontes/3c05a392bcf4488fbe3a5275ddaeb335 to your computer and use it in GitHub Desktop.
Save marpontes/3c05a392bcf4488fbe3a5275ddaeb335 to your computer and use it in GitHub Desktop.
Aggregates and charts speaker time using the meeting tool https://meet.jit.si
const aggSpeakerTime = () => $(".speaker-stats-item ")
.map((i, a) => ({
name: $(a).find('.speaker-stats-item__name').text(),
time: $(a).find('.speaker-stats-item__time').text()
}))
.toArray()
.sort((a, b) => a.name.substring(0, 1).toLowerCase() < b.name.substring(0, 1).toLowerCase() ? -1 : 1)
.reduce((acc, curr) => {
let data = acc[curr.name] || { seconds: 0 };
let mins = curr.time.match(/\d+m/) ? parseInt(curr.time.match(/\d+m/)[0].replace('m', ''), 10) : 0;
let secs = curr.time.match(/\d+s/) ? parseInt(curr.time.match(/\d+s/)[0].replace('s', ''), 10) : 0;
data.seconds = data.seconds + secs + (mins * 60);
data.duration = `${Math.floor(data.seconds / 60)}min${data.seconds % 60}s`
console.log(curr.name, data.seconds)
return {
...acc,
[curr.name]: data
}
}, {});
const chart = input => {
chart = "";
const keys = Object.keys(input).sort((a,b) => input[a].seconds > input[b].seconds ? -1 : 1);
const points = 20;
let max = 0;
let maxNameChars = 0;
// 1st pass - totals
for (let x = 0; x < keys.length; x++) {
max = Math.max(max, input[keys[x]].seconds);
maxNameChars = Math.max(maxNameChars, keys[x].length)
}
// 2nd pass - chart
for (let x = 0; x < keys.length; x++) {
const name = keys[x];
const thisTime = input[name].seconds;
const percent = thisTime / max;
const numPoints = Math.round(percent * points);
const numLeadingPoints = points - numPoints;
const nameLen = name.length;
const leadingNameLen = maxNameChars - nameLen;
chart += ' '.repeat(leadingNameLen)
chart += name
chart += " "
chart += '█'.repeat(numPoints)
chart += ' '.repeat(numLeadingPoints)
chart += " "
chart += input[name].duration
chart += '\n'
}
console.log(chart)
}
chart(aggSpeakerTime());
@marpontes
Copy link
Author

Example output:

          User0 ████████████████████ 10min 2s
            U02 ██████████████████   8min 52s
         User03 █████████████████    8min 18s
             05 ████████████████     7min 52s
       Thatuser ███████████████      7min 25s
         Other1 ████████             4min 5s
          HolyM █████                2min 39s
 That's aboutot █████                2min 17s
 marpontes (me) ████                 2min 7s
Dummy other usr ████                 1min 57s
    Call that q ██                   1min 10s
         Say to ██                   0min 49s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment