def __str__(self): result = ["GPD Setting"] if self.setting_id in GPDID.types: result.append("%s" % GPDID.types[self.setting_id]) else: result.append(hex(self.setting_id)) if self.content_id > 0 and self.content_id < 6: try: if GPDID.types[self.setting_id] == 'Region': result.append(GamerTagConstants.Region[self.data]) elif GPDID.types[self.setting_id] == 'GamerZone': result.append(GamerTagConstants.GamerZone[self.data]) else: result.append(str(self.data)) except KeyError: result.append(str(self.data)) if self.content_id == 7: result.append(time.ctime(xboxtime.filetime2unixtime(self.data))) return " ".join(result)
def __init__(self, data, byte_order = '>'): self.achievement_id = None self.image_id = None self.gamer_score = None self.flags = None self.unlock_time = None self.name = None self.locked_desc = None self.unlocked_desc = None self.magic = struct.unpack(byte_order + 'I', data[0:4])[0] if self.magic != 28 or len(data) < 28: return self.achievement_id = struct.unpack(byte_order + 'I', data[4:8])[0] self.image_id = struct.unpack(byte_order + 'I', data[8:12])[0] self.gamer_score = struct.unpack(byte_order + 'I', data[12:16])[0] self.flags = struct.unpack(byte_order + 'I', data[16:20])[0] self.unlock_time = xboxtime.filetime2unixtime(struct.unpack(byte_order + 'q', data[20:28])[0]) end_name = 28 + data[28:].find('\x00\x00') self.name = data[28:end_name] end_locked_desc = end_name + 2 + data[end_name+2:].find('\x00\x00') #+2 to skip previous null self.locked_desc = data[end_name+2:end_locked_desc] end_unlocked_desc = end_locked_desc + 2 + data[end_locked_desc+2:].find('\x00\x00') self.unlocked_desc = data[end_locked_desc+2:end_unlocked_desc]