diff options
author | Hans Oesterholt <hans@oesterholt.net> | 2013-01-16 18:00:47 +0100 |
---|---|---|
committer | Hans Oesterholt <hans@oesterholt.net> | 2013-01-16 18:00:47 +0100 |
commit | 465e62764aab6a059f3b4c872091e0bac8da61e2 (patch) | |
tree | 0d2777484946b50fa3bf699ad102a28f5d9e786d | |
parent | 5634c40efd8f5ee11288a0dd0ca8205f08431c82 (diff) |
CueSheets: Splitting of files works quite nicely now.
-rw-r--r-- | src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs | 56 | ||||
-rw-r--r-- | src/CueSheets/Banshee.CueSheets/mp3splt/Mp3Split.cs | 33 |
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); |