public AudiobookLibrarySource () : base (Catalog.GetString ("Audiobooks"), "AudiobookLibrary", 49)
{
MediaTypes = TrackMediaAttributes.AudioBook;
NotMediaTypes = TrackMediaAttributes.Podcast | TrackMediaAttributes.VideoStream | TrackMediaAttributes.Music;
SupportsPlaylists = false;
Properties.SetStringList ("Icon.Name", "audiobook", "source-library");
Properties.Set<string> ("SearchEntryDescription", Catalog.GetString ("Search your audiobooks"));
Properties.SetString ("TrackView.ColumnControllerXml", String.Format (@"
<column-controller>
<add-all-defaults />
<remove-default column=""DiscColumn"" />
<remove-default column=""AlbumColumn"" />
<remove-default column=""ComposerColumn"" />
<remove-default column=""AlbumArtistColumn"" />
<remove-default column=""ConductorColumn"" />
<remove-default column=""ComposerColumn"" />
<remove-default column=""BpmColumn"" />
<sort-column direction=""asc"">track_title</sort-column>
<column modify-default=""ArtistColumn"">
<title>{0}</title>
<long-title>{0}</long-title>
</column>
</column-controller>
", Catalog.GetString ("Author")));
var pattern = new AudiobookFileNamePattern ();
pattern.FolderSchema = CreateSchema<string> ("folder_pattern", pattern.DefaultFolder, "", "");
pattern.FileSchema = CreateSchema<string> ("file_pattern", pattern.DefaultFile, "", "");
SetFileNamePattern (pattern);
Actions = new Actions (this);
grid_view = new LazyLoadSourceContents<AudiobookContent> ();
book_view = new LazyLoadSourceContents<BookView> ();
Properties.Set<ISourceContents> ("Nereid.SourceContents", grid_view);
Properties.Set<System.Reflection.Assembly> ("ActiveSourceUIResource.Assembly", System.Reflection.Assembly.GetExecutingAssembly ());
Properties.SetString ("ActiveSourceUIResource", "ActiveSourceUI.xml");
Properties.Set<bool> ("ActiveSourceUIResourcePropagate", true);
Properties.Set<System.Action> ("ActivationAction", delegate { SwitchToGridView (); });
title_switcher = new Gtk.HBox () { Spacing = 0 };
var title_label = new Gtk.Label () { Markup = String.Format ("<b>{0}</b>", GLib.Markup.EscapeText (this.Name)) };
var b = new Gtk.Button (title_label) { Relief = Gtk.ReliefStyle.None };
b.Clicked += delegate { SwitchToGridView (); };
title_switcher.PackStart (b);
title_switcher.ShowAll ();
book_label = new Gtk.Label () { Visible = false };
title_switcher.PackStart (book_label);
Properties.Set<Gtk.Widget> ("Nereid.SourceContents.TitleWidget", title_switcher);
TracksAdded += (o, a) => {
if (!IsAdding) {
MergeBooksAddedSince (DateTime.Now - TimeSpan.FromHours (2));
ServiceManager.DbConnection.Execute (
"UPDATE CoreTracks SET Attributes = Attributes | ? WHERE PrimarySourceID = ?",
TrackMediaAttributes.AudioBook, this.DbId);
}
};
TrackIsPlayingHandler = ServiceManager.PlayerEngine.IsPlaying;
PlaybackSource = new BookPlaylist ("audiobook-playback-source", this);
PlaybackSource.DatabaseTrackModel.ForcedSortQuery = BansheeQuery.GetSort ("track", true);
ServiceManager.PlaybackController.SourceChanged += OnPlaybackSourceChanged;
// Listen for playback changes and auto-set the last-played bookmark
ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent,
PlayerEvent.StartOfStream | PlayerEvent.EndOfStream | PlayerEvent.Seek,
true);
}