public void Load() { string pls = null; _db.Get("playlist:" + _name, out pls, null); if (pls == null) { return; } else { string [] entries = Regex.Split(pls, "#@%@#"); //Hyena.Log.Information ("playlist name="+pls+", entries="+entries); foreach (string e in entries) { Hyena.Log.Information("entry=" + e); if (e != "") { string [] ids = Regex.Split(e, "%%%"); string cs_id = ids[0].Substring("cuesheet=".Length); string cs_e = ids[1].Substring("entry=".Length); //Hyena.Log.Information ("finding: cs-id="+cs_id+", e-id="+cs_e); CueSheetEntry entry = _csc.FindEntry(cs_id, cs_e); if (entry != null) { Hyena.Log.Information("adding entry:" + entry); Add(entry); } } } } }
public void Save() { if (!File.Exists(_cuefile + ".bck")) { File.Copy(_cuefile, _cuefile + ".bck"); } System.IO.StreamWriter wrt = new System.IO.StreamWriter(_cuefile); resetArt(); indent = ""; wrtl(wrt, "creator", "Banshee CueSheets Extension", true); wrtl(wrt, "creator-version", CS_Info.Version(), true); wrtl(wrt, "banshee-aaid", getArtId(), true); wrtl(wrt, "image", _image_file_name, true); wrtl(wrt, "composer", _composer, true); wrtl(wrt, "subtitle", _subtitle, true); wrtl(wrt, "year", _year, true); wrtl(wrt, "cddbid", _cddbId, true); wrtl(wrt, "performer", _performer); wrtl(wrt, "title", _title); string mfn = Tools.basename(_music_file_name); wrtl_file(wrt, mfn); int i, N; for (i = 0, N = nEntries(); i < N; i++) { CueSheetEntry e = _tracks[i]; writeEntry(wrt, e, i); } wrt.Close(); }
public void seekSong(int i) { Hyena.Log.Information("SeekSong called " + i); try { CueSheet sheet = MySource.getSheet(); if (sheet.Count == 0) { if (_selected != null) { loadCueSheet(_selected); } } CueSheetEntry e = sheet.entry(i); _song_id = e.id(); if (_song_file != e.file()) { ServiceManager.PlayerEngine.Open(e); ServiceManager.PlayerEngine.Play(); _song_file = e.file(); } double offset = e.offset(); //ServiceManager.PlayerEngine.SetCurrentTrack(e); _position = (uint)(offset * 1000.0); _set_position = true; mscount = chgcount - (1000 / timeout); } catch (SystemException ex) { Hyena.Log.Information(ex.ToString()); } }
private void setLatinTag(int track, CueSheet s, CueSheetEntry e) { string fn = _file_format; fn = fn.Replace("@A", s.performer()); fn = fn.Replace("@b", s.title()); fn = fn.Replace("@n", (track + 1).ToString()); fn = fn.Replace("@t", e.title()); fn = _directory + "/" + fn + ".mp3"; Hyena.Log.Information("file to convert:" + fn); if (File.Exists(fn)) { TagLib.File file = TagLib.File.Create(fn); if (file == null) { Hyena.Log.Error("Cannot create taglib file for " + fn); return; } else { Hyena.Log.Information("Setting tags for " + fn); file.Tag.Album = s.title(); file.Tag.AlbumArtists = new string[] { s.performer() }; file.Tag.Composers = new string[] { s.composer() }; file.Tag.Genres = new string[] { s.genre() }; file.Tag.Title = e.title(); file.Tag.Track = (uint)track + 1; file.Tag.Performers = new string[] { e.performer() }; file.Save(); } } }
public void Insert(CueSheetEntry e, int index) { CS_PlayListEntry ple = new CS_PlayListEntry(e); Hyena.Log.Information("index=" + index + ", e=" + e); _playlist.Insert(index, ple); }
void writeEntry(StreamWriter wrt, CueSheetEntry e, int i) { indent = " "; wrtl_track(wrt, i + 1); indent = " "; wrtl(wrt, "title", e.title()); wrtl(wrt, "performer", e.performer()); wrtl(wrt, "piece", e.getPiece(), true); wrtl(wrt, "composer", e.getComposer(), true); wrtl_index(wrt, 1, e.offset()); }
public void OnSave(object sender, EventArgs args) { string nPerformer = _performer.Text.Trim(); string nTitle = _title.Text.Trim(); string nComposer = _composer.Text.Trim(); string nYear = _year.Text.Trim(); string nSubtitle = _subtitle.Text.Trim(); _sheet.SetPerformer(nPerformer); _sheet.SetTitle(nTitle); _sheet.SetComposer(nComposer); _sheet.SetYear(nYear); _sheet.SetSubtitle(nSubtitle); _sheet.SetImagePath(_imagefile.Filename); _sheet.ClearTracks(); Gtk.TreeIter iter; if (_store.GetIterFirst(out iter)) { do { string title = (string)_store.GetValue(iter, 1); string perf = (string)_store.GetValue(iter, 2); string composer = (string)_store.GetValue(iter, 3); if (composer.Trim() == "") { composer = nComposer; } string piece = (string)_store.GetValue(iter, 4); piece = piece.Trim(); string offset = (string)_store.GetValue(iter, 5); string [] parts = Regex.Split(offset, "[.:]"); double e_offset; int min = Convert.ToInt32(parts[0]); int secs = Convert.ToInt32(parts[1]); int hsecs = Convert.ToInt32(parts[2]); e_offset = min * 60 + secs + (hsecs / 100.0); if (perf.Trim() == "") { perf = nPerformer; } CueSheetEntry e = _sheet.AddTrack(title, perf, e_offset); e.setComposer(composer); e.setPiece(piece); } while(_store.IterNext(ref iter)); } _sheet.Save(); }
public int searchIndex(string _current_entry_id, double _offset) { Hyena.Log.Information("id=" + _current_entry_id + ", offset=" + _offset); int k, N; if (_current_entry_id == null) { for (k = 0, N = nEntries(); k < N && _offset > _tracks[k].offset(); k++) { ; } return(k - 1); } else { for (k = 0, N = nEntries(); k < N && _current_entry_id != entry(k).id(); k++) { ; } if (k == N) { return(N - 1); } else { CueSheetEntry e = entry(k); Hyena.Log.Information("offset=" + e.offset() + ", endoffset=" + e.end_offset() + " offset=" + _offset); if (_offset < e.offset()) { return(k - 1); } else if (e.end_offset() <= 0.0) // end track, we don't know { return(k); } else if (_offset >= e.end_offset()) { return(k + 1); } else { return(k); } } } }
public override int IndexOf(TrackInfo track) { int i, N; for (i = 0, N = _tracks.Count; i < N && CueSheetEntry.MakeId(track) != _tracks[i].id(); i++) { ; } if (i == N) { return(-1); } else { return(i); } }
public void Save() { string pls = ""; string sep = ""; Hyena.Log.Information("Playlist=" + _playlist); foreach (CS_PlayListEntry ple in _playlist) { Hyena.Log.Information("ple=" + ple); CueSheetEntry e = ple.GetCueSheetEntry(); Hyena.Log.Information("e=" + e); CueSheet s = e.getCueSheet(); Hyena.Log.Information("sheet=" + s + ", entry=" + e); string id = s.id(); string e_id = e.id(); string entry = "cuesheet=" + id + "%%%entry=" + e_id; pls += sep; pls += entry; sep = "#@%@#"; } _db.Set("playlist:" + _name, pls); }
public CueSheetEntry AddTrack(string e_title, string e_perf, double e_offset) { int nr = _tracks.Count; string aaid = getArtId(); CueSheetEntry e = new CueSheetEntry(this, _music_file_name, aaid, nr, -1, e_title, e_perf, _title, e_offset); append(e); int i, N; for (i = 0, N = nEntries(); i < N; i++) { _tracks[i].setNrOfTracks(N); if (i < N - 1) { _tracks[i].setLength(_tracks[i + 1].offset() - _tracks[i].offset()); } else { _tracks[i].setLength(-1.0); } } return(e); }
public void reLoad() { index = 0; try { CueSheet sheet = MySource.getSheet(); //ServiceManager.PlayerEngine.SetAccurateSeek(true); CueSheetEntry e = sheet.entry(index); _song_id = e.id(); ServiceManager.PlayerEngine.Open(e); ServiceManager.PlayerEngine.Play(); if (ServiceManager.PlaybackController.Source != MySource) { ServiceManager.PlaybackController.Source = MySource; } if (ServiceManager.PlaybackController.NextSource != MySource) { ServiceManager.PlaybackController.NextSource = MySource; } //ServiceManager.PlaybackController.SetSeekMode (true); } catch (SystemException ex) { Hyena.Log.Information(ex.ToString()); } mscount = chgcount - 1; }
public void AddEntry(CueSheetEntry e) { append(e); }
public void iLoad(StreamReader sr) { _composer = ""; _year = ""; _subtitle = ""; _cddbId = ""; Boolean _in_tracks = false; string e_perf = ""; string e_title = ""; double e_offset = -1.0; string e_piece = ""; string e_composer = ""; string aaid = ""; int nr = 0; //string filename=_cuefile; string directory = _directory; string line = ""; while ((line = sr.ReadLine()) != null) { line = line.Trim(); if (line != "") { //Console.WriteLine ("it="+_in_tracks+", "+line); if (!_in_tracks) { if (eq(line, "performer")) { _performer = unquote(line.Substring(9).Trim()); } else if (eq(line, "title")) { _title = unquote(line.Substring(5).Trim()); } else if (eq(line, "file")) { _music_file_name = line.Substring(4).Trim(); Match m = Regex.Match(_music_file_name, "([\"][^\"]+[\"])"); _music_file_name = m.ToString(); _music_file_name = unquote(_music_file_name).Trim(); _music_file_name = Tools.makefile(directory, _music_file_name); } else if (line.Substring(0, 5).ToLower() == "track") { _in_tracks = true; } else if (eq(line, "rem")) { //Hyena.Log.Information (line); line = line.Substring(3).Trim(); if (eq(line, "image")) { _image_file_name = line.Substring(5).Trim(); _image_file_name = unquote(_image_file_name).Trim(); _img_full_path = Tools.makefile(directory, _image_file_name); } else if (eq(line, "composer")) { _composer = unquote(line.Substring(8).Trim()); } else if (eq(line, "subtitle")) { _subtitle = unquote(line.Substring(8).Trim()); } else if (eq(line, "year")) { _year = unquote(line.Substring(4).Trim()); } else if (eq(line, "cddbid")) { _cddbId = unquote(line.Substring(6).Trim()); } } } if (_in_tracks) { if (aaid == "") { aaid = getArtId(); } //Console.WriteLine ("line="+line); if (eq(line, "track")) { if (e_offset >= 0) { nr += 1; CueSheetEntry e = new CueSheetEntry(this, _music_file_name, aaid, nr, -1, e_title, e_perf, _title, e_offset); e.setComposer(e_composer); e.setPiece(e_piece); append(e); if (nr > 1) { CueSheetEntry ePrev; ePrev = this.entry(nr - 2); ePrev.setLength(e.offset() - ePrev.offset()); } } e_perf = _performer; e_title = ""; e_composer = _composer; e_offset = -1.0; } else if (eq(line, "title")) { e_title = unquote(line.Substring(5).Trim()); } else if (eq(line, "performer")) { e_perf = unquote(line.Substring(9).Trim()); } else if (eq(line, "rem")) { line = line.Substring(3).Trim(); if (eq(line, "composer")) { e_composer = unquote(line.Substring(8).Trim()); } else if (eq(line, "piece")) { e_piece = unquote(line.Substring(5).Trim()); } } else if (eq(line, "index")) { string s = line.Substring(5).Trim(); s = Regex.Replace(s, "^\\s*[0-9]+\\s*", ""); string [] parts = Regex.Split(s, "[:]"); int min = Convert.ToInt32(parts[0]); int secs = Convert.ToInt32(parts[1]); int hsecs = Convert.ToInt32(parts[2]); e_offset = min * 60 + secs + (hsecs / 100.0); } } } } //Console.WriteLine ("Last entry adding"); if (e_offset >= 0) { nr += 1; CueSheetEntry e = new CueSheetEntry(this, _music_file_name, aaid, nr, -1, e_title, e_perf, _title, e_offset); e.setComposer(e_composer); e.setPiece(e_piece); append(e); if (nr > 1) { CueSheetEntry ePrev; ePrev = this.entry(nr - 2); ePrev.setLength(e.offset() - ePrev.offset()); } } //Console.WriteLine ("Last entry added"); { int i; for (i = 0; i < nEntries(); i++) { entry(i).setNrOfTracks(nr); } //Console.WriteLine ("Ready"); } base.Selection.MaxIndex = nEntries(); }
public CS_PlayListEntry (CueSheetEntry e) { _e=e; Hyena.Log.Information ("ple: construct entry="+_e); }
void writeEntry(StreamWriter wrt,CueSheetEntry e,int i) { indent=" "; wrtl_track(wrt,i+1); indent=" "; wrtl (wrt,"title",e.title ()); wrtl (wrt,"performer",e.performer ()); wrtl (wrt,"piece",e.getPiece (),true); wrtl (wrt,"composer",e.getComposer (),true); wrtl_index(wrt,1,e.offset ()); }
public void iLoad(StreamReader sr) { _composer=""; _year=""; _subtitle=""; _cddbId=""; Boolean _in_tracks=false; string e_perf=""; string e_title=""; double e_offset=-1.0; string e_piece=""; string e_composer=""; string aaid=""; int nr=0; //string filename=_cuefile; string directory=_directory; string line = ""; while ((line = sr.ReadLine()) != null) { line=line.Trim (); if (line!="") { //Console.WriteLine ("it="+_in_tracks+", "+line); if (!_in_tracks) { if (eq(line,"performer")) { _performer=unquote(line.Substring (9).Trim ()); } else if (eq(line,"title")) { _title=unquote(line.Substring (5).Trim ()); } else if (eq(line,"file")) { _music_file_name=line.Substring (4).Trim (); Match m=Regex.Match (_music_file_name,"([\"][^\"]+[\"])"); _music_file_name=m.ToString (); _music_file_name=unquote(_music_file_name).Trim (); _music_file_name=Tools.makefile(directory,_music_file_name); } else if (line.Substring(0,5).ToLower ()=="track") { _in_tracks=true; } else if (eq(line,"rem")) { //Hyena.Log.Information (line); line=line.Substring (3).Trim (); if (eq(line,"image")) { _image_file_name=line.Substring (5).Trim (); _image_file_name=unquote(_image_file_name).Trim (); _img_full_path=Tools.makefile(directory,_image_file_name); } else if (eq (line,"composer")) { _composer=unquote(line.Substring (8).Trim ()); } else if (eq (line,"subtitle")) { _subtitle=unquote(line.Substring (8).Trim ()); } else if (eq (line,"year")) { _year=unquote(line.Substring (4).Trim ()); } else if (eq (line,"cddbid")) { _cddbId=unquote(line.Substring (6).Trim ()); } } } if (_in_tracks) { if (aaid=="") { aaid=getArtId (); } //Console.WriteLine ("line="+line); if (eq(line,"track")) { if (e_offset>=0) { nr+=1; CueSheetEntry e=new CueSheetEntry(this,_music_file_name,aaid,nr,-1,e_title,e_perf,_title,e_offset); e.setComposer (e_composer); e.setPiece (e_piece); append (e); if (nr>1) { CueSheetEntry ePrev; ePrev=this.entry (nr-2); ePrev.setLength(e.offset ()-ePrev.offset()); } } e_perf=_performer; e_title=""; e_composer=_composer; e_offset=-1.0; } else if (eq(line,"title")) { e_title=unquote(line.Substring (5).Trim ()); } else if (eq(line,"performer")) { e_perf=unquote(line.Substring (9).Trim ()); } else if (eq(line,"rem")) { line=line.Substring (3).Trim (); if (eq (line,"composer")) { e_composer=unquote(line.Substring (8).Trim ()); } else if (eq(line,"piece")) { e_piece=unquote(line.Substring (5).Trim ()); } } else if (eq(line,"index")) { string s=line.Substring (5).Trim (); s=Regex.Replace (s,"^\\s*[0-9]+\\s*",""); string []parts=Regex.Split(s,"[:]"); int min=Convert.ToInt32(parts[0]); int secs=Convert.ToInt32(parts[1]); int hsecs=Convert.ToInt32(parts[2]); e_offset=min*60+secs+(hsecs/100.0); } } } } //Console.WriteLine ("Last entry adding"); if (e_offset>=0) { nr+=1; CueSheetEntry e=new CueSheetEntry(this,_music_file_name,aaid,nr,-1,e_title,e_perf,_title,e_offset); e.setComposer (e_composer); e.setPiece (e_piece); append (e); if (nr>1) { CueSheetEntry ePrev; ePrev=this.entry (nr-2); ePrev.setLength(e.offset ()-ePrev.offset()); } } //Console.WriteLine ("Last entry added"); { int i; for(i=0;i<nEntries();i++) { entry (i).setNrOfTracks(nr); } //Console.WriteLine ("Ready"); } base.Selection.MaxIndex=nEntries (); }
public void AddEntry(CueSheetEntry e) { append (e); }
private int chgcount = 3000 / 100; // every 3 seconds //private CueSheetEntry _playing=null; public bool PositionDisplay() { if (ServiceManager.PlaybackController.Source == MySource) { CueSheet sheet = MySource.getSheet(); if (sheet != null) { mscount += 1; if (mscount > chgcount) { mscount = 0; } // Position if necessary if (_set_position) { _set_position = false; _positioning = true; ServiceManager.PlayerEngine.Position = _position; } // Do nothing while seeking uint pos = ServiceManager.PlayerEngine.Position; double p = ((double)pos) / 1000.0; if (_positioning && pos <= _position) { //Hyena.Log.Information ("seek="+_position+", pos="+pos); // do nothing } else { _positioning = false; // Track number int i = sheet.searchIndex(_song_id, p); if (i != index && i >= 0) { // Handle repeat track if (ServiceManager.PlaybackController.RepeatMode == PlaybackRepeatMode.RepeatSingle) { seekSong(index); } else if (sheet.SheetKind == CueSheet.Kind.PlayList) { index = i; seekSong(i); } // Every 2 seconds if (mscount == 0) { Hyena.Log.Information("Found index i=" + i + ", songid=" + _song_id); index = i; CueSheetEntry e = sheet.entry(index); Hyena.Log.Information("current entry: " + e); //ServiceManager.PlayerEngine.SetCurrentTrack (e); } } if (mscount == 0 && index >= 0) { Hyena.Log.Information("mscount=" + mscount + ", index=" + index); //view.ScrollTo(index); view.Selection.QuietUnselect(view.Selection.FirstIndex); view.Selection.Select(index); } } } } return(true); }
//private Stack<DatabaseTrackInfo> stk=new Stack<DatabaseTrackInfo>(); public void ImportSheet(CueSheet s) { if (import_manager == null) { try { import_manager = new LibraryImportManager(false); /*import_manager.ImportResult+=delegate(object sender,DatabaseImportResultArgs args) { * DatabaseTrackInfo trk=args.Track; * stk.Push (trk); * };*/ } catch (Exception ex) { Hyena.Log.Error(ex.ToString()); } } Hyena.Log.Debug("Importsheet: Starting transaction"); int i, N; for (i = 0, N = s.nEntries(); i < N; i++) { try { CueSheetEntry e = s.entry(i); string file = e.file(); string uuid = Regex.Replace(e.id(), "\\s", "_"); string ext = ".mp3"; string uid = Guid.NewGuid().ToString(); string u1 = uid.Substring(0, 1); string u2 = uid.Substring(0, 2); string dir = basedir + "/.banshee/" + u1; if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } dir += "/" + u2; if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } uuid = dir + "/" + uuid + ext; UnixFileInfo f = new UnixFileInfo(file); if (File.Exists(uuid)) { File.Delete(uuid); } //f.CreateLink (uuid); f.CreateSymbolicLink(uuid); DatabaseTrackInfo trk = import_manager.ImportTrack(uuid); //File.Delete (uuid); /*if (trk==null) { * Hyena.Log.Warning ("track = null (file="+e.file ()+")"); * if (stk.Count>0) { trk=stk.Pop (); } * }*/ if (trk == null) { Hyena.Log.Error("track = null (file=" + e.file() + ")"); } else { Hyena.Log.Information("track!=null (file=" + e.file() + ")"); //MySource.DbConnection.BeginTransaction(); trk.PartOfCue = 1; trk.CueAudioFile = e.file(); trk.AlbumTitle = s.title(); //trk.Album=s.title (); trk.AlbumArtist = s.performer(); trk.Composer = (e.Composer == "") ? s.composer() : e.Composer; //trk.ArtworkId=s.getArtId (); //trk.Artist= trk.ArtistName = (e.performer() == "") ? s.performer() : e.performer(); trk.TrackTitle = e.title(); trk.TrackNumber = i + 1; trk.Genre = s.genre(); trk.BeginOffset = e.BeginOffset; trk.EndOffset = e.EndOffset; //trk.Uri=trk.CueAudioUri; //trk.MediaAttributes = TrackMediaAttributes.ExternalResource; //trk.PrimarySource = ServiceManager.SourceManager.MusicLibrary; trk.Save(); //MySource.DbConnection.CommitTransaction(); } } catch (Exception ex) { Hyena.Log.Error(ex.ToString()); } } import_manager.NotifyAllSources(); }
private void append(CueSheetEntry e) { _tracks.Add(e); }
public CueSheetEntry AddTrack(string e_title,string e_perf,double e_offset) { int nr=_tracks.Count; string aaid=getArtId (); CueSheetEntry e=new CueSheetEntry(this,_music_file_name,aaid,nr,-1,e_title,e_perf,_title,e_offset); append (e); int i,N; for(i=0,N=nEntries ();i<N;i++) { _tracks[i].setNrOfTracks(N); if (i<N-1) { _tracks[i].setLength (_tracks[i+1].offset ()-_tracks[i].offset ()); } else { _tracks[i].setLength (-1.0); } } return e; }
public override void Reload() { _filteredList.Clear(); List <CueSheet> s = MySource.getSheets(); int i, N; string artist = ""; if (_artist != null) { artist = Loosely.prepare(_artist.Name); } string composer = ""; if (_composer != null) { composer = Loosely.prepare(_composer.Name); } for (i = 0, N = s.Count; i < N; i++) { bool do_add = true; if (_genre != null) { if (s[i].genre() != _genre.Genre) { do_add = false; } } if (_artist != null && do_add) { if (!Loosely.eqp(artist, s[i].performer())) { do_add = false; } } if (_composer != null && do_add) { if (!Loosely.eqp(composer, s[i].composer())) { do_add = false; } } if (_album_search != null && do_add) { if (!s[i].title().ToLower().Contains(_album_search) && !s[i].performer().ToLower().Contains(_album_search) && !s[i].composer().ToLower().Contains(_album_search)) { if (_also_in_tracks) { CueSheet q = s[i]; int k, M; bool can_add = false; for (k = 0, M = q.nEntries(); k < M && !can_add; k++) { CueSheetEntry e = q.entry(k); if (e.title().ToLower().Contains(_album_search) || e.performer().ToLower().Contains(_album_search) || e.getComposer().ToLower().Contains(_album_search)) { can_add = true; } } do_add = can_add; } else { do_add = false; } } } if (do_add) { _filteredList.Add(new CS_AlbumInfo(s[i])); } } _filteredList.Sort(new CS_AlbumInfo.Comparer()); base.RaiseReloaded(); }
public CS_PlayListEntry(CueSheetEntry e) { _e = e; Hyena.Log.Information("ple: construct entry=" + _e); }
public void Add(CueSheetEntry e) { _playlist.Add(new CS_PlayListEntry(e)); //Insert (e,_playlist.Count); }
private void setLatinTag(int track,CueSheet s,CueSheetEntry e) { string fn=_file_format; fn=fn.Replace ("@A",s.performer()); fn=fn.Replace ("@b",s.title ()); fn=fn.Replace ("@n",(track+1).ToString ()); fn=fn.Replace ("@t",e.title ()); fn=_directory+"/"+fn+".mp3"; Hyena.Log.Information ("file to convert:"+fn); if (File.Exists(fn)) { TagLib.File file=TagLib.File.Create(fn); if (file==null) { Hyena.Log.Error ("Cannot create taglib file for "+fn); return; } else { Hyena.Log.Information("Setting tags for "+fn); file.Tag.Album=s.title (); file.Tag.AlbumArtists=new string[]{s.performer ()}; file.Tag.Composers=new string[]{s.composer ()}; file.Tag.Genres=new string[]{s.genre ()}; file.Tag.Title=e.title (); file.Tag.Track=(uint) track+1; file.Tag.Performers=new string[]{e.performer ()}; file.Save (); } } }