/// <summary> /// Adds Metadata tags to the recorded file using GStreamer TagSetter interface and splits files if requested /// </summary> /// <param name="track"> /// A <see cref="TrackInfo"/> containing the current stream and its metadata /// </param> /// <param name="splitfiles"> /// A <see cref="System.Boolean"/> indicating whether the recorded files are to be split /// </param> /// <returns> /// A <see cref="System.Boolean"/> indicating if tagging was successful /// </returns> public bool AddStreamTags(TrackInfo track, bool splitfiles) { if (track == null) { return(false); } if (splitfiles && file_sink != null && track.ArtistName != null && track.ArtistName.Length > 0) { if (track.ArtistName != lastArtist || track.TrackTitle != lastTitle) { SetMetadataFilename(track.TrackTitle, track.ArtistName); SetNewTrackLocation(output_file + file_extension, IntPtr.Zero); } } lastArtist = track.ArtistName; lastTitle = track.TrackTitle; if (tagger == null || tagger.IsNull()) { Hyena.Log.Debug("[Recorder]<AddStreamTags> tagger is null, not tagging!"); return(false); } try { TagList taglist = new TagList(); if (track.TrackTitle != null) { taglist.AddStringValue(TagMergeMode.ReplaceAll, "title", track.TrackTitle); } if (track.Genre != null) { taglist.AddStringValue(TagMergeMode.ReplaceAll, "genre", track.Genre); } if (track.ArtistName != null) { taglist.AddStringValue(TagMergeMode.ReplaceAll, "artist", track.ArtistName); } if (track.AlbumArtist != null) { taglist.AddStringValue(TagMergeMode.ReplaceAll, "album-artist", track.AlbumArtist); } if (track.AlbumTitle != null) { taglist.AddStringValue(TagMergeMode.ReplaceAll, "album", track.AlbumTitle); } tagger.MergeTags(taglist, TagMergeMode.KeepAll); } catch (Exception e) { Hyena.Log.Information("[Streamrecorder] An exception occurred during gstreamer operation"); Hyena.Log.Debug(e.StackTrace); } return(true); }