private void RemoveEmptyPasswordHashes(ManagedConnection connection)
        {
            foreach (var user in RetrieveAllUsers(connection))
            {
                // If the user password is the sha1 hash of the empty string, remove it
                if (!string.Equals(user.Password, "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709", StringComparison.Ordinal) &&
                    !string.Equals(user.Password, "$SHA1$DA39A3EE5E6B4B0D3255BFEF95601890AFD80709", StringComparison.Ordinal))
                {
                    continue;
                }

                user.Password = null;
                var serialized = JsonSerializer.SerializeToUtf8Bytes(user, _jsonOptions);

                connection.RunInTransaction(db =>
                {
                    using (var statement = db.PrepareStatement("update LocalUsersv2 set data=@data where Id=@InternalId"))
                    {
                        statement.TryBind("@InternalId", user.InternalId);
                        statement.TryBind("@data", serialized);
                        statement.MoveNext();
                    }
                }, TransactionMode);
            }
        }
        private void ImportUserDataIfNeeded(ManagedConnection connection)
        {
            if (!_fileSystem.FileExists(_importFile))
            {
                return;
            }

            var fileToImport = _importFile;
            var isImported   = connection.Query("select IsUserDataImported from DataSettings").SelectScalarBool().FirstOrDefault();

            if (isImported)
            {
                return;
            }

            ImportUserData(connection, fileToImport);

            connection.RunInTransaction(db =>
            {
                using (var statement = db.PrepareStatement("replace into DataSettings (IsUserDataImported) values (@IsUserDataImported)"))
                {
                    statement.TryBind("@IsUserDataImported", true);
                    statement.MoveNext();
                }
            }, TransactionMode);
        }
        private void ImportUserData(ManagedConnection connection, string file)
        {
            SqliteExtensions.Attach(connection, file, "UserDataBackup");

            var columns = "key, userId, rating, played, playCount, isFavorite, playbackPositionTicks, lastPlayedDate, AudioStreamIndex, SubtitleStreamIndex";

            connection.RunInTransaction(db =>
            {
                db.Execute("REPLACE INTO userdata(" + columns + ") SELECT " + columns + " FROM UserDataBackup.userdata;");
            }, TransactionMode);
        }
Beispiel #4
0
        protected bool TableExists(ManagedConnection connection, string name)
        {
            return(connection.RunInTransaction(db =>
            {
                using (var statement = PrepareStatement(db, "select DISTINCT tbl_name from sqlite_master"))
                {
                    foreach (var row in statement.ExecuteQuery())
                    {
                        if (string.Equals(name, row.GetString(0), StringComparison.OrdinalIgnoreCase))
                        {
                            return true;
                        }
                    }
                }

                return false;
            }, ReadTransactionMode));
        }