// ==UserScript==
// @name        data extraction linkedin
// @namespace   Violentmonkey Scripts
// @match       https://www.linkedin.com/*
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_getValues
// @grant       GM_setValues
// @grant       GM_listValues
// @grant       GM_deleteValue
// @grant       GM_deleteValues
// @version     0.1
// @author      Siarhei Siniak
// @license Unlicense
// @description 10/08/2024, 8:44:59 PM

// @inject-into document
// @require https://cdn.jsdelivr.net/npm/@violentmonkey/dom@1
// @require https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js
// @noframes
// ==/UserScript==

class Linkedin {
  constructor() {
    this.data = new Map();
  }

  parse_header() {
    return [
      $(
        '.scaffold-finite-scroll__content > div > .relative .update-components-header'
      ).map((i, o) => o.innerText),
      $(
        '.scaffold-finite-scroll__content > div > .relative .update-components-actor'
      ).map((i, o) => o.innerText)
    ] 
  }

  data_add (text) {
    if (self.data.has(text))
    {
      return;
    }

    self.data.set(text, {
      value: text,
      ts: (new Date()).valueOf(),
    });

    console.log(self.data[text]);
  }

  document_on_changed () {
    let self = this;
    let current_data = self.parse_header();

    current_data[0].forEach((i, o) => {
      self.data_add(o);
    });

    current_data[1].forEach((i, o) => {
      self.data_add(o);
    });
  }

  listener_add() {
    let self = this;

    return VM.observe(
      document.body,
      () => {
        self.document_on_changed();
      }
    );
  }
}

const l = new Linkedin();

const disconnect = l.listener_add();