def process(cls):

        payload = []

        while not cls.events.empty():
            # process each of the entries
            data = cls.events.get()
            entry = data.get("entry")

            isStation = (entry.get("IsStation"))
            FleetCarrier = (entry.get("SignalName") and entry.get(
                "SignalName")[-4] == '-' and entry.get("SignalName")[-8] == ' ' and isStation)
            FSSSignalDiscovered = (entry.get("event") == "FSSSignalDiscovered")
            USS = ("$USS" in entry.get("SignalName"))

            if not USS:

                payload.append({
                    "gameState": {
                        "systemName": data.get("system"),
                        "systemCoordinates": data.get("coords"),
                        "clientVersion": data.get("client"),
                        "isBeta": False
                    },
                    "rawEvents":
                    [entry],
                    "eventType": entry.get("event"),
                    "cmdrName": data.get("cmdr")
                })
                debug(payload)

        if len(payload) > 0:
            FSS.postFSS(payload)
def submit(cmdr, is_beta, system,SysFactionState,SysFactionAllegiance,DistFromStarLS, station, entry, x,y,z,body,lat,lon,client):
    if entry["event"] == "MaterialCollected" :
        debug(entry)
        MaterialsCollected(cmdr, is_beta, system, station, entry,client,lat,lon,body,SysFactionState,SysFactionAllegiance,x,y,z,DistFromStarLS).start()      
    if  "MaterialsReward" in entry:
        debug(entry)
        MaterialsReward  (cmdr, is_beta, system, station, entry,client,lat,lon,body,SysFactionState,SysFactionAllegiance,x,y,z,DistFromStarLS).start()
Beispiel #3
0
    def setRoute(cls, is_beta, client):
        if Emitter.route:
            return Emitter.route
        else:
            # first check to see if we are an official release
            repo, tag = client.split(".", 1)
            r = requests.get(
                "https://api.github.com/repos/canonn-science/{}/releases/tags/{}"
                .format(repo, tag))
            j = r.json()
            if r.status_code == 404:
                debug("Release not in github")
                Emitter.route = Emitter.urls.get("development")
            elif j.get("prerelease"):
                debug("Prerelease in github")
                Emitter.route = Emitter.urls.get("staging")
            else:
                debug("Release in github")
                Emitter.route = Emitter.urls.get("live")

            r = requests.get("{}/clientroutes?clientVersion={}".format(
                Emitter.urls.get("live"), client))
            j = r.json()
            if not r.status_code == requests.codes.ok or not j:
                debug("Using {}".format(Emitter.route))
            else:
                Emitter.route = j[0].get("route")
                debug("Route override to {}".format(Emitter.route))

        return Emitter.route
Beispiel #4
0
def submit(cmdr, is_beta, system, station, entry, client):

    #USS and FFS
    if entry["event"] in ("USSDrop", 'FSSSignalDiscovered'
                          ) and entry.get("USSType") == "$USS_Type_NonHuman;":

        # The have different names for teh same thing so normalise
        if entry["event"] == 'FSSSignalDiscovered':
            threatLevel = entry.get("ThreatLevel")
        else:
            threatLevel = entry.get("USSThreat")

        # see if you have system and threat levels store
        # Thsi will fail if it a new threat level in the current system
        try:
            globalfss = NHSS.fss.get(system)
            oldthreat = globalfss.get(threatLevel)
            #debug(globalfss)
        except:
            oldthreat = False

        if oldthreat:
            debug("Threat level already recorded here " + str(threatLevel))

        else:
            #debug("Threat {}".format(threatLevel))
            try:
                #set the threatlevel for the system
                NHSS.fss[system][threatLevel] = True
            except:
                #we couldnt find teh system so lets define it
                NHSS.fss[system] = {threatLevel: True}

            NHSS(cmdr, is_beta, system, entry, client).start()
 def setPayload(self):
     payload={}
     payload["system"]=self.system
     if self.body!=None:
         payload["body"]=  self.body
         payload["latitude"]=  self.lat
         payload["longitude"]=  self.lon
     else:
         payload["body"]=  None
         payload["latitude"]=  None
         payload["longitude"]=  None
     payload["collectedFrom"]="missionReward"
     payload["category"]=Category[self.entry["MaterialsReward"][0]["Category"]]
     payload["journalName"]=self.entry["MaterialsReward"][0]["Name"]
     #payload["journalLocalised"]=unicode(self.entry["MaterialsReward"][0].get("Name_Localised"))
     payload["count"]=self.entry["MaterialsReward"][0]["Count"]
     payload["distanceFromMainStar"] = self.DistFromStarLS
     payload["coordX"] = self.x
     payload["coordY"] = self.y
     payload["coordZ"] = self.z
     payload["isbeta"]= self.is_beta
     payload["clientVersion"]= self.client
     payload["factionState"]=self.state
     payload["factionAllegiance"]=self.allegiance
     debug(payload)
     return payload
Beispiel #6
0
 def Music(cls, system, cmdr, timestamp, client):
     if cls.state == 2:
         debug("Hyperdiction Detected")
         cls.show()
         x, y, z = Systems.edsmGetSystem(system)
         dx, dy, dz = Systems.edsmGetSystem(cls.target_system)
         canonn.emitter.post(
             "https://europe-west1-canonn-api-236217.cloudfunctions.net/postHDDetected",
             {
                 "cmdr": cmdr,
                 "system": system,
                 "timestamp": timestamp,
                 "x": x,
                 "y": y,
                 "z": z,
                 "destination": cls.target_system,
                 "dx": dx,
                 "dy": dy,
                 "dz": dz,
                 "client": client
             })
         plug.show_error("Hyperdiction: Exit to main menu")
     else:
         debug("FSDJUMP resetting state back")
         cls.hide()
         cls.state == 0
    def run(self):

        self.getExcluded()

        FSSSignalDiscovered = (self.entry.get(
            "event") == "FSSSignalDiscovered")
        USS = ("$USS" in self.entry.get("SignalName"))
        isStation = (self.entry.get("IsStation"))
        FleetCarrier = (self.entry.get("SignalName") and self.entry.get(
            "SignalName")[-4] == '-' and isStation)
        life_event = ("$Fixed_Event_Life" in self.entry.get("SignalName"))
        excluded = fssEmitter.excludefss.get(self.entry.get("SignalName"))

        # is this a code entry and do we want to record it?
        # We don't want to record any that don't begin with $ and and with ;
        if FSSSignalDiscovered and not excluded and not USS and not isStation and '$' in self.entry.get("SignalName"):

            url = self.getUrl()

            if "$Warzone_TG" in self.entry.get("SignalName"):
                payload = self.getAXPayload()
                self.gSubmitAXCZ(payload)
                self.modelreport = "axczfssreports"
            elif life_event:
                debug(self.entry.get("SignalName"))

                payload = self.getLcPayload()
                self.modelreport = "lcfssreports"
            else:
                payload = self.getFssPayload()
                self.modelreport = "reportfsses"

            self.send(payload, url)
Beispiel #8
0
    def __configure_event(self, event):
        "Handle resizing."

        if not self.resized:
            debug("News widget resize")
            self.resized = True
            self.configure(wraplength=event.width)
            self.after(500, self.__reset)
Beispiel #9
0
def journal_entry(cmdr, is_beta, system, station, entry, state):
    # capture some stats when we launch not read for that yet
    # startup_stats(cmdr)

    if entry.get("StarSystem") and entry.get("StarPos"):
        Systems.storeSystem(entry.get("StarSystem"), entry.get("StarPos"))

    if "SystemFaction" in entry:

        SystemFaction = entry.get("SystemFaction")
        debug(SystemFaction)
        try:
            this.SysFactionState = SystemFaction["FactionState"]
        except:
            this.SysFactionState = None
        debug("SysFaction's state is" + str(this.SysFactionState))

    if "SystemAllegiance" in entry:

        SystemAllegiance = entry.get("SystemAllegiance")
        debug(SystemAllegiance)
        try:
            this.SysFactionAllegiance = SystemAllegiance
        except:
            this.SysFactionAllegiance = None
        debug("SysFaction's allegiance is" + str(this.SysFactionAllegiance))

    if "DistFromStarLS" in entry:
        '''"DistFromStarLS":144.821411'''
        try:
            this.DistFromStarLS = entry.get("DistFromStarLS")
        except:
            this.DistFromStarLS = None
        debug("DistFromStarLS=" + str(this.DistFromStarLS))

    if entry.get("event") == "FSDJump":
        Systems.storeSystem(system, entry.get("StarPos"))
        this.DistFromStarLS = None

    if entry.get("event") == "CarrierJump":
        system = entry.get("StarSystem")
        Systems.storeSystem(system, entry.get("StarPos"))

    if ('Body' in entry):
        this.body_name = entry['Body']

    if system:
        x, y, z = Systems.edsmGetSystem(system)
    else:
        x = None
        y = None
        z = None

    return journal_entry_wrapper(
        cmdr, is_beta, system, this.SysFactionState, this.SysFactionAllegiance,
        this.DistFromStarLS, station, entry, state, x, y, z, this.body_name,
        this.nearloc['Latitude'], this.nearloc['Longitude'],
        this.client_version)
Beispiel #10
0
    def journal_entry(cls, cmdr, is_beta, system, station, entry, state, x, y,
                      z, body, lat, lon, client):

        for event in whiteList.whitelist:

            if cls.matchkeys(event.get("definition"), entry):
                debug("Match {}".format(entry.get("event")))
                whiteListSetter(cmdr, is_beta, system, station, entry, state,
                                x, y, z, body, lat, lon, client).start()
Beispiel #11
0
 def FSDJump(cls, system):
     if cls.state == 1 and not system == cls.target_system:
         debug("FSDJump setting state 2 {} {}".format(
             system, cls.target_system))
         cls.state = 2
     else:
         debug("FSDJUMP resetting state back {} {}".format(
             system, cls.target_system))
         cls.state = 0
Beispiel #12
0
 def update(self):
     if self.visible():
         if self.news_data:
             news = self.news_data[self.news_pos]
             self.hyperlink['url'] = news['link']
             self.hyperlink['text'] = html.unescape(
                 news['title']['rendered'])
         else:
             debug("News download not complete")
Beispiel #13
0
    def __init__(self, parent, release, gridrow):
        "Initialise the ``News``."

        padx, pady = 10, 5  # formatting
        sticky = tk.EW + tk.N  # full width, stuck to the top
        anchor = tk.NW

        Frame.__init__(self, parent)

        self.installed = False

        self.auto = tk.IntVar(value=config.getint("AutoUpdate"))
        self.novoices = tk.IntVar(value=config.getint("NoVoices"))
        self.rmbackup = tk.IntVar(value=config.getint("RemoveBackup"))

        self.columnconfigure(1, weight=1)
        self.grid(row=gridrow, column=0, sticky="NSEW", columnspan=2)

        self.label = tk.Label(self, text="Release:")
        self.label.grid(row=0, column=0, sticky=sticky)

        self.hyperlink = ReleaseLink(self)
        self.hyperlink.grid(row=0, column=1, sticky="NSEW")

        self.button = tk.Button(self,
                                text="Click here to upgrade",
                                command=self.click_installer)
        self.button.grid(row=1, column=0, columnspan=2, sticky="NSEW")
        self.button.grid_remove()

        self.release = release
        self.news_count = 0
        self.news_pos = 0
        self.minutes = 0
        self.latest = {}

        # self.hyperlink.bind('<Configure>', self.hyperlink.configure_event)
        self.bind('<<ReleaseUpdate>>', self.release_update)

        debug(config.get('Canonn:RemoveBackup'))

        self.update(None)

        if self.rmbackup.get(
        ) == 1 and config.get('Canonn:RemoveBackup') != "None":
            delete_dir = config.get('Canonn:RemoveBackup')
            debug('Canonn:RemoveBackup {}'.format(delete_dir))
            try:
                shutil.rmtree(delete_dir)

            except:
                error("Cant delete {}".format(delete_dir))

            # lets not keep trying
            config.set('Canonn:RemoveBackup', "None")
Beispiel #14
0
    def journal_entry(cls, cmdr, is_beta, system, SysFactionState,
                      SysFactionAllegiance, DistFromStarLS, station, entry,
                      state, x, y, z, body, lat, lon, client):

        if entry.get("event") == "SendText":
            message_part = entry.get("Message").lower().split(' ')
            canonn_capture = (len(message_part) > 1)
            canonn_capture = (canonn_capture and message_part[0] == 'canonn')
            canonn_capture = (canonn_capture and message_part[1] == 'capture')

        if entry.get("event") == "SendText" and canonn_capture:
            structured_msg = (len(message_part) > 3 and message_part[2]
                              in ("guardian", "thargoid", "human", "biology",
                                  "geology", "other", "nsp")
                              and message_part[3].isnumeric())
            if structured_msg:
                site_type = message_part[2]
                site_index = message_part[3]
            else:
                site_type = None
                site_index = None

            # fetch status.json
            journal_dir = config.get(
                'journaldir') or config.default_journal_dir
            with open(
                    os.path.join(os.path.expanduser(journal_dir),
                                 'status.json')) as json_file:
                status = json.load(json_file)

            if structured_msg:
                comment = " ".join(message_part[4:])
            else:
                comment = " ".join(message_part[2:])

            debug(status)

            canonn.emitter.post(
                "https://us-central1-canonn-api-236217.cloudfunctions.net/postStatus",
                {
                    "cmdr": cmdr,
                    "system": system,
                    "x": x,
                    "y": y,
                    "z": z,
                    "status": status,
                    "body": body,
                    "lat": status.get("Latitude"),
                    "lon": status.get("Longitude"),
                    "heading": status.get("Heading"),
                    "altitude": status.get("Altitude"),
                    "comment": comment,
                    "site_type": site_type,
                    "site_index": site_index
                })
def plugin_start(plugin_dir):
    # CanonnJournal.exclusions=
    tempexcludes = {}
    json.loads(open(os.path.join(plugin_dir, 'data/excludeevents.json')).read())
    for exc in json.loads(open(os.path.join(plugin_dir, 'data/excludeevents.json')).read()):
        tempexcludes[exc["eventName"]] = True

    CanonnJournal.exclusions = tempexcludes

    debug("Journal excludes got now firing off thread to update them")
    Exclude(CanonnJournal.get_excludes).start()
Beispiel #16
0
 def excludesystems(self):
     url = self.getUrl()
     if not HDReport.hdsystems:
         debug("getting old hdsystems")
         r = requests.get(
             "{}/{}?cmdrName={}&_sort=created_at:DESC&_limit=100".format(
                 url, self.modelreport, self.cmdr))
         for hd in r.json():
             debug("excluding: {}".format(hd.get("fromSystemName")))
             HDReport.hdsystems[hd.get("fromSystemName")] = hd.get(
                 "fromSystemName")
Beispiel #17
0
def submit(cmdr, is_beta, system, x, y, z, entry, body, lat, lon, client):
    if entry.get("event") == "FSSSignalDiscovered":
        fssEmitter(cmdr, is_beta, system, x, y, z,
                   entry, body, lat, lon, client).start()

    if entry.get("event") == "FSSSignalDiscovered" and not is_beta:
        FSS.put(cmdr, system, x, y, z, entry, client)

    if entry.get("event") in ("StartJump", "Location", "Docked", "Shutdown", "ShutDown", "SupercruiseExit", "SupercruiseEntry ") and not is_beta:
        debug("FSS Process")
        fssProcess(None).start()
Beispiel #18
0
def post_traffic(system, entry):
    debug("posting traffic {} ".format(system))
    try:
        canonn.emitter.post(
            "https://europe-west1-canonn-api-236217.cloudfunctions.net/postTraffic",
            {
                "system": system,
                "timestamp": entry.get("timestamp")
            })
    except:
        plug.show_error("Failed to post traffic")
        debug("Failed to post traffic for {}".format(system))
Beispiel #19
0
    def getLcPayload(self):
        payload = self.setPayload()
        payload["reportStatus"] = "pending"
        payload["systemAddress"] = self.entry.get("SystemAddress")
        payload["signalName"] = self.entry.get("SignalName")
        payload["signalNameLocalised"] = self.entry.get("SignalName_Localised")

        debug(payload)

        payload["rawJson"] = self.entry

        return payload
Beispiel #20
0
def submit(cmdr, is_beta, system, station, entry, client):
    hyperdictionDetector.submit(cmdr, is_beta, system, station, entry, client)

    hdsystems = ("Electra", "Asterope", "Delphi", "Merope", "Celaeno", "Maia",
                 "HR 1185", "HIP 23759", "Witch Head Sector DL-Y d17",
                 "Pleiades Sector HR-W d1-79", "Pleione",
                 "Witch Head Sector GW-W c1-4")

    if entry.get("event") == "StartJump" and entry.get(
            "JumpType") == "Hyperspace":
        # post traffic from reference systems
        if system in hdsystems:
            post_traffic(system, entry)

        post_distance(system, 'Merope', entry)
        post_distance(system, 'Witch Head Sector IR-W c1-9', entry)

    if entry["event"] == "Statistics" and entry.get("TG_ENCOUNTERS"):
        # there is no guarentee TG_ENCOUNTER_TOTAL_LAST_SYSTEM will have a value
        if entry.get("TG_ENCOUNTERS").get("TG_ENCOUNTER_TOTAL_LAST_SYSTEM"):

            lastsystem = entry.get("TG_ENCOUNTERS").get(
                "TG_ENCOUNTER_TOTAL_LAST_SYSTEM")
            gametime = entry.get("TG_ENCOUNTERS").get(
                "TG_ENCOUNTER_TOTAL_LAST_TIMESTAMP")
            year, remainder = gametime.split("-", 1)
            tgtime = "{}-{}".format(str(int(year) - 1286), remainder)

            if lastsystem == "Pleiades Sector IR-W d1-55":
                lastsystem = "Delphi"

            debug({"cmdr": cmdr, "system": lastsystem, "timestamp": tgtime})
            x, y, z = Systems.edsmGetSystem(lastsystem)
            # we are going to submit the hyperdiction here.
            canonn.emitter.post(
                "https://europe-west1-canonn-api-236217.cloudfunctions.net/postHD",
                {
                    "cmdr": cmdr,
                    "system": lastsystem,
                    "timestamp": tgtime,
                    "x": x,
                    "y": y,
                    "z": z
                })

            if lastsystem:
                if HDReport.hdsystems.get(lastsystem) == lastsystem:
                    debug("Hyperdiction already recorded here - session ")
                else:
                    HDReport(cmdr, is_beta, lastsystem, entry, client).start()
                    gSubmitHD(cmdr, x, y, z, entry).start()
    def get_excludes(cls):
        # hard coded may as well get the exclude from live
        url = "https://api.canonn.tech"
        tempexcludes = {}
        r = requests.get("{}/excludeevents?_limit=1000".format(url))

        if r.status_code == requests.codes.ok:
            # populate a local variable so other threads dont see incomplete results
            for exc in r.json():
                tempexcludes[exc["eventName"]] = True
            CanonnJournal.exclusions = tempexcludes
            debug("Jouurnal excludes got")
        else:
            error("{}/excludeevents".format(url))
Beispiel #22
0
    def run(self):
        debug("getting whiteList")
        url = "https://us-central1-canonn-api-236217.cloudfunctions.net/whitelist"
        r = requests.get(url)

        if not r.status_code == requests.codes.ok:
            error("whiteListGetter {} ".format(url))
            error(r.status_code)
            error(r.json())
            results = []
        else:
            results = r.json()

        self.callback(results)
Beispiel #23
0
    def release_update(self, event):

        # if we have just installed a new version we can end the cycle
        if not self.installed:

            if self.latest:
                debug("Latest is not null")

                # self.latest=requests.get("https://api.github.com/repos/canonn-science/EDMC-Canonn/releases/latest").json()

                current = self.version2number(self.release)
                release = self.version2number(self.latest.get("tag_name"))

                self.hyperlink['url'] = self.latest.get("html_url")
                self.hyperlink['text'] = "EDMC-Canonn: {}".format(
                    self.latest.get("tag_name"))

                if current == release:
                    self.grid_remove()
                elif current > release:
                    self.hyperlink['text'] = "Experimental Release {}".format(
                        self.release)
                    self.grid()
                else:

                    if self.auto.get() == 1:
                        self.hyperlink[
                            'text'] = "Release {}  Installed Please Restart".format(
                                self.latest.get("tag_name"))

                        if self.installer():
                            self.hyperlink[
                                'text'] = "Release {}  Installed Please Restart".format(
                                    self.latest.get("tag_name"))
                        else:
                            self.hyperlink[
                                'text'] = "Release {}  Upgrade Failed".format(
                                    self.latest.get("tag_name"))

                    else:
                        self.hyperlink['text'] = "Please Upgrade {}".format(
                            self.latest.get("tag_name"))
                        self.button.grid()
                        if self.novoices.get() != 1:
                            Player(Release.plugin_dir,
                                   ["sounds\\prefix.wav", "sounds\\nag1.wav"
                                    ]).start()
                    self.grid()
            else:
                debug("Latest is null")
Beispiel #24
0
    def run(self):
        # don't bother sending beta
        if self.is_beta == 'N':
            debug("sending gSubmitKill")
            url = "https://us-central1-canonn-api-236217.cloudfunctions.net/submitKills?cmdrName={}&systemName={}&isBeta={}&reward={}&victimFaction={}".format(
                self.cmdr, self.system, self.is_beta, self.reward,
                self.victimFaction)

            r = requests.get(url)

            if not r.status_code == requests.codes.ok:
                error("gSubmitKills {} ".format(url))
                error(r.status_code)
                error(r.json())
Beispiel #25
0
    def postFSS(cls, payload):
        url = "https://us-central1-canonn-api-236217.cloudfunctions.net/postEvent"

        debug("posting FSS")
        debug(payload)
        r = requests.post(url, data=json.dumps(
            payload, ensure_ascii=False).encode('utf8'))
        if not r.status_code == requests.codes.ok:
            headers = r.headers
            contentType = str(headers['content-type'])
            if 'json' in contentType:
                error(json.dumps(r.json()))
            else:
                error(r.content)
            error(r.status_code)
Beispiel #26
0
    def download(self):
        "Update the news."

        if self.isvisible:

            debug("Fetching News")
            r = requests.get("https://canonn.science/wp-json/wp/v2/posts")
            r.encoding = 'utf-8'
            self.news_data = r.json()

            self.news_count = len(self.news_data)-1
            self.news_pos = 0
            self.minutes = REFRESH_CYCLES
            if not config.shutting_down:
                self.event_generate('<<NewsData>>', when='tail')
Beispiel #27
0
    def __init__(self, cmdr, x, y, z, entry):
        threading.Thread.__init__(self)
        self.cmdr = quote_plus(cmdr.encode('utf8'))
        self.system = quote_plus(
            entry.get("TG_ENCOUNTERS").get(
                "TG_ENCOUNTER_TOTAL_LAST_SYSTEM").encode('utf8'))
        self.x = x
        self.y = y
        self.z = z
        ts = entry.get("TG_ENCOUNTERS").get(
            "TG_ENCOUNTER_TOTAL_LAST_TIMESTAMP")
        year = int(ts[0:4]) - 1286
        self.eddatetime = "{}-{}:00".format(year, ts[4:])
        debug(self.eddatetime)

        self.entry = entry
Beispiel #28
0
    def run(self):
        debug("sending gSubmitCodex")
        url = "https://us-central1-canonn-api-236217.cloudfunctions.net/submitHD?cmdrName={}".format(
            self.cmdr)
        url = url + "&systemName={}".format(self.system)
        url = url + "&x={}".format(self.x)
        url = url + "&y={}".format(self.y)
        url = url + "&z={}".format(self.z)
        url = url + "&z={}".format(self.eddatetime)

        r = requests.get(url)

        if not r.status_code == requests.codes.ok:
            error("gSubmitHD {} ".format(url))
            error(r.status_code)
            error(r.json())
 def run(self):
     if not clientReport.done:
         clientReport.done = True
         debug("sending client report")
         # configure the payload
         payload = self.setPayload()
         url = self.getUrl()
         self.send(payload, url)
         debug("Google Client Report")
         canonn.emitter.post(
             "https://us-central1-canonn-api-236217.cloudfunctions.net/submitCient",
             {
                 "cmdr": payload.get("cmdrName"),
                 "beta": payload.get("isBeta"),
                 "client": payload.get("clientVersion"),
                 "autoupdate": payload.get("AutoUpdateDisabled")
             })
Beispiel #30
0
    def release_pull(self):
        self.latest = {}
        r = requests.get(
            "https://api.github.com/repos/canonn-science/EDMC-Canonn/releases/latest"
        )
        latest = r.json()
        # debug(latest)
        if not r.status_code == requests.codes.ok:

            error("Error fetching release from github")
            error(r.status_code)
            error(r.json())

        else:
            self.latest = latest
            debug("latest release downloaded")
            if not config.shutting_down:
                self.event_generate('<<ReleaseUpdate>>', when='tail')