Exemple #1
0
static bool parseProfileInfo(ProfileType profileType, Profile* p, const SETTINGS& s, const char* filename,
        RuntimeInfo& pi) {
	bool hasBbMajor = false, hasBbMinor = false;
	pi.isBlackberry = false;
	pi.hasLimitedResourceSize = false;
	pi.isCldc10 = false;
	pi.iconSize = "default";
	int iconX = -1;
	int iconY = -1;
	if (profileType == DEVICE_BASED) {
		ifstream file(filename);
		setName(file, filename);
		if (!file.good())
			return false;
		while (file.good()) {
			string line;
			getline(file, line);
			if (line.find("#define MA_PROF_BUG_RESOURCE_SIZE_LIMITED") == 0) {
				pi.hasLimitedResourceSize = true;
			}
			hasBbMajor |= parseIntProp(line, "MA_PROF_BLACKBERRY_VERSION",
			        pi.blackberryVersion);
			hasBbMinor |= parseIntProp(line,
			        "MA_PROF_BLACKBERRY_VERSION_MINOR", pi.blackberryMinor);
			if (line.find("#define MA_PROF_SUPPORT_CLDC_10") == 0) {
				pi.isCldc10 = true;
			}
			parseIntProp(line, "MA_PROF_CONST_ICONSIZE_X", iconX);
			parseIntProp(line, "MA_PROF_CONST_ICONSIZE_Y", iconY);
		}
		//pi.isBlackberry = (hasBbMajor && hasBbMinor);	//rapc is not available.
	} else {
		Capability iconSize = p->getCapability("IconSize");
		if (iconSize.getValue().length() > 0) {
			pi.iconSize = iconSize.getValue().c_str();
		}
		pi.isBlackberry = p->getFamily() == "BlackBerry";
		if (pi.isBlackberry) {
			Capability major = p->getCapability("Version/Major");
			Capability minor = p->getCapability("Version/Minor");
			sscanf(major.getValue().c_str(), "%i", &pi.blackberryVersion);
			sscanf(minor.getValue().c_str(), "%i", &pi.blackberryMinor);
		}
		Capability cldc = p->getCapability("CLDC");
		pi.isCldc10 = (cldc.getValue() == "1.0");
	}
	if (iconX > 0 && iconY > 0) {
		char buf[32];
		sprintf(buf, "%ix%i", iconX, iconY);
		pi.iconSize = buf;
	}
	return true;
}
Exemple #2
0
bool ProfileDB::internalMatchProfile(Profile* profile,
        vector<Capability>& requiredCapabilites,
        vector<Capability>& optionalCapabilites, string& matchToken) {
	bool match = true;

	// When can we NOT reuse a specific runtime?
	// Only if fragmentation is set to BUILDTIME and if either a) one supports the capability and
	// the other does not OR b) the capability value differs.
	// So we add strings to create a unique match token for every
	// runtime that need be built
	for (vector<Capability>::iterator capability = requiredCapabilites.begin(); capability
	        != requiredCapabilites.end(); capability++) {
		Capability matchedCapability = profile->getCapability(
		        capability->getName());
		CapabilityState matchedState = matchedCapability.getState();
		// Ok, so we don't support this, bail out!
		if (matchedState == NOT_IMPLEMENTED || matchedState == UNSUPPORTED) {
			match = false;
		}
		Fragmentation fragmentation = matchedCapability.getFragmentation();
		string valueStr =
		        fragmentation == BUILDTIME ? matchedCapability.getValue() : "";
		matchToken.append(valueStr);
		matchToken.append("|");
	}

	// So, the optional capabilities are matched in a different way.
	// We add stuff to the matchTokens string to produce a string that
	// is unique to the optional capabilities being matched.
	for (vector<Capability>::iterator capability = optionalCapabilites.begin(); capability
	        != optionalCapabilites.end(); capability++) {
		Capability matchedCapability = profile->getCapability(
		        capability->getName());
		CapabilityState matchedState = matchedCapability.getState();
		Fragmentation fragmentation = matchedCapability.getFragmentation();
		string valueStr =
		        fragmentation == BUILDTIME ? matchedCapability.getValue() : "";
		bool capSupported = fragmentation == BUILDTIME && (matchedState
		        == NOT_IMPLEMENTED || matchedState == UNSUPPORTED);
		matchToken.append((capSupported ? "+" : "-") + valueStr);
		matchToken.append("|");
	}

	// Finally we add PROPERTIES of the runtime which are buildtime fragmented.
	// For example, different device types or icon sizes should always generate
	// a unique runtime.
	set<string> allCapabilities = profile->getCapabilities();
	for (set<string>::iterator allCapabilitesIt = allCapabilities.begin(); allCapabilitesIt
	        != allCapabilities.end(); allCapabilitesIt++) {
		string capabilityName = *allCapabilitesIt;
		Capability capability = profile->getCapability(capabilityName);
		if (capability.getType() == "property") {
			Fragmentation fragmentation = capability.getFragmentation();
			string valueStr =
			        fragmentation == BUILDTIME ? capability.getValue() : "-";
			matchToken.append(valueStr);
			matchToken.append("|");
		}
	}
	return match;
}