summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Oesterholt <hans@oesterholt.net>2013-01-23 14:29:22 +0100
committerHans Oesterholt <hans@oesterholt.net>2013-01-23 14:29:22 +0100
commitdced1d49fe74899953023312ccdcbcd6ea16f516 (patch)
treead16e4003847c036e4666a77068167869c5182eb
parent8596e37ebaf22959575258b184da3f6ef49541e6 (diff)
CueSheets: In the process of making CueSheets integrated with the standard anshee music library.
-rw-r--r--src/CueSheets/Banshee.CueSheets/CueSheet/CueSheet.cs100
-rw-r--r--src/CueSheets/Banshee.CueSheets/CueSheet/CueSheetEntry.cs41
-rw-r--r--src/CueSheets/Banshee.CueSheets/CueSheetsSource.cs46
-rw-r--r--src/CueSheets/Banshee.CueSheets/Gui/CS_Actions.cs (renamed from src/CueSheets/Banshee.CueSheets/Gui/Actions.cs)12
-rw-r--r--src/CueSheets/Banshee.CueSheets/Gui/CS_AlbumListView.cs10
-rw-r--r--src/CueSheets/Banshee.CueSheets/Gui/CS_ComposerListView.cs3
-rw-r--r--src/CueSheets/Banshee.CueSheets/Gui/CueSheetsView.cs138
-rw-r--r--src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayList.cs1
-rw-r--r--src/CueSheets/CueSheets.csproj2
-rw-r--r--src/CueSheets/Makefile.am2
-rw-r--r--src/CueSheets/Resources/GlobalUI.xml2
11 files changed, 294 insertions, 63 deletions
diff --git a/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheet.cs b/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheet.cs
index aef3ce5..0a9494e 100644
--- a/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheet.cs
+++ b/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheet.cs
@@ -34,6 +34,10 @@ using Banshee.Base;
using Banshee.Playlists.Formats;
using System.Collections.Generic;
using Hyena;
+using Banshee.Collection.Database;
+using Hyena.Data.Sqlite;
+using Hyena.Collections;
+using Banshee.Database;
namespace Banshee.CueSheets
{
@@ -44,7 +48,7 @@ namespace Banshee.CueSheets
private string _music_file_name;
private string _title;
private string _performer;
- private CueSheetEntry [] _tracks;
+ private List<CueSheetEntry> _tracks=new List<CueSheetEntry>();
private string _cuefile;
private string _directory;
private string _basedir;
@@ -53,6 +57,18 @@ namespace Banshee.CueSheets
private string _composer;
private string _subtitle;
private string _cddbId;
+
+ private Kind _kind=Kind.CueSheet;
+
+ public enum Kind {
+ CueSheet,
+ PlayList
+ }
+
+ public Kind SheetKind {
+ get { return _kind; }
+ set { _kind=value; }
+ }
public string id() {
return "title="+_title+";performer="+_performer+
@@ -65,21 +81,10 @@ namespace Banshee.CueSheets
string r=Tools.firstpart(d);
return r;
}
-
+
+
private void append(CueSheetEntry e) {
- if (_tracks==null) {
- _tracks=new CueSheetEntry[1];
- _tracks[0]=e;
- } else {
- CueSheetEntry [] es=new CueSheetEntry[_tracks.Length+1];
- int i=0;
- for(i=0;i<_tracks.Length;i++) {
- es[i]=_tracks[i];
- }
- es[i]=e;
- _tracks=es;
- }
- this.Add (e);
+ _tracks.Add(e);
}
public string imageFileName() {
@@ -127,13 +132,11 @@ namespace Banshee.CueSheets
}
public int nEntries() {
- if (_tracks==null) { return 0; }
- else {
- return _tracks.Length;
- }
+ return _tracks.Count;
}
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++);
@@ -144,7 +147,7 @@ namespace Banshee.CueSheets
return N-1;
} else {
CueSheetEntry e=entry (k);
- //Hyena.Log.Information ("offset="+e.offset()+", endoffset="+e.end_offset()+" offset="+_offset);
+ 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
@@ -206,7 +209,7 @@ namespace Banshee.CueSheets
}
public override string ToString() {
- return "Performer: "+this.performer ()+", Title: "+this.title ()+"\ncuefile: "+this.cueFile()+"\nwave: "+this.musicFileName();
+ return "cuefile: "+this.cueFile();
}
public void SetPerformer(string p) {
@@ -246,8 +249,7 @@ namespace Banshee.CueSheets
}
public void ClearTracks() {
- base.Clear ();
- _tracks=null;
+ _tracks.Clear();
}
public void AddEntry(CueSheetEntry e) {
@@ -255,10 +257,7 @@ namespace Banshee.CueSheets
}
public CueSheetEntry AddTrack(string e_title,string e_perf,double e_offset) {
- int nr=0;
- if (_tracks!=null) {
- nr=_tracks.Length;
- }
+ 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);
@@ -479,6 +478,8 @@ namespace Banshee.CueSheets
}
//Console.WriteLine ("Ready");
}
+
+ base.Selection.MaxIndex=nEntries ();
}
public void load(CueSheet s) {
@@ -498,15 +499,30 @@ namespace Banshee.CueSheets
}
}
+ private class CacheableDatabaseModel : ICacheableDatabaseModel
+ {
+ public static CacheableDatabaseModel Instance = new CacheableDatabaseModel ();
+ public int FetchCount { get { return 200; } }
+ public string ReloadFragment { get { return null; } }
+ public string SelectAggregates { get { return null; } }
+ public string JoinTable { get { return null; } }
+ public string JoinFragment { get { return null; } }
+ public string JoinPrimaryKey { get { return null; } }
+ public string JoinColumn { get { return null; } }
+ public bool CachesJoinTableEntries { get { return false; } }
+ public bool CachesValues { get { return false; } }
+ public Selection Selection { get { return null; } }
+ }
+
public override void Clear() {
- base.Clear ();
+ base.Selection.Clear ();
+ _tracks.Clear();
_cuefile="";
_image_file_name="";
_img_full_path="";
_music_file_name="";
_title="";
_performer="";
- _tracks=null;
_basedir="";
_directory="";
}
@@ -524,6 +540,32 @@ namespace Banshee.CueSheets
Clear ();
load (filename,directory,basedir);
}
+
+ #region implemented abstract members of MemoryTrackListModel
+ public override TrackInfo this [int index] {
+ get { Hyena.Log.Information ("get: index="+index); return _tracks[index]; }
+ }
+
+ public override int Count {
+ get { return _tracks.Count; }
+ }
+
+ public override void Reload () {
+ this.iLoad ();
+ }
+
+ public override TrackInfo GetRandom (DateTime since) {
+ return _tracks[0];
+ }
+
+ 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; }
+ }
+
+ #endregion
}
}
diff --git a/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheetEntry.cs b/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheetEntry.cs
index 62cbeba..b6d540e 100644
--- a/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheetEntry.cs
+++ b/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheetEntry.cs
@@ -32,10 +32,11 @@ using Banshee.Base;
using Hyena;
using Banshee.IO.SystemIO;
using Banshee.Playlists.Formats;
+using Banshee.Collection.Database;
namespace Banshee.CueSheets
{
- public class CueSheetEntry : TrackInfo
+ public class CueSheetEntry : DatabaseTrackInfo
{
private string _performer;
private string _composer="";
@@ -69,7 +70,11 @@ namespace Banshee.CueSheets
}
public string id() {
- return "title="+_title+";offset="+offset()+";length="+length ();
+ return MakeId (this);
+ }
+
+ public static string MakeId(TrackInfo trk) {
+ return "title="+trk.TrackTitle+";offset="+trk.BeginOffset+";end_offset="+trk.EndOffset;
}
public string title() {
@@ -121,11 +126,13 @@ namespace Banshee.CueSheets
public string Length {
get {
- double l=length ();
+ double l=_e_offset-_offset;
+ //Hyena.Log.Information ("Tracklengt="+l);
int t=(int) (l*100.0);
int m=t/(60*100);
int secs=(t/100)%60;
- string ln=String.Format ("{0:00}:{0:00}",m,secs);
+ string ln=String.Format ("{0:00}",m)+":"+String.Format ("{0:00}",secs);
+ //Hyena.Log.Information ("Tracklengt="+l+" sec="+secs+" ln="+ln);
return ln;
}
}
@@ -147,6 +154,7 @@ namespace Banshee.CueSheets
public void setLength(double l) {
//_length=l;
_e_offset=_offset+l;
+ EndOffset=(int) (_e_offset*1000.0); // millisecs
System.Int64 ticks_100nanosecs=(System.Int64) (l*10000000); // 10 miljoen
_length=new TimeSpan(ticks_100nanosecs);
}
@@ -154,12 +162,37 @@ namespace Banshee.CueSheets
public override string ToString() {
return "nr: "+this.TrackNumber+", title: "+this.title ()+", file: "+this.file ();
}
+
+ public CueSheetEntry () {
+ _file="";
+ _title="";
+ _performer="";
+ _offset=0.0;
+ BeginOffset=0;
+ EndOffset=-1;
+ _length=new TimeSpan(0);
+ _parent=null;
+ _art="";
+ base.AlbumArtist="";
+ base.TrackTitle="";
+ base.AlbumTitle="";
+ base.ArtistName="";
+ base.TrackNumber=0;
+ base.TrackCount=0;
+ base.DiscNumber=0;
+ base.CanPlay=true;
+ base.CanSaveToDatabase=false;
+ base.Duration=new System.TimeSpan(0,0,10,0);
+ base.Uri=new Hyena.SafeUri("",false);
+ }
public CueSheetEntry (CueSheet s,string file,String artId,int nr,int cnt,string title,string performer,string album,double offset) : base() {
_file=file;
_title=title;
_performer=performer;
_offset=offset;
+ BeginOffset=(int) (offset*1000.0); // milliseconds
+ EndOffset=-1;
_length=new TimeSpan(0);
_parent=s;
diff --git a/src/CueSheets/Banshee.CueSheets/CueSheetsSource.cs b/src/CueSheets/Banshee.CueSheets/CueSheetsSource.cs
index f82dd9c..fd11794 100644
--- a/src/CueSheets/Banshee.CueSheets/CueSheetsSource.cs
+++ b/src/CueSheets/Banshee.CueSheets/CueSheetsSource.cs
@@ -56,15 +56,13 @@ using Banshee.Configuration;
namespace Banshee.CueSheets
{
-
-
-
// We are inheriting from Source, the top-level, most generic type of Source.
// Other types include (inheritance indicated by indentation):
// DatabaseSource - generic, DB-backed Track source; used by PlaylistSource
// PrimarySource - 'owns' tracks, used by DaapSource, DapSource
// LibrarySource - used by Music, Video, Podcasts, and Audiobooks
- public class CueSheetsSource : Source, IBasicPlaybackController, ITrackModelSource
+ public class CueSheetsSource : Source, IBasicPlaybackController,
+ ITrackModelSource
{
// In the sources TreeView, sets the order value for this source, small on top
const int sort_order = 50;
@@ -74,23 +72,28 @@ namespace Banshee.CueSheets
private Gtk.SeparatorMenuItem _sep;
private Gtk.CheckButton _track_search;
- private CueSheetCollection _sheets=new CueSheetCollection();
+ private CueSheetCollection _sheets=null;
private CueSheet _sheet=null;
private CueSheetsPrefs _preferences;
- private Actions _actions;
+ private CS_Actions _actions;
private CS_TrackInfoDb _track_info_db;
public CueSheetsSource () : base (AddinManager.CurrentLocalizer.GetString ("CueSheets"),
AddinManager.CurrentLocalizer.GetString ("CueSheets"),
- sort_order,
- "hod-cuesheets-2013-01-06")
+ //"cuesheets",
+ sort_order) //,
+ //"hod-cuesheets-2013-01-06")
{
Hyena.Log.Information ("CueSheetsSouce init");
- _track_info_db=new CS_TrackInfoDb(ServiceManager.DbConnection);
+ DbConnection=ServiceManager.DbConnection;
+ TM_Provider=DatabaseTrackInfo.Provider;
+
+ _track_info_db=new CS_TrackInfoDb(DbConnection);
_sheet=new CueSheet();
+ _sheets=new CueSheetCollection();
_view=new CueSheetsView(this);
@@ -102,7 +105,7 @@ namespace Banshee.CueSheets
try {
Properties.SetString("GtkActionPath","/CueSheetsPopup");
- _actions = new Actions (this);
+ _actions = new CS_Actions (this);
Hyena.Log.Information(_actions.ToString());
} catch (System.Exception ex) {
Hyena.Log.Information(ex.ToString ());
@@ -159,6 +162,9 @@ namespace Banshee.CueSheets
_track_search.Hide();
}
+ public Banshee.Database.BansheeDbConnection DbConnection {
+ get; set;
+ }
public override string PreferencesPageId {
get {
@@ -233,13 +239,14 @@ namespace Banshee.CueSheets
public TrackListModel TrackModel {
get {
+ Hyena.Log.Information ("Trackmodel: "+_sheet);
return _sheet;
}
}
public bool HasDependencies { get { return false; } }
- public bool CanAddTracks { get { return false; } }
+ public bool CanAddTracks { get { return true; } }
public bool CanRemoveTracks { get { return false; } }
@@ -261,7 +268,10 @@ namespace Banshee.CueSheets
public void DeleteTracks (Hyena.Collections.Selection selection) {
}
#endregion
-
+
+ //public override void Save() {
+ //}
+
private CS_AlbumModel _model=null;
private CS_ArtistModel _artistModel=null;
private CS_GenreModel _genreModel=null;
@@ -364,6 +374,10 @@ namespace Banshee.CueSheets
return dir;
}
+ public string DefaultBaseDirectory {
+ get { return getCueSheetDir (); }
+ }
+
public void setCueSheetDir(string dir) {
Hyena.Log.Information ("Setting cuesheets dir to "+dir);
Banshee.Configuration.ConfigurationClient.Set<string>("cuesheets_dir",dir);
@@ -375,5 +389,13 @@ namespace Banshee.CueSheets
_view.fill ();
}
+ public void HandlePlayList() {
+ Hyena.Log.Information("playlists");
+ }
+
+ public IDatabaseTrackModelProvider TM_Provider {
+ get; set;
+ }
+
}
}
diff --git a/src/CueSheets/Banshee.CueSheets/Gui/Actions.cs b/src/CueSheets/Banshee.CueSheets/Gui/CS_Actions.cs
index 93a01d5..236caff 100644
--- a/src/CueSheets/Banshee.CueSheets/Gui/Actions.cs
+++ b/src/CueSheets/Banshee.CueSheets/Gui/CS_Actions.cs
@@ -3,14 +3,22 @@ using Banshee.I18n;
namespace Banshee.CueSheets
{
- public class Actions : Banshee.Gui.BansheeActionGroup
+ public class CS_Actions : Banshee.Gui.BansheeActionGroup
{
private CueSheetsSource _src;
- public Actions (CueSheetsSource src) : base ("CueSheets") {
+ public CS_Actions (CueSheetsSource src) : base ("CueSheets") {
_src=src;
+ /*base.Add (
+ new Gtk.ActionEntry ("Playlists", Gtk.Stock.MediaPlay,
+ Catalog.GetString ("Playlists"),
+ null, null,
+ (o, a) => { _src.HandlePlayList(); }
+ )
+ );*/
+
base.AddImportant (
new Gtk.ActionEntry ("Synchronize", Gtk.Stock.Refresh,
Catalog.GetString ("Refresh CueSheets"),
diff --git a/src/CueSheets/Banshee.CueSheets/Gui/CS_AlbumListView.cs b/src/CueSheets/Banshee.CueSheets/Gui/CS_AlbumListView.cs
index 097f969..abbe656 100644
--- a/src/CueSheets/Banshee.CueSheets/Gui/CS_AlbumListView.cs
+++ b/src/CueSheets/Banshee.CueSheets/Gui/CS_AlbumListView.cs
@@ -10,22 +10,24 @@ namespace Banshee.CueSheets
public CS_AlbumListView(CueSheetsView view) : base() {
_view=view;
- _gridEnabled=base.GetAlbumGrid();
- Hyena.Log.Information ("grid enabled="+_gridEnabled);
+ //_gridEnabled=base.GetAlbumGrid();
+ //Hyena.Log.Information ("grid enabled="+_gridEnabled);
EnableGrid ();
}
public void DisableGrid() {
if (_gridEnabled) {
_gridEnabled=false;
- base.SetAlbumGrid (true);
+ base.SwitchToAlbumList();
+ //base.SetAlbumGrid (true);
}
}
public void EnableGrid() {
if (!_gridEnabled) {
_gridEnabled=true;
- base.SetAlbumGrid (false);
+ base.SwitchToAlbumGrid();
+ //base.SetAlbumGrid (false);
}
}
diff --git a/src/CueSheets/Banshee.CueSheets/Gui/CS_ComposerListView.cs b/src/CueSheets/Banshee.CueSheets/Gui/CS_ComposerListView.cs
index 708fa89..ade094b 100644
--- a/src/CueSheets/Banshee.CueSheets/Gui/CS_ComposerListView.cs
+++ b/src/CueSheets/Banshee.CueSheets/Gui/CS_ComposerListView.cs
@@ -4,7 +4,8 @@ using Hyena.Data.Gui;
namespace Banshee.CueSheets
{
- public class CS_ComposerListView : TrackFilterListView<CS_ComposerInfo>
+ public class CS_ComposerListView
+ : TrackFilterListView<CS_ComposerInfo>
{
public CS_ComposerListView () : base ()
{
diff --git a/src/CueSheets/Banshee.CueSheets/Gui/CueSheetsView.cs b/src/CueSheets/Banshee.CueSheets/Gui/CueSheetsView.cs
index 6970d2d..e8b27e9 100644
--- a/src/CueSheets/Banshee.CueSheets/Gui/CueSheetsView.cs
+++ b/src/CueSheets/Banshee.CueSheets/Gui/CueSheetsView.cs
@@ -25,6 +25,8 @@ using Hyena.Data.Gui;
using Banshee.Gui;
using Banshee.I18n;
using Banshee.Configuration;
+using Mono.Unix;
+using System.Threading;
namespace Banshee.CueSheets
{
@@ -69,7 +71,119 @@ namespace Banshee.CueSheets
private Stack<string> _fill_cues=new Stack<string>();
private int _fill_count=0;
private int _fill_dir_count=0;
- private bool _fill_canceled=false;
+ private bool _fill_canceled=false;
+
+ private LibraryImportManager import_manager=null;
+
+ //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 FillLibrary(string cwd) {
+ string [] dirs=Directory.GetDirectories(cwd, "*");
+ string [] sheets=Directory.GetFiles (cwd,"*.cue");
+ string ddir=basedir+"/.banshee";
+ if (!Directory.Exists(ddir)) {
+ Directory.CreateDirectory(ddir);
+ }
+ foreach (string sheet in sheets) {
+ CueSheet cs=new CueSheet(sheet,cwd,basedir);
+ ImportSheet(cs);
+ Thread.Sleep (500);
+ }
+ foreach (string dir in dirs) {
+ FillLibrary (dir);
+ }
+ }
+
+ private void FillLibrary() {
+ basedir=MySource.getCueSheetDir();
+ Hyena.Log.Information ("Base directory="+basedir);
+ Thread thrd=new Thread(delegate() {
+ FillLibrary (basedir);
+ });
+ thrd.Start ();
+ }
private void fill(string cwd) {
Hyena.Log.Information ("Scanning directory "+cwd);
@@ -87,8 +201,8 @@ namespace Banshee.CueSheets
return false;
}
- int i;
- while(i<50 && _fill_cues.Count>0) {
+ int i=0;
+ while(i<1 && _fill_cues.Count>0) {
string sheet=_fill_cues.Pop ();
string bn=Tools.basename (sheet);
if (bn!="") {
@@ -167,6 +281,7 @@ namespace Banshee.CueSheets
bar.Remove (sep);
bar.Remove (cancel);
bar.Hide ();
+ FillLibrary ();
return false;
} else {
return true;
@@ -195,7 +310,7 @@ namespace Banshee.CueSheets
_song_file=e.file ();
}
double offset=e.offset ();
- ServiceManager.PlayerEngine.SetCurrentTrack(e);
+ //ServiceManager.PlayerEngine.SetCurrentTrack(e);
_position=(uint) (offset*1000.0);
_set_position=true;
mscount=chgcount-(1000/timeout);
@@ -208,8 +323,9 @@ namespace Banshee.CueSheets
index=0;
try {
CueSheet sheet=MySource.getSheet ();
- ServiceManager.PlayerEngine.SetAccurateSeek(true);
+ //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) {
@@ -218,7 +334,7 @@ namespace Banshee.CueSheets
if (ServiceManager.PlaybackController.NextSource!=MySource) {
ServiceManager.PlaybackController.NextSource=MySource;
}
- ServiceManager.PlaybackController.SetSeekMode (true);
+ //ServiceManager.PlaybackController.SetSeekMode (true);
} catch (SystemException ex) {
Hyena.Log.Information(ex.ToString ());
}
@@ -259,19 +375,23 @@ namespace Banshee.CueSheets
// 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);
- ServiceManager.PlayerEngine.SetCurrentTrack (e);
+ 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.ScrollTo(index);
view.Selection.QuietUnselect (view.Selection.FirstIndex);
view.Selection.Select(index);
}
diff --git a/src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayList.cs b/src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayList.cs
index 8d18e32..b79d193 100644
--- a/src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayList.cs
+++ b/src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayList.cs
@@ -57,6 +57,7 @@ namespace Banshee.CueSheets
public CueSheet GetCueSheet() {
CueSheet s=new CueSheet();
s.SetTitle (_name);
+ s.SheetKind=CueSheet.Kind.PlayList;
foreach (CS_PlayListEntry ple in _playlist) {
s.AddEntry(ple.GetCueSheetEntry ());
}
diff --git a/src/CueSheets/CueSheets.csproj b/src/CueSheets/CueSheets.csproj
index 023c2d0..ec4bbd2 100644
--- a/src/CueSheets/CueSheets.csproj
+++ b/src/CueSheets/CueSheets.csproj
@@ -115,7 +115,6 @@
<Compile Include="Banshee.CueSheets\Version\CS_Info.cs" />
<Compile Include="Banshee.CueSheets\mp3splt\Mp3Split.cs" />
<Compile Include="Banshee.CueSheets\mp3splt\Mp3SplitTrack.cs" />
- <Compile Include="Banshee.CueSheets\Gui\Actions.cs" />
<Compile Include="Banshee.CueSheets\Gui\CS_AlbumListView.cs" />
<Compile Include="Banshee.CueSheets\Gui\CueSheetsView.cs" />
<Compile Include="Banshee.CueSheets\Gui\CS_GenreListView.cs" />
@@ -136,6 +135,7 @@
<Compile Include="Banshee.CueSheets\Model\CS_TrackListModel.cs" />
<Compile Include="Banshee.CueSheets\Gui\CS_TrackListView.cs" />
<Compile Include="Banshee.CueSheets\Gui\CS_Column.cs" />
+ <Compile Include="Banshee.CueSheets\Gui\CS_Actions.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
diff --git a/src/CueSheets/Makefile.am b/src/CueSheets/Makefile.am
index da55a36..e69b1d9 100644
--- a/src/CueSheets/Makefile.am
+++ b/src/CueSheets/Makefile.am
@@ -11,7 +11,7 @@ SOURCES = \
Banshee.CueSheets/Data/CS_ComposerInfo.cs \
Banshee.CueSheets/Data/CS_GenreInfo.cs \
Banshee.CueSheets/Data/CS_TrackInfoDb.cs \
- Banshee.CueSheets/Gui/Actions.cs \
+ Banshee.CueSheets/Gui/CS_Actions.cs \
Banshee.CueSheets/Gui/CS_AlbumListView.cs \
Banshee.CueSheets/Gui/CS_ArtistListView.cs \
Banshee.CueSheets/Gui/CS_CollectionSearchEntry.cs \
diff --git a/src/CueSheets/Resources/GlobalUI.xml b/src/CueSheets/Resources/GlobalUI.xml
index cc156a7..cf3f3a1 100644
--- a/src/CueSheets/Resources/GlobalUI.xml
+++ b/src/CueSheets/Resources/GlobalUI.xml
@@ -2,5 +2,7 @@
<popup action="CueSheetsPopup">
<menuitem action="Synchronize" />
<menuitem name="SourcePreferences" action="SourcePreferencesAction"/>
+ <separator />
+ <menuitem name="NewPlaylist" action="NewPlaylistAction"/>
</popup>
</ui>