Пример #1
0
        public BlogXEditing()
        {
            BlogXData.Resolver = new ResolveFileCallback(ResolvePath);
            data = new BlogXData();
            data.Days.Sort(new DaySorter());

            InitializeComponent();
        }
Пример #2
0
        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();
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }