public Track getTrackById(string id) { Track t = null; using (SQLiteCommand fetchcommand = Program.storage.GetCommand("SELECT ID, STATE, DISKLOCATION, FETCHTIME FROM TRACKS WHERE ID=:id")) { fetchcommand.Parameters.AddWithValue("id", id); using (SQLiteDataReader reader = fetchcommand.ExecuteReader()) { if (reader.HasRows) { reader.Read(); Behavior.Assert(true, "Should contain only single record in data base for track id " + id); DateTime data_fetchtime = DateTime.FromBinary(reader.GetInt64(reader.GetOrdinal("FETCHTIME"))); string data_id = reader.GetString(reader.GetOrdinal("ID")); string data_state = reader.GetString(reader.GetOrdinal("STATE")); string data_disklocation = reader.GetString(reader.GetOrdinal("DISKLOCATION")); t = new Track(data_id, data_state, data_disklocation, data_fetchtime); } } } return t; }
public bool updateTrack(Track track) { if (getTrackById(track.id) == null) { using (SQLiteCommand insertcommand = Program.storage.GetCommand("INSERT OR REPLACE INTO TRACKS( ID, STATE, DISKLOCATION, FETCHTIME) VALUES(:id, :state, :disklocation, :fetchtime)")) { insertcommand.Parameters.AddWithValue("id", track.id); insertcommand.Parameters.AddWithValue("state", track.state); insertcommand.Parameters.AddWithValue("disklocation", track.disklocation); insertcommand.Parameters.AddWithValue("fetchtime", track.fetchtime.Ticks/1000); insertcommand.ExecuteNonQuery(); } return false; } else { StringBuilder sb = new StringBuilder(); if (track.id != null) sb.Append(" ID = '").Append(track.id).Append("'"); if (track.state != null) if (sb.Length != 0) sb.Append(" , "); sb.Append(" STATE = '").Append(track.state).Append("'"); if (track.id != null) if (sb.Length != 0) sb.Append(" , "); sb.Append(" DISKLOCATION = '").Append(track.disklocation).Append("'"); if (track.id != null) if (sb.Length != 0) sb.Append(" , "); sb.Append(" FETCHTIME = '").Append(track.fetchtime.Ticks / 1000).Append("'"); if (sb.Length == 0) throw new Exception("Cannot execute update when track object is fully nulled"); using (SQLiteCommand updatecommand = Program.storage.GetCommand("UPDATE OR REPLACE TRACKS SET "+sb.ToString()+" WHERE ID=:id")) { updatecommand.ExecuteNonQuery(); } return true; } }
private void WriteStreamForIDToDisk(string id) { if (currentlyFetching.ContainsKey(id)) { MemoryStream stream = (MemoryStream)currentlyFetching[id]; String fileName=GetFilenameForTrackID(id); using (FileStream fileStream = File.OpenWrite(fileName)) { //byte[] buffer = new byte[4096]; //int len; stream.Seek(0, SeekOrigin.Begin); stream.CopyTo(fileStream); //while ((len = stream.Read(buffer, 0, buffer.Length)) > 0) //{ // fileStream.Write(buffer, 0, len); //} } //stream.Close(); Track trackRecord = new Track(id,"DOWNLOADED",fileName,DateTime.Now); Program.daos.trackDAO.updateTrack(trackRecord); currentlyFetching.Remove(id); } else { Program.logging.addToLog("Stream downloading thread signaled that it is finished downloading and stream is ready to be written to disk, but we cannot find stream for id " + id + " in list of being currently downloaded."); } }
public bool deleteTrack(Track track) { return deleteTrack(track.id); }