示例#1
0
        public string GetBaseUrl(SubsonicSettings settings, string relativePath = null)
        {
            var baseUrl = HttpRequestBuilder.BuildBaseUrl(settings.UseSsl, settings.Host, settings.Port, settings.UrlBase);

            baseUrl = HttpUri.CombinePath(baseUrl, relativePath);

            return(baseUrl);
        }
示例#2
0
        public void Update(SubsonicSettings settings)
        {
            var resource = "startScan";
            var request  = GetSubsonicServerRequest(resource, HttpMethod.GET, settings);
            var response = _httpClient.Execute(request.Build());

            _logger.Trace("Update response: {0}", response.Content);
            CheckForError(response, settings);
        }
示例#3
0
        public void Notify(SubsonicSettings settings, string message)
        {
            var resource = "addChatMessage";
            var request  = GetSubsonicServerRequest(resource, Method.GET, settings);

            request.AddParameter("message", message);
            var client   = GetSubsonicServerClient(settings);
            var response = client.Execute(request);

            _logger.Trace("Update response: {0}", response.Content);
            CheckForError(response, settings);
        }
示例#4
0
        public void Notify(SubsonicSettings settings, string message)
        {
            var resource = "addChatMessage";
            var request  = GetSubsonicServerRequest(resource, HttpMethod.Get, settings);

            request.AddQueryParam("message", message);

            var response = _httpClient.Execute(request.Build());

            _logger.Trace("Update response: {0}", response.Content);
            CheckForError(response, settings);
        }
示例#5
0
        private RestRequest GetSubsonicServerRequest(string resource, Method method, SubsonicSettings settings)
        {
            var request = new RestRequest(resource, method);

            if (settings.Username.IsNotNullOrWhiteSpace())
            {
                request.AddParameter("u", settings.Username);
                request.AddParameter("p", settings.Password);
                request.AddParameter("c", "Gamearr");
                request.AddParameter("v", "1.15.0");
            }

            return(request);
        }
示例#6
0
        public string Version(SubsonicSettings settings)
        {
            var request  = GetSubsonicServerRequest("ping", HttpMethod.GET, settings);
            var response = _httpClient.Execute(request.Build());

            _logger.Trace("Version response: {0}", response.Content);
            CheckForError(response, settings);

            var xDoc    = XDocument.Load(new StringReader(response.Content.Replace("&", "&")));
            var version = xDoc.Root?.Attribute("version")?.Value;

            if (version == null)
            {
                throw new SubsonicException("Could not read version from Subsonic");
            }

            return(version);
        }
示例#7
0
        public ValidationFailure Test(SubsonicSettings settings, string message)
        {
            try
            {
                _logger.Debug("Determining version of Host: {0}", _proxy.GetBaseUrl(settings));
                var version = GetVersion(settings);
                _logger.Debug("Version is: {0}", version);
            }
            catch (SubsonicAuthenticationException ex)
            {
                _logger.Error(ex, "Unable to connect to Subsonic Server");
                return(new ValidationFailure("Username", "Incorrect username or password"));
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "Unable to connect to Subsonic Server");
                return(new ValidationFailure("Host", "Unable to connect to Subsonic Server"));
            }

            return(null);
        }
示例#8
0
        private void CheckForError(IRestResponse response, SubsonicSettings settings)
        {
            _logger.Trace("Checking for error");

            var xDoc   = XDocument.Load(new StringReader(response.Content.Replace("&", "&")));
            var status = xDoc.Root?.Attribute("status")?.Value;

            if (status == null)
            {
                throw new SubsonicException("Invalid Response, Check Server Settings");
            }

            if (status == "failed")
            {
                var ns           = xDoc.Root.GetDefaultNamespace();
                var error        = xDoc.Root.Element(XName.Get("error", ns.ToString()));
                var errorMessage = error?.Attribute("message")?.Value;
                var errorCode    = error?.Attribute("code")?.Value;

                if (errorCode == null)
                {
                    throw new SubsonicException("Subsonic returned error, check settings");
                }

                if (errorCode == "40")
                {
                    throw new SubsonicAuthenticationException(errorMessage);
                }

                throw new SubsonicException(errorMessage);
            }

            if (response.Content.IsNullOrWhiteSpace())
            {
                _logger.Trace("No response body returned, no error detected");
                return;
            }

            _logger.Trace("No error detected");
        }
示例#9
0
 private RestClient GetSubsonicServerClient(SubsonicSettings settings)
 {
     return(RestClientFactory.BuildClient(GetBaseUrl(settings, "rest")));
 }
示例#10
0
        private string GetVersion(SubsonicSettings settings)
        {
            var result = _proxy.Version(settings);

            return(result);
        }
示例#11
0
 public void Update(SubsonicSettings settings)
 {
     _proxy.Update(settings);
 }
示例#12
0
 public void Notify(SubsonicSettings settings, string message)
 {
     _proxy.Notify(settings, message);
 }
示例#13
0
        private HttpRequestBuilder GetSubsonicServerRequest(string resource, HttpMethod method, SubsonicSettings settings)
        {
            var client = new HttpRequestBuilder(GetBaseUrl(settings, "rest"));

            client.Resource(resource);

            if (settings.Username.IsNotNullOrWhiteSpace())
            {
                client.AddQueryParam("u", settings.Username)
                .AddQueryParam("p", settings.Password)
                .AddQueryParam("c", "Lidarr")
                .AddQueryParam("v", "1.15.0");
            }

            client.Method = method;

            return(client);
        }