示例#1
0
        public AdEditorForm(IGADatabaseConnector conn, ContentEntry entry)
        {
            InitializeComponent();
            this._conn = conn;

            ActivationDatePicker.CustomFormat = Common.DateTimeFormat;
            ExpiryDatePicker.CustomFormat = Common.DateTimeFormat;

            // deserialize data row
            if (entry != null)
            {
                // real row
                _entry = entry;
            }
            else
            {
                _entry = new ContentEntry();

                // work around limitation of the library
                if (_conn.MinTimeStoredInSeconds)
                {
                    _entry.Properties["MinTime"] = "2";
                }
            }

            DrawToForm();
        }
        /// <summary>
        /// Internal function to read a row from a SqliteDataReader to convert
        /// it to a ContentEntry.
        /// </summary>
        /// <param name="reader">The SqliteDataReader to get the information from.</param>
        /// <param name="IncludeImageData">Should image data be included?</param>
        /// <returns>A ContentEntry describing the row returned.</returns>
        private ContentEntry GetEntryFromReader(SqliteDataReader reader, bool IncludeImageData)
        {
            ContentEntry entry = new ContentEntry();

            // read in rows
            try
            {
                entry.ContentID = (uint)(int)reader["contentId"];
            }
            catch (ArgumentOutOfRangeException)
            {
                // no rows, fail out.
                return null;
            }

            entry.Orphan = this.CheckIfRecordIsOrphaned(entry.ContentID);

            DateTime activate = new DateTime(1970, 1, 1, 0, 0, 0, 0);
            entry.Activate = activate.AddSeconds((int)reader["activate"]);

            entry.Active = ((int)reader["active"] >= 1);

            if ((int)reader["expire"] > 0)
            {
                DateTime expires = new DateTime(1970, 1, 1, 0, 0, 0, 0);
                entry.Expiry = expires.AddSeconds((int)reader["expire"]);
                entry.Expires = true;
            }
            else
            {
                entry.Expires = false;
            }

            entry.DayParts = (uint)(int)reader["dayparts"];

            entry.contentType = new ContentType((uint)(int)reader["contentType"]);

            entry.Size = (uint)(int)reader["size"];
            entry.ViewCount = (uint)(int)reader["viewcount"];
            entry.ViewLimit = (uint)(int)reader["viewlimit"];
            entry.DisplayAfter = (uint)(int)reader["displayafter"];

            // parse properties.
            String props = (String)reader["props"];
            entry.Properties = new SortedDictionary<string, string>();

            // Provide "sensible default" for mintime, incase the file has errors and it
            // is omitted.
            if (this.MinTimeStoredInSeconds)
            {
                entry.Properties["MinTime"] = "2";
            }
            else
            {
                entry.Properties["MinTime"] = "2000";
            }

            foreach (String prop in props.Split('&'))
            {
                if (prop.Length > 0)
                {
                    String[] pk = prop.Split('=');
                    entry.Properties[pk[0]] = pk[1];
                }
            }

            if (IncludeImageData)
            {
                long fileLength;
                try
                {
                    fileLength = ((byte[])reader["data"]).Length;
                }
                catch (Exception ex)
                {
                    // data blob is empty
                    ex.ToString();
                    fileLength = 0;
                }
                byte[] ddsimage = new byte[fileLength];
                if (fileLength > 0)
                {
                    ddsimage = ((byte[])reader["data"]);
                }

                entry.Data = ddsimage;
            }

            return entry;
        }
        /// <summary>
        /// Creates a new entry in the cache file.
        /// </summary>
        /// <param name="entry">The entry to create.</param>
        /// <returns>The new entry's contentId.</returns>
        public uint NewEntry(ContentEntry entry)
        {
            uint active = 1;
            if (!entry.Active)
            {
                active = 0;
            }
            uint activate = (uint)((TimeSpan)entry.Activate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, 0))).TotalSeconds;
            uint expiry = 0;
            if (entry.Expires)
            {
                expiry = (uint)((TimeSpan)entry.Expiry.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, 0))).TotalSeconds;
            }

            String p = entry.GetPropsAsString();

            SqliteCommand query = new SqliteCommand(@"INSERT INTO [content] ([active], [activate], [expire], [dayparts], [contentType], [descriptor], [size], [viewcount], [viewlimit], [displayafter], [props], [data]) VALUES (@active, @activate, @expire, @dayparts, @contentType, @descriptor, @size, @viewcount, @viewlimit, @displayafter, @props, @data); SELECT last_insert_rowid() AS contentId;", sqlite);
            query.Parameters.Add(new SqliteParameter("@active", (int)active));
            query.Parameters.Add(new SqliteParameter("@activate", (int)activate));
            query.Parameters.Add(new SqliteParameter("@expire", (int)expiry));
            query.Parameters.Add(new SqliteParameter("@dayparts", (int)entry.DayParts));
            query.Parameters.Add(new SqliteParameter("@contentType", (int)entry.contentType.contentType));
            query.Parameters.Add(new SqliteParameter("@descriptor", entry.Descriptor));
            query.Parameters.Add(new SqliteParameter("@size", (int)entry.Size));
            query.Parameters.Add(new SqliteParameter("@viewcount", (int)entry.ViewCount));
            query.Parameters.Add(new SqliteParameter("@viewlimit", (int)entry.ViewLimit));
            query.Parameters.Add(new SqliteParameter("@displayafter", (int)entry.DisplayAfter));
            query.Parameters.Add(new SqliteParameter("@props", p));
            query.Parameters.Add(new SqliteParameter("@data", entry.Data));
            // get the contentId back
            sqlite.Open();
            Object cidR = query.ExecuteScalar();
            uint cid = (uint)((long)cidR);

            // shove cid into props
            p = "contentId=" + cid.ToString() + "&" + p;

            // reset connection
            sqlite.Close();
            sqlite.Open();

            // shove in updated props
            query = new SqliteCommand(@"UPDATE [content] SET [props]=@props WHERE [contentId]=@cid", sqlite);
            query.Parameters.Add(new SqliteParameter("@props", p));
            query.Parameters.Add(new SqliteParameter("@cid", (int)cid));
            if (query.ExecuteNonQuery() == 0)
            {
                sqlite.Close();
                throw new DatabaseUpdateFailureException();
            }

            // reset connection
            sqlite.Close();
            sqlite.Open();

            // shove in corresponding contentlist entry for record
            query = new SqliteCommand(@"INSERT INTO [contentlist] ([appId], [contentType], [contentId], [userInfo], [zoneId]) VALUES (@appid, @contentType, @cid, @userinfo, @zoneid)", sqlite);
            query.Parameters.Add(new SqliteParameter("@appid", this._appID));
            query.Parameters.Add(new SqliteParameter("@contentType", (int)entry.contentType.contentType));
            query.Parameters.Add(new SqliteParameter("@cid", (int)cid));
            query.Parameters.Add(new SqliteParameter("@zoneid", entry.Properties["zoneId"]));
            query.Parameters.Add(new SqliteParameter("@userinfo", entry.Properties["userInfo"]));

            if (query.ExecuteNonQuery() == 0)
            {
                sqlite.Close();
                throw new DatabaseUpdateFailureException();
            }
            sqlite.Close();

            return cid;
        }
        /// <summary>
        /// Updates the entry an the specified contentId.
        /// </summary>
        /// <param name="contentID">The contentId to update.</param>
        /// <param name="entry">The new content of the row.</param>
        /// <param name="UpdateData">Should the image/video data column be updated?</param>
        public void EditEntry(uint contentID, ContentEntry entry, bool UpdateData)
        {
            uint active = 1;
            if (!entry.Active)
            {
                active = 0;
            }
            uint activate = (uint)((TimeSpan)entry.Activate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, 0))).TotalSeconds;
            uint expiry = 0;
            if (entry.Expires)
            {
                expiry = (uint)((TimeSpan)entry.Expiry.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, 0))).TotalSeconds;
            }

            String propS = entry.GetPropsAsString();

            sqlite.Open();
            SqliteCommand query = new SqliteCommand(@"UPDATE [content] SET [active]=@active, [activate]=@activate, [expire]=@expire, [dayparts]=@dayparts, [contentType]=@contentType, [descriptor]=@descriptor, [size]=@size, [viewcount]=@viewcount, [viewlimit]=@viewlimit, [displayafter]=@displayafter, [props]=@props WHERE [contentId]=@cid", sqlite);
            //query = new SqliteCommand(@"UPDATE [content] SET [active]=@active, [activate]=@activate, [expire]=@expire, [props]=@props WHERE [contentId]=@cid", sqlite);
            query.Parameters.Add(new SqliteParameter("@cid", (int)contentID));
            query.Parameters.Add(new SqliteParameter("@active", (int)active));
            query.Parameters.Add(new SqliteParameter("@activate", (int)activate));
            query.Parameters.Add(new SqliteParameter("@expire", (int)expiry));
            query.Parameters.Add(new SqliteParameter("@dayparts", (int)entry.DayParts));
            query.Parameters.Add(new SqliteParameter("@contentType", (int)entry.contentType.contentType));
            query.Parameters.Add(new SqliteParameter("@descriptor", entry.Descriptor));
            query.Parameters.Add(new SqliteParameter("@size", (int)entry.Size));
            query.Parameters.Add(new SqliteParameter("@viewcount", (int)entry.ViewCount));
            query.Parameters.Add(new SqliteParameter("@viewlimit", (int)entry.ViewLimit));
            query.Parameters.Add(new SqliteParameter("@displayafter", (int)entry.DisplayAfter));
            query.Parameters.Add(new SqliteParameter("@props", propS));

            if (query.ExecuteNonQuery() != 1)
            {
                sqlite.Close();
                throw new DatabaseUpdateFailureException();
            }
            sqlite.Close();
            sqlite.Open();

            // update contentlist
            query = new SqliteCommand(@"UPDATE [contentlist] SET [zoneId]=@zoneid, [contentType]=@contentType, [userInfo]=@userinfo WHERE [contentId]=@cid", sqlite);
            query.Parameters.Add(new SqliteParameter("@cid", (int)contentID));
            query.Parameters.Add(new SqliteParameter("@contentType", (int)entry.contentType.contentType));
            query.Parameters.Add(new SqliteParameter("@zoneid", entry.Properties["zoneId"]));
            query.Parameters.Add(new SqliteParameter("@userinfo", entry.Properties["userInfo"]));
            if (query.ExecuteNonQuery() == 0)
            {
                sqlite.Close();
                throw new DatabaseUpdateFailureException();
            }

            sqlite.Close();

            if (UpdateData)
            {
                this.ImportImage(contentID, entry.Data);
            }
        }
示例#5
0
 /// <summary>
 /// Converts an AdPackEntry to a ContentEntry object.
 /// </summary>
 /// <returns>The new, converted ContentEntry object.</returns>
 public ContentEntry ToContentEntry()
 {
     ContentEntry entry = new ContentEntry();
     entry.Size = (uint)this._ddsdata.Length;
     entry.Data = this._ddsdata;
     entry.contentType = this._contentType;
     return entry;
 }