using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using MahTweets.Mobile.Core; using MahTweets.Mobile.Core.Interfaces; using MahTweets.Mobile.Core.Repositories; namespace MahTweets.Mobile.TwitterPlugin.Models { public class SelfDirectMessage : DirectMessage { public SelfDirectMessage() : base() { //Parents = new ObservableCollection(); //Types = new List(); } } public class DirectMessage : Tweet { public DirectMessage() : base() { //Parents = new ObservableCollection(); //Types = new List(); } public Contact Recipient { get; set; } public override void Load(string version, System.IO.BinaryReader reader, ContactRepository contactRepository, ThreadSafeObservableCollection accounts) { //Time = new DateTime(reader.ReadInt64()).ToLocalTime(); //ID = reader.ReadString(); //Favourite = reader.ReadBoolean(); //Source = reader.ReadString(); //Text = reader.ReadString(); //Contact = contactRepository.FetchOrCreate(reader.ReadString()); //Contact.ImageUrl = new Uri(reader.ReadString()); //Recipient = contactRepository.FetchOrCreate(reader.ReadString()); //Recipient.ImageUrl = new Uri(reader.ReadString()); //Types = new List(); //Types.Add(new DirectMessageUpdate()); //var parentString = reader.ReadString(); //var parents = parentString.Split('|'); //foreach (var p in parents) //{ // var parentDetails = p.Split(':'); // var a = accounts.Where(t => t.Credentials.AccountName == parentDetails[0] && t.Protocol == parentDetails[1]).FirstOrDefault(); // if (a != null) // AddParent(a); //} base.Load(version, reader, contactRepository, accounts); } public override void Save(System.IO.BinaryWriter writer) { //writer.Write(Time.ToUniversalTime().Ticks); //writer.Write(ID); //writer.Write(Favourite); //writer.Write(Source); //writer.Write(Text); //writer.Write(Contact.Name); //writer.Write(Contact.ImageString); //writer.Write(Recipient.Name); //writer.Write(Recipient.ImageString); //String parentString = Parents.Aggregate("", (current, t) => current + (t.Credentials.AccountName + ":" + t.Credentials.Protocol + "|")); //writer.Write(parentString); base.Save(writer); } } public class Retweet : Tweet { public Retweet() { Parents = new ObservableCollection(); Types = new List(); } private Contact _retweetBy; public Contact RetweetBy { get { return _retweetBy; } set { _retweetBy = value; RaisePropertyChanged(() => RetweetBy); } } } public class Tweet : AbstractStatusUpdate { public Tweet() { Parents = new ObservableCollection(); Types = new List(); } public string TwitterList { get; set; } public override string FileVersion { get { return "1.0"; } } public override void Load(string version, System.IO.BinaryReader reader, ContactRepository contactRepository, ThreadSafeObservableCollection accounts) { Time = new DateTime(reader.ReadInt64()).ToLocalTime(); ID = reader.ReadString(); Favourite = reader.ReadBoolean(); Source = reader.ReadString(); Text = reader.ReadString(); Contact = contactRepository.FetchOrCreate(reader.ReadString()); Contact.ImageUrl = new Uri(reader.ReadString()); InReplyToID = reader.ReadString(); Types = new List(); //var typeString = reader.ReadString(); //var types = typeString.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); int numTypes = reader.ReadInt32(); var types = new string[numTypes]; for (int i = 0; i < numTypes; i++) types[i] = reader.ReadString(); foreach (var t in types) { UpdateType tempUpdateType = null; switch (t) { case "Normal": tempUpdateType = new NormalUpdate(); break; case "Mentions": tempUpdateType = new MentionUpdate(); break; case "Direct Messages": tempUpdateType = new DirectMessageUpdate(); break; } if (tempUpdateType != null) Types.Add(tempUpdateType); } //var parentString = reader.ReadString(); //var parents = parentString.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); //if (parents.Count() == 0) // System.Windows.MessageBox.Show("Orphaned Tweet"); //foreach (var p in parents) //{ // var parentDetails = p.Split(':'); // var a = accounts.Where(t => t.Credentials.AccountName == parentDetails[0] && t.Protocol == parentDetails[1]).FirstOrDefault(); // if (a != null) // AddParent(a); // else // System.Windows.MessageBox.Show("No parent: " + parentDetails[0]); //} int numParents = reader.ReadInt32(); for (int i = 0; i < numParents; i++) { var accName = reader.ReadString(); var prot = reader.ReadString(); var a = accounts.Where(t => t.Credentials.AccountName.Equals(accName) && t.Protocol.Equals(prot)).FirstOrDefault(); if (a != null) AddParent(a); } } public override void Save(System.IO.BinaryWriter writer) { writer.Write(Time.ToUniversalTime().Ticks); writer.Write(ID); writer.Write(Favourite); writer.Write(Source); writer.Write(Text); writer.Write(Contact.Name); writer.Write(Contact.ImageString); writer.Write((String.IsNullOrEmpty(InReplyToID)) ? "" : InReplyToID); //var typeString = Types.Aggregate("", (current, t) => current + (t.Type + "|")); //writer.Write(typeString); writer.Write(Types.Count); foreach (var t in Types) { writer.Write(t.Type); } //var parentString = Parents.Aggregate("", (current, t) => current + (t.Credentials.AccountName + ":" + t.Credentials.Protocol + "|")); //writer.Write(parentString); writer.Write(Parents.Count); foreach (var p in Parents) { writer.Write(p.Credentials.AccountName); writer.Write(p.Credentials.Protocol); } } } }