public override void HandleComponentState(ComponentState curState, ComponentState nextState)
        {
            base.HandleComponentState(curState, nextState);
            if (!(curState is GalacticMarketState state))
            {
                return;
            }
            _products.Clear();
            foreach (var productId in state.Products)
            {
                if (!_prototypeManager.TryIndex(productId, out CargoProductPrototype product))
                {
                    continue;
                }
                _products.Add(product);
            }

            OnDatabaseUpdated?.Invoke();
        }
        public override void HandleComponentState(ComponentState curState, ComponentState nextState)
        {
            base.HandleComponentState(curState, nextState);
            if (!(curState is CargoOrderDatabaseState state))
            {
                return;
            }
            Clear();
            if (state.Orders == null)
            {
                return;
            }
            foreach (var order in state.Orders)
            {
                AddOrder(order);
            }

            OnDatabaseUpdated?.Invoke();
        }
        public override void HandleComponentState(ComponentState curState, ComponentState nextState)
        {
            base.HandleComponentState(curState, nextState);
            if (!(curState is ProtolatheDatabaseState state))
            {
                return;
            }
            Clear();
            foreach (var ID in state.Recipes)
            {
                if (!_prototypeManager.TryIndex(ID, out LatheRecipePrototype recipe))
                {
                    continue;
                }
                AddRecipe(recipe);
            }

            OnDatabaseUpdated?.Invoke();
        }
        public override void HandleComponentState(ComponentState curState, ComponentState nextState)
        {
            base.HandleComponentState(curState, nextState);
            if (!(curState is TechnologyDatabaseState state))
            {
                return;
            }
            _technologies.Clear();
            var protoManager = IoCManager.Resolve <IPrototypeManager>();

            foreach (var techID in state.Technologies)
            {
                if (!protoManager.TryIndex(techID, out TechnologyPrototype technology))
                {
                    continue;
                }
                _technologies.Add(technology);
            }

            OnDatabaseUpdated?.Invoke();
        }
        public bool TriggerEvent(KodiEventMessage e)
        {
            switch (e.Source)
            {
            case "onAbortRequested":
                OnAbortRequested?.Invoke(null, new EventArgs());
                break;

            case "onCleanStarted":
                OnCleanStarted?.Invoke(null, new LibraryEventArgs(e.EventArgs[0]));
                break;

            case "onCleanFinished":
                OnCleanFinished?.Invoke(null, new LibraryEventArgs(e.EventArgs[0]));
                break;

            case "onDPMSActivated":
                OnDPMSActivated?.Invoke(null, new EventArgs());
                break;

            case "onDPMSDeactivated":
                OnDPMSDeactivated?.Invoke(null, new EventArgs());
                break;

            case "onDatabaseScanStarted":
                OnDatabaseScanStarted?.Invoke(null, new DatabaseEventArgs(e.EventArgs[0]));
                break;

            case "onDatabaseUpdated":
                OnDatabaseUpdated?.Invoke(null, new DatabaseEventArgs(e.EventArgs[0]));
                break;

            case "onNotification":
                OnNotification?.Invoke(null, new NotificationEventArgs(
                                           e.EventArgs[0], e.EventArgs[1], e.EventArgs[2]
                                           ));
                break;

            case "onScanStarted":
                OnScanStarted?.Invoke(null, new LibraryEventArgs(e.EventArgs[0]));
                break;

            case "onScanFinished":
                OnScanFinished?.Invoke(null, new LibraryEventArgs(e.EventArgs[0]));
                break;

            case "onScreensaverActivated":
                OnScreensaverActivated?.Invoke(null, new EventArgs());
                break;

            case "onScreensaverDeactivated":
                OnScreensaverDeactivated?.Invoke(null, new EventArgs());
                break;

            case "onSettingsChanged":
                OnSettingsChanged?.Invoke(null, new EventArgs());
                break;

            default:
                PyConsole.WriteLine(string.Format("Unknown event '{0}' not handled", e.Source));
                return(false);
            }
            return(true);
        }