Example #1
0
def ShowContract(*args):
    submit_metric('igb_show_contract')
    if len(args) < 1:
        log.LogError(
            'CCPEVE.ShowContract received insufficient arguments. This method requires a SolarSystemID and a ContractID.'
        )
        return
    if len(args) == 1:
        ids = args[0].split('//')
        if len(ids) < 2:
            log.LogError(
                'CCPEVE.ShowContract received old-style insufficient arguments. This method requires a SolarSystemID and a ContractID.'
            )
            return
        contractID = ids[1]
        solarSystemID = ids[0]
    else:
        contractID = args[1]
        solarSystemID = args[0]
    try:
        contractID = int(contractID)
    except:
        log.LogError(
            'CCPEVE.ShowContract failed to convert contractID to an integer:',
            contractID)
        return

    solarSystemID = browserutil.SanitizedSolarsystemID(solarSystemID)
    if contractID is None or solarSystemID is None:
        log.LogError(
            'CCPEVE.ShowContract received invalid contract or solarsystem IDs; contractID:',
            contractID, 'solarSystemID:', solarSystemID)
        return
    sm.GetService('contracts').ShowContract(contractID)
Example #2
0
    def CreateComponent(self, name, state):
        """
        Create a UIDesktop component and return it. This performs a little bit of namespace magic
        which looks upa UIDesktop within the 'screens' namespace. A registration mechanic would be better.
        We cannot define an absolute list in the core code, to cover both Eve and Wod.
        """
        component = UIDesktopComponent()
        if 'uiDesktopName' in state:
            component.uiDesktopName = str(state['uiDesktopName'])
            component.renderTarget = blue.resMan.GetResource(
                'dynamic:/%s' % component.uiDesktopName)
            if component.renderTarget is None:
                log.LogError(
                    'Failed to acquire a render target texture for %s' %
                    component.uiDesktopName)
            try:
                import screens
                component.width, component.height, component.format, component.liveUpdates, component.autoMipMap, component.updateFunction = getattr(
                    screens, component.uiDesktopName)
            except (AttributeError, ImportError):
                log.LogException()

            if not component.liveUpdates:
                component.active = False
                component.renderJob = trinity.CreateRenderJob()
        else:
            log.LogError('No uiDesktopName set')
        self.uiDesktops.append(component)
        return component
Example #3
0
 def LocalSvcCall(self, args):
     import htmlwriter
     import service
     kw = htmlwriter.PythonizeArgs(args)
     if 'service' not in kw:
         log.LogError('Invalid LocalSvc args:', args, ' (missing service)')
         return
     sv = kw['service']
     del kw['service']
     if 'method' not in kw:
         log.LogError('Invalid LocalSvc args:', args, ' (missing method)')
         return
     method = kw['method']
     del kw['method']
     svc = sm.GetService(sv)
     access = svc.__exportedcalls__.get(method, [])
     if access and type(access) in (types.ListType, types.TupleType):
         access = access[0]
     elif type(access) == types.DictType:
         access = access.get('role', 0)
     else:
         access = 0
     if access & service.ROLE_IGB:
         apply(getattr(svc, method), (), kw)
     else:
         log.LogError('Invalid LocalSvc args:', args,
                      ' (method not allowed)')
Example #4
0
    def CheckAds(self, hidden = False):
        alwaysShowAd = False
        try:
            extraParam = sm.GetService('patch').GetWebRequestParameters()
            if settings.public.ui.Get('usernames') is None and sm.GetService('patch').GetClientAffiliateID() != '':
                alwaysShowAd = True
            adUrl = WEB_EVE + '/ads.asp?%s' % extraParam
            sm.GetService('loading').LogInfo('ad URL:', adUrl)
            ads = corebrowserutil.GetStringFromURL(adUrl).read()
        except Exception as e:
            log.LogError('Failed to fetch ads', e)
            sys.exc_clear()
            self.CloseAd()
            return

        ads = [ ad for ad in ads.split('\r\n') if ad ]
        for ad in ads:
            imgpath, url = ad.split('|')
            didShowAd = settings.public.ui.Get(imgpath + 'Ad', 0)
            if not didShowAd or alwaysShowAd:
                try:
                    self.OpenAd(imgpath, url, hidden)
                except Exception as e:
                    log.LogError('Failed to display ad', e, imgpath, url)
                    sys.exc_clear()

                return
    def ShowRouteTo(self, args):
        fromto = args.split('::')
        if len(fromto) not in (1, 2):
            log.LogError(
                'failed to convert string to id in Browser:ShowRouteTo. Args:',
                args)
            return
        for i in fromto:
            try:
                id = int(i)
            except:
                log.LogError(
                    'failed to convert string to id in Browser:ShowRouteTo. Args:',
                    args)
                return

        if eve.session.stationid:
            sm.GetService('station').CleanUp()
        destinationID = int(fromto[0])
        sourceID = None
        if len(fromto) == 2:
            sourceID = int(fromto[1])
        sm.GetService('viewState').ActivateView('starmap',
                                                interestID=sourceID
                                                or session.regionid,
                                                drawRoute=(sourceID,
                                                           destinationID))
Example #6
0
    def LoadModel(self, fileName=None, loadedModel=None):
        shipType = cfg.invtypes.Get(self.typeID)
        if shipType is not None:
            g = cfg.graphics.GetIfExists(shipType.graphicID)
            self.raceID = getattr(g, 'gfxRaceID', None)
        if fileName is None and loadedModel is None:
            if self.typeID is None:
                return
            if shipType.graphicID is not None:
                if shipType.Graphic():
                    fileName = shipType.GraphicFile()
                    if not (fileName.lower().endswith('.red')
                            or fileName.lower().endswith('.blue')):
                        filename_and_turret_type = split(fileName, ' ')
                        fileName = filename_and_turret_type[0]
        self.LogInfo('LoadModel', fileName)
        if fileName is None and loadedModel is None:
            self.LogError(
                'Error: Object type %s has invalid graphicFile, using graphicID: %s'
                % (self.typeID, cfg.invtypes.Get(self.typeID).graphicID))
            return
        model = None
        if fileName is not None and len(fileName) and loadedModel is None:
            try:
                model = blue.resMan.LoadObject(fileName)
            except:
                model = None
                sys.exc_clear()

        else:
            model = loadedModel
        if not model:
            log.LogError('Could not load model for spaceobject. FileName:',
                         fileName, ' id:', self.id, ' typeID:',
                         getattr(self, 'typeID', '?'))
            log.LogError('Type is:', cfg.invtypes.Get(self.typeID).typeName)
            return
        self.model = model
        if not hasattr(model, 'translationCurve'):
            self.LogError('LoadModel - Model in', fileName,
                          "doesn't have a translationCurve.")
        else:
            model.translationCurve = self
            model.rotationCurve = self
        model.name = '%d' % self.id
        if hasattr(model, 'useCurves'):
            model.useCurves = 1
        if self.model is not None and self.HasBlueInterface(
                self.model, 'IEveSpaceObject2'):
            scene = sm.StartService('sceneManager').GetRegisteredScene(
                'default')
            if scene is not None:
                scene.objects.append(self.model)
        else:
            raise RuntimeError('Invalid object loaded by spaceObject: %s' %
                               str(self.model))
        sm.StartService('FxSequencer').NotifyModelLoaded(self.id)
        self.modelLoadedEvent.set()
Example #7
0
 def _Delete(self, item):
     if item is not None:
         stamp, callback, model, pool = item
         if model is None:
             log.LogError('ExplosionManager::_Delete item has no model')
         if pool is None:
             log.LogError('ExplosionManager::_Delete item has no pool')
         if callback is not None:
             callback(model)
         model.Stop()
         model.loadedCallback = None
         pool.Push(model)
         pool.DecRef(1)
Example #8
0
    def _StartXMLRPCServer(self):
        """Start the XML-RPC server."""
        self.rpcserver = None

        # win32 allows big ints to wrap 64k and produce undesired
        # port bindings.  sanity check.
        if self.bind_port < 1 or self.bind_port > 65535:
            log.LogError('bad port number %d' % self.bind_port)
            return

        try:
            rpcserver = service.Server(self.bind_host, self.bind_port)
        except socket.error, e:
            log.LogError('XML-RPC Server startup socket error: %s' % str(e))
            return
Example #9
0
 def GetZoomValues(self, model, thread):
     rad = 300
     camera = self.sceneManager.GetRegisteredCamera(self.name)
     trinity.WaitForResourceLoads()
     rad = model.GetBoundingSphereRadius()
     center = model.boundingSphereCenter
     localBB = model.GetLocalBoundingBox()
     if localBB[0] is None or localBB[1] is None:
         log.LogError(
             "Failed to get bounding info for ship. Odds are the ship wasn't loaded properly."
         )
         localBB = (trinity.TriVector(0, 0, 0), trinity.TriVector(0, 0, 0))
     model.translationCurve = trinity.TriVectorCurve()
     negativeCenter = (-center[0], -localBB[0].y + 180.0, -center[2])
     model.translationCurve.value = negativeCenter
     cameraparent = self.GetCameraParent()
     if cameraparent.translationCurve is not None:
         keyValue = cameraparent.translationCurve.keys[1].value
         if self.staticEnv:
             keyValue = (keyValue[0], -localBB[0].y + 180.0, keyValue[2])
         cameraparent.translationCurve.keys[0].value = keyValue
         key1Value = cameraparent.translationCurve.keys[1].value
         key1Value = (key1Value[0], -localBB[0].y + 180.0, key1Value[2])
         cameraparent.translationCurve.keys[1].value = key1Value
         cameraparent.translationCurve.start = blue.os.GetSimTime()
     zoomMultiplier = 1.0
     aspectRatio = trinity.GetAspectRatio()
     if aspectRatio > 1.6:
         zoomMultiplier = aspectRatio / 1.6
     self.minZoom = (rad + camera.frontClip + 50) * zoomMultiplier
     self.maxZoom = 2050.0
     self.layer.maxZoom = self.maxZoom
     self.layer.minZoom = self.minZoom
     return (rad + camera.frontClip) * 2
Example #10
0
def ShowPreview(typeID):
    safeTypeID = browserutil.SanitizedTypeID(int(typeID))
    if safeTypeID is None or not util.IsPreviewable(safeTypeID):
        log.LogError('Type ID passed to Client.ShowPreview was invalid:',
                     typeID)
        return
    sm.GetService('preview').PreviewType(safeTypeID)
Example #11
0
def _PrepareMainFlags(englishEntry, messageID):
    if englishEntry is None:
        log.LogError(
            'Didnt find the English text row for English tag. messageID (%s)' %
            messageID)
        return {}
    return {EXPORT_XML_DATAID: str(englishEntry.dataID)}
Example #12
0
    def GetReferees(self, data, *args):
        refList = []
        object = data.instanceData
        referrers = gc.get_referrers(object)
        myref = stackless.getcurrent().frame
        known = [
            gc.garbage,
            stackless.getcurrent().frame, object, data, self.scroll
        ]
        for ref in referrers:
            if ref not in known:
                try:
                    objectName = self.GetObjectName(ref)
                    listEntry = ScrollEntryNode(decoClass=SE_GenericCore,
                                                id=id,
                                                name=objectName,
                                                label=objectName,
                                                sublevel=1)
                    refList.append(listEntry)
                except Exception as e:
                    log.LogError(
                        'Failed naming reference! Need to do something about this error'
                    )

        return refList
Example #13
0
    def GetActiveStarColorMode(self):
        """
            This function will call functions that match Get*Options to pull in each
            sub folder of options
        """
        starscolorby = settings.user.ui.Get('starscolorby', mapcommon.STARMODE_SECURITY)
        if not self.starColorByID:
            self.starColorByID = {}
            groupList = ['Root'] + self.GetAllStarColorGroupLabels()
            try:
                groupList.remove('Sovereignty_Sovereignty')
            except ValueError:
                log.LogError('Error while removing a sov option from the prime list - a long load may be impending!')

            for groupName in groupList:
                func = getattr(self, 'Get%sOptions' % groupName, None)
                if func is None:
                    continue
                ops = func()
                for label, id in ops:
                    self.starColorByID[id] = (groupName, label)

        if starscolorby not in self.starColorByID:
            if type(starscolorby) == types.TupleType and starscolorby[0] in (mapcommon.STARMODE_FACTION, mapcommon.STARMODE_MILITIA, mapcommon.STARMODE_FACTIONEMPIRE):
                _starmode, factionID = starscolorby
                options = {mapcommon.STARMODE_FACTION: ('Sovereignty_Sovereignty', localization.GetByLabel('UI/Map/MapPallet/cbModeFactions')),
                 mapcommon.STARMODE_FACTIONEMPIRE: ('Sovereignty_Sovereignty', localization.GetByLabel('UI/Map/MapPallet/cbStarsByEmpireFactions'))}.get(_starmode, (None, None))
                colorBy, factionName = options
                if factionID >= 0:
                    factionName = cfg.eveowners.Get(factionID).name
                self.starColorByID[starscolorby] = (colorBy, factionName)
            elif starscolorby == mapcommon.STARMODE_SOV_STANDINGS:
                self.starColorByID[starscolorby] = ('Sovereignty_Sovereignty', localization.GetByLabel('UI/Map/MapPallet/cbStarsByStandings'))
        return self.starColorByID.get(starscolorby, (None, None))
def DeleteMessageGroups(mappingRule, key, lookup, *args):
    groupsToDelete = []
    for mapping in _mappingRules[mappingRule]:
        group = MessageGroup.Get(mapping.parentID)
        if mapping.lookup:
            if lookup is None:
                raise Exception('lookup defined in rule but not passed in!')
            for lookupItem in lookup.split('/'):
                for groupItem in MessageGroup.GetMessageGroupsByParentID(
                        parentID=group.groupID):
                    if groupItem.groupName == lookupItem:
                        groupsToDelete.append(groupItem.groupID)
                        break

        if mapping.pattern is not None:
            groupID = _GetGroupID(group.groupID, key)
            if groupID is not None:
                groupsToDelete.append(groupID)

    for groupID in groupsToDelete:
        g = MessageGroup.Get(groupID)
        if not g.Delete():
            log.LogError(
                'Localization update tool:: Error deleting group with id %d and name %s'
                % (groupID, g.groupName))
    def OnClick(self, *args):
        sm.StartService('ui').StopBlink(self)
        if self.destroyed:
            ClearMenuLayer()
            return
        if self.killsub and isinstance(self.action[1], list):
            uthread.new(self.action[1][0][1], self.action[1][0][2][0])
            ClearMenuLayer()
            return
        if isinstance(self.action[1], basestring):
            sm.StartService('gameui').Say(self.action[1])
        else:
            try:
                actionMenuLabel = self.action[0]
                labelPath = actionMenuLabel[0]
                if len(self.action) > 2 and self.action[2]:
                    funcArgs = self.action[2]
                    if sm.GetService('menu').CaptionIsInMultiFunctions(
                            labelPath) and not isinstance(
                                funcArgs[0], types.MethodType):
                        funcArgs = (funcArgs, )
                else:
                    funcArgs = ()
                apply(self.action[1], funcArgs)
            except Exception as e:
                log.LogError(e, 'Failed executing action:', self.action)
                log.LogException()
                sys.exc_clear()

        ClearMenuLayer()
    def DDXTabOffices(self):
        try:
            log.LogInfo('>>>DDXTabOffices')
            for each in self.rentableItems:
                if each.typeID == const.typeOfficeFolder:
                    pass
                else:
                    log.LogError('Unknown typeID on Corporation Folder %s (typeID) %s (CorpID)' % each.typeID, eve.session.corpid)
                    continue
                publiclyAvailable = self.GetEntryDataByName('offices_type%s_number%s' % (each.typeID, each.number)).checked
                if each.publiclyAvailable == publiclyAvailable:
                    continue
                each.publiclyAvailable = publiclyAvailable
                bFound = 0
                for row in self.modifiedRentableItems:
                    if row.typeID == each.typeID and row.number == each.number:
                        bFound = 1
                        row.publiclyAvailable = publiclyAvailable
                        break

                if not bFound:
                    self.modifiedRentableItems.append(each)

        finally:
            log.LogInfo('<<<DDXTabOffices')
    def OnTabOffices(self):
        scrolllist = []
        scrollHeaders = [localization.GetByLabel('UI/Corporations/Common/Offices'),
         localization.GetByLabel('UI/Station/OfficeNumber'),
         localization.GetByLabel('UI/Station/StationManagment/OfficeRentedBy'),
         localization.GetByLabel('UI/Station/StationManagment/RentStartDate'),
         localization.GetByLabel('UI/Station/StationManagment/RentPeriod'),
         localization.GetByLabel('UI/Station/StationManagment/RentPeriodCost'),
         localization.GetByLabel('UI/Station/StationManagment/RentBalanceDue')]
        for each in self.rentableItems:
            if each.typeID == const.typeOfficeFolder:
                pass
            else:
                log.LogError('Unknown typeID on Corporation Folder %s (typeID) %s (CorpID)' % each.typeID, eve.session.corpid)
                continue
            rname = ''
            if each.rentedToID is not None:
                rname = localization.GetByLabel('UI/Station/StationManagment/OfficesTableRentedBy', rentername=cfg.eveowners.Get(each.rentedToID).name)
            dataLabel = '<t>'.join([localization.GetByLabel('UI/Station/StationManagment/OfficesTablePubliclyAvailable'),
             util.FmtAmt(each.number),
             rname,
             util.FmtDate(each.startDate, 'ln') if each.startDate else u'',
             util.FmtAmt(each.rentPeriodInDays) if each.rentPeriodInDays else u'',
             util.FmtISK(each.periodCost) if each.periodCost else u'',
             util.FmtDate(each.balanceDueDate, 'ln') if each.balanceDueDate else u''])
            data = {'label': dataLabel,
             'checked': each.publiclyAvailable,
             'cfgname': 'offices',
             'retval': 'type%s_number%s' % (each.typeID, each.number),
             'OnChange': self.CheckBoxChange,
             'name': 'offices_type%s_number%s' % (each.typeID, each.number)}
            scrolllist.append(listentry.Get('Checkbox', data))

        self.ddxFunction = self.DDXTabOffices
        self.sr.scroll2.Load(fixedEntryHeight=24, contentList=scrolllist, headers=scrollHeaders)
Example #18
0
 def Close(self):
     try:
         self.ChangeSignalConnection(connect=False)
     except Exception as e:
         log.LogError('Failed at closing fitting left panel, e = ', e)
     finally:
         Container.Close(self)
Example #19
0
    def _GetFileContents(cls, projectID, getSubmittedOnly, bsdBranchID=None):
        exportData = cls._GetLocalizationMessageDataForExport(
            projectID, getSubmittedOnly, bsdBranchID=bsdBranchID)
        folderPathToLabelsIndex = exportData[0]
        languageCodesResultSet = exportData[2]
        fontConfig = u''
        for aLanguageRow in languageCodesResultSet:
            languageID = aLanguageRow.languageID
            if languageID not in cls.SCALEFORM_LANGUAGE_NAME_MAP:
                log.LogError(
                    'Language', languageID,
                    'is not valid for Scaleform export. Please add the language to the SCALEFORM_LANGUAGE_NAME_MAP dictionary.'
                )
                continue
            header, headerParams = cls.SCALEFORM_LANGUAGE_NAME_MAP[languageID]
            fontConfig += header % headerParams
            fontConfig += cls.FILE_NEXTLINE
            fontConfig += cls.FILE_NEXTLINE
            for folderPath, messageRows in folderPathToLabelsIndex.iteritems():
                denormalizedFolderName = folderPath.replace('/', '_').strip()
                for aMessage in messageRows:
                    textRow = aMessage.GetTextRow(languageID)
                    if textRow is not None and textRow.text is not None:
                        if denormalizedFolderName:
                            msgID = '_'.join((denormalizedFolderName,
                                              aMessage.labelRow.label))
                        else:
                            msgID = aMessage.labelRow.label
                        trText = textRow.text
                        trText = trText.replace('"', "'")
                        fontConfig += u'tr  "%s" = "%s"' % (msgID, trText)
                        fontConfig += cls.FILE_NEXTLINE

        return fontConfig
Example #20
0
 def GetLastSemaphore(self):
     try:
         event, args, semaphore = self._queue[-1]
         return semaphore
     except:
         log.LogError('Missing semaphore')
         return None
Example #21
0
 def HideLoading(self, forceOff=0):
     try:
         if not self.loadingWheel.forcedOn or forceOff:
             self.loadingWheel.Hide()
             self.loadingWheel.forcedOn = 0
     except:
         log.LogError('Failed to hide the loading wheel')
Example #22
0
    def LoadMotd(self, hidden = False):
        ip = self.serverIP
        try:
            extraParam = sm.StartService('patch').GetWebRequestParameters()
            if boot.region == 'optic':
                url = WEB_EVE + '/motd.html?server=%s&%s'
                encoding = 'gbk'
            else:
                url = WEB_EVE + '/motd/%s?%s'
                encoding = 'utf-8'
            ret = corebrowserutil.GetStringFromURL(url % (ip, extraParam)).read()
        except Exception as e:
            log.LogError('Failed to fetch motd', e)
            sys.exc_clear()
            ret = ''

        if self.motdParent and not self.motdParent.destroyed:
            if ret and ret.startswith('MOTD '):
                ret = ret[5:]
                self.motdText = ret.decode(encoding, 'replace')
                if hidden:
                    self.motdParent.state = uiconst.UI_HIDDEN
                else:
                    self.motdParent.state = uiconst.UI_NORMAL
                self.motdLabel.text = self.motdText
                self.motdParent.height = max(32, self.motdLabel.textheight + 10)
            else:
                self.motdParent.state = uiconst.UI_HIDDEN
Example #23
0
 def GetBloodlinePos(self, bloodlineID):
     blue.resMan.Wait()
     camera = uicore.layer.charactercreation.camera
     left = top = 0
     if getattr(uicore.layer.charactercreation, 'bloodlineSelector',
                None) is not None:
         pos = uicore.layer.charactercreation.bloodlineSelector.GetProjectedPosition(
             bloodlineID, None, camera)
         self.isFemaleLeft = uicore.layer.charactercreation.bloodlineSelector.GetGenderOrder(
             bloodlineID)
     else:
         log.LogError(
             'Trying to place bloodline UI, but bloodlineSelector is None!')
         pos = (0.0, 0.0)
     if pos:
         left = int(pos[0] / uicore.desktop.dpiScaling)
         top = int(pos[1] / uicore.desktop.dpiScaling)
     cont = self.sr.Get('cont_%d' % bloodlineID)
     cont.left = left - cont.width / 2
     cont.top = top - cont.height / 2 - 35
     cont.state = uiconst.UI_PICKCHILDREN
     if not self.isFemaleLeft:
         cont = self.sr.Get('cont_%d' % bloodlineID)
         genderBtnFemale = self.sr.Get('genderBtn_%d_%d' % (bloodlineID, 0))
         genderBtnMale = self.sr.Get('genderBtn_%d_%d' % (bloodlineID, 1))
         genderBtnMale.SetAlign(uiconst.BOTTOMLEFT)
         genderBtnFemale.SetAlign(uiconst.BOTTOMRIGHT)
Example #24
0
 def _RequestTrust(self, inputUrl):
     if not inputUrl.startswith('http://') and not inputUrl.startswith(
             'https://'):
         log.LogError(
             'CCPEVE.RequestTrust - Input URL must start with either http:// or https:// -- received',
             inputUrl)
         return
     scheme, netloc, path, query, fragment = urlparse.urlsplit(inputUrl)
     if path is None or path == '':
         path = '/'
     trustUrl = '%s://%s%s' % (scheme, netloc, path)
     if sm.GetService('sites').IsTrusted(trustUrl) or sm.GetService(
             'sites').IsIgnored(trustUrl):
         log.LogInfo(
             'CCPEVE.RequestTrust - Received top-level URL is already trusted or ignored:',
             trustUrl)
         return
     currentUrl = self.GetCurrentURL()
     if sm.GetService('sites').IsIgnored(currentUrl):
         log.LogInfo(
             'CCPEVE.RequestTrust - Calling URL is ignored, discarding:',
             currentUrl)
         return
     wnd = uicls.TrustedSitePromptWindow.GetIfOpen(
         windowID='trustPromptWindow_%s' % netloc)
     if wnd:
         wnd.Maximize()
         log.LogWarn(
             'CCPEVE.RequestTrust - Trust prompt window was already open - skipping!'
         )
         return
     wnd = uicls.TrustedSitePromptWindow.Open(
         windowID='trustPromptWindow_%s' % netloc,
         trustUrl=inputUrl,
         inputUrl=currentUrl)
Example #25
0
def GetBlueprintPrice(typeID):
    try:
        if boot.role == 'client':
            blueprint = sm.GetService('blueprintSvc').GetBlueprintType(typeID)
        else:
            blueprint = sm.GetService('blueprintManager').GetBlueprintType(
                typeID)
        materials = blueprint.activities[industry.MANUFACTURING].materials
        return sum([
            GetBlueprintPrice(material.typeID) * material.quantity
            for material in materials
        ])
    except (KeyError, UserError):
        pass

    try:
        if typeID is not None:
            adjustedAveragePrice = inventorycommon.typeHelpers.GetAdjustedAveragePrice(
                typeID)
            if adjustedAveragePrice:
                return adjustedAveragePrice
    except KeyError:
        pass

    log.LogError(
        'industryCommon.GetBlueprintPrice missing adjustedAveragePrice for type: ',
        typeID)
    return 0
Example #26
0
def _SetStructureName(structureID, solarsystemID):
    if not util.IsSolarSystem(solarsystemID):
        log.LogError("Can't rename a structure that's not in space.  What is",
                     structureID, 'doing inside', solarsystemID, 'anyways?')
        return
    currentName = cfg.evelocations.Get(structureID).locationName
    namePrefix = '%s - ' % localization.CleanImportantMarkup(
        cfg.evelocations.Get(solarsystemID).locationName)
    if not currentName.startswith(namePrefix):
        currentName = namePrefix + currentName

    def _CheckLen(name, *args):
        if len(name) - len(namePrefix) < structures.MIN_STRUCTURE_NAME_LEN:
            raise UserError('CharNameTooShort')

    newName = uiutil.NamePopup(
        localization.GetByLabel('UI/Menusvc/SetName'),
        localization.GetByLabel('UI/Menusvc/TypeInNewName'),
        setvalue=currentName,
        maxLength=32 + len(namePrefix),
        fixedPrefix=namePrefix,
        validator=_CheckLen)
    if newName:
        sm.RemoteSvc('structureDeployment').RenameStructure(
            structureID, newName)
Example #27
0
    def InternalUpdateServerStatus(self, allowPatch, bootbuild, bootversion):
        self.SetStatusText(localization.GetByLabel('UI/Login/CheckingStatus'))
        self.serverStatusTextFunc = None
        blue.pyos.synchro.Yield()
        if self.isShowingUpdateDialog:
            return
        if not self.IsServerPortValid():
            return
        serverUserCount = serverversion = serverbuild = servercodename = None
        isAutoPatch = self.GetIsAutoPatch(allowPatch)
        try:
            log.LogInfo('checking status of %s' % self.serverIP)
            try:
                if self.firstCheck:
                    forceQueueCheck = True
                    self.firstCheck = False
                else:
                    forceQueueCheck = False
                statusMessage, serverStatus = sm.GetService(
                    'machoNet').GetServerStatus(
                        '%s:%s' % (self.serverIP, self.serverPort),
                        forceQueueCheck=forceQueueCheck)
            except UserError as e:
                if e.msg == 'AlreadyConnecting':
                    sys.exc_clear()
                    return
                raise

            if not self.isopen:
                return
            self.serverStatus[self.serverIP] = (
                serverStatus.get('cluster_usercount',
                                 None), serverStatus.get('boot_version', None),
                serverStatus.get('boot_build', None),
                str(serverStatus.get('boot_codename', const.responseUnknown)),
                serverStatus.get('update_info', const.responseUnknown))
            serverUserCount, serverversion, serverbuild, servercodename, updateinfo = self.serverStatus[
                self.serverIP]
            if serverUserCount:
                uthread.new(self.StartXFire,
                            str(fmtutil.FmtAmt(serverUserCount)))
            actualStatusMsg = self.GetActualStatusMessage(
                serverUserCount, serverbuild, serverversion, statusMessage)
            if serverversion and serverbuild:
                self.CompareVersionsAndAct(bootbuild, bootversion, isAutoPatch,
                                           serverbuild, serverversion,
                                           actualStatusMsg)
            elif actualStatusMsg is not None and 'IncompatibleProtocol' in actualStatusMsg:
                self.DisplayOutOfDateMessageAndQuitGame(
                    'Incompatable protocol')
            else:
                raise Exception('Invalid answer from server GetServerStatus')
        except Exception as e:
            log.LogError(e)
            sys.exc_clear()
            self.SetStatusText(
                localization.GetByLabel('UI/Login/UnableToConnect',
                                        IP=self.serverIP,
                                        port=self.serverPort))
            self.serverStatusTextFunc = None
Example #28
0
    def GetShipGroupSubContent(self, nodedata, *args):
        scrolllist = []
        fittingsByType = {}
        shipTypes = []
        for fitting in nodedata.fittings:
            shipTypeID = fitting.shipTypeID
            shipType = cfg.invtypes.GetIfExists(shipTypeID)
            if not shipType:
                log.LogError('Ship in stored fittings does not exist, shipID=%s, fittingID=%s' % (shipTypeID, fitting.fittingID))
                continue
            if shipTypeID not in fittingsByType:
                fittingsByType[shipTypeID] = []
            fittingsByType[shipTypeID].append(fitting)
            if (shipType.name, shipTypeID) not in shipTypes:
                shipTypes.append((shipType.name, shipTypeID))

        shipTypes.sort()
        for typeName, typeID in shipTypes:
            data = util.KeyVal()
            data.GetSubContent = self.GetFittingSubContent
            data.label = typeName
            data.groupItems = fittingsByType[typeID]
            data.fittings = fittingsByType[typeID]
            data.id = ('fittingMgmtScrollWndType', typeName)
            data.sublevel = 1
            data.showicon = 'hide'
            data.state = 'locked'
            scrolllist.append(listentry.Get('Group', data=data))

        return scrolllist
Example #29
0
    def GetShipsAndGroups(self, filterTextLower, fittings):
        fittingsByGroupID = defaultdict(list)
        fittingsByGroupAndRaceIDs = defaultdict(lambda: defaultdict(set))
        if not fittings:
            shipGroups, shipsByGroupID, shipsByGroupAndRaceIDs = self.GetAllShipGroupsAndShipsByGroupID(
                filterTextLower)
        else:
            shipGroups = set()
            shipsByGroupID = defaultdict(set)
            shipsByGroupAndRaceIDs = defaultdict(lambda: defaultdict(set))
        for fittingID, fitting in fittings.iteritems():
            shipTypeID = fitting.shipTypeID
            if not evetypes.Exists(shipTypeID):
                log.LogError(
                    'Ship in stored fittings does not exist, shipID=%s, fittingID=%s'
                    % (shipTypeID, fittingID))
                continue
            groupID = evetypes.GetGroupID(shipTypeID)
            fittingsByGroupID[groupID].append(fitting)
            groupName = evetypes.GetGroupName(shipTypeID)
            shipGroups.add((groupName, groupID))
            raceID = evetypes.GetRaceID(shipTypeID)
            shipsByGroupAndRaceIDs[groupID][raceID].add(shipTypeID)
            fittingsByGroupAndRaceIDs[groupID][raceID].add(fitting)

        return (fittingsByGroupID, shipsByGroupID, shipGroups,
                shipsByGroupAndRaceIDs, fittingsByGroupAndRaceIDs)
Example #30
0
    def GetShipGroupSubContent(self, nodedata, *args):
        scrolllist = []
        fittingsByType = defaultdict(list)
        fittingNumByTypeID = nodedata.fittingNumByTypeID
        for fitting in nodedata.fittings:
            shipTypeID = fitting.shipTypeID
            if not evetypes.Exists(shipTypeID):
                log.LogError(
                    'Ship in stored fittings does not exist, shipID=%s, fittingID=%s'
                    % (shipTypeID, fitting.fittingID))
                continue
            fittingsByType[shipTypeID].append(fitting)

        allShips = nodedata.allShips
        for typeID in allShips:
            typeName = evetypes.GetName(typeID)
            numPersonal = fittingNumByTypeID[typeID][False]
            numCorp = fittingNumByTypeID[typeID][True]
            fittingsForType = fittingsByType.get(typeID, [])
            entry = self.GetShipTypeGroup(typeID, typeName, fittingsForType,
                                          numPersonal, numCorp)
            scrolllist.append((typeName, entry))

        scrolllist = SortListOfTuples(scrolllist)
        return scrolllist