Skip to content

Instantly share code, notes, and snippets.

@marcelschmidtdev
Last active February 3, 2016 13:56
Show Gist options
  • Save marcelschmidtdev/aaf8c1ef7fe5ac81c162 to your computer and use it in GitHub Desktop.
Save marcelschmidtdev/aaf8c1ef7fe5ac81c162 to your computer and use it in GitHub Desktop.
Merges two .plist files into a new one
using UnityEngine;
using System.Collections;
using UnityEditor.iOS.Xcode;
using System.Collections.Generic;
public class PlistMerger
{
public PlistDocument MergePlists(string plistPath, string plistToMergePath) {
var plist = new PlistDocument();
plist.ReadFromFile(plistPath);
var plistToMerge = new PlistDocument();
plistToMerge.ReadFromFile(plistToMergePath);
Debug.Log(string.Format("Merging {0} into {1}...", System.IO.Path.GetFileName(plistPath), System.IO.Path.GetFileName(plistToMergePath)));
MergeElement(plist.root.values, plistToMerge.root.values, "");
return plist;
}
private void MergeElement(IDictionary<string, PlistElement> values, IDictionary<string, PlistElement> valuesToMerge, string parent) {
foreach(var elementToMerge in valuesToMerge) {
if(values.ContainsKey(elementToMerge.Key))
{
if(values[elementToMerge.Key] is PlistElementDict) {
var subValues = values[elementToMerge.Key].AsDict().values;
var subValuesToMerge = valuesToMerge[elementToMerge.Key].AsDict().values;
MergeElement(subValues, subValuesToMerge, parent + elementToMerge.Key + "-->");
}
else if(values[elementToMerge.Key] is PlistElementArray) {
var subValues = values[elementToMerge.Key].AsArray().values;
var subValuesToMerge = valuesToMerge[elementToMerge.Key].AsArray().values;
subValues.AddRange(subValuesToMerge);
Debug.Log("Added new array elements to: " + parent + elementToMerge.Key + ". This might needs manual verify...");
}
else if(values[elementToMerge.Key] is PlistElementBoolean){
if(values[elementToMerge.Key].AsBoolean() != elementToMerge.Value.AsBoolean()){
Debug.LogError(string.Format("Plist merge conflict at: {0} -- Original: {1} -> New: {2}",
parent + elementToMerge.Key, values[elementToMerge.Key].AsBoolean(),
elementToMerge.Value.AsBoolean()));
}
}
else if(values[elementToMerge.Key] is PlistElementInteger) {
if(values[elementToMerge.Key].AsInteger() != elementToMerge.Value.AsInteger()) {
Debug.LogError(string.Format("Plist merge conflict at: {0} -- Original: {1} -> New: {2}",
parent + elementToMerge.Key, values[elementToMerge.Key].AsInteger(),
elementToMerge.Value.AsInteger()));
}
}
else if(values[elementToMerge.Key] is PlistElementString) {
if(values[elementToMerge.Key].AsString() != elementToMerge.Value.AsString()) {
Debug.LogError(string.Format("Plist merge conflict at: {0} -- Original: {1} -> New: {2}",
parent + elementToMerge.Key, values[elementToMerge.Key].AsString(),
elementToMerge.Value.AsString()));
}
}
}
else {
values.Add(elementToMerge);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment