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()
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
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
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)
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)
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)
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()
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
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")
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")
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()
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")
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()
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))
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
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))
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)
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")
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())
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)
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')
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
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") })
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')