aboutsummaryrefslogtreecommitdiff
path: root/OpenSubtitlesHandler/XML-RPC/XmlRpcGenerator.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2016-10-27 18:54:56 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2016-10-27 18:54:56 -0400
commit31c8c3bf7f1cb5e79d36b0b1d5c28907ea526011 (patch)
tree3cb82628a3d58065d4f2b1bfecace002e5cb0b1e /OpenSubtitlesHandler/XML-RPC/XmlRpcGenerator.cs
parent0d5e95222af2a40d06971baa5ab06a9e5d2fba3d (diff)
make open subtitle project portable
Diffstat (limited to 'OpenSubtitlesHandler/XML-RPC/XmlRpcGenerator.cs')
-rw-r--r--OpenSubtitlesHandler/XML-RPC/XmlRpcGenerator.cs34
1 files changed, 24 insertions, 10 deletions
diff --git a/OpenSubtitlesHandler/XML-RPC/XmlRpcGenerator.cs b/OpenSubtitlesHandler/XML-RPC/XmlRpcGenerator.cs
index eedeca12a..61870a6c6 100644
--- a/OpenSubtitlesHandler/XML-RPC/XmlRpcGenerator.cs
+++ b/OpenSubtitlesHandler/XML-RPC/XmlRpcGenerator.cs
@@ -232,33 +232,42 @@ namespace XmlRpcHandler
XMLwrt.WriteEndElement();//value
}
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
+
+ private static string ReadString(XmlReader reader)
+ {
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ return reader.ReadElementContentAsString();
+ }
+ return reader.ReadContentAsString();
+ }
- private static IXmlRpcValue ReadValue(XmlReader xmlReader)
+ private static IXmlRpcValue ReadValue(XmlReader xmlReader, bool skipRead = false)
{
- while (xmlReader.Read())
+ while (skipRead || xmlReader.Read())
{
if (xmlReader.Name == "value" && xmlReader.IsStartElement())
{
xmlReader.Read();
if (xmlReader.Name == "string" && xmlReader.IsStartElement())
{
- return new XmlRpcValueBasic(xmlReader.ReadString(), XmlRpcBasicValueType.String);
+ return new XmlRpcValueBasic(ReadString(xmlReader), XmlRpcBasicValueType.String);
}
else if (xmlReader.Name == "int" && xmlReader.IsStartElement())
{
- return new XmlRpcValueBasic(int.Parse(xmlReader.ReadString(), UsCulture), XmlRpcBasicValueType.Int);
+ return new XmlRpcValueBasic(int.Parse(ReadString(xmlReader), UsCulture), XmlRpcBasicValueType.Int);
}
else if (xmlReader.Name == "boolean" && xmlReader.IsStartElement())
{
- return new XmlRpcValueBasic(xmlReader.ReadString() == "1", XmlRpcBasicValueType.Boolean);
+ return new XmlRpcValueBasic(ReadString(xmlReader) == "1", XmlRpcBasicValueType.Boolean);
}
else if (xmlReader.Name == "double" && xmlReader.IsStartElement())
{
- return new XmlRpcValueBasic(double.Parse(xmlReader.ReadString(), UsCulture), XmlRpcBasicValueType.Double);
+ return new XmlRpcValueBasic(double.Parse(ReadString(xmlReader), UsCulture), XmlRpcBasicValueType.Double);
}
else if (xmlReader.Name == "dateTime.iso8601" && xmlReader.IsStartElement())
{
- string date = xmlReader.ReadString();
+ string date = ReadString(xmlReader);
int year = int.Parse(date.Substring(0, 4), UsCulture);
int month = int.Parse(date.Substring(4, 2), UsCulture);
int day = int.Parse(date.Substring(6, 2), UsCulture);
@@ -270,7 +279,7 @@ namespace XmlRpcHandler
}
else if (xmlReader.Name == "base64" && xmlReader.IsStartElement())
{
- return new XmlRpcValueBasic(BitConverter.ToInt64(Convert.FromBase64String(xmlReader.ReadString()), 0)
+ return new XmlRpcValueBasic(BitConverter.ToInt64(Convert.FromBase64String(ReadString(xmlReader)), 0)
, XmlRpcBasicValueType.Double);
}
else if (xmlReader.Name == "struct" && xmlReader.IsStartElement())
@@ -283,9 +292,9 @@ namespace XmlRpcHandler
{
XmlRpcStructMember member = new XmlRpcStructMember("", null);
xmlReader.Read();// read name
- member.Name = xmlReader.ReadString();
+ member.Name = ReadString(xmlReader);
- IXmlRpcValue val = ReadValue(xmlReader);
+ IXmlRpcValue val = ReadValue(xmlReader, true);
if (val != null)
{
member.Data = val;
@@ -320,6 +329,11 @@ namespace XmlRpcHandler
}
}
else break;
+
+ if (skipRead)
+ {
+ return null;
+ }
}
return null;
}