/// <summary> /// Constructor for the Application object. /// </summary> public App() { // Global handler for uncaught exceptions. UnhandledException += Application_UnhandledException; // Standard Silverlight initialization InitializeComponent(); // Phone-specific initialization InitializePhoneApplication(); // Show graphics profiling information while debugging. if (System.Diagnostics.Debugger.IsAttached) { // Display the current frame rate counters. Application.Current.Host.Settings.EnableFrameRateCounter = true; // Show the areas of the app that are being redrawn in each frame. //Application.Current.Host.Settings.EnableRedrawRegions = true; // Enable non-production analysis visualization mode, // which shows areas of a page that are handed off to GPU with a colored overlay. //Application.Current.Host.Settings.EnableCacheVisualization = true; // Disable the application idle detection by setting the UserIdleDetectionMode property of the // application's PhoneApplicationService object to Disabled. // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run // and consume battery power when the user is not using the phone. PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled; } // Create the database if it does not exist. using (BeatMachineDataContext db = new BeatMachineDataContext(BeatMachineDataContext.DBConnectionString)) { if (db.DatabaseExists() == false) { db.CreateDatabase(); } } }
/// <summary> /// Constructor for the Application object. /// </summary> public App() { // Global handler for uncaught exceptions. UnhandledException += Application_UnhandledException; // Standard Silverlight initialization InitializeComponent(); // Phone-specific initialization InitializePhoneApplication(); // Show graphics profiling information while debugging. if (System.Diagnostics.Debugger.IsAttached) { // Display the current frame rate counters. Application.Current.Host.Settings.EnableFrameRateCounter = true; // Show the areas of the app that are being redrawn in each frame. //Application.Current.Host.Settings.EnableRedrawRegions = true; // Enable non-production analysis visualization mode, // which shows areas of a page that are handed off to GPU with a colored overlay. //Application.Current.Host.Settings.EnableCacheVisualization = true; // Disable the application idle detection by setting the UserIdleDetectionMode property of the // application's PhoneApplicationService object to Disabled. // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run // and consume battery power when the user is not using the phone. //PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled; } DispatcherHelper.Initialize(); logger = LogManager.GetCurrentClassLogger(); Model = new DataModel(); Songs = new ObservableCollection<Group<AnalyzedSong>>(); Cache = new Dictionary<Song,AnalyzedSong>(); // Create the database if it does not exist. using (BeatMachineDataContext db = new BeatMachineDataContext(BeatMachineDataContext.DBConnectionString)) { if (!db.DatabaseExists()) { logger.Info("Creating new database"); db.CreateDatabase(); } else { logger.Info("Database exists already"); } } MessengerInstance.Register<NewSongsAddedMessage>( this, m => { ThreadPool.QueueUserWorkItem(new WaitCallback(o => { List<IGrouping<int, AnalyzedSong>> rawSongs; using (BeatMachineDataContext context = new BeatMachineDataContext( BeatMachineDataContext.DBConnectionString)) { DataLoadOptions dlo = new DataLoadOptions(); dlo.LoadWith<AnalyzedSong>(p => p.AudioSummary); context.LoadOptions = dlo; context.ObjectTrackingEnabled = false; rawSongs = context.AnalyzedSongs .Where(s => s.AudioSummary != null) .GroupBy(s => (int)Math.Floor((double)s.AudioSummary.Tempo / 10) * 10) .OrderBy(g => g.Key) .ToList(); } foreach (IGrouping<int, AnalyzedSong> g in rawSongs) { List<AnalyzedSong> existingSongs = new List<AnalyzedSong>(); foreach (AnalyzedSong s in g) { Song mls = s.MediaLibrarySong; if (mls != null) { existingSongs.Add(s); Cache[mls] = s; } } if (existingSongs.Count > 0) { Songs.Add(new Group<AnalyzedSong>(g.Key, g.Shuffle())); SongGroupMessage message = new SongGroupMessage(); message.Songs = Songs; message.Cache = Cache; MessengerInstance.Send<SongGroupMessage>(message); } } })); }); // Clean up and restore MediaPlayer settings this.ApplicationLifetimeObjects.Add(new RunMediaPlayer(TimeSpan.FromMilliseconds(50))); }