using System; using BlogEngine.Core; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Text.RegularExpressions; using BlogEngine.Core.Web.Controls; /// /// Add flash audio player(s) to the blog post /// Developed by Ruslan Tur (http://rtur.net) /// Version 1.3 for BlogEngine 1.3 /// Visit http://rtur.net for updates /// 12/20/2007 /// [Extension("Mp3 Flash Audio Player", "1.3.0.0", "Rtur.net")] public class mp3player { #region Private members private const string _audioroot = "audio/"; private const string _jsfile = "player.js"; private const string _ext = "mp3player"; private const string _width = "width"; private const string _height = "height"; private const string _bgColor = "bgColor"; private const string _bg = "bg"; private const string _leftbg = "leftbg"; private const string _lefticon = "lefticon"; private const string _rightbg = "rightbg"; private const string _rightbghover = "rightbghover"; private const string _righticon = "righticon"; private const string _righticonhover = "righticonhover"; private const string _text = "text"; private const string _slider = "slider"; private const string _track = "track"; private const string _border = "border"; private const string _loader = "loader"; private static long _cnt = 0; static protected ExtensionSettings _settings = null; #endregion /// /// Default constructor called on application start up /// from Global.asax to initialize extension /// public mp3player() { // subscribe for post serving event Post.Serving += new EventHandler(Post_Serving); // set page that extension manager will use // instead of default settings page ExtensionManager.SetAdminPage("mp3player", "~/audio/Admin.aspx"); // set default setting values SetDefaultSettings(); } /// /// An event that handles ServingEventArgs /// /// /// private void Post_Serving(object sender, ServingEventArgs e) { if (!string.IsNullOrEmpty(e.Body)) { // only process the posts if (e.Location == ServingLocation.PostList || e.Location == ServingLocation.SinglePost) { string regex = @"\[mp3:.*?\.mp3]"; MatchCollection matches = Regex.Matches(e.Body, regex); if (matches.Count > 0) { AddJsToTheHeader(); string filename = string.Empty; string filepath = string.Empty; string player = string.Empty; foreach (Match match in matches) { filename = match.Value.Replace("[mp3:", "").Replace("]", "").Trim(); player = PlayerObject(filename); player = ""; e.Body = e.Body.Replace(match.Value, player); } } } } } /// /// Inject JavaScript file into the header of the post /// private void AddJsToTheHeader() { // get a page handler System.Web.UI.Page pg = (System.Web.UI.Page)HttpContext.Current.CurrentHandler; bool added = false; // check if script already added to the page header foreach (Control ctl in pg.Header.Controls) { if (ctl.GetType() == typeof(HtmlGenericControl)) { HtmlGenericControl gc = (HtmlGenericControl)ctl; if (gc.Attributes["src"] != null) { if (gc.Attributes["src"].Contains(_jsfile)) { added = true; } } } } if (!added) { HtmlGenericControl js = new HtmlGenericControl("script"); js.Attributes.Add("type", "text/javascript"); js.Attributes.Add("src", AudioRoot() + _jsfile); pg.Header.Controls.Add(js); } } /// /// Build object tag /// /// Name of the mp3 file ("my song.mp3") /// Flash object markup private string PlayerObject(string soundFile) { string sFile = string.Empty; string[] sFiles = soundFile.Split(",".ToCharArray()); foreach (string file in sFiles) { if (file.Substring(0, 7) == "http://") { sFile += file; } else { sFile += AudioRoot() + file; } sFile += ","; } sFile = sFile.Substring(0, sFile.Length - 1); sFile = HttpUtility.UrlEncode(sFile); string s = "

" + "" + "" + "" + "" + "" + "" + "" + "" + "

"; _cnt++; return String.Format(s, AudioRoot(), _cnt, sFile, "No", _settings.GetSingleValue(_bgColor), _settings.GetSingleValue(_bg), _settings.GetSingleValue(_leftbg), _settings.GetSingleValue(_lefticon), _settings.GetSingleValue(_rightbg), _settings.GetSingleValue(_rightbghover), _settings.GetSingleValue(_righticon), _settings.GetSingleValue(_righticonhover), _settings.GetSingleValue(_text), _settings.GetSingleValue(_slider), _settings.GetSingleValue(_track), _settings.GetSingleValue(_border), _settings.GetSingleValue(_loader), _settings.GetSingleValue(_width), _settings.GetSingleValue(_height)); } /// /// Initializes settings with default values /// protected void SetDefaultSettings() { ExtensionSettings settings = new ExtensionSettings(_ext); settings.AddParameter(_width); settings.AddParameter(_height); settings.AddParameter(_bgColor); settings.AddParameter(_bg); settings.AddParameter(_leftbg); settings.AddParameter(_lefticon); settings.AddParameter(_rightbg); settings.AddParameter(_rightbghover); settings.AddParameter(_righticon); settings.AddParameter(_righticonhover); settings.AddParameter(_text); settings.AddParameter(_slider); settings.AddParameter(_track); settings.AddParameter(_border); settings.AddParameter(_loader); settings.AddValue(_width, "290"); settings.AddValue(_height, "24"); settings.AddValue(_bgColor, "ffffff"); settings.AddValue(_bg, "f8f8f8"); settings.AddValue(_leftbg, "eeeeee"); settings.AddValue(_lefticon, "666666"); settings.AddValue(_rightbg, "cccccc"); settings.AddValue(_rightbghover, "999999"); settings.AddValue(_righticon, "666666"); settings.AddValue(_righticonhover, "ffffff"); settings.AddValue(_text, "666666"); settings.AddValue(_slider, "666666"); settings.AddValue(_track, "ffffff"); settings.AddValue(_border, "666666"); settings.AddValue(_loader, "9FFFB8"); settings.IsScalar = true; ExtensionManager.ImportSettings(settings); _settings = ExtensionManager.GetSettings(_ext); } /// /// Virtual path to audio folder /// /// Path to the audio folder private string AudioRoot() { string VirtualPath = HttpContext.Current.Request.Path; string audioRoot = VirtualPath.Substring(0, VirtualPath.LastIndexOf("/") + 1) + _audioroot; return audioRoot; } }