116 lines
3.5 KiB
C#
116 lines
3.5 KiB
C#
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<FeedItem> Deserialize(String strPathFileName)
|
|
{
|
|
List<FeedItem> feedItems=new List<FeedItem>();
|
|
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<DateTime>();
|
|
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<FeedItem> 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<DateTime>();
|
|
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)
|
|
{
|
|
}
|
|
}
|
|
}
|
|
} |