Exemplo n.º 1
0
        public static CustomData FillFromApiServer(MyPlex.Server svr, bool transcode = false)
        {
            var data      = new CustomData();
            var user      = svr.user;
            var newServer = new Server
            {
                machineIdentifier        = svr.machineIdentifier,
                transcoderAudio          = transcode,
                transcoderVideo          = transcode,
                transcoderVideoRemuxOnly = transcode,
                version            = svr.version,
                myPlexSubscription = false,  //it's possible that this is true, but always default to false just in case.
                isVerifiedHostname = true,   //bad things will happen if this isn't true
                protocol           = "http", //https needs a certificate and Windows will get cranky if it doesn't have one; http just to be on the safe side.
                address            = svr.address,
                port        = svr.port,
                accessToken = svr.accessToken
            };

            data.user = new User {
                username = svr.user.username
            };
            data.server = newServer;

            return(data);
        }
Exemplo n.º 2
0
        public static MediaData DataFromContent(PlexObject content, MyPlex.Server server)
        {
            var contentId               = content.ApiUri;
            var customData              = CustomData.FillFromApiServer(server);
            var contentType             = @"video";
            const StreamType streamType = StreamType.BUFFERED;

            return(new MediaData(contentId, contentType, null, streamType, 0D, customData));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Manually specify a server to prefill content data information
        /// </summary>
        /// <param name="content"></param>
        /// <param name="server"></param>
        /// <returns></returns>
        public static MediaData DataFromContent(PlexObject content, MyPlex.Server server)
        {
            //ID of content to play via Plex app
            var contentId = content.ApiUri;

            //custom data filled from Plex server provider
            var customData = CustomData.FillFromApiServer(server);

            //stream constants
            const string     contentType = @"VIDEO";
            const StreamType streamType  = StreamType.BUFFERED;

            //SharpCaster MediaData object provider for streaming media
            return(new MediaData(contentId, contentType, null, streamType, 0D, customData));
        }
Exemplo n.º 4
0
        public static QueueResult NewQueue(PlexObject content, MyPlex.Server server)
        {
            var q = new QueueResult();

            try
            {
                var          ip       = server.address;
                var          port     = server.port;
                const string protocol = @"http";

                //POST data values

                //Constants
                const string type       = @"video";
                const int    shuffle    = 0;
                const int    repeat     = 0;
                const int    continuous = 0;
                const int    own        = 1;

                //Dynamic
                var uri = $"server://{server.machineIdentifier}/com.plexapp.plugins.library{content.ApiUri}";

                //assemble URLs
                var baseUri  = $"{protocol}://{ip}:{port}";
                var resource = @"playQueues";

                using (var httpClient = new HttpClient())
                {
                    using (var request = new HttpRequestMessage(new HttpMethod("POST"),
                                                                $"{baseUri}/{resource}?type={type}&shuffle={shuffle}" +
                                                                $"&repeat={repeat}&continuous={continuous}" +
                                                                $"&own={own}&uri={uri}"))
                    {
                        request.Headers.TryAddWithoutValidation("X-Plex-Client-Identifier",
                                                                "AB6CCCC7-5CF5-4523-826A-B969E0FFD8A0");
                        request.Headers.TryAddWithoutValidation("X-Plex-Token", "PzhwzBRtb1jQqfRypxDo");

                        var response = httpClient.SendAsync(request).Result;

                        if (response.IsSuccessStatusCode)
                        {
                            if (response.Content != null)
                            {
                                var d = response.Content.ReadAsStringAsync().Result
                                        .ParseXml <MediaContainer>();

                                q.QueueId      = d.playQueueID;
                                q.QueueSuccess = true;
                                q.QueueObject  = d;
                                q.QueueUri     = $"/playQueues/{d.playQueueID}?own=1&window=200";
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LoggingHelpers.RecordException(ex.Message, @"QueueAddError");
            }

            return(q);
        }
Exemplo n.º 5
0
        public static QueueResult NewQueue(PlexObject content, MyPlex.Server server)
        {
            //return object
            var q = new QueueResult();

            try
            {
                //connection details for the server
                var          ip       = server.address;
                var          port     = server.port;
                const string protocol = @"http";

                //Constants
                const string type       = @"VIDEO";
                const int    shuffle    = 0;
                const int    repeat     = 0;
                const int    continuous = 0;
                const int    own        = 1;

                //Dynamic
                var uri = $"server://{server.machineIdentifier}/com.plexapp.plugins.library{content.ApiUri}";

                //assemble URLs
                var          baseUri  = $"{protocol}://{ip}:{port}";
                const string resource = @"playQueues";

                //HTTP request client
                using (var httpClient = new HttpClient())
                {
                    //new HTTP post request
                    using (var request = new HttpRequestMessage(new HttpMethod("POST"),
                                                                $"{baseUri}/{resource}?type={type}&shuffle={shuffle}" +
                                                                $"&repeat={repeat}&continuous={continuous}" +
                                                                $"&own={own}&uri={uri}"))
                    {
                        //add Plex client ID (unique GUID)
                        request.Headers.TryAddWithoutValidation("X-Plex-Client-Identifier",
                                                                GuidHandler.GetGlobalGuid().ToString());

                        //Plex authentication token
                        request.Headers.TryAddWithoutValidation("X-Plex-Token", server.accessToken);

                        //send the request and store the response
                        var response = httpClient.SendAsync(request).Result;

                        //did we succeed?
                        if (response.IsSuccessStatusCode)
                        {
                            //is the content valid?
                            if (response.Content != null)
                            {
                                //get the XML response string
                                var r = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();

                                //XML class processor
                                var deserialiser = new XmlSerializer(typeof(MediaContainer));

                                //XML string reader
                                var stringReader = new StringReader(r);

                                //deserialised MediaContainer
                                var result = (MediaContainer)deserialiser.Deserialize(stringReader);

                                //close streams
                                stringReader.Close();

                                //setup QueueResult variables
                                q.QueueId      = result.playQueueID.ToString();
                                q.QueueSuccess = true;
                                q.QueueObject  = result;
                                q.QueueUri     = $"/playQueues/{result.playQueueID}?own=1&window=200";

                                //UIMessages.Info(d.playQueueID);
                                //UIMessages.Info(q.QueueId);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //log the error
                LoggingHelpers.RecordException(ex.Message, @"QueueAddError");

                //alert the user
                UIMessages.Error($"Error obtaining a new PlayQueue:\n\n{ex}");
            }

            //return QueueResult
            return(q);
        }