summaryrefslogblamecommitdiffstats
path: root/iss_get_data.js
blob: 03c2ec5cae8bdd8c628d07cf34dc8d68e72ebb95 (plain) (tree)






















































                                                                           
                                              

                                                                         

                                   
































                                                                     
#!/usr/bin/gjs
/* global imports */

const Json = imports.gi.Json;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Mainloop = imports.mainloop;

const AccuracyLevel = {
    COUNTRY: 1,
    CITY: 4,
    NEIGHBORHOOD: 5,
    STREET: 6,
    EXACT: 8
};

const ManagerIface = '<node> \
  <interface name="org.freedesktop.GeoClue2.Manager"> \
    <method name="GetClient"> \
      <arg type="o" name="client" direction="out"/> \
    </method> \
  </interface> \
</node>';
const ManagerProxy = Gio.DBusProxy.makeProxyWrapper(ManagerIface);

const ClientInterface = '<node> \
<interface name="org.freedesktop.GeoClue2.Client"> \
    <property name="Location" type="o" access="read"/> \
    <property name="DesktopId" type="s" access="readwrite"/> \
    <property name="RequestedAccuracyLevel" type="u" access="readwrite"/> \
    <property name="DistanceThreshold" type="u" access="readwrite"/> \
    <property name="Active" type="b" access="read"/> \
    <method name="Start"/> \
    <method name="Stop"/> \
    <signal name="LocationUpdated"> \
        <arg name="old" type="o"/> \
        <arg name="new" type="o"/> \
    </signal> \
</interface> \
</node>';
const ClientProxy = Gio.DBusProxy.makeProxyWrapper(ClientInterface);

const LocationInterface = '<node> \
<interface name="org.freedesktop.GeoClue2.Location"> \
    <property name="Latitude" type="d" access="read"/> \
    <property name="Longitude" type="d" access="read"/> \
    <property name="Accuracy" type="d" access="read"/> \
    <property name="Description" type="s" access="read"/> \
</interface> \
</node>';
const LocationProxy = Gio.DBusProxy.makeProxyWrapper(LocationInterface);

function get_ISS_coords() {
  const API_URL = 'http://api.open-notify.org/iss-now.json';
  let iss_api = Gio.file_new_for_uri(API_URL);
  iss_api.load_contents_async(null, function(iss_api, result) {
    let iss_coords = JSON.parse(iss_api.load_contents_finish(result)[1]);
    print(Object.keys(iss_coords));
    print(iss_coords.toSource());
  });
}

function onLocationUpdated(proxy, sender, [oldPath, newPath]) {
  let geoclueLocation = new LocationProxy(Gio.DBus.system,
                                          "org.freedesktop.GeoClue2",
                                          newPath);
  print('location:');
  print('\tlatitude = ' + geoclueLocation.Latitude);
  print('\tlongitude = ' + geoclueLocation.Longitude);
  print('\taccuracy = ' + geoclueLocation.Accuracy);
  print('\tdescription = ' + geoclueLocation.Description);
  //this._updateLocation(location);
  Mainloop.quit();
}

const _managerProxy = new ManagerProxy(Gio.DBus.system,
  'org.freedesktop.GeoClue2', '/org/freedesktop/GeoClue2/Manager');

const [clientAddr] = _managerProxy.GetClientSync();

const clientProxy = new ClientProxy(Gio.DBus.system,
    'org.freedesktop.GeoClue2', clientAddr);
clientProxy.DesktopId = 'gnome-shell-ISS_Above';
clientProxy.DistanceThreshold = 10000;
clientProxy.RequestedAccuracyLevel = AccuracyLevel.EXACT;
let updatedId = clientProxy.connectSignal('LocationUpdated',
    onLocationUpdated);
clientProxy.StartRemote();

get_ISS_coords();

Mainloop.run();