Ejemplo n.º 1
0
        // Main
        /// <summary>
        ///	The main method.
        /// </summary>
        /// <param name="args">
        ///	An array of <see cref="String">strings</see>,
        ///	representing command-line arguments.
        /// </param>
        public static void Main(string [] args)
        {
            try {
                DBus.BusG.Init();
            } catch {}

            try {
                Global.SetProcessName("muine");
            } catch {}

            Application.Init();
            Gnome.Vfs.Vfs.Initialize();

            // Try to find a running Muine
            try {
                dbus_object = DBusLib.Player.FindInstance();
            } catch {
            }

            // Check if an instance of Muine is already running
            if (dbus_object != null)
            {
                // Handle command line args and exit.
                if (args.Length > 0)
                {
                    ProcessCommandLine(args);
                }
                else
                {
                    dbus_object.SetWindowVisible(true, 0);
                }

                Gdk.Global.NotifyStartupComplete();
                return;
            }

            Catalog.Init("muine", Defines.GNOME_LOCALE_DIR);

            new Gnome.Program
                ("muine", Defines.VERSION, Gnome.Modules.UI, args);

            // Initialize D-Bus
            //   We initialize here but don't connect to it until later.
            try {
                dbus_object = new DBusLib.Player();

                DBusService.Instance.RegisterObject(dbus_object,
                                                    "/org/gnome/Muine/Player");
            } catch (Exception e) {
                Console.WriteLine(string_dbus_failed, e.Message);
            }

            // Init GConf
            Config.Init();

            // Init files
            try {
                FileUtils.Init();
            } catch (Exception e) {
                Error(e.Message);
            }

            // Register stock icons
            StockIcons.Initialize();

            // Set default window icon
            SetDefaultWindowIcon();

            // Open cover database
            try {
                cover_db = new CoverDatabase(3);
            } catch (Exception e) {
                Error(String.Format(string_coverdb_failed, e.Message));
            }

            cover_db.DoneLoading += OnCoversDoneLoading;

            // Load song database
            try {
                db = new SongDatabase(6);
            } catch (Exception e) {
                Error(String.Format(string_songdb_failed, e.Message));
            }

            db.Load();

            // Setup Actions
            actions = new Actions();

            // Create playlist window
            try {
                playlist = new PlaylistWindow();
            } catch (PlayerException e) {
                Error(e.Message);
            }

            // D-Bus
            //  Hook up D-Bus object before loading any songs into the
            //	playlist, to make sure that the song change gets emitted
            //	to the bus
            Muine.DBusLib.Player exported_dbus_object = dbus_object as Muine.DBusLib.Player;
            if (exported_dbus_object != null)
            {
                exported_dbus_object.HookUp(playlist);
            }

            // PluginManager
            //	Initialize plug-ins (also before loading any songs, to make
            //	sure that the song change gets through to all the plug-ins)
            new PluginManager(playlist);

            // Hook up multimedia keys
            if (!GnomeMMKeys.Initialize())
            {
                new MmKeys(playlist);
            }

            // Process command line options
            bool opened_file = ProcessCommandLine(args);

            // Load playlist
            if (!opened_file)
            {
                playlist.RestorePlaylist();
            }

            // Show UI
            playlist.Run();

            while (MainContext.Pending())
            {
                Gtk.Main.Iteration();
            }

            // Load Covers
            cover_db.Load();

            // Hook up to the session manager
            session_client               = Gnome.Global.MasterClient();
            session_client.Die          += OnDieEvent;
            session_client.SaveYourself += OnSaveYourselfEvent;

            // Run!
            Application.Run();
        }