Files
TickerLib/Helper/FeedSerializer.cs
2024-02-23 06:55:00 -05:00

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)
{
}
}
}
}