Beispiel #1
0
        public int?GenerateItemId(ItemType itemType)
        {
            ISQLiteConnection conn = null;

            try {
                conn = database.GetSqliteConnection();
                int affected = conn.ExecuteLogged("INSERT INTO Item (ItemType, Timestamp) VALUES (?, ?)", itemType, DateTime.UtcNow.ToUnixTime());

                if (affected >= 1)
                {
                    try {
                        int rowId = conn.ExecuteScalar <int>("SELECT last_insert_rowid()");

                        if (rowId != 0)
                        {
                            return(rowId);
                        }
                    } catch (Exception e) {
                        logger.Error(e);
                    }
                }
            } catch (Exception e) {
                logger.Error("GenerateItemId ERROR: ", e);
            } finally {
                database.CloseSqliteConnection(conn);
            }

            return(null);
        }
Beispiel #2
0
        /// <summary>
        /// Retrieve the server's GUID for URL forwarding, or generate a new one if none exists
        /// </summary>
        public static string GetServerGuid()
        {
            string guid = null;

            ISQLiteConnection conn = null;

            try
            {
                // Grab server GUID from the database
                conn = Injection.Kernel.Get <IDatabase>().GetSqliteConnection();
                guid = conn.ExecuteScalar <string>("SELECT Guid FROM Server");
            }
            catch (Exception e)
            {
                logger.Error("Exception loading server GUID", e);
            }
            finally
            {
                Injection.Kernel.Get <IDatabase>().CloseSqliteConnection(conn);
            }

            // If it doesn't exist, generate a new one
            if ((object)guid == null)
            {
                // Generate the GUID
                Guid guidObj = Guid.NewGuid();
                guid = guidObj.ToString();

                // Store the GUID in the database
                try
                {
                    conn = Injection.Kernel.Get <IDatabase>().GetSqliteConnection();
                    int affected = conn.Execute("INSERT INTO Server (Guid) VALUES (?)", guid);

                    if (affected == 0)
                    {
                        guid = null;
                    }
                }
                catch (Exception e)
                {
                    logger.Error("Exception saving guid", e);
                    guid = null;
                }
                finally
                {
                    Injection.Kernel.Get <IDatabase>().CloseSqliteConnection(conn);
                }
            }

            return(guid);
        }
Beispiel #3
0
        /// <summary>
        /// Retrieve the server's forwarding URL from database
        /// </summary>
        public static string GetServerUrl()
        {
            ISQLiteConnection conn = null;

            try {
                // Grab server URL from the database
                conn = Injection.Kernel.Get <IDatabase>().GetSqliteConnection();
                return(conn.ExecuteScalar <string>("SELECT Url FROM Server"));
            } catch (Exception e) {
                logger.Error("Exception loading server info", e);
            } finally {
                Injection.Kernel.Get <IDatabase>().CloseSqliteConnection(conn);
            }

            return(null);
        }
Beispiel #4
0
        public int IndexOfMediaItem(IMediaItem item)
        {
            ISQLiteConnection conn = null;

            try {
                conn = Injection.Kernel.Get <IDatabase>().GetSqliteConnection();
                return(conn.ExecuteScalar <int>("SELECT ItemPosition FROM PlaylistItem " +
                                                "WHERE PlaylistId = ? AND ItemType = ? " +
                                                "ORDER BY ItemPosition LIMIT 1", PlaylistId, item.ItemTypeId));
            } catch (Exception e) {
                logger.Error(e);
            } finally {
                Injection.Kernel.Get <IDatabase>().CloseSqliteConnection(conn);
            }

            return(0);
        }
        // Retrieve a scalar value of type T using query string and prepared arguments
        public static T GetScalar <T>(this IDatabase database, string query, params object[] args) where T : new()
        {
            ISQLiteConnection conn = null;

            try {
                // Get database connection, use query to fetch scalar value of type T
                conn = database.GetSqliteConnection();
                return(conn.ExecuteScalar <T>(query, args));
            } catch (Exception e) {
                logger.Error("query: " + query);
                logger.Error(e);
            } finally {
                database.CloseSqliteConnection(conn);
            }

            // Return default value for scalar (reference: null, value: 0)
            return(default(T));
        }
Beispiel #6
0
        private bool ArtFileNeedsUpdating(string filePath)
        {
            if (filePath == null)
            {
                return(false);
            }

            // Verify file is one that we recognize as art
            FileInfo file = new FileInfo(filePath);

            if (!Injection.Kernel.Get <IServerSettings>().FolderArtNames.Contains(file.Name))
            {
                return(false);
            }

            long lastModified  = System.IO.File.GetLastWriteTime(filePath).ToUnixTime();
            bool needsUpdating = true;

            ISQLiteConnection conn = null;

            try
            {
                conn = Injection.Kernel.Get <IDatabase>().GetSqliteConnection();
                string artId = conn.ExecuteScalar <string>("SELECT ArtId FROM Art WHERE LastModified = ? AND FilePath = ?", lastModified, filePath);

                if (!ReferenceEquals(artId, null))
                {
                    needsUpdating = false;
                }
            }
            catch (Exception e)
            {
                logger.Error(e);
            }
            finally
            {
                Injection.Kernel.Get <IDatabase>().CloseSqliteConnection(conn);
            }

            return(needsUpdating);
        }