summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Oesterholt <hans@oesterholt.net>2013-01-16 17:32:16 +0100
committerHans Oesterholt <hans@oesterholt.net>2013-01-16 17:32:16 +0100
commit5634c40efd8f5ee11288a0dd0ca8205f08431c82 (patch)
tree1db82fb1b55fe94c03f07a460c42604da76d27d7
parentd665b4b7afdc2c3ee96623227b2869f1f8c98f3d (diff)
CueSheets: mp3splt tags are UTF-8, which is of couse ok. However some devices, like the Philips GoGear don't support utf-8 tags. So we use TagLib to rewrite the Tags
-rw-r--r--src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs11
-rw-r--r--src/CueSheets/Banshee.CueSheets/mp3splt/Mp3Split.cs71
-rw-r--r--src/CueSheets/CueSheets.csproj4
-rw-r--r--src/CueSheets/Makefile.am2
4 files changed, 84 insertions, 4 deletions
diff --git a/src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs b/src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs
index 06a7525..fc291de 100644
--- a/src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs
+++ b/src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs
@@ -12,6 +12,13 @@ namespace Banshee.CueSheets
}
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","");
+ if (fn!="") { fc.SelectFilename(fn); }
+ fc.FileSet+=new EventHandler(delegate(Object sender,EventArgs args) {
+ fn=fc.Filename;
+ Banshee.Configuration.ConfigurationClient.Set<string>("cuesheets_todevice",fn);
+ });
Gtk.Button btn=new Gtk.Button("Split!");
Gtk.ProgressBar bar=new Gtk.ProgressBar();
Gtk.ProgressBar nr=new Gtk.ProgressBar();
@@ -19,7 +26,8 @@ namespace Banshee.CueSheets
btn.Clicked+=delegate(object sender,EventArgs args) {
ok.Sensitive=false;
_splt.SplitWithPaths ();
- _splt.SplitToDir ("/tmp");
+ //_splt.convertToLatin1 ();
+ _splt.SplitToDir (fn,true);
GLib.Timeout.Add(10,delegate () {
bar.Fraction=_splt.ProgressOfCurrentTrack;
int n=_splt.ProgressNTracks;
@@ -30,6 +38,7 @@ namespace Banshee.CueSheets
return !_splt.SplitFinished;
});
};
+ base.VBox.Add (fc);
base.VBox.Add (nr);
base.VBox.Add (bar);
base.VBox.Add (btn);
diff --git a/src/CueSheets/Banshee.CueSheets/mp3splt/Mp3Split.cs b/src/CueSheets/Banshee.CueSheets/mp3splt/Mp3Split.cs
index 0a3db4e..6e6546a 100644
--- a/src/CueSheets/Banshee.CueSheets/mp3splt/Mp3Split.cs
+++ b/src/CueSheets/Banshee.CueSheets/mp3splt/Mp3Split.cs
@@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Runtime.CompilerServices;
+using System.IO;
namespace Banshee.CueSheets
{
@@ -76,11 +77,18 @@ namespace Banshee.CueSheets
private int _progress_current_track;
private float _progress_of_current_track;
private bool _finished;
+ private string _file_format;
+
+ private bool _convert_to_latin1;
+ private string _directory;
+
+ private CueSheet _sheet;
public delegate void ProgressCallBack(IntPtr progres,IntPtr data);
public Mp3Split (CueSheet s) {
int error=0;
+ _sheet=s;
_mp3_state=mp3splt_new_state (out error);
error=mp3splt_find_plugins (_mp3_state);
@@ -89,6 +97,7 @@ namespace Banshee.CueSheets
mp3splt_set_int_option(_mp3_state,Mp3SpltOptions.SPLT_OPT_SET_FILE_FROM_CUE_IF_FILE_TAG_FOUND,1);
mp3splt_set_int_option(_mp3_state,Mp3SpltOptions.SPLT_OPT_OUTPUT_FILENAMES,(int) SpltOutputFileNamesOptions.SPLT_OUTPUT_FORMAT);
mp3splt_set_oformat(_mp3_state,"@A - @b - @n - @t",out error);
+ _file_format="@A - @b - @n - @t";
mp3splt_put_cue_splitpoints_from_file(_mp3_state,s.cueFile (),out error);
mp3splt_set_default_genre_tag(_mp3_state,s.genre ());
@@ -111,6 +120,7 @@ namespace Banshee.CueSheets
int error=0;
mp3splt_set_int_option(_mp3_state,Mp3SpltOptions.SPLT_OPT_CREATE_DIRS_FROM_FILENAMES,1);
mp3splt_set_oformat(_mp3_state,"@A/@b/@n @t",out error);
+ _file_format="@A/@b/@n @t";
}
public int ProgressCurrentTrack {
@@ -151,21 +161,67 @@ namespace Banshee.CueSheets
private void Splitter() {
int result=mp3splt_split (_mp3_state);
+ if (result>=0) {
+ Hyena.Log.Information ("convert to latin1="+_convert_to_latin1);
+ if (_convert_to_latin1) {
+ convertToLatin1 ();
+ }
+ }
SplitFinished=true;
Hyena.Log.Information ("splitresult="+result);
}
- public void SplitToDir(string directory) {
-
+ 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;
+ _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() {
+ setLatinTags (_sheet);
+ }
+
+ private void setLatinTags(CueSheet s) {
+ int i,N;
+ for(i=0,N=s.nEntries ();i<N;i++) {
+ ProgressCurrentTrack=i;
+ setLatinTag (i,s,s.entry (i));
+ }
+ }
+
+ 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 ();
+ }
+ }
+ }
+
#region IDisposable implementation
public void Dispose ()
{
@@ -269,6 +325,17 @@ namespace Banshee.CueSheets
[DllImport ("libmp3splt.dll")]
private static extern int mp3splt_find_plugins(IntPtr state);
+
+ [DllImport ("libmp3splt.dll")]
+ private static extern int mp3splt_append_tags(IntPtr state,
+ string title,
+ string artist,
+ string album,
+ string performer,
+ string year,
+ string comment,
+ int track,
+ string genre);
}
diff --git a/src/CueSheets/CueSheets.csproj b/src/CueSheets/CueSheets.csproj
index 3c1cecf..af092e1 100644
--- a/src/CueSheets/CueSheets.csproj
+++ b/src/CueSheets/CueSheets.csproj
@@ -83,6 +83,10 @@
<Private>False</Private>
<Package>gtk-sharp-2.0</Package>
</Reference>
+ <Reference Include="taglib-sharp, Version=2.0.4.0, Culture=neutral, PublicKeyToken=db62eba44689b5b0">
+ <Private>False</Private>
+ <Package>taglib-sharp</Package>
+ </Reference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="CueSheets.addin.xml">
diff --git a/src/CueSheets/Makefile.am b/src/CueSheets/Makefile.am
index a23d478..cfa8f86 100644
--- a/src/CueSheets/Makefile.am
+++ b/src/CueSheets/Makefile.am
@@ -26,6 +26,6 @@ SOURCES = \
Banshee.CueSheets/Tools/Tools.cs \
Banshee.CueSheets/Version/CS_Info.cs
-RESOURCES = CueSheets.addin.xml Resources/GlobalUI.xml
+RESOURCES = CueSheets.addin.xml
include $(top_srcdir)/build/build.mk