private SongPlayInstance ParseSongPlayInstance(SQLiteDataReader reader) { SongPlayInstance toReturn = null; var songDetails = new SongDetails { songID = ReadField <string>(reader, "songid"), songName = ReadField <string>(reader, "songname"), artistName = ReadField <string>(reader, "artistname"), albumName = ReadField <string>(reader, "albumname"), songLength = (float)ReadField <double>(reader, "songLength"), albumYear = (int)ReadField <long>(reader, "albumYear"), arrangements = JsonConvert.DeserializeObject <List <ArrangementDetails> >(ReadField <string>(reader, "arrangements")), albumArt = null }; //try //{ // byte[] blob = ReadField<byte[]>(reader, "album_art"); // songDetails.albumArt = this.DeserializeImage(blob); //} //catch //{ //} var noteDetails = new LearnASongNoteData(); DateTime startTime = ReadField <DateTime>(reader, "start_time"); DateTime endTime = ReadField <DateTime>(reader, "end_time"); toReturn = new SongPlayInstance(songDetails, noteDetails, startTime, endTime); toReturn.NotesHit = (int)ReadField <long>(reader, "notes_hit"); toReturn.NotesMissed = (int)ReadField <long>(reader, "notes_missed"); toReturn.TotalNotes = (int)ReadField <long>(reader, "total_notes"); toReturn.HighestHitStreak = (int)ReadField <long>(reader, "max_streak"); return(toReturn); }
public long Add(SongPlayInstance songPlayInstance) { try { long toReturn = 0; SQLiteTransaction transaction = this.Connection.BeginTransaction(); using (var cmd = this.Connection.CreateCommand()) { cmd.CommandText = SQLiteSchemaStrings.PlayHistoryInsert; #region add parameter objects cmd.Parameters.Add("@songid", DbType.String); cmd.Parameters.Add("@songname", DbType.String); cmd.Parameters.Add("@artistname", DbType.String); cmd.Parameters.Add("@albumname", DbType.String); cmd.Parameters.Add("@songLength", DbType.Single); cmd.Parameters.Add("@albumYear", DbType.Int32); cmd.Parameters.Add("@arrangements", DbType.String); cmd.Parameters.Add("@album_art", DbType.Binary); cmd.Parameters.Add("@notes_hit", DbType.Int32); cmd.Parameters.Add("@notes_missed", DbType.Int32); cmd.Parameters.Add("@total_notes", DbType.Int32); cmd.Parameters.Add("@max_streak", DbType.Int32); cmd.Parameters.Add("@start_time", DbType.DateTime); cmd.Parameters.Add("@end_time", DbType.DateTime); #endregion #region populate parameter values cmd.Parameters["@songid"].Value = songPlayInstance.SongDetails.songID; cmd.Parameters["@songname"].Value = songPlayInstance.SongDetails.songName; cmd.Parameters["@artistname"].Value = songPlayInstance.SongDetails.artistName; cmd.Parameters["@albumname"].Value = songPlayInstance.SongDetails.albumName; cmd.Parameters["@songLength"].Value = songPlayInstance.SongDetails.songLength; cmd.Parameters["@albumYear"].Value = songPlayInstance.SongDetails.albumYear; cmd.Parameters["@arrangements"].Value = JsonConvert.SerializeObject(songPlayInstance.SongDetails.arrangements); // album art handled below cmd.Parameters["@notes_hit"].Value = songPlayInstance.NoteData.TotalNotesHit; cmd.Parameters["@notes_missed"].Value = songPlayInstance.NoteData.TotalNotesMissed; cmd.Parameters["@total_notes"].Value = songPlayInstance.NoteData.TotalNotes; cmd.Parameters["@max_streak"].Value = songPlayInstance.NoteData.HighestHitStreak; cmd.Parameters["@start_time"].Value = songPlayInstance.EndTime; cmd.Parameters["@end_time"].Value = songPlayInstance.StartTime; #region handle album art //cmd.Parameters["@album_art"].Value = SerializeImage(songPlayInstance.SongDetails.albumArt, songPlayInstance.imageLock); #endregion #endregion cmd.ExecuteNonQuery(); toReturn = this.Connection.LastInsertRowId; transaction.Commit(); if (Logger.logCache) { Logger.Log($"Song played {songPlayInstance.SongDetails.songName}/{songPlayInstance.SongDetails.songID}"); } return(toReturn); } } catch (Exception ex) { Logger.LogException(ex); Utilities.ShowExceptionMessageBox(ex); throw ex; } }