summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Oesterholt <hans@oesterholt.net>2013-01-16 18:00:47 +0100
committerHans Oesterholt <hans@oesterholt.net>2013-01-16 18:00:47 +0100
commit465e62764aab6a059f3b4c872091e0bac8da61e2 (patch)
tree0d2777484946b50fa3bf699ad102a28f5d9e786d
parent5634c40efd8f5ee11288a0dd0ca8205f08431c82 (diff)
CueSheets: Splitting of files works quite nicely now.
-rw-r--r--src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs56
-rw-r--r--src/CueSheets/Banshee.CueSheets/mp3splt/Mp3Split.cs33
2 files changed, 74 insertions, 15 deletions
diff --git a/src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs b/src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs
index fc291de..863925c 100644
--- a/src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs
+++ b/src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs
@@ -11,6 +11,12 @@ namespace Banshee.CueSheets
_sheet=s;
}
+ private Gtk.HSeparator hsep() {
+ Gtk.HSeparator h=new Gtk.HSeparator();
+ h.Show ();
+ return h;
+ }
+
private void CreateGui() {
Gtk.FileChooserButton fc=new Gtk.FileChooserButton("Choose directory to put your splitted files",Gtk.FileChooserAction.SelectFolder);
string fn=Banshee.Configuration.ConfigurationClient.Get<string>("cuesheets_todevice","");
@@ -19,30 +25,68 @@ namespace Banshee.CueSheets
fn=fc.Filename;
Banshee.Configuration.ConfigurationClient.Set<string>("cuesheets_todevice",fn);
});
- Gtk.Button btn=new Gtk.Button("Split!");
+ Gtk.Button btn=new Gtk.Button("Split CueSheet Audio File");
+ Gtk.Button csplit=new Gtk.Button("Cancel");
+ csplit.Clicked+=delegate(object sender,EventArgs args) {
+ _splt.CancelSplit();
+ };
Gtk.ProgressBar bar=new Gtk.ProgressBar();
Gtk.ProgressBar nr=new Gtk.ProgressBar();
Gtk.Button ok=(Gtk.Button) base.AddButton ("OK",1);
+ Gtk.Label result=new Gtk.Label("-");
+
btn.Clicked+=delegate(object sender,EventArgs args) {
+ btn.Hide ();
+ csplit.Show ();
+ result.Markup="";
+
ok.Sensitive=false;
+ fc.Sensitive=false;
+ btn.Sensitive=false;
+
_splt.SplitWithPaths ();
- //_splt.convertToLatin1 ();
- _splt.SplitToDir (fn,true);
- GLib.Timeout.Add(10,delegate () {
+
+ bool convert_to_latin1=true;
+ _splt.SplitToDir (fn,convert_to_latin1);
+
+ GLib.Timeout.Add(50,delegate () {
bar.Fraction=_splt.ProgressOfCurrentTrack;
int n=_splt.ProgressNTracks;
int i=_splt.ProgressCurrentTrack;
double d=((double) i)/((double) n);
nr.Fraction=d;
- if (_splt.SplitFinished) { ok.Sensitive=true; }
+ if (_splt.SplitFinished) {
+ ok.Sensitive=true;
+ btn.Sensitive=true;
+ fc.Sensitive=true;
+ csplit.Hide ();
+ btn.Show ();
+ if (_splt.Cancelled) {
+ result.Markup="<b>Split Cancelled</b>";
+ } else {
+ result.Markup="<b>Finished</b>";
+ }
+ }
return !_splt.SplitFinished;
});
+
};
+ fc.Show ();
+ nr.Show ();
+ bar.Show ();
+ btn.Show ();
+ result.Show ();
base.VBox.Add (fc);
+ base.VBox.Add (hsep());
base.VBox.Add (nr);
base.VBox.Add (bar);
+ base.VBox.Add (hsep ());
+ base.VBox.Add (result);
+ base.VBox.Add (hsep ());
base.VBox.Add (btn);
- base.VBox.ShowAll ();
+ base.VBox.Add (csplit);
+
+ base.VBox.Show();
}
public void Do() {
diff --git a/src/CueSheets/Banshee.CueSheets/mp3splt/Mp3Split.cs b/src/CueSheets/Banshee.CueSheets/mp3splt/Mp3Split.cs
index 6e6546a..c87e5ae 100644
--- a/src/CueSheets/Banshee.CueSheets/mp3splt/Mp3Split.cs
+++ b/src/CueSheets/Banshee.CueSheets/mp3splt/Mp3Split.cs
@@ -77,6 +77,7 @@ namespace Banshee.CueSheets
private int _progress_current_track;
private float _progress_of_current_track;
private bool _finished;
+ private bool _cancelled;
private string _file_format;
private bool _convert_to_latin1;
@@ -150,7 +151,11 @@ namespace Banshee.CueSheets
[MethodImpl(MethodImplOptions.Synchronized)]
set { _finished = value; }
}
-
+
+ public bool Cancelled {
+ get { return _cancelled; }
+ set { _cancelled=value; }
+ }
public void Progress(IntPtr progr,IntPtr data) {
splt_progres pr=(splt_progres) Marshal.PtrToStructure (progr,typeof(splt_progres));
@@ -168,19 +173,25 @@ namespace Banshee.CueSheets
}
}
SplitFinished=true;
- Hyena.Log.Information ("splitresult="+result);
+ LogResult ("Splitter",result);
+ }
+
+ public void CancelSplit() {
+ int err=0;
+ mp3splt_stop_split (_mp3_state,out err);
+ LogResult ("CancelSplit",err);
+ Cancelled=true;
}
public void SplitToDir(string directory,bool convert_to_latin1) {
mp3splt_set_path_of_split(_mp3_state,directory);
mp3splt_set_progress_function (_mp3_state,new ProgressCallBack(Progress),IntPtr.Zero);
SplitFinished=false;
+ Cancelled=false;
_convert_to_latin1=convert_to_latin1;
_directory=directory;
Thread split_thread=new Thread(new ThreadStart(Splitter));
split_thread.Start ();
- Hyena.Log.Information ("thread:"+split_thread);
- //Hyena.Log.Information ("split-to-dir: result="+result);
}
public void convertToLatin1() {
@@ -190,7 +201,7 @@ namespace Banshee.CueSheets
private void setLatinTags(CueSheet s) {
int i,N;
for(i=0,N=s.nEntries ();i<N;i++) {
- ProgressCurrentTrack=i;
+ ProgressCurrentTrack=i+1;
setLatinTag (i,s,s.entry (i));
}
}
@@ -240,14 +251,18 @@ namespace Banshee.CueSheets
}
}
- private void LogResult(int res) {
+ private void LogResult(string s,int res) {
if (res<0) {
- Hyena.Log.Error ("mp3splt: error="+res+", "+mp3splt_get_strerror(_mp3_state,res));
+ Hyena.Log.Error ("mp3splt: "+s+" error="+res+", "+mp3splt_get_strerror(_mp3_state,res));
} else {
- Hyena.Log.Information ("mp3splt: result="+res+", "+mp3splt_get_strerror(_mp3_state,res));
+ Hyena.Log.Information ("mp3splt: "+s+" result="+res+", "+mp3splt_get_strerror(_mp3_state,res));
}
}
+ private void LogResult(int res) {
+ LogResult ("",res);
+ }
+
private static int _dll_present=0;
public static bool DllPresent() {
@@ -321,7 +336,7 @@ namespace Banshee.CueSheets
private static extern int mp3splt_split(IntPtr state);
[DllImport ("libmp3splt.dll")]
- private static extern int mp3splt_stop_split(IntPtr state);
+ private static extern void mp3splt_stop_split(IntPtr state,out int error);
[DllImport ("libmp3splt.dll")]
private static extern int mp3splt_find_plugins(IntPtr state);