using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Windows.Media; using MarketData.Utils; using Ticker.Models; // Author:Sean Kessler namespace Ticker.Helper { public class FeedSerializer { private FeedSerializer() { } public static List Deserialize(String strPathFileName) { List feedItems=new List(); if(!File.Exists(strPathFileName))return feedItems; String strLine=null; if(!IsCacheCurrent(strPathFileName,DateTime.Now)) { RemoveCache(strPathFileName); return feedItems; } StreamReader streamReader=new StreamReader(new FileStream(strPathFileName,FileMode.Open)); DateTime cacheDate=new NVP(streamReader.ReadLine()).Get(); while(null!=(strLine=streamReader.ReadLine())) { if("".Equals(strLine))continue; FeedItem feedItem=FeedItem.FromString(strLine); if(null==feedItem)continue; feedItems.Add(feedItem); } streamReader.Close(); streamReader.Dispose(); return feedItems; } public static bool Serialize(String strPathFileName,DateTime feedDate,List feedsList) { try { if(File.Exists(strPathFileName))File.Delete(strPathFileName); StreamWriter streamWriter=new StreamWriter(new FileStream(strPathFileName,FileMode.CreateNew)); streamWriter.WriteLine(new NVP("CacheDate",feedDate.ToShortDateString()).ToString()); foreach(FeedItem feedItem in feedsList) { String strLine=feedItem.ToNVPCollection().ToString(); if(null==strLine||"".Equals(strLine))continue; streamWriter.WriteLine(strLine); } streamWriter.Flush(); streamWriter.Close(); streamWriter.Dispose(); return true; } catch(Exception) { return false; } } public static bool Serialize(String strPathFileName,DateTime feedDate,FeedItem feedItem) { try { StreamWriter streamWriter=null; String strLine=feedItem.ToNVPCollection().ToString(); if(null==strLine||"".Equals(strLine))return false; if(!File.Exists(strPathFileName)) { streamWriter=new StreamWriter(new FileStream(strPathFileName,FileMode.CreateNew)); streamWriter.WriteLine(new NVP("CacheDate",feedDate.ToShortDateString()).ToString()); } else { streamWriter=new StreamWriter(new FileStream(strPathFileName,FileMode.Append)); } streamWriter.WriteLine(strLine); streamWriter.Flush(); streamWriter.Close(); streamWriter.Dispose(); return true; } catch(Exception) { return false; } } private static bool IsCacheCurrent(String strPathFileName,DateTime feedDate) { try { if(!File.Exists(strPathFileName))return false; StreamReader streamReader=new StreamReader(new FileStream(strPathFileName,FileMode.Open)); DateTime cacheDate=new NVP(streamReader.ReadLine()).Get(); streamReader.Close(); return feedDate.Date.Equals(cacheDate.Date); } catch(Exception) { return false; } } private static void RemoveCache(String strPathFileName) { try { if(File.Exists(strPathFileName))File.Delete(strPathFileName); } catch(Exception) { } } } }