aboutsummaryrefslogtreecommitdiffstats
path: root/uncompressed/mastodon/index.js
blob: a2ca0b79d0dd8539971210b5e7eddf629b322a83 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//'use strict';

module.exports = Franz => class Mastodon extends Franz {

  constructor(...args) {
    let _temp;
    //
    let serviceCache = {};
    // send service store for webview
    setInterval(() => {
      if (!window.franz) { // not present(near equal not initialize)
        return;
      }
      const services = window.franz.stores.services;
      // filter this recipe class
      const instancedServices = services.all.filter(service => service.recipe.constructor === this.constructor);
      // send 
      instancedServices.forEach(service => {
        let updated = false;
        serviceCache[service.id] = Object.keys(service).reduce((r, key) => {
          if (!service[key] || Object !== service[key].constructor) {
            updated = updated || serviceCache[key] !== service[key];
            r[key] = service[key];
          }
          return r;
        }, serviceCache[service.id] || {});
        if (updated) {
          service.webview.send('-service-update', service);
        }
      });
    }, 1000);
    return _temp = super(...args), this.events = {
    }, _temp;
  }

  async validateUrl(url) {
    try {
      const res = await window.fetch(`${url}/api/v1/instance/`, {
        method: 'GET',
        headers: {
          'Content-Type': 'application/json',
        },
      });
      const data = await res.json();
      // check url field in API response
      return Object.hasOwnProperty.call(data, 'uri');
    } catch (err) {
      console.error(err);
    }
    return false;
  }

};