Пример #1
0
        private void Initialize()
        {
            this.Bridge = KodiBridge.CreateBridgeInstance();

            // If we're being started as a service, don't run addon specific tasks
            if (this.IsService)
            {
                PyConsole.WriteLine(string.Format("Starting as Service: {0}", this.BaseUrl));
                return;
            }

            this.Handle     = Convert.ToInt32((PythonInterop.EvalToResult("sys.argv[1]")).Value);
            this.Parameters = (PythonInterop.EvalToResult("sys.argv[2]")).Value;
            PyConsole.WriteLine(string.Format("BaseUrl: {0}, Handle: {1}, Parameters: {2}",
                                              this.BaseUrl, this.Handle, this.Parameters));

            PyVariableManager.Reset();


            // Instance of XbmcAddon
            this.Addon = new Addon(PluginId);

            // Settings accessor
            this.Settings = new KodiAddonSettings(this.Addon);

            //this.Monitor = new XbmcMonitor();

            //string addonName = BaseUrl.Replace("plugin://", "").Replace("/", "");
        }
Пример #2
0
        public int Run()
        {
            try {
                // Create the Settings object
                //this.Settings = new KodiAddonSettings();

                // If we have routes, invoke the request handler
                if (Router.Routes.Count > 0)
                {
                    Router.HandleRequest(this.BaseUrl + this.Parameters);
                }
                int result = this.PluginMain();

                return(result);
            } catch (Exception ex) {
                // This takes the exception and stores it, not allowing it to bubble up
                KodiBridge.SaveException(ex);
                return(1);
            } finally {
                KodiBridge.SetRunningAddon(null, null);

                if (!IsPersistent)
                {
                    KodiBridge.ScheduleAddonTermination(BaseUrl);
                }

                /*
                 * When we get here, we have already returned from PluginMain
                 * tell Python that we are done (TODO: Wait for threads here)
                 * */
                KodiBridge.StopRPC();
            }
        }
Пример #3
0
        public int Run()
        {
            try {
                // Create the Settings object
                //this.Settings = new KodiAddonSettings();

                // If we have routes, invoke the request handler
                int result = 1;
                if (Router.Routes.Count > 0)
                {
                    result = Router.HandleRequest(this.BaseUrl + this.Parameters);
                }
                else
                {
                    result = this.DefaultRoute();
                }
                BeforeReturn();
                Console.WriteLine("RETURN TO PYTHON");
                return(result);
            } catch (Exception ex) {
                // This takes the exception and stores it, not allowing it to bubble up
                KodiBridge.SaveException(ex);
                BeforeReturn();
                Console.WriteLine("RETURN TO PYTHON");
                return(1);
            }
        }
Пример #4
0
        public static PythonEvalReply Eval(string code)
        {
            PythonEvalMessage msg = new PythonEvalMessage {
                Code = code
            };

            string          replyString = KodiBridge.SendMessage(msg);
            PythonEvalReply reply       = JsonConvert.DeserializeObject <PythonEvalReply>(replyString);

            return(reply);
        }
Пример #5
0
        private void BeforeReturn()
        {
            KodiBridge.SetRunningAddon(null);

            if (!IsPersistent)
            {
                KodiBridge.ScheduleAddonTermination(BaseUrl);
            }

            /*
             * tell Python that we are done (TODO: Wait for threads here)
             * */
            Bridge.StopRPC(IsPersistent == false);
        }
Пример #6
0
        public KodiAddon(bool persist = false, bool debug = false)
        {
            DebugEnabled = debug;
            IsPersistent = persist;
            try {
                PyVariableManager = new PyVariableManager();

                // Parse parameters
                this.BaseUrl   = PythonInterop.EvalToResult("sys.argv[0]").Value;
                this.IsService = PythonInterop.EvalToResult("len(sys.argv) < 2").Value;

                this.Router = new RouteManager(this);
            } catch (Exception ex) {
                KodiBridge.SaveException(ex);
            }
        }
Пример #7
0
        /// <summary>
        /// Creates a new addon instance.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="enableDebug">Enables or disabled the debugging console (works on windows only)</param>
        /// <param name="persist">Whether or not to reuse a previous addon instance</param>
        /// <returns></returns>
        public static T GetInstance <T>(bool enableDebug = false, bool persist = false) where T : KodiAddon
        {
            if (enableDebug)
            {
                ConsoleHelper.CreateConsole();
            }

            string BaseUrl = PythonInterop.EvalToResult("sys.argv[0]").Value;

            T instance = null;

            if (persist)
            {
                T previousInstance = (T)KodiBridge.GetPersistentAddon(BaseUrl);
                if (previousInstance != null)
                {
                    Console.WriteLine("REUSING PREVIOUS INSTANCE");
                    instance = previousInstance;
                }
            }

            if (instance == null)
            {
                instance = (T)Activator.CreateInstance(typeof(T));
                if (persist)
                {
                    KodiBridge.RegisterPersistentAddon(BaseUrl, instance);
                }
            }

            instance.DebugEnabled = enableDebug;
            instance.IsPersistent = persist;

            // Set running addon
            KodiBridge.SetRunningAddon(instance);

            // Initialize addon fields.
            // If the addon is persistent, it updates fields that might have changed
            instance.Initialize();

            return(instance);
        }
Пример #8
0
        public int Run()
        {
            try {
                // Create the Settings object
                //this.Settings = new KodiAddonSettings();

                // If we have routes, invoke the request handler
                if (RouteManager.Routes.Count > 0)
                {
                    RouteManager.HandleRequest(this.BaseUrl + this.Parameters);
                }
                int result = this.PluginMain();

                return(result);
            } catch (Exception ex) {
                // This takes the exception and stores it, not allowing it to bubble up
                KodiBridge.SaveException(ex);
                return(1);
            }
        }
Пример #9
0
        public KodiAddon()
        {
            try {
#if DEBUG
                ConsoleHelper.CreateConsole();
#endif

                // Clean the variables list from the previous run (we're in a new python instance so they don't exist anymore)
                Python.PyVariableManager.Initialize();

                // Parse parameters
                this.BaseUrl   = PythonInterop.EvalToResult("sys.argv[0]").Value;
                this.IsService = PythonInterop.EvalToResult("len(sys.argv) < 2").Value;

                // Initialize the Event Monitor
                //Modules.Xbmc.Events.Initialize();

                // Set running addon
                KodiBridge.RunningAddon = this;

                // If we're being started as a service, don't run addon specific tasks
                if (this.IsService)
                {
                    PyConsole.WriteLine(string.Format("Starting as Service: {0}", this.BaseUrl));
                    return;
                }

                this.Handle     = int.Parse(PythonInterop.EvalToResult("sys.argv[1]").Value);
                this.Parameters = PythonInterop.EvalToResult("sys.argv[2]").Value;
                PyConsole.WriteLine(string.Format("BaseUrl: {0}, Handle: {1}, Parameters: {2}",
                                                  this.BaseUrl, this.Handle, this.Parameters));

                // Register routes for derived type
                RouteManager.RegisterRoutes(this.GetType());
            } catch (Exception ex) {
                KodiBridge.SaveException(ex);
            }
        }