//
        // GetImageFileName
        //
        // Will get the image file name representing the item
        //
        public static string GetImageFileName(int compiledTextFeedHash, Guid compiledTextFeedGuid, int compiledTextFeedItemHash, SlideShowImageSize imageSize, string templateDirectory, bool bypassCaches)
        {
            string fileName = ImageUtil.GetCompiledImageDirectory("TextFeed") + compiledTextFeedGuid.ToString() + "_" + compiledTextFeedItemHash.ToString() + "_" + ((int)imageSize).ToString() + ".jpg";

            if (!bypassCaches && MiscUtil.TTLFileExists(fileName, CompiledTextFeedItem.textFeedImageTTL))
            {
                return(fileName);
            }
            else
            {
                CompiledTextFeedItem compiledTextFeedItem = CompiledTextFeedItem.LoadForImage(compiledTextFeedItemHash, compiledTextFeedHash, compiledTextFeedGuid);

                Bitmap bitmap = compiledTextFeedItem.GenerateImage(fileName, imageSize, templateDirectory);

                return(fileName);
            }
        }
        //
        // Load
        //
        // Loads the object from the database, and if it doesn't exist, creates it
        static public CompiledTextFeedItem Load(int compiledTextFeedHash, Guid compiledTextFeedGuid, string title, string description, int compiledTextFeedItemHash)
        {
            CompiledTextFeedItem compiledTextFeedItem = new CompiledTextFeedItem();

            compiledTextFeedItem.compiledTextFeedHash = compiledTextFeedHash;
            compiledTextFeedItem.compiledTextFeedGuid = compiledTextFeedGuid;
            if ((title != null) || (description != null))
            {
                compiledTextFeedItem.compiledTextFeedItemHash = ((string)(title + description)).GetHashCode();
            }
            else
            {
                compiledTextFeedItem.compiledTextFeedItemHash = compiledTextFeedItemHash;
            }
            compiledTextFeedItem.compiledDate       = DateTime.Now;
            compiledTextFeedItem.imageGeneratedDate = DateTime.Now;

            using (PhotoMixQuery query = new PhotoMixQuery("SelectCompiledTextFeedItem"))
            {
                query.Parameters.Add("@CompiledTextFeedHash", SqlDbType.Int).Value = compiledTextFeedItem.compiledTextFeedHash;
                query.Parameters.Add("@CompiledTextFeedGuid", SqlDbType.UniqueIdentifier).Value = compiledTextFeedItem.compiledTextFeedGuid;
                query.Parameters.Add("@CompiledTextFeedItemHash", SqlDbType.Int).Value          = compiledTextFeedItem.compiledTextFeedItemHash;
                if ((title != null) || (description != null))
                {
                    query.Parameters.Add("@Title", SqlDbType.VarChar).Value         = String.IsNullOrEmpty(title) ? (Object)DBNull.Value : (Object)title;
                    query.Parameters.Add("@Description", SqlDbType.Text).Value      = String.IsNullOrEmpty(description) ? (Object)DBNull.Value : (Object)description;
                    query.Parameters.Add("@CompiledDate", SqlDbType.DateTime).Value = compiledTextFeedItem.compiledDate;
                }
                else
                {
                    query.Parameters.Add("@ImageGeneratedDate", SqlDbType.DateTime).Value = compiledTextFeedItem.imageGeneratedDate;
                }

                if (query.Reader.Read())
                {
                    compiledTextFeedItem.title              = query.Reader.IsDBNull(0) ? null : query.Reader.GetString(0);
                    compiledTextFeedItem.description        = query.Reader.IsDBNull(1) ? null : query.Reader.GetString(1);
                    compiledTextFeedItem.compiledDate       = query.Reader.IsDBNull(2) ? DateTime.MinValue : query.Reader.GetDateTime(2);
                    compiledTextFeedItem.imageGeneratedDate = query.Reader.IsDBNull(3) ? DateTime.MinValue : query.Reader.GetDateTime(3);
                }
            }

            return(compiledTextFeedItem);
        }
        public override SlideShowItem CreateSlideShowItem(Hashtable compileCache, DateTime dateContext, bool bypassCaches)
        {
            RssChannel rssFeedChannel = (RssChannel)this.Channel;

            CompiledTextFeed compiledTextFeed;

            if (compileCache[rssFeedChannel.ChannelGuid] != null)
            {
                compiledTextFeed = (CompiledTextFeed)compileCache[rssFeedChannel.ChannelGuid];
            }
            else
            {
                compiledTextFeed = CompiledTextFeed.LoadForCompile(rssFeedChannel.RssFeedUrl, rssFeedChannel.ChannelImageUrl, rssFeedChannel.ChannelTitle, rssFeedChannel.RenderAd);
                compileCache[rssFeedChannel.ChannelGuid] = compiledTextFeed;
            }

            CompiledTextFeedItem compiledTextFeedItem;

            if (compileCache[rssFeedChannel.ChannelGuid + this.title + this.description] != null)
            {
                compiledTextFeedItem = (CompiledTextFeedItem)compileCache[rssFeedChannel.ChannelGuid + this.title + this.description];
            }
            else
            {
                compiledTextFeedItem = CompiledTextFeedItem.LoadForCompile(compiledTextFeed.CompiledTextFeedHash, compiledTextFeed.CompiledTextFeedGuid, this.title, this.description);
                compileCache[rssFeedChannel.ChannelGuid + this.title + this.description] = compiledTextFeedItem;
            }

            string url = Config.GetSetting("CompiledImageBaseUrl") + "textfeeditem.ashx?" +
                         "ch=" + compiledTextFeed.CompiledTextFeedHash +
                         "&cid=" + compiledTextFeed.CompiledTextFeedGuid +
                         "&tih=" + compiledTextFeedItem.CompiledTextFeedItemHash +
                         (bypassCaches ? "&bc=1" : "") +
                         "&<SIZE>";

            return(new SlideShowItem(this.ExpDate, this.PubDate, this.Channel.Name, url, true));
        }