Наследование: GalaSoft.MvvmLight.Messaging.MessageBase
Пример #1
0
        /// <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)));
        }