summaryrefslogtreecommitdiff
path: root/src/CueSheets/Banshee.CueSheets/CueSheet.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/CueSheets/Banshee.CueSheets/CueSheet.cs')
-rw-r--r--src/CueSheets/Banshee.CueSheets/CueSheet.cs203
1 files changed, 159 insertions, 44 deletions
diff --git a/src/CueSheets/Banshee.CueSheets/CueSheet.cs b/src/CueSheets/Banshee.CueSheets/CueSheet.cs
index d604432..d822c8f 100644
--- a/src/CueSheets/Banshee.CueSheets/CueSheet.cs
+++ b/src/CueSheets/Banshee.CueSheets/CueSheet.cs
@@ -46,6 +46,16 @@ namespace Banshee.CueSheets
private string _directory;
private string _basedir;
+ private string _year;
+ private string _composer;
+ private string _subtitle;
+ private string _cddbId;
+
+ public string id() {
+ return "title="+_title+";performer="+_performer+
+ ";year="+_year+";composer="+_composer;
+ }
+
public string genre() {
int n=_basedir.Length;
string d=_directory.Substring (n);
@@ -93,6 +103,22 @@ namespace Banshee.CueSheets
return _performer;
}
+ public string composer() {
+ return _composer;
+ }
+
+ public string subtitle() {
+ return _subtitle;
+ }
+
+ public string year() {
+ return _year;
+ }
+
+ public string cddbId() {
+ return _cddbId;
+ }
+
public CueSheetEntry entry(int i) {
return _tracks[i];
}
@@ -111,13 +137,17 @@ namespace Banshee.CueSheets
}
public void resetArt() {
- string aaid=CoverArtSpec.CreateArtistAlbumId (_performer,_title);
- string path=CoverArtSpec.GetPathForNewFile(aaid,_img_full_path);
- File.Delete (path);
- File.Copy (_img_full_path,path);
- int i,N;
- for(i=0,N=nEntries ();i<N;i++) {
- entry (i).setArtWorkId(aaid);
+ if (_img_full_path!=null && _img_full_path!="") {
+ if (File.Exists (_img_full_path)) {
+ string aaid=CoverArtSpec.CreateArtistAlbumId (_performer,_title);
+ string path=CoverArtSpec.GetPathForNewFile(aaid,_img_full_path);
+ File.Delete (path);
+ File.Copy (_img_full_path,path);
+ int i,N;
+ for(i=0,N=nEntries ();i<N;i++) {
+ entry (i).setArtWorkId(aaid);
+ }
+ }
}
}
@@ -157,14 +187,32 @@ namespace Banshee.CueSheets
_title=t;
}
+ public void SetComposer(string c) {
+ _composer=c;
+ }
+
+ public void SetSubtitle(string s) {
+ _subtitle=s;
+ }
+
+ public void SetYear(string y) {
+ _year=y;
+ }
+
+
public void SetImagePath(string path) {
- string fn=Tools.basename(path);
- string fnp=Tools.makefile(_directory,fn);
- if (!File.Exists (fnp)) {
- File.Copy (path,fnp);
+ Hyena.Log.Information ("SetImagePath: "+path);
+ if (path!=null && path!="") {
+ if (File.Exists (path)) {
+ string fn=Tools.basename(path);
+ string fnp=Tools.makefile(_directory,fn);
+ if (!File.Exists (fnp)) {
+ File.Copy (path,fnp);
+ }
+ _image_file_name=fn;
+ _img_full_path=fnp;
+ }
}
- _image_file_name=fn;
- _img_full_path=fnp;
}
public void ClearTracks() {
@@ -172,7 +220,7 @@ namespace Banshee.CueSheets
_tracks=null;
}
- public void AddTrack(string e_title,string e_perf,double e_offset) {
+ public CueSheetEntry AddTrack(string e_title,string e_perf,double e_offset) {
int nr=0;
if (_tracks!=null) {
nr=_tracks.Length;
@@ -183,49 +231,101 @@ namespace Banshee.CueSheets
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;
+ }
+
+ private string indent="";
+
+ private void wrtl(System.IO.StreamWriter wrt,string key,string val,bool rem=false) {
+ string r="";
+ if (rem) { r="REM "; }
+ wrt.WriteLine (indent+r+key.ToUpper ()+" \""+val+"\"");
+ }
+
+ private void wrtl_file(System.IO.StreamWriter wrt,string file) {
+ wrt.WriteLine (indent+"FILE \""+file+"\" WAVE");
+ }
+
+ private void wrtl_track(System.IO.StreamWriter wrt,int index) {
+ wrt.WriteLine (indent+"TRACK "+String.Format ("{0:00}",index)+" AUDIO");
+ }
+
+ private void wrtl_index(System.IO.StreamWriter wrt,int inr,double offset) {
+ int t=(int) (offset*100.0);
+ int m=t/(100*60);
+ int s=(t/100)%60;
+ int hs=t%100;
+ wrt.WriteLine (indent+"INDEX "+String.Format ("{0:00}",inr)+" "+
+ String.Format("{0:00}",m)+":"+
+ String.Format ("{0:00}",s)+":"+
+ String.Format ("{0:00}",hs)
+ );
}
public void Save() {
- //System.IO.StreamWriter wrt=new System.IO.StreamWriter();
if (!File.Exists (_cuefile+".bck")) {
File.Copy (_cuefile,_cuefile+".bck");
}
resetArt ();
System.IO.StreamWriter wrt=new System.IO.StreamWriter(_cuefile);
- wrt.WriteLine ("REM Banshee CueSheets Extension "+CS_Info.Version());
- wrt.WriteLine ("REM Banshee AAID : "+getArtId ());
- wrt.WriteLine ("REM IMAGE \""+_image_file_name+"\"");
- wrt.WriteLine ("PERFORMER \""+_performer+"\"");
- wrt.WriteLine ("TITLE \""+_title+"\"");
+ 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);
- wrt.WriteLine ("FILE \""+mfn+"\" WAVE");
+ wrtl_file (wrt,mfn);
int i,N;
for(i=0,N=nEntries ();i<N;i++) {
CueSheetEntry e=_tracks[i];
- wrt.WriteLine (" TRACK "+String.Format ("{0:00}",i+1)+" AUDIO");
- wrt.WriteLine (" TITLE \""+e.title ()+"\"");
- wrt.WriteLine (" PERFORMER \""+e.performer ()+"\"");
- int t=(int) (e.offset ()*100.0);
- int m=t/(100*60);
- int s=(t/100)%60;
- int hs=t%100;
- wrt.WriteLine (" INDEX 01 "+ String.Format("{0:00}",m)+":"+
- String.Format ("{0:00}",s)+":"+
- String.Format ("{0:00}",hs)
- );
+ 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 ());
}
wrt.Close ();
}
+ static private Regex unq1=new Regex("^[\"]");
+ static private Regex unq2=new Regex("[\"]$");
+
+ private string unquote(string s) {
+ return unq1.Replace (unq2.Replace (s,""),"");
+ }
+
public void iLoad() {
+
+ _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;
@@ -240,28 +340,32 @@ namespace Banshee.CueSheets
//Console.WriteLine ("it="+_in_tracks+", "+line);
if (!_in_tracks) {
if (eq(line,"performer")) {
- string p=line.Substring (9).Trim ();
- p=Regex.Replace (p,"[\"]","");
- _performer=p;
+ _performer=unquote(line.Substring (9).Trim ());
} else if (eq(line,"title")) {
- _title=Regex.Replace (line.Substring (5).Trim (),"[\"]","");
+ _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,"([\"][^\"]+[\"])");
- //Console.WriteLine ("match="+m);
_music_file_name=m.ToString ();
- //Console.WriteLine ("result="+_music_file_name);
- _music_file_name=Regex.Replace (_music_file_name,"[\"]","").Trim ();
+ _music_file_name=unquote(_music_file_name).Trim ();
_music_file_name=Tools.makefile(directory,_music_file_name);
- //Console.WriteLine ("music file="+_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=Regex.Replace (_image_file_name,"[\"]","").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 ());
}
}
}
@@ -275,6 +379,8 @@ namespace Banshee.CueSheets
if (e_offset>=0) {
nr+=1;
CueSheetEntry e=new CueSheetEntry(_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;
@@ -284,16 +390,23 @@ namespace Banshee.CueSheets
}
e_perf=_performer;
e_title="";
+ e_composer=_composer;
e_offset=-1.0;
} else if (eq(line,"title")) {
- e_title=Regex.Replace (line.Substring (5).Trim (),"[\"]","");
+ e_title=unquote(line.Substring (5).Trim ());
} else if (eq(line,"performer")) {
- e_perf=Regex.Replace (line.Substring (9).Trim (),"[\"]","");
+ 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,"[:]");
- //Console.WriteLine ("parts="+parts[0]+","+parts[1]+","+parts[2]);
int min=Convert.ToInt32(parts[0]);
int secs=Convert.ToInt32(parts[1]);
int hsecs=Convert.ToInt32(parts[2]);
@@ -306,6 +419,8 @@ namespace Banshee.CueSheets
if (e_offset>=0) {
nr+=1;
CueSheetEntry e=new CueSheetEntry(_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;