handle both binary and xml plists in ios settings

This commit is contained in:
Jonathan Lipps
2014-02-26 16:21:35 -08:00
parent 6e9a9dd197
commit 8022031199

View File

@@ -4,6 +4,7 @@ var logger = require('../../server/logger.js').get('appium')
, _ = require('underscore')
, fs = require('fs')
, path = require('path')
, xmlplist = require('plist')
, bplistCreate = require('bplist-creator')
, bplistParse = require('bplist-parser');
@@ -281,17 +282,36 @@ settings.updateSafariUserSettings = function (sdk, settingSet) {
}
};
var getPlistData = function (file) {
var data;
if (fs.existsSync(file)) {
var fileData = fs.readFileSync(file);
try {
data = bplistParse.parseBuffer(fileData)[0];
} catch (err) {
if (err.message.indexOf("Invalid binary plist") !== -1) {
logger.info("Plist was not binary format, retrying with xml");
data = xmlplist(file)[0];
} else {
throw err;
}
}
} else {
throw new Error("Settings file " + file + " did not exist");
}
return data;
};
settings.getSettings = function (sdk, forPlist) {
var files = getPlistPaths(forPlist, sdk);
var bplists = {};
_.each(files, function (file) {
logger.info("Getting current settings for " + forPlist + " from " + file);
if (fs.existsSync(file)) {
var data = fs.readFileSync(file);
bplists[file] = bplistParse.parseBuffer(data)[0];
} else {
try {
bplists[file] = getPlistData(file);
} catch (err) {
bplists[file] = {};
logger.warn("Settings file " + file + " did not exist");
logger.warn(err.message);
}
});
return bplists;