public BlogXEditing() { BlogXData.Resolver = new ResolveFileCallback(ResolvePath); data = new BlogXData(); data.Days.Sort(new DaySorter()); InitializeComponent(); }
public BlogXBrowsing() { BlogXData.Resolver = new ResolveFileCallback(ResolvePath); data = new BlogXData(); //HACK: Removed because of runtime error (in Mono?) // data.Days.Sort(new DaySorter()); //CODEGEN: This call is required by the ASP.NET Web Services Designer InitializeComponent(); }
private void save_Click(object sender, System.EventArgs e) { if (SiteSecurity.IsInRole("admin")) { BlogXData data = new BlogXData(); bool added = false; Entry entry = new Entry(); entry.Initialize(); entry.Title = entryTitle.Text; entry.Description = entryAbstract.Text; entry.Content = entryContent.Text; entry.Categories = entryCategories.Text; foreach (DayEntry day in data.Days) { if (day.Date == entry.Created.Date) { added = true; day.Load(); day.Entries.Add(entry); day.Save(); data.IncrementEntryChange(); BlogXUtils.PingWeblogsCom(); break; } } if (!added) { DayEntry newDay = new DayEntry(); newDay.Date = entry.Created.Date; newDay.Entries.Add(entry); newDay.Save(); data.IncrementEntryChange(); BlogXUtils.PingWeblogsCom(); } entryTitle.Text = ""; entryAbstract.Text = ""; entryContent.Text = ""; entryCategories.Text = ""; Response.Redirect("default.aspx", false); } }
private XmlNode GetRssCore(string category, int maxDayCount) { BlogXData.Resolver = new ResolveFileCallback(ResolvePath); RssRoot r = new RssRoot(); RssChannel ch = new RssChannel(); SiteConfig config = SiteConfig.GetSiteConfig(); ch.Title = config.Title; ch.Link = config.Root; ch.Copyright = config.Copyright; ch.ManagingEditor = config.Contact; ch.WebMaster = config.Contact; r.Channels.Add(ch); BlogXData data = new BlogXData(); EntryCollection entries = BuildEntries(data, category, maxDayCount); using (StreamWriter sw = new StreamWriter(Server.MapPath(Path.Combine("logs", "dump.txt")))) { DateTime latest = new DateTime(0); foreach (Entry entry in entries) { DateTime created = entry.Created; if (created > latest) { latest = created; } } HttpRequest req = Context.Request; HttpResponse res = Context.Response; bool notModified = false; // Check the request's if-modified-since field. // If it matches our last build date, then the // caller already has the most recent data and // we can abort the whole process with an // error 304: Not Modified string ifModifiedSince = req.Headers["if-modified-since"]; if (ifModifiedSince != null) { DateTime modDate = latest; modDate = new DateTime(modDate.Year, modDate.Month, modDate.Day, modDate.Hour, modDate.Minute, modDate.Second); try { DateTime ifModDate = DateTime.Parse(ifModifiedSince); notModified = (ifModDate == modDate); } catch {} } // Also check the request for an etag header and // see if it maches our date. The rules are if // both headers are there, they both have to match. But, // if only one header is there only it has to match. string etag = req.Headers["etag"]; if (etag != null) { notModified = (etag.Equals(latest.Ticks.ToString())); } if (notModified) { res.StatusCode = 304; res.SuppressContent = true; return(null); } // Either no one used if-modified-since or we have // new data. Record the last modified time and // etag in the http header for next time. res.Cache.SetLastModified(latest); res.Cache.SetETag(latest.Ticks.ToString()); } BlogXUtils.TrackReferrer(Context.Request, Server); foreach (Entry entry in entries) { RssItem item = new RssItem(); item.Title = entry.Title; item.Guid = item.Link = new Uri(new Uri(config.Root), " PermaLink.aspx/" + entry.EntryId).ToString(); item.Comments = new Uri(new Uri(config.Root), "CommentView.aspx/" + entry.EntryId).ToString(); if (entry.Categories != null && entry.Categories.Length > 0) { item.Category = entry.GetSplitCategories()[0]; } item.PubDate = entry.Created.ToString("R"); if (ch.LastBuildDate == null || ch.LastBuildDate.Length == 0) { ch.LastBuildDate = item.PubDate; } if (entry.Description != null && entry.Description.Trim().Length > 0) { item.Description = entry.Description; } else { item.Description = entry.Content; } XmlDocument doc2 = new XmlDocument(); try { doc2.LoadXml(entry.Content); item.Body = (XmlElement)doc2.SelectSingleNode("//*[local-name() = 'body'][namespace-uri()='http://www.w3.org/1999/xhtml']"); } catch {} ch.Items.Add(item); } XmlSerializer ser = new XmlSerializer(typeof(RssRoot)); StringWriter writer = new StringWriter(); ser.Serialize(writer, r); XmlDocument doc = new XmlDocument(); doc.Load(new StringReader(writer.ToString())); return(doc.FirstChild.NextSibling); }
private EntryCollection BuildEntries(BlogXData data, string category, int maxDayCount) { EntryCollection entryList = new EntryCollection(); if (category != null) { int entryCount = SiteConfig.GetSiteConfig().RssEntryCount; category = category.ToUpper(); CategoryCache cache = new CategoryCache(); cache.Ensure(data); foreach (CategoryCacheEntry catEntry in cache.Entries) { if (catEntry.Name.ToUpper() == category) { foreach (CategoryCacheEntryDetail detail in catEntry.EntryDetails) { foreach (DayEntry day in data.Days) { if (day.Date == detail.DayDate) { day.Load(); foreach (Entry entry in day.Entries) { if (entry.EntryId == detail.EntryId) { entryCount--; entryList.Add(entry); if (entryCount < 0) { break; } } } } if (entryCount < 0) { break; } } // foreach (DayEntry day if (entryCount < 0) { break; } } // foreach (CategoryCacheEntryDetail } if (entryCount < 0) { break; } } // foreach (CategoryCacheEntry } else { int dayCount = 0; data.Days.Sort(new DaySorter()); foreach (DayEntry day in data.Days) { day.Load(); dayCount++; foreach (Entry entry in day.Entries) { entryList.Add(entry); } if (dayCount >= maxDayCount) { break; } } } entryList.Sort(new EntrySorter()); return(entryList); }
static int Main(string[] args) { Console.WriteLine("Radio Data Importer"); Console.WriteLine(""); foreach (string arg in args) { if (arg.Length > 6 && arg.ToLower().StartsWith("/from:")) { from = arg.Substring(6).Trim(); if (from[0] == '\"' && from[from.Length] == '\"') { from = from.Substring(1, from.Length - 2); } } else if (arg.Length > 4 && arg.ToLower().StartsWith("/to:")) { to = arg.Substring(4).Trim(); if (to[0] == '\"' && to[from.Length] == '\"') { to = to.Substring(1, to.Length - 2); } } else { break; } } if (from == null || to == null || from.Length == 0 || to.Length == 0) { Console.WriteLine("Usage: blogcmd /from:<radio directory> /to:<output directory>"); Console.WriteLine(""); return(-1); } BlogXData.Resolver = new ResolveFileCallback(FileSystemResolver); Console.WriteLine("Importing entries..."); ArrayList tables = new ArrayList(); XmlDocument masterDoc = new XmlDocument(); StringBuilder sb = new StringBuilder(); sb.Append("<tables>"); foreach (FileInfo file in new DirectoryInfo(from).GetFiles("*.xml")) { XmlDocument entry = new XmlDocument(); entry.Load(file.FullName); sb.Append(entry.FirstChild.NextSibling.OuterXml); } sb.Append("</tables>"); masterDoc.Load(new StringReader(sb.ToString())); foreach (XmlNode node in masterDoc.FirstChild) { RadioTable table = new RadioTable(); table.Name = node.Attributes["name"].Value; foreach (XmlNode child in node) { switch (child.Name) { case "date": table.Data[child.Attributes["name"].Value] = DateTime.Parse(child.Attributes["value"].Value); break; case "boolean": table.Data[child.Attributes["name"].Value] = bool.Parse(child.Attributes["value"].Value); break; case "string": table.Data[child.Attributes["name"].Value] = child.Attributes["value"].Value; break; case "table": if (child.Attributes["name"].Value == "categories") { foreach (XmlNode catNode in child) { if (catNode.Name == "boolean" && catNode.Attributes["value"].Value == "true") { if (table.Data.Contains("categories")) { table.Data["categories"] = (string)table.Data["categories"] + ";" + catNode.Attributes["name"].Value; } else { table.Data["categories"] = catNode.Attributes["name"].Value; } } } } break; } } tables.Add(table); } BlogXData data = new BlogXData(); foreach (RadioTable table in tables) { DateTime date = table.When.Date; DayEntry dayEntry = null; foreach (DayEntry target in data.Days) { if (target.Date == date) { dayEntry = target; break; } } if (dayEntry == null) { dayEntry = new DayEntry(); dayEntry.Date = date; data.Days.Add(dayEntry); } Entry entry = new Entry(); entry.Created = table.When; entry.Title = table.Title; entry.Content = table.Text; entry.Categories = table.Categories; entry.EntryId = table.UniqueId; dayEntry.Entries.Add(entry); data.IncrementEntryChange(); } Console.WriteLine("Saving entries..."); foreach (DayEntry day in data.Days) { day.Save(); } Console.WriteLine("Creating comment cache..."); CategoryCache cache = new CategoryCache(); cache.Ensure(data); Console.WriteLine("Creating entry cache..."); EntryIdCache ecache = new EntryIdCache(); ecache.Ensure(data); return(0); }