Пример #1
0
 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;
 }
Пример #2
0
 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;
     }
 }
Пример #3
0
        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.");
            }
        }
Пример #4
0
 public bool deleteTrack(Track track)
 {
     return deleteTrack(track.id);
 }