public void ConstructorNullReaderQuotas()
 {
     JsonReaderWriterFactory.CreateJsonReader(GetInput("{}"), null);
 }
Ejemplo n.º 2
0
        internal void UpdateTask()
        {
            Global.UpdateModel = null;

            if (!UserSettings.All.CheckForUpdates)
            {
                return;
            }

#if !UWP
            try
            {
                var request = (HttpWebRequest)WebRequest.Create("https://api.github.com/repos/NickeManarin/ScreenToGif/releases/latest");
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393";
                request.Proxy     = WebHelper.GetProxy();

                var response = (HttpWebResponse)request.GetResponse();

                using (var resultStream = response.GetResponseStream())
                {
                    if (resultStream == null)
                    {
                        return;
                    }

                    using (var reader = new StreamReader(resultStream))
                    {
                        var result = reader.ReadToEnd();

                        var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(result), new System.Xml.XmlDictionaryReaderQuotas());

                        var release = XElement.Load(jsonReader);

                        var version = Version.Parse(release.XPathSelectElement("tag_name")?.Value ?? "0.1");

                        if (version.Major == 0 || version <= Assembly.GetExecutingAssembly().GetName().Version)
                        {
                            return;
                        }

                        Global.UpdateModel = new UpdateModel
                        {
                            Version              = version,
                            Description          = release.XPathSelectElement("body")?.Value ?? "",
                            InstallerDownloadUrl = release.XPathSelectElement("assets/item[2]/browser_download_url")?.Value ?? "",
                            InstallerSize        = Convert.ToInt64(release.XPathSelectElement("assets/item[2]/size")?.Value ?? "0"),
                            PortableDownloadUrl  = release.XPathSelectElement("assets/item[1]/browser_download_url")?.Value ?? "",
                            PortableSize         = Convert.ToInt64(release.XPathSelectElement("assets/item[1]/size")?.Value ?? "0")
                        };

                        Application.Current.Dispatcher.Invoke(() => NotificationManager.AddNotification(string.Format(LocalizationHelper.Get("Update.NewRelease.Verbose"), Global.UpdateModel.Version), StatusType.Update, "update", UpdateAction));
                    }
                }
            }
            catch (Exception ex)
            {
                LogWriter.Log(ex, "Check for update task");
            }
#endif

            GC.Collect();
        }
Ejemplo n.º 3
0
        protected override void DownloadHTMLPage()
        {
            List <string> thumbs   = new List <string>();
            string        htmlPage = "";
            string        str      = "";
            string        baseURL  = "//i.4cdn.org/" + URL.Split('/')[3] + "/";
            string        JURL     = "http://a.4cdn.org/" + URL.Split('/')[3] + "/thread/" + URL.Split('/')[5] + ".json";

            try
            {
                //Add a UserAgent to prevent 403
                using (var web = new WebClient())
                {
                    web.Headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0";

                    htmlPage = web.DownloadString(URL);

                    //Prevent the html from being destroyed by the anti adblock script
                    htmlPage = htmlPage.Replace("f=\"to\"", "f=\"penis\"");

                    string json  = web.DownloadString(JURL);
                    byte[] bytes = Encoding.ASCII.GetBytes(json);
                    using (var stream = new MemoryStream(bytes))
                    {
                        var quotas     = new XmlDictionaryReaderQuotas();
                        var jsonReader = JsonReaderWriterFactory.CreateJsonReader(stream, quotas);
                        var xml        = XDocument.Load(jsonReader);
                        str = xml.ToString();
                    }
                }

                XmlDocument doc = new XmlDocument();
                doc.LoadXml(str);
                XmlNodeList xmlTim       = doc.DocumentElement.SelectNodes("/root/posts/item/tim");
                XmlNodeList xmlExt       = doc.DocumentElement.SelectNodes("/root/posts/item/ext");
                XmlNodeList xmlFilenames = doc.DocumentElement.SelectNodes("/root/posts/item/filename");

                for (int i = 0; i < xmlExt.Count; i++)
                {
                    string old = baseURL + xmlTim[i].InnerText + xmlExt[i].InnerText;
                    string rep = xmlTim[i].InnerText + xmlExt[i].InnerText;
                    htmlPage = htmlPage.Replace(old, rep);

                    //get the actual filename saved
                    string filename = Path.GetFileNameWithoutExtension(new ImageLink(baseURL + xmlTim[i].InnerText + xmlExt[i].InnerText, xmlFilenames[i].InnerText).GenerateNewFilename((ImageFileNameFormat)Properties.Settings.Default.imageFilenameFormat));

                    //Save thumbs for files that need it
                    if (rep.Split('.')[1] == "webm" /*|| rep.Split('.')[1] == ""*/)
                    {
                        old = "//t.4cdn.org/" + URL.Split('/')[3] + "/" + xmlTim[i].InnerText + "s.jpg";
                        thumbs.Add("http:" + old);

                        htmlPage = htmlPage.Replace(xmlTim[i].InnerText, filename);
                        htmlPage = htmlPage.Replace("//i.4cdn.org/" + URL.Split('/')[3] + "/" + filename, "thumb/" + xmlTim[i].InnerText);
                    }
                    else
                    {
                        string thumbName = rep.Split('.')[0] + "s";
                        htmlPage = htmlPage.Replace(thumbName + ".jpg", rep.Split('.')[0] + "." + rep.Split('.')[1]);
                        htmlPage = htmlPage.Replace("/" + thumbName, thumbName);

                        htmlPage = htmlPage.Replace("//i.4cdn.org/" + URL.Split('/')[3] + "/" + xmlTim[i].InnerText, xmlTim[i].InnerText);
                        htmlPage = htmlPage.Replace(xmlTim[i].InnerText, filename); //easy fix for images
                    }

                    htmlPage = htmlPage.Replace("//is2.4chan.org/" + URL.Split('/')[3] + "/" + xmlTim[i].InnerText, xmlTim[i].InnerText); //bandaid fix for is2 urls
                    htmlPage = htmlPage.Replace("/" + rep, rep);
                }

                htmlPage = htmlPage.Replace("=\"//", "=\"http://");

                //Save thumbs for files that need it
                for (int i = 0; i < thumbs.Count; i++)
                {
                    Utils.DownloadToDir(thumbs[i], SaveTo + "\\thumb");
                }

                if (!string.IsNullOrWhiteSpace(htmlPage))
                {
                    File.WriteAllText(SaveTo + "\\Thread.html", htmlPage);
                }
            }
            catch (Exception ex)
            {
                Program.Log(ex);
            }
        }
Ejemplo n.º 4
0
        public static WeatherForecast GetForecast(string area)
        {
            WeatherForecast f = new WeatherForecast();

            try
            {
                string json = GetJson(area, "forecast");
                if (!json.Equals(string.Empty) && !json.Contains("error data"))
                {
                    XmlDictionaryReader reader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(json), XmlDictionaryReaderQuotas.Max);
                    XmlDocument         xdoc   = new XmlDocument();
                    xdoc.Load(reader);
                    Log.WriteDebug("GetForecast>xdoc>>>>>" + xdoc.InnerText);

                    #region 输出完整的XML,分析格式
                    //StringWriter stringWriter = new StringWriter();
                    //XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter);
                    //xmlTextWriter.Formatting = Formatting.Indented;
                    //foreach (XmlNode xmlNode in xdoc)
                    //{
                    //    xmlNode.WriteTo(xmlTextWriter);
                    //}

                    //Log.WriteLog(stringWriter.ToString());
                    #endregion

                    #region 用xml解析json,并为相关的成员变量赋值
                    ///获取到的属性信息
                    XmlNode info = xdoc.FirstChild.SelectSingleNode("c");
                    f.AreaID         = info.SelectSingleNode("c1").InnerText;
                    f.ENName         = info.SelectSingleNode("c2").InnerText;
                    f.CNName         = info.SelectSingleNode("c3").InnerText;
                    f.ENCityName     = info.SelectSingleNode("c4").InnerText;
                    f.CNCityName     = info.SelectSingleNode("c5").InnerText;
                    f.ENProvName     = info.SelectSingleNode("c6").InnerText;
                    f.CNProvName     = info.SelectSingleNode("c7").InnerText;
                    f.ENCountryName  = info.SelectSingleNode("c8").InnerText;
                    f.CNCountryName  = info.SelectSingleNode("c9").InnerText;
                    f.CityLevel      = uint.Parse(info.SelectSingleNode("c10").InnerText);
                    f.CityAreaCode   = info.SelectSingleNode("c11").InnerText;
                    f.PostCode       = uint.Parse(info.SelectSingleNode("c12").InnerText);
                    f.Longitude      = float.Parse(info.SelectSingleNode("c13").InnerText);
                    f.Latitude       = float.Parse(info.SelectSingleNode("c14").InnerText);
                    f.Altitude       = int.Parse(info.SelectSingleNode("c15").InnerText);
                    f.RadarStationNo = info.SelectSingleNode("c16").InnerText;

                    ///f0 数据发布时间
                    IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true);
                    f.PublishTime = System.DateTime.ParseExact(xdoc.FirstChild.SelectSingleNode("f").SelectSingleNode("f0").FirstChild.InnerText, "yyyyMMddHHmm", culture);

                    ///第一天
                    XmlNode DayOne = xdoc.FirstChild.SelectSingleNode("f").SelectSingleNode("f1").FirstChild;
                    f.DayWeatherCodeOne     = DayOne.SelectSingleNode("fa").InnerText;
                    f.NightWeatherCodeOne   = DayOne.SelectSingleNode("fb").InnerText;
                    f.DayTemperatureOne     = DayOne.SelectSingleNode("fc").InnerText;
                    f.NightTemperatureOne   = DayOne.SelectSingleNode("fd").InnerText;
                    f.DayWindDirectionOne   = DayOne.SelectSingleNode("fe").InnerText;
                    f.NightWindDirectionOne = DayOne.SelectSingleNode("ff").InnerText;
                    f.DayWindForceOne       = DayOne.SelectSingleNode("fg").InnerText;
                    f.NightWindForceOne     = DayOne.SelectSingleNode("fh").InnerText;
                    f.SunriseTimeOne        = DayOne.SelectSingleNode("fi").InnerText.Split('|')[0];
                    f.SunsetTimeOne         = DayOne.SelectSingleNode("fi").InnerText.Split('|')[1];

                    ///第二天
                    XmlNode DayTwo = DayOne.NextSibling;
                    f.DayWeatherCodeTwo     = DayTwo.SelectSingleNode("fa").InnerText;
                    f.NightWeatherCodeTwo   = DayTwo.SelectSingleNode("fb").InnerText;
                    f.DayTemperatureTwo     = DayTwo.SelectSingleNode("fc").InnerText;
                    f.NightTemperatureTwo   = DayTwo.SelectSingleNode("fd").InnerText;
                    f.DayWindDirectionTwo   = DayTwo.SelectSingleNode("fe").InnerText;
                    f.NightWindDirectionTwo = DayTwo.SelectSingleNode("ff").InnerText;
                    f.DayWindForceTwo       = DayTwo.SelectSingleNode("fg").InnerText;
                    f.NightWindForceTwo     = DayTwo.SelectSingleNode("fh").InnerText;
                    f.SunriseTimeTwo        = DayTwo.SelectSingleNode("fi").InnerText.Split('|')[0];
                    f.SunsetTimeTwo         = DayTwo.SelectSingleNode("fi").InnerText.Split('|')[1];

                    ///第三天
                    XmlNode DayThree = DayTwo.NextSibling;
                    f.DayWeatherCodeThree     = DayThree.SelectSingleNode("fa").InnerText;
                    f.NightWeatherCodeThree   = DayThree.SelectSingleNode("fb").InnerText;
                    f.DayTemperatureThree     = DayThree.SelectSingleNode("fc").InnerText;
                    f.NightTemperatureThree   = DayThree.SelectSingleNode("fd").InnerText;
                    f.DayWindDirectionThree   = DayThree.SelectSingleNode("fe").InnerText;
                    f.NightWindDirectionThree = DayThree.SelectSingleNode("ff").InnerText;
                    f.DayWindForceThree       = DayThree.SelectSingleNode("fg").InnerText;
                    f.NightWindForceThree     = DayThree.SelectSingleNode("fh").InnerText;
                    f.SunriseTimeThree        = DayThree.SelectSingleNode("fi").InnerText.Split('|')[0];
                    f.SunsetTimeThree         = DayThree.SelectSingleNode("fi").InnerText.Split('|')[1];

                    #endregion
                }
            }
            catch (Exception ex)
            {
                Log.WriteError("GetForecast错误>>>>>" + ex.Message);
            }
            return(f);
        }
Ejemplo n.º 5
0
        public async Task UpdatePackageInfoAsync(PipPackageView package, CancellationToken cancel)
        {
            string        description = null;
            List <string> versions    = null;

            using (var client = new WebClient()) {
                Stream data;
                try {
                    data = await client.OpenReadTaskAsync(new Uri(_index ?? DefaultIndex, package.Name + "/json"));
                } catch (WebException) {
                    // No net access
                    return;
                }

                try {
                    using (var reader = JsonReaderWriterFactory.CreateJsonReader(data, new XmlDictionaryReaderQuotas())) {
                        var doc = XDocument.Load(reader);

                        // TODO: Get package URL
                        //url = (string)doc.Document
                        //    .Elements("root")
                        //    .Elements("info")
                        //    .Elements("package_url")
                        //    .FirstOrDefault();

                        description = (string)doc.Document
                                      .Elements("root")
                                      .Elements("info")
                                      .Elements("description")
                                      .FirstOrDefault();

                        versions = doc.Document
                                   .Elements("root")
                                   .Elements("releases")
                                   .Elements()
                                   .Attributes("item")
                                   .Select(a => a.Value)
                                   .ToList();
                    }
                } catch (InvalidOperationException) {
                }
            }

            cancel.ThrowIfCancellationRequested();

            bool changed = false;

            await _cacheLock.WaitAsync();

            try {
                PipPackageView inCache;
                if (!_cache.TryGetValue(package.Name, out inCache))
                {
                    inCache = _cache[package.Name] = new PipPackageView(this, package.Name, null, null);
                }

                if (!string.IsNullOrEmpty(description))
                {
                    var lines     = description.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
                    var firstLine = string.Join(
                        " ",
                        lines.TakeWhile(s => !IsSeparatorLine(s)).Select(s => s.Trim())
                        );
                    if (firstLine.Length > 500)
                    {
                        firstLine = firstLine.Substring(0, 497) + "...";
                    }
                    if (firstLine == "UNKNOWN")
                    {
                        firstLine = string.Empty;
                    }

                    inCache.Description = firstLine;
                    package.Description = firstLine;
                    changed             = true;
                }

                if (versions != null)
                {
                    var updateVersion = Pep440Version.TryParseAll(versions)
                                        .Where(v => v.IsFinalRelease)
                                        .OrderByDescending(v => v)
                                        .FirstOrDefault();
                    inCache.UpgradeVersion = updateVersion;
                    package.UpgradeVersion = updateVersion;
                    changed = true;
                }
            } finally {
                _cacheLock.Release();
            }

            if (changed)
            {
                TriggerWriteCacheToDisk();
            }
        }
Ejemplo n.º 6
0
 protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
 {
     writer.WriteNode(JsonReaderWriterFactory.CreateJsonReader(this.jsonStream, XmlDictionaryReaderQuotas.Max), false);
     writer.Flush();
 }
Ejemplo n.º 7
0
        /// <summary>
        /// RequestAPI implementation
        /// </summary>
        /// <param name="uri">full uri</param>
        /// <param name="method">using method for HTTP negotiation</param>
        /// <param name="param">additional parameters</param>
        /// <param name="request">used request</param>
        /// <returns>XML documents</returns>
        public sealed override XDocument RequestAPI(string uri, RequestMethod method, IEnumerable <KeyValuePair <string, string> > param, out HttpWebRequest request)
        {
            // validate arguments
            if (String.IsNullOrEmpty(uri))
            {
                throw new ArgumentNullException(uri);
            }
            else if (uri.Length < 5)
            {
                throw new ArgumentException("uri is too short.");
            }
            string target = uri;

            // detection return type of api
            var docType = DocumentTypes.Invalid;

            if (target.EndsWith("xml"))
            {
                docType = DocumentTypes.Xml;
            }
            else if (target.EndsWith("json"))
            {
                docType = DocumentTypes.Json;
            }
            else
            {
                throw new ArgumentException("format can't identify. uriPartial is must ends with .xml or .json.");
            }

            // pre-validation authentication
            if (String.IsNullOrEmpty(Token) || String.IsNullOrEmpty(Secret))
            {
                throw new WebException("OAuth Not Validated", WebExceptionStatus.ProtocolError);
            }
            var reg = GetHeader(target, method, param);

            try
            {
                var    ps   = JoinParamAsUrl(param);
                byte[] body = null;
                if (!String.IsNullOrWhiteSpace(ps))
                {
                    if (method == RequestMethod.GET)
                    {
                        target += "?" + ps;
                    }
                    if (method == RequestMethod.POST)
                    {
                        body = Encoding.ASCII.GetBytes(ps);
                    }
                }
                request = Http.CreateRequest(new Uri(target), method.ToString(), contentType: "application/x-www-form-urlencoded");
                request.Headers.Add("Authorization", "OAuth " + reg);
                var ret = Http.WebConnect <XDocument>(request,
                                                      responseconv: res =>
                {
                    switch (docType)
                    {
                    case DocumentTypes.Xml:
                        return(this.XDocumentGenerator(res));

                    case DocumentTypes.Json:
                        return(this.XDocumentGenerator(res, (s) => JsonReaderWriterFactory.CreateJsonReader(s, XmlDictionaryReaderQuotas.Max)));

                    default:
                        throw new NotSupportedException("Invalid format.");
                    }
                }, senddata: body);
                if (ret.Succeeded)
                {
                    return(ret.Data);
                }
                else
                {
                    if (ret.ThrownException != null)
                    {
                        throw ret.ThrownException;
                    }
                    else
                    {
                        throw new WebException();
                    }
                }
            }
            catch (WebException)
            {
                throw;
            }
            catch (XmlException)
            {
                throw;
            }
            catch (IOException)
            {
                throw;
            }
        }
Ejemplo n.º 8
0
        private void ProcessJsonFromPostRequest()
        {
            XmlReader reader =
                JsonReaderWriterFactory
                .CreateJsonReader(Encoding.UTF8.GetBytes(this.ResponseContent), new XmlDictionaryReaderQuotas());

            XElement root         = XElement.Load(reader);
            XElement postqueryElm = root.XPathSelectElement("//postquery");

            if (postqueryElm != null)
            {
                XElement elapsedTimeElm = postqueryElm.Element("ElapsedTime");
                if (elapsedTimeElm != null)
                {
                    this.QueryElapsedTime = elapsedTimeElm.Value;
                }

                XElement propertiesElm = postqueryElm.Element("Properties");
                if (propertiesElm != null && propertiesElm.HasElements)
                {
                    if (propertiesElm.Element("results") != null)
                    {
                        foreach (var item in propertiesElm.Element("results").Elements("item"))
                        {
                            if (item != null && item.Element("Key") != null)
                            {
                                if (item.Element("Key").Value == "SerializedQuery")
                                {
                                    this.SerializedQuery = item.Element("Value").Value;
                                }
                            }
                        }
                    }
                }

                #region Triggered Rules

                XElement triggeredRulesElm = postqueryElm.Element("TriggeredRules");
                if (triggeredRulesElm != null && triggeredRulesElm.HasElements)
                {
                    if (triggeredRulesElm.Element("results") != null)
                    {
                        this.TriggeredRules = new List <string>();

                        foreach (var item in triggeredRulesElm.Element("results").Elements("item"))
                        {
                            this.TriggeredRules.Add(item.Value);
                        }
                    }
                }

                #endregion

                #region Primary Query Results

                XElement primaryQueryResult = postqueryElm.Element("PrimaryQueryResult");
                if (primaryQueryResult != null)
                {
                    this.PrimaryQueryResult = new QueryResult();

                    if (primaryQueryResult.Element("QueryId") != null)
                    {
                        this.PrimaryQueryResult.QueryId = (string)primaryQueryResult.Element("QueryId");
                    }

                    if (primaryQueryResult.Element("QueryRuleId") != null)
                    {
                        this.PrimaryQueryResult.QueryRuleId = (string)primaryQueryResult.Element("QueryRuleId");
                    }

                    #region Relevant Results

                    var relevantResults = primaryQueryResult.Element("RelevantResults");
                    if (relevantResults != null)
                    {
                        if (relevantResults.Element("TotalRows") != null)
                        {
                            this.PrimaryQueryResult.TotalRows = (int)relevantResults.Element("TotalRows");
                        }

                        if (relevantResults.Element("TotalRowsIncludingDuplicates") != null)
                        {
                            this.PrimaryQueryResult.TotalRowsIncludingDuplicates = (int)relevantResults.Element("TotalRowsIncludingDuplicates");
                        }

                        XElement queryMod = relevantResults.Descendants("Key").FirstOrDefault(e => e.Value == "QueryModification");
                        if (queryMod != null)
                        {
                            this.PrimaryQueryResult.QueryModification = queryMod.XPathSelectElement("..").Element("Value").Value;
                        }

                        var table = relevantResults.Element("Table");
                        if (table != null && table.HasElements)
                        {
                            var rows = table.Element("Rows");
                            if (rows != null && rows.Element("results") != null && rows.Element("results").HasElements)
                            {
                                List <ResultItem> resultItems = new List <ResultItem>();

                                var items = rows.Element("results").Elements("item");
                                foreach (var item in items)
                                {
                                    ResultItem resultItem = new ResultItem();

                                    if (item.Element("Cells") != null && item.Element("Cells").Element("results") != null &&
                                        item.Element("Cells").Element("results").HasElements)
                                    {
                                        var itemValues = item.Element("Cells").Element("results").Elements("item");
                                        foreach (var itemValue in itemValues)
                                        {
                                            resultItem.Add(itemValue.Element("Key").Value, itemValue.Element("Value").Value);
                                        }
                                    }

                                    resultItems.Add(resultItem);
                                }

                                this.PrimaryQueryResult.RelevantResults = resultItems;
                            }
                        }
                    }

                    #endregion

                    #region Refinement Results

                    var refinementResults = primaryQueryResult.Element("RefinementResults");
                    if (refinementResults != null)
                    {
                        var refiners = refinementResults.Element("Refiners");
                        if (refiners != null && refiners.HasElements)
                        {
                            var results = refiners.Element("results");
                            if (results != null && results.HasElements)
                            {
                                List <RefinerResult> refinerResults = new List <RefinerResult>();

                                var items = results.Elements("item");
                                foreach (var item in items)
                                {
                                    RefinerResult refinerResult = new RefinerResult();
                                    refinerResult.Name = (string)item.Element("Name");

                                    if (item.Element("Entries") != null && item.Element("Entries").Element("results") != null &&
                                        item.Element("Entries").Element("results").HasElements)
                                    {
                                        var entries = item.Element("Entries").Element("results").Elements("item");
                                        foreach (var entry in entries)
                                        {
                                            refinerResult.Add(new RefinementItem
                                            {
                                                Count = (long)entry.Element("RefinementCount"),
                                                Name  = (string)entry.Element("RefinementName"),
                                                Token = (string)entry.Element("RefinementToken"),
                                                Value = (string)entry.Element("RefinementValue"),
                                            });
                                        }
                                    }

                                    refinerResults.Add(refinerResult);
                                }

                                this.PrimaryQueryResult.RefinerResults = refinerResults;
                            }
                        }
                    }

                    #endregion
                }

                #endregion

                #region Secondary Query Results

                XElement secondaryQueryResults = postqueryElm.Element("SecondaryQueryResults");
                if (secondaryQueryResults != null && secondaryQueryResults.Element("results") != null)
                {
                    var resultsElm = secondaryQueryResults.Element("results");

                    if (resultsElm.HasElements)
                    {
                        this.SecondaryQueryResults = new List <QueryResult>();

                        var resultItems = resultsElm.Elements("item");
                        foreach (var resultItem in resultItems)
                        {
                            QueryResult secondaryQueryResult = new QueryResult();

                            if (resultItem.Element("QueryId") != null)
                            {
                                secondaryQueryResult.QueryId = (string)resultItem.Element("QueryId");
                            }

                            if (resultItem.Element("QueryRuleId") != null)
                            {
                                secondaryQueryResult.QueryRuleId = (string)resultItem.Element("QueryRuleId");
                            }

                            var relevantResults = resultItem.Element("RelevantResults");
                            if (relevantResults != null)
                            {
                                if (relevantResults.Element("TotalRows") != null)
                                {
                                    secondaryQueryResult.TotalRows = (int)relevantResults.Element("TotalRows");
                                }

                                if (relevantResults.Element("TotalRowsIncludingDuplicates") != null)
                                {
                                    secondaryQueryResult.TotalRowsIncludingDuplicates = (int)relevantResults.Element("TotalRowsIncludingDuplicates");
                                }

                                XElement queryMod = relevantResults.Descendants("Key").FirstOrDefault(e => e.Value == "QueryModification");
                                if (queryMod != null)
                                {
                                    secondaryQueryResult.QueryModification = queryMod.XPathSelectElement("..").Element("Value").Value;
                                }

                                var table = relevantResults.Element("Table");
                                if (table != null && table.HasElements)
                                {
                                    var rows = table.Element("Rows");
                                    if (rows != null && rows.Element("results") != null && rows.Element("results").HasElements)
                                    {
                                        List <ResultItem> resultRows = new List <ResultItem>();

                                        var items = rows.Element("results").Elements("item");
                                        foreach (var item in items)
                                        {
                                            ResultItem resultRow = new ResultItem();

                                            if (item.Element("Cells") != null && item.Element("Cells").Element("results") != null &&
                                                item.Element("Cells").Element("results").HasElements)
                                            {
                                                var itemValues = item.Element("Cells").Element("results").Elements("item");
                                                foreach (var itemValue in itemValues)
                                                {
                                                    resultRow.Add(itemValue.Element("Key").Value, itemValue.Element("Value").Value);
                                                }
                                            }

                                            resultRows.Add(resultRow);
                                        }

                                        secondaryQueryResult.RelevantResults = resultRows;
                                    }
                                }
                            }

                            this.SecondaryQueryResults.Add(secondaryQueryResult);
                        }
                    }
                }

                #endregion
            }
        }
Ejemplo n.º 9
0
        private void downloadHTMLPage()
        {
            List <string> thumbs   = new List <string>();
            string        htmlPage = "";
            string        str      = "";
            string        baseURL  = "//i.4cdn.org/" + getURL().Split('/')[3] + "/";
            string        JURL     = "http://a.4cdn.org/" + getURL().Split('/')[3] + "/thread/" + getURL().Split('/')[5] + ".json";

            try
            {
                //Add a UserAgent to prevent 403
                WebClient web = new WebClient();
                web.Headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0";

                htmlPage = web.DownloadString(getURL());

                //Prevent the html from being destroyed by the anti adblock script
                htmlPage = htmlPage.Replace("f=\"to\"", "f=\"penis\"");

                string json  = web.DownloadString(JURL);
                byte[] bytes = Encoding.ASCII.GetBytes(json);
                using (var stream = new MemoryStream(bytes))
                {
                    var quotas     = new XmlDictionaryReaderQuotas();
                    var jsonReader = JsonReaderWriterFactory.CreateJsonReader(stream, quotas);
                    var xml        = XDocument.Load(jsonReader);
                    str = xml.ToString();
                }

                XmlDocument doc = new XmlDocument();
                doc.LoadXml(str);
                XmlNodeList xmlTim = doc.DocumentElement.SelectNodes("/root/posts/item/tim");
                XmlNodeList xmlExt = doc.DocumentElement.SelectNodes("/root/posts/item/ext");

                for (int i = 0; i < xmlExt.Count; i++)
                {
                    string old = baseURL + xmlTim[i].InnerText + xmlExt[i].InnerText;
                    string rep = xmlTim[i].InnerText + xmlExt[i].InnerText;
                    htmlPage = htmlPage.Replace(old, rep);

                    //Save thumbs for files that need it
                    if (rep.Split('.')[1] == "webm" /*|| rep.Split('.')[1] == ""*/)
                    {
                        old = "//t.4cdn.org/" + getURL().Split('/')[3] + "/" + xmlTim[i].InnerText + "s.jpg";
                        thumbs.Add("http:" + old);

                        htmlPage = htmlPage.Replace("//i.4cdn.org/" + getURL().Split('/')[3] + "/" + xmlTim[i].InnerText, "thumb/" + xmlTim[i].InnerText);
                    }
                    else
                    {
                        string thumbName = rep.Split('.')[0] + "s";
                        htmlPage = htmlPage.Replace(thumbName + ".jpg", rep.Split('.')[0] + "." + rep.Split('.')[1]);
                        htmlPage = htmlPage.Replace("/" + thumbName, thumbName);

                        htmlPage = htmlPage.Replace("//i.4cdn.org/" + getURL().Split('/')[3] + "/" + xmlTim[i].InnerText, xmlTim[i].InnerText);
                    }

                    htmlPage = htmlPage.Replace("//is2.4chan.org/" + getURL().Split('/')[3] + "/" + xmlTim[i].InnerText, xmlTim[i].InnerText);
                    htmlPage = htmlPage.Replace("/" + rep, rep);
                }

                htmlPage = htmlPage.Replace("=\"//", "=\"http://");

                //Save thumbs for files that need it
                for (int i = 0; i < thumbs.Count; i++)
                {
                    General.DownloadToDir(thumbs[i], SaveTo + "\\thumb");
                }

                if (!string.IsNullOrWhiteSpace(htmlPage))
                {
                    File.WriteAllText(SaveTo + "\\Thread.html", htmlPage);
                }
            }
            catch
            {
                throw;
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Called during deserialization to read an object of the specified <paramref name="type"/>
        /// from the specified <paramref name="readStream"/>.
        /// </summary>
        /// <param name="type">The type of object to read.</param>
        /// <param name="readStream">The <see cref="Stream"/> from which to read.</param>
        /// <param name="content">The <see cref="HttpContent"/> for the content being written.</param>
        /// <param name="formatterLogger">The <see cref="IFormatterLogger"/> to log events to.</param>
        /// <returns>A <see cref="Task"/> whose result will be the object instance that has been read.</returns>
        public override Task <object> ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)
        {
            if (type == null)
            {
                throw Error.ArgumentNull("type");
            }

            if (readStream == null)
            {
                throw Error.ArgumentNull("readStream");
            }

            return(TaskHelpers.RunSynchronously <object>(() =>
            {
                HttpContentHeaders contentHeaders = content == null ? null : content.Headers;

                // If content length is 0 then return default value for this type
                if (contentHeaders != null && contentHeaders.ContentLength == 0)
                {
                    return GetDefaultValueForType(type);
                }

                // Get the character encoding for the content
                Encoding effectiveEncoding = SelectCharacterEncoding(contentHeaders);

                try
                {
                    if (UseDataContractJsonSerializer)
                    {
                        DataContractJsonSerializer dataContractSerializer = GetDataContractSerializer(type);
                        using (XmlReader reader = JsonReaderWriterFactory.CreateJsonReader(new NonClosingDelegatingStream(readStream), effectiveEncoding, _readerQuotas, null))
                        {
                            return dataContractSerializer.ReadObject(reader);
                        }
                    }
                    else
                    {
                        using (JsonTextReader jsonTextReader = new JsonTextReader(new StreamReader(readStream, effectiveEncoding))
                        {
                            CloseInput = false, MaxDepth = _maxDepth
                        })
                        {
                            JsonSerializer jsonSerializer = JsonSerializer.Create(_jsonSerializerSettings);
                            if (formatterLogger != null)
                            {
                                // Error must always be marked as handled
                                // Failure to do so can cause the exception to be rethrown at every recursive level and overflow the stack for x64 CLR processes
                                jsonSerializer.Error += (sender, e) =>
                                {
                                    Exception exception = e.ErrorContext.Error;
                                    formatterLogger.LogError(e.ErrorContext.Path, exception);
                                    e.ErrorContext.Handled = true;
                                };
                            }
                            return jsonSerializer.Deserialize(jsonTextReader, type);
                        }
                    }
                }
                catch (Exception e)
                {
                    if (formatterLogger == null)
                    {
                        throw;
                    }
                    formatterLogger.LogError(String.Empty, e);
                    return GetDefaultValueForType(type);
                }
            }));
        }
        private string MessageToString(ref Message message, bool isRequest)
        {
            WebContentFormat    messageFormat = this.GetMessageContentFormat(message);
            MemoryStream        ms            = new MemoryStream();
            XmlDictionaryWriter writer        = null;

            switch (messageFormat)
            {
            case WebContentFormat.Default:
            case WebContentFormat.Xml:
                writer = XmlDictionaryWriter.CreateTextWriter(ms);
                break;

            case WebContentFormat.Json:
                writer = JsonReaderWriterFactory.CreateJsonWriter(ms);
                break;

            case WebContentFormat.Raw:
                return(CreateRawResponse(ref message));
            }

            message.WriteMessage(writer);
            writer.Flush();
            string messageBody = Encoding.UTF8.GetString(ms.ToArray());

            // Here would be a good place to change the message body, if so desired.

            // now that the message was read, it needs to be recreated.
            ms.Position = 0;

            // if the message body was modified, needs to reencode it, as show below
            // ms = new MemoryStream(Encoding.UTF8.GetBytes(messageBody));

            XmlDictionaryReader reader;
            XmlDictionaryReader xreader;

            //parse request - find field and its value
            if (messageFormat == WebContentFormat.Json)
            {
                xreader = JsonReaderWriterFactory.CreateJsonReader(ms, XmlDictionaryReaderQuotas.Max);
            }
            else
            {
                xreader = XmlDictionaryReader.CreateTextReader(ms, XmlDictionaryReaderQuotas.Max);
            }

            this.ParseRequest(xreader);
            ms.Position = 0;

            if (messageFormat == WebContentFormat.Json)
            {
                reader = JsonReaderWriterFactory.CreateJsonReader(ms, XmlDictionaryReaderQuotas.Max);
            }
            else
            {
                reader = XmlDictionaryReader.CreateTextReader(ms, XmlDictionaryReaderQuotas.Max);
            }

            Message newMessage = Message.CreateMessage(reader, int.MaxValue, message.Version);

            newMessage.Properties.CopyProperties(message.Properties);
            newMessage.Headers.CopyHeadersFrom(message.Headers);
            message = newMessage;

            return(messageBody);
        }
Ejemplo n.º 12
0
 /// <summary>Creates an instance from a given stream and source uri</summary>
 public ComposerFile(Stream input, string sourceUri = "(stream)")
 {
     this.input = JsonReaderWriterFactory.CreateJsonReader(input, new XmlDictionaryReaderQuotas());
     SourceUri  = sourceUri;
 }
        public static bool FilesViaCloud(string[] localfilepaths, string usertoken, string lcid, string desturl)
        {
            /* 1. open a session
             * DL20180917DSSD */
            var command = String.Format("{0}/svc/endpoints/mobile/mobile.aspx?platform={1}&lcid={2}&verb={3}&token={4}&nonce={5}",
                                        desturl,
                                        "sherm",
                                        lcid,
                                        "CAN_HAS_SESSION",
                                        usertoken,
                                        Guid.NewGuid().ToString("N").ToLowerInvariant()
                                        );

            try
            {
                sherm.core.mobile.model.Session session;
                string connraw;
                using (var wc = new HttpClient())
                {
                    var tconnraw = wc.GetStringAsync(command);
                    tconnraw.Wait();
                    connraw = tconnraw.Result;
                    if (connraw.StartsWith(TransmissionConstants.cstNOK))
                    {
                        throw new UnauthorizedAccessException(String.Format("Could not connect to \"{0}\" using token \"{1}\".", desturl, usertoken));
                    }
                }
                using (var reader = JsonReaderWriterFactory.CreateJsonReader(System.Text.UTF8Encoding.UTF8.GetBytes(connraw), new System.Xml.XmlDictionaryReaderQuotas {
                }))
                {
                    var js = new DataContractJsonSerializer(typeof(sherm.core.mobile.model.SessionRoot));
                    var sr = (sherm.core.mobile.model.SessionRoot)js.ReadObject(reader);
                    session = sr.session;
                }
                if (String.IsNullOrEmpty(session.sessionid))
                {
                    /* could not obtain the session */
                    LastTransmissionError = String.Format(@"Failed to create a session on ""{0}""", desturl);
                    return(false);
                }
                else
                {
                    /* 2. transmit all files that are in this subqueue */
                    foreach (var file in localfilepaths)
                    {
                        var postableurl = String.Format("{0}/svc/endpoints/mobile/mobile.aspx", desturl);
                        var xmr         = TransmitSingleFile(session, postableurl, file);
                        if (xmr.outcome == TransmissionConstants.cstOK)
                        {
                            /* coming this far means no more error */
                            LastTransmissionError = null;
                        }
                        else
                        {
                            LastTransmissionError = String.Format(@"Failed to transmit the ""{0}"" file to ""{1}""", file, desturl);
                        }
                    }
                    /* 3. close the session */
                    command = String.Format("{0}/svc/endpoints/mobile/mobile.aspx?platform={1}&lcid={2}&verb={3}&session={4}&nonce={5}",
                                            desturl,
                                            "shermios",
                                            lcid,
                                            "KTHXBYE",
                                            session.sessionid,
                                            Guid.NewGuid().ToString("N").ToLowerInvariant()
                                            );
                    using (var wc = new HttpClient())
                    {
                        var tbye = wc.GetStringAsync(command);
                        tbye.Wait();
                    }
                }
                /* succeeded */
                return(true);
            }
            catch (Exception ex)
            {
                LastTransmissionError        = ex.Message;
                LastTransmissionErrorDetails = ex.ToString();
                return(false);
            }
        }
 public void ConstructorNullEncodingAndReaderClose()
 {
     JsonReaderWriterFactory.CreateJsonReader(GetInput("{}"), null, new XmlDictionaryReaderQuotas(), null);
 }
Ejemplo n.º 15
0
        /// <summary>
        /// makes HTTP call to Twitter API
        /// </summary>
        /// <param name="url">URL with all query info</param>
        /// <param name="reqProc">Request Processor for Async Results</param>
        /// <returns>XML Respose from Twitter</returns>
        public string QueryTwitter <T>(string url, IRequestProcessor <T> reqProc)
        {
            //Log
            WriteLog(url, "QueryTwitter");

            var    uri         = new Uri(url);
            string responseXml = string.Empty;
            string httpStatus  = string.Empty;

            try
            {
                this.LastUrl = uri.AbsoluteUri;
                var req = this.AuthorizedClient.Get(url);

#if SILVERLIGHT
                var reqEx = req as HttpWebRequest;

                reqEx.BeginGetResponse(
                    new AsyncCallback(
                        ar =>
                {
                    var res = reqEx.EndGetResponse(ar) as HttpWebResponse;
                    //httpStatus = res.Headers["Status"];
                    responseXml          = GetTwitterResponse(res);
                    List <T> responseObj = reqProc.ProcessResults(responseXml);
                    (AsyncCallback as Action <IEnumerable <T> >)(responseObj);
                }), null);
#else
                Exception asyncException = null;

                var resetEvent = new ManualResetEvent(initialState: false);

                req.BeginGetResponse(
                    new AsyncCallback(
                        ar =>
                {
                    try
                    {
                        var res     = req.EndGetResponse(ar) as HttpWebResponse;
                        httpStatus  = res.Headers["Status"];
                        responseXml = GetTwitterResponse(res);
                    }
                    catch (Exception ex)
                    {
                        asyncException = ex;
                    }
                    finally
                    {
                        resetEvent.Set();
                    }
                }), null);

                resetEvent.WaitOne();

                if (asyncException != null)
                {
                    throw asyncException;
                }
#endif
            }
            catch (WebException wex)
            {
                var twitterQueryEx = CreateTwitterQueryException(wex);
                throw twitterQueryEx;
            }

            if (uri.LocalPath.EndsWith("json"))
            {
                var stream = new MemoryStream(Encoding.UTF8.GetBytes(responseXml));
                XmlDictionaryReader reader = JsonReaderWriterFactory.CreateJsonReader(stream, XmlDictionaryReaderQuotas.Max);

                var doc = XDocument.Load(reader);
                responseXml = doc.ToString();
            }

#if !SILVERLIGHT
            CheckResultsForTwitterError(responseXml, httpStatus);
#endif

            return(responseXml);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Runs a single test. Error messages are displayed to Console.Error, and the return value indicates
        /// general success/failure.
        /// </summary>
        public static bool RunTest(string typeName, string file, byte[] inputData)
        {
            WriteLine("Benchmarking {0} with file {1}", typeName, file);
            IMessage defaultMessage;

            try
            {
                defaultMessage = MessageUtil.GetDefaultMessage(typeName);
            }
            catch (ArgumentException e)
            {
                Console.Error.WriteLine(e.Message);
                return(false);
            }
            try
            {
                ExtensionRegistry registry = ExtensionRegistry.Empty;
                inputData = inputData ?? File.ReadAllBytes(file);
                MemoryStream inputStream   = new MemoryStream(inputData);
                ByteString   inputString   = ByteString.CopyFrom(inputData);
                IMessage     sampleMessage =
                    defaultMessage.WeakCreateBuilderForType().WeakMergeFrom(inputString, registry).WeakBuild();

                IDictionary <string, object> dictionary = null;
                byte[] jsonBytes = null, xmlBytes = null; /*no pun intended, well... maybe for xml*/
                if (OtherFormats)
                {
                    using (MemoryStream temp = new MemoryStream())
                    {
                        XmlFormatWriter.CreateInstance(temp).WriteMessage(sampleMessage);
                        xmlBytes = temp.ToArray();
                    }
                    using (MemoryStream temp = new MemoryStream())
                    {
                        JsonFormatWriter.CreateInstance(temp).WriteMessage(sampleMessage);
                        jsonBytes = temp.ToArray();
                    }
                    dictionary = new Dictionary <string, object>(StringComparer.Ordinal);
                    new DictionaryWriter(dictionary).WriteMessage(sampleMessage);
                }

                //Serializers
                if (!FastTest)
                {
                    RunBenchmark("Serialize to byte string", inputData.Length, () => sampleMessage.ToByteString());
                }
                RunBenchmark("Serialize to byte array", inputData.Length, () => sampleMessage.ToByteArray());
                if (!FastTest)
                {
                    RunBenchmark("Serialize to memory stream", inputData.Length,
                                 () => sampleMessage.WriteTo(new MemoryStream()));
                }

                if (OtherFormats)
                {
                    RunBenchmark("Serialize to xml", xmlBytes.Length,
                                 () =>
                    {
                        XmlFormatWriter.CreateInstance(new MemoryStream(), Encoding.UTF8).WriteMessage(sampleMessage);
                    });
                    RunBenchmark("Serialize to json", jsonBytes.Length,
                                 () => { JsonFormatWriter.CreateInstance().WriteMessage(sampleMessage); });
                    RunBenchmark("Serialize to json via xml", jsonBytes.Length,
                                 () =>
                                 XmlFormatWriter.CreateInstance(
                                     JsonReaderWriterFactory.CreateJsonWriter(new MemoryStream(), Encoding.UTF8))
                                 .SetOptions(XmlWriterOptions.OutputJsonTypes)
                                 .WriteMessage(sampleMessage)
                                 );

                    RunBenchmark("Serialize to dictionary", sampleMessage.SerializedSize,
                                 () => new DictionaryWriter().WriteMessage(sampleMessage));
                }
                //Deserializers
                if (!FastTest)
                {
                    RunBenchmark("Deserialize from byte string", inputData.Length,
                                 () => defaultMessage.WeakCreateBuilderForType()
                                 .WeakMergeFrom(inputString, registry)
                                 .WeakBuild()
                                 );
                }

                RunBenchmark("Deserialize from byte array", inputData.Length,
                             () => defaultMessage.WeakCreateBuilderForType()
                             .WeakMergeFrom(CodedInputStream.CreateInstance(inputData), registry)
                             .WeakBuild()
                             );
                if (!FastTest)
                {
                    RunBenchmark("Deserialize from memory stream", inputData.Length,
                                 () =>
                    {
                        inputStream.Position = 0;
                        defaultMessage.WeakCreateBuilderForType().WeakMergeFrom(
                            CodedInputStream.CreateInstance(inputStream), registry)
                        .WeakBuild();
                    });
                }

                if (OtherFormats)
                {
                    RunBenchmark("Deserialize from xml", xmlBytes.Length,
                                 () =>
                                 XmlFormatReader.CreateInstance(xmlBytes).Merge(
                                     defaultMessage.WeakCreateBuilderForType()).WeakBuild());
                    RunBenchmark("Deserialize from json", jsonBytes.Length,
                                 () =>
                                 JsonFormatReader.CreateInstance(jsonBytes).Merge(
                                     defaultMessage.WeakCreateBuilderForType()).WeakBuild());
                    RunBenchmark("Deserialize from json via xml", jsonBytes.Length,
                                 () =>
                                 XmlFormatReader.CreateInstance(JsonReaderWriterFactory.CreateJsonReader(jsonBytes, XmlDictionaryReaderQuotas.Max))
                                 .SetOptions(XmlReaderOptions.ReadNestedArrays).Merge(
                                     defaultMessage.WeakCreateBuilderForType()).WeakBuild());

                    RunBenchmark("Deserialize from dictionary", sampleMessage.SerializedSize,
                                 () =>
                                 new DictionaryReader(dictionary).Merge(defaultMessage.WeakCreateBuilderForType()).
                                 WeakBuild());
                }
                WriteLine(String.Empty);
                return(true);
            }
            catch (Exception e)
            {
                Console.Error.WriteLine("Error: {0}", e.Message);
                Console.Error.WriteLine();
                Console.Error.WriteLine("Detailed exception information: {0}", e);
                return(false);
            }
        }
Ejemplo n.º 17
0
        internal static DeviceInfo ParseDeviceInfo(string deviceJsonText, out string[] errors, out XElement systemInfoElement, out List <GraphicsTypeElement> graphicsTypeElements)
        {
            var errorList = new List <string>();

            graphicsTypeElements = new List <GraphicsTypeElement>();

            XElement   root;
            DeviceInfo deviceInfo;

            try
            {
                root       = XElement.Load(JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(deviceJsonText), new XmlDictionaryReaderQuotas()));
                deviceInfo = JsonUtility.FromJson <DeviceInfo>(deviceJsonText);
            }
            catch (Exception)
            {
                errorList.Add("Failed parsing JSON. Make sure this is a valid JSON file.");
                errors            = errorList.ToArray();
                systemInfoElement = null;
                return(null);
            }

            var versionElement = root.Element("version");

            if (versionElement == null)
            {
                errorList.Add("Mandatory field [version] is missing");
            }
            else if (versionElement.Value != "1")
            {
                errorList.Add("[version] field is set to an unknown value. The newest version is 1");
            }

            var friendlyNameElement = root.Element("friendlyName");

            if (friendlyNameElement == null)
            {
                errorList.Add("Mandatory field [friendlyName] is missing");
            }
            else if (string.IsNullOrEmpty(friendlyNameElement.Value))
            {
                errorList.Add("[friendlyName] field is empty, which is not allowed");
            }

            systemInfoElement = root.Element("systemInfo");
            if (systemInfoElement == null)
            {
                errorList.Add("Mandatory field [systemInfo] is missing");
            }
            else
            {
                var operatingSystemElement = systemInfoElement.Element("operatingSystem");
                if (operatingSystemElement == null)
                {
                    errorList.Add("Mandatory field [systemInfo -> operatingSystem] is missing. [operatingSystem] must be set to a string containing either <android> or <ios>");
                }
                else if (!operatingSystemElement.Value.ToLower().Contains("android") && !operatingSystemElement.Value.ToLower().Contains("ios"))
                {
                    errorList.Add("[systemInfo -> operatingSystem] field must be set to a string containing either <android> or <ios>, other platforms are not supported at the moment");
                }

                var graphicsSystemInfoArray = systemInfoElement.Element("graphicsDependentData");
                if (graphicsSystemInfoArray != null)
                {
                    var graphicsSystemInfo = graphicsSystemInfoArray.Elements("item").ToArray();
                    var graphicsTypes      = new HashSet <GraphicsDeviceType>();
                    for (int i = 0; i < graphicsSystemInfo.Length; i++)
                    {
                        var graphicsDeviceElement = graphicsSystemInfo[i].Element("graphicsDeviceType");
                        if (graphicsDeviceElement == null)
                        {
                            errorList.Add($"Mandatory field [systemInfo -> graphicsDependentData[{i}] -> graphicsDeviceType] is missing. [graphicsDependentData] must contain [graphicsDeviceType]");
                        }
                        else if (!int.TryParse(graphicsDeviceElement.Value, out var typeInt) || !Enum.IsDefined(typeof(GraphicsDeviceType), typeInt))
                        {
                            errorList.Add($"[systemInfo -> graphicsDependentData[{i}] -> graphicsDeviceType] is set to a value that could not be parsed as GraphicsDeviceType");
                        }
                        else
                        {
                            var type = deviceInfo.systemInfo.graphicsDependentData[i].graphicsDeviceType;
                            if (graphicsTypes.Contains(type))
                            {
                                errorList.Add($"Multiple [systemInfo -> graphicsDependentData] fields have the same GraphicsDeviceType {type}.");
                            }
                            else
                            {
                                graphicsTypes.Add(type);
                            }
                            graphicsTypeElements.Add(new GraphicsTypeElement {
                                element = graphicsSystemInfo[i], type = type
                            });
                        }
                    }
                }
            }

            var screensElement = root.Element("screens");

            if (screensElement == null)
            {
                errorList.Add("Mandatory field [screens] is missing. [screens] array must contain at least one screen");
            }
            else
            {
                var screenElements = screensElement.Elements("item").ToArray();
                if (!screenElements.Any())
                {
                    errorList.Add("[screens] array must contain at least one screen");
                }
                else
                {
                    for (var i = 0; i < screenElements.Length; i++)
                    {
                        var screen = deviceInfo.screens[i];
                        if (screenElements[i].Element("width") == null)
                        {
                            errorList.Add($"Mandatory field [screens[{i}] -> width] is missing");
                        }
                        else if (screen.width < 4 || screen.width > 8192)
                        {
                            errorList.Add($"[screens[{i}] -> width] field is set to an incorrect value {screen.width}. Screen width must be larger than 4 and smaller than 8192.");
                        }
                        if (screenElements[i].Element("height") == null)
                        {
                            errorList.Add($"Mandatory field [screens[{i}] -> height] is missing");
                        }
                        else if (screen.height < 4 || screen.height > 8192)
                        {
                            errorList.Add($"[screens[{i}] -> height] field is set to an incorrect value {screen.height}. Screen height must be larger than 4 and smaller than 8192.");
                        }
                        if (screenElements[i].Element("dpi") == null)
                        {
                            errorList.Add($"Mandatory field [screens[{i}] -> dpi] is missing");
                        }
                        else if (screen.dpi < 0.0001f || screen.dpi > 10000f)
                        {
                            errorList.Add($"[screens[{i}] -> dpi] field is set to an incorrect value {screen.dpi}. Screen dpi must be larger than 0 and smaller than 10000.");
                        }
                    }
                }
            }

            errors = errorList.ToArray();
            return(errors.Length == 0 ? deviceInfo : null);
        }
Ejemplo n.º 18
0
        override public void download()
        {
            string[] URLs;
            string[] thumbs;
            string   strThumbs = "";
            string   website   = "";
            string   str;

            if (General.loadHTML)                                                       // if HTML download activated get HTML, thumbnails, do some magic
            {
                try {
                    website = new WebClient().DownloadString(this.getURL());

                    string JURL = this.getURL().Replace(".html", ".json");

                    string Content = new WebClient().DownloadString(JURL);

                    byte[] bytes = Encoding.ASCII.GetBytes(Content);
                    using (var stream = new MemoryStream(bytes)) {
                        var quotas     = new XmlDictionaryReaderQuotas();
                        var jsonReader = JsonReaderWriterFactory.CreateJsonReader(stream, quotas);
                        var xml        = XDocument.Load(jsonReader);
                        str = xml.ToString();
                    }

                    // get single images
                    XmlDocument doc = new XmlDocument();
                    doc.LoadXml(str);
                    XmlNodeList xmlTim = doc.DocumentElement.SelectNodes("/root/posts/item/tim");
                    XmlNodeList xmlExt = doc.DocumentElement.SelectNodes("/root/posts/item/ext");
                    for (int i = 0; i < xmlExt.Count; i++)
                    {
                        string ext = xmlExt[i].InnerText;
//                        if(ext == ".webm")
//                            ext = ".jpg";
                        strThumbs = strThumbs + "https://8ch.net/" + getURL().Split('/')[3] + "/thumb/" + xmlTim[i].InnerText + ext + "\n";

                        website = website.Replace("https://8ch.net/" + getURL().Split('/')[3] + "/thumb/" + xmlTim[i].InnerText + ext, "thumb/" + xmlTim[i].InnerText + ext);
                        website = website.Replace("=\"/" + getURL().Split('/')[3] + "/thumb/" + xmlTim[i].InnerText + ext, "=\"thumb/" + xmlTim[i].InnerText + ext);
                        website = website.Replace("=\"/" + getURL().Split('/')[3] + "/src/" + xmlTim[i].InnerText + ext, "=\"" + xmlTim[i].InnerText + ext);
                        website = website.Replace("https://8ch.net/" + getURL().Split('/')[3] + "/thumb/" + xmlTim[i].InnerText + ext, "thumb/" + xmlTim[i].InnerText + ext);
                        website = website.Replace("https://media.8ch.net/" + getURL().Split('/')[3] + "/thumb/" + xmlTim[i].InnerText + ext, "thumb/" + xmlTim[i].InnerText + ext);
                        website = website.Replace("https://media.8ch.net/" + getURL().Split('/')[3] + "/src/" + xmlTim[i].InnerText + ext, xmlTim[i].InnerText + ext);
                        website = website.Replace("https://8ch.net/" + getURL().Split('/')[3] + "/src/" + xmlTim[i].InnerText + ext, xmlTim[i].InnerText + ext);
                    }

                    // get images of posts with multiple images
                    xmlTim = doc.DocumentElement.SelectNodes("/root/posts/item/extra_files/item/tim");
                    xmlExt = doc.DocumentElement.SelectNodes("/root/posts/item/extra_files/item/ext");
                    for (int i = 0; i < xmlExt.Count; i++)
                    {
                        string ext = xmlExt[i].InnerText;
//                        if(ext == ".webm")
//                            ext = ".jpg";
                        strThumbs = strThumbs + "https://8ch.net/" + getURL().Split('/')[3] + "/thumb/" + xmlTim[i].InnerText + ext + "\n";

                        website = website.Replace("https://8ch.net/" + getURL().Split('/')[3] + "/thumb/" + xmlTim[i].InnerText + ext, "thumb/" + xmlTim[i].InnerText + ext);
                        website = website.Replace("=\"/" + getURL().Split('/')[3] + "/thumb/" + xmlTim[i].InnerText + ext, "=\"thumb/" + xmlTim[i].InnerText + ext);
                        website = website.Replace("=\"/" + getURL().Split('/')[3] + "/src/" + xmlTim[i].InnerText + ext, "=\"" + xmlTim[i].InnerText + ext);

                        website = website.Replace("https://8ch.net/" + getURL().Split('/')[3] + "/thumb/" + xmlTim[i].InnerText + ext, "thumb/" + xmlTim[i].InnerText + ext);
                        website = website.Replace("https://media.8ch.net/" + getURL().Split('/')[3] + "/thumb/" + xmlTim[i].InnerText + ext, "thumb/" + xmlTim[i].InnerText + ext);
                        website = website.Replace("https://media.8ch.net/" + getURL().Split('/')[3] + "/src/" + xmlTim[i].InnerText + ext, xmlTim[i].InnerText + ext);
                        website = website.Replace("https://8ch.net/" + getURL().Split('/')[3] + "/src/" + xmlTim[i].InnerText + ext, xmlTim[i].InnerText + ext);
                    }

                    website = website.Replace("=\"/", "=\"https://8ch.net/");


                    if (!Directory.Exists(this.SaveTo))
                    {
                        Directory.CreateDirectory(this.SaveTo);
                    }

                    thumbs = strThumbs.Split('\n');

                    for (int i = 0; i < thumbs.Length - 1; i++)
                    {
                        General.dlTo(thumbs[i], this.SaveTo + "\\thumb");
                    }
                } catch (WebException webEx) {
                    // I think I should handle this
                }
                if (website != "")
                {
                    if (!Directory.Exists(this.SaveTo))
                    {
                        Directory.CreateDirectory(this.SaveTo);
                    }
                    File.WriteAllText(this.SaveTo + "\\Thread.html", website); // save thread
                }
            }

            try {
                URLs = Regex.Split(getLinks(), "\n");
            } catch (WebException webEx) {
                if (((int)webEx.Status) == 7)
                {
                    this.Gone = true;
                }
                return;
            }

            for (int y = 0; y < URLs.Length - 1; y++)
            {
                General.dlTo(URLs[y], this.SaveTo);                         // download images
            }
        }
Ejemplo n.º 19
0
        override protected string getLinks()
        {
            string      exed    = "";
            string      JSONUrl = "http://a.4cdn.org/" + getURL().Split('/')[3] + "/thread/" + getURL().Split('/')[5] + ".json";
            string      baseURL = "http://i.4cdn.org/" + getURL().Split('/')[3] + "/";
            string      str     = "";
            XmlNodeList xmlTim;
            XmlNodeList xmlExt;
            XmlNodeList xmlFilename;

            try {
                string Content;
                using (WebClient wc = new WebClient()){
                    wc.Headers.Add("User-Agent: " + Adv.Default.UserAgent);
                    Content = wc.DownloadString(JSONUrl);
                }

                byte[] bytes = Encoding.ASCII.GetBytes(Content);
                using (var stream = new MemoryStream(bytes)) {
                    var quotas     = new XmlDictionaryReaderQuotas();
                    var jsonReader = JsonReaderWriterFactory.CreateJsonReader(stream, quotas);
                    var xml        = XDocument.Load(jsonReader);
                    str = xml.ToString();
                    stream.Flush();
                    stream.Close();
                }

                XmlDocument doc = new XmlDocument();
                doc.LoadXml(str);
                if (getURL().Split('/')[3] == "f")
                {
                    xmlTim = doc.DocumentElement.SelectNodes("/root/posts/item/filename");
                }
                else
                {
                    xmlTim = doc.DocumentElement.SelectNodes("/root/posts/item/tim");
                }

                xmlFilename = doc.DocumentElement.SelectNodes("/root/posts/item/filename");

                xmlExt = doc.DocumentElement.SelectNodes("/root/posts/item/ext");
                for (int i = 0; i < xmlExt.Count; i++)
                {
                    exed = exed + baseURL + xmlTim[i].InnerText + xmlExt[i].InnerText + "\n";
                    // MessageBox.Show(exed);
                }

                return(exed);
            }
            catch (WebException webEx) {
                if (((int)webEx.Status) == 7)
                {
                    this.Gone = true;
                }
                else
                {
                    ErrorLog.reportWebError(webEx);
                }
                throw webEx;
            }
            catch (Exception ex) {
                ErrorLog.reportError(ex.ToString()); throw ex;
            }
        }
Ejemplo n.º 20
0
        private static void uploadFile(string filename)
        {
            WebClient myWebClient = new WebClient();
            string    responseStr;

            byte[] responseArray;
            bool   expectArray = true;
            string hash        = md5file(filename);

            try
            {
                if (fileExists(hash))
                {
                    //MessageBox.Show(baseURL + "/api/file/" + hash);
                    Stream stream = openRead(baseURL + "/api/file/" + hash);
                    responseArray = readStreamFully(stream);
                    expectArray   = false;
                }
                else
                {
                    responseArray = myWebClient.UploadFile(baseURL + "/api/upload" + (accessKey != "" ? "?accessKey=" + accessKey : ""), filename);
                }
            }
            catch (WebException wex)
            {
                if (((HttpWebResponse)wex.Response).StatusCode == HttpStatusCode.Forbidden)
                {
                    string key = promptForText("Access Key", "Permission denied. Please enter access key.");
                    if (key != "")
                    {
                        accessKey = key;
                        uploadFile(filename);
                    }
                }
                else
                {
                    MessageBox.Show("Error: " + wex.ToString());
                }
                return;
            }

            responseStr = System.Text.Encoding.UTF8.GetString(responseArray);

            var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(responseStr), new System.Xml.XmlDictionaryReaderQuotas());

            // For that you will need to add reference to System.Xml and System.Xml.Linq
            var      root    = XElement.Load(jsonReader);
            XElement element = root.XPathSelectElement("//result");

            if (expectArray && element.Elements().Count() < 1)
            {
                MessageBox.Show("Cannot upload empty files");
                return;
            }

            XElement firstFile;

            if (expectArray)
            {
                firstFile = element.Elements().First();
            }
            else
            {
                firstFile = element;
            }
            string raw      = firstFile.Element("links").Element("raw").Value;
            string download = firstFile.Element("links").Element("download").Value;

            setClipboardText(download);

            Form prompt = new Form()
            {
                Width           = 450,
                Height          = 220,
                FormBorderStyle = FormBorderStyle.FixedDialog,
                Text            = "File Drop",
                StartPosition   = FormStartPosition.CenterScreen
            };

            Label textLabelDownload = new Label()
            {
                Left = 10, Top = 20, Text = "Download:"
            };
            TextBox textBoxDownload = new TextBox()
            {
                Left = 10, Top = 40, Width = 400, Text = download
            };

            Label textLabelRaw = new Label()
            {
                Left = 10, Top = 70, Text = "Raw:"
            };
            TextBox textBoxRaw = new TextBox()
            {
                Left = 10, Top = 90, Width = 400, Text = raw
            };

            Label textLabelClipboardNotice = new Label()
            {
                Left = 10, Top = 120, Width = 400, Text = "Note: Download link copied to clipboard!"
            };

            Button confirmation = new Button()
            {
                Text = "Ok", Left = 175, Width = 100, Top = 145, DialogResult = DialogResult.OK
            };

            confirmation.Click += (sender, e) => { prompt.Close(); };

            prompt.Controls.Add(textBoxDownload);
            prompt.Controls.Add(textLabelDownload);
            prompt.Controls.Add(textBoxRaw);
            prompt.Controls.Add(textLabelRaw);
            prompt.Controls.Add(textLabelClipboardNotice);
            prompt.Controls.Add(confirmation);

            prompt.AcceptButton = confirmation;

            prompt.ShowDialog();
        }
Ejemplo n.º 21
0
        public static WeatherIndex GetIndex(string area)
        {
            WeatherIndex i = new WeatherIndex();

            try
            {
                string json = GetJson(area, "index");
                if (!json.Equals(string.Empty) && !json.Contains("error data"))
                {
                    XmlDictionaryReader reader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(json), XmlDictionaryReaderQuotas.Max);
                    XmlDocument         xdoc   = new XmlDocument();
                    xdoc.Load(reader);
                    Log.WriteDebug(xdoc.InnerText);

                    #region 输出完整的XML,分析格式
                    //StringWriter stringWriter = new StringWriter();
                    //XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter);
                    //xmlTextWriter.Formatting = Formatting.Indented;
                    //foreach (XmlNode xmlNode in xdoc)
                    //{
                    //    xmlNode.WriteTo(xmlTextWriter);
                    //}

                    //Log.WriteLog(stringWriter.ToString());
                    #endregion

                    #region 用xml解析json,并为相关的成员变量赋值
                    try
                    {
                        ///获取到的属性信息
                        XmlNode clIndex = xdoc.FirstChild.SelectSingleNode("i").FirstChild;

                        i.cl        = clIndex.SelectSingleNode("i1").InnerText;
                        i.clCN      = clIndex.SelectSingleNode("i2").InnerText;
                        i.clCNAlias = clIndex.SelectSingleNode("i3").InnerText;
                        i.clLevel   = clIndex.SelectSingleNode("i4").InnerText;
                        i.clDetails = clIndex.SelectSingleNode("i5").InnerText;

                        XmlNode coIndex = clIndex.NextSibling;
                        i.co        = coIndex.SelectSingleNode("i1").InnerText;
                        i.coCN      = coIndex.SelectSingleNode("i2").InnerText;
                        i.coCNAlias = coIndex.SelectSingleNode("i3").InnerText;
                        i.coLevel   = coIndex.SelectSingleNode("i4").InnerText;
                        i.coDetails = coIndex.SelectSingleNode("i5").InnerText;


                        XmlNode ctIndex = coIndex.NextSibling;
                        i.ct        = ctIndex.SelectSingleNode("i1").InnerText;
                        i.ctCN      = ctIndex.SelectSingleNode("i2").InnerText;
                        i.ctCNAlias = ctIndex.SelectSingleNode("i3").InnerText;
                        i.ctLevel   = ctIndex.SelectSingleNode("i4").InnerText;
                        i.ctDetails = ctIndex.SelectSingleNode("i5").InnerText;
                    }
                    catch (Exception ex)
                    {
                        Log.WriteError("GetIndex>>>>>" + ex.Message);
                    }
                    #endregion
                }
            }
            catch (Exception ex)
            {
                Log.WriteError("GetIndex错误>>>>>" + ex.Message);
            }
            return(i);
        }
Ejemplo n.º 22
0
        public void ChirpUserStream()
        {
            _thread = new Thread(() =>
            {
                while (true)
                {
                    try
                    {
                        DateTime time;

                        using (var reader = new StreamReader(FetchStream(OAuthBase.HttpVerbs.Get, "https://userstream.twitter.com/2/user.json", null, out time)))
                        {
                            _failureCount = 0;

                            while (!reader.EndOfStream)
                            {
                                var line = reader.ReadLine();

                                if (string.IsNullOrWhiteSpace(line))
                                {
                                    continue;
                                }

                                using (var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(line), XmlDictionaryReaderQuotas.Max))
                                {
                                    var element = XElement.Load(jsonReader);

                                    if (element.Element("delete") != null)
                                    {
                                        var status = new Status
                                        {
                                            Id = (ulong)element.Element("delete").Element("status").Element("id")
                                        };

                                        UserStreamUpdated(this, new StatusEventArgs(status)
                                        {
                                            Action = StatusAction.Deleted
                                        });
                                    }
                                    else if (element.Element("user") != null)
                                    {
                                        var status = new Status
                                        {
                                            Id        = (ulong)element.Element("id"),
                                            CreatedAt = DateTime.ParseExact(element.Element("created_at").Value, "ddd MMM dd HH:mm:ss zzzz yyyy", System.Globalization.DateTimeFormatInfo.InvariantInfo),
                                            Text      = element.Element("text").Value,
                                            Source    = element.Element("source").Value,
                                            Favorited = (bool)element.Element("favorited"),
                                            Sender    = new User
                                            {
                                                Id          = (int)element.Element("user").Element("id"),
                                                ScreenName  = element.Element("user").Element("screen_name").Value,
                                                Name        = element.Element("user").Element("name").Value,
                                                ImageUrl    = element.Element("user").Element("profile_image_url").Value,
                                                Description = element.Element("user").Element("description").Value,
                                                Protected   = (bool)element.Element("user").Element("protected"),
                                                Location    = element.Element("user").Element("location").Value,
                                            },
                                        };

                                        if (element.Element("retweeted_status") != null)
                                        {
                                            status.ReTweetedStatus = new Status
                                            {
                                                Id        = (ulong)element.Element("retweeted_status").Element("id"),
                                                CreatedAt = DateTime.ParseExact(element.Element("retweeted_status").Element("created_at").Value, "ddd MMM dd HH:mm:ss zzzz yyyy", System.Globalization.DateTimeFormatInfo.InvariantInfo),
                                                Text      = element.Element("retweeted_status").Element("text").Value,
                                                Source    = element.Element("retweeted_status").Element("source").Value,
                                                Favorited = (bool)element.Element("retweeted_status").Element("favorited"),
                                                Sender    = new User
                                                {
                                                    Id          = (int)element.Element("retweeted_status").Element("user").Element("id"),
                                                    ScreenName  = element.Element("retweeted_status").Element("user").Element("screen_name").Value,
                                                    Name        = element.Element("retweeted_status").Element("user").Element("name").Value,
                                                    ImageUrl    = element.Element("retweeted_status").Element("user").Element("profile_image_url").Value,
                                                    Description = element.Element("retweeted_status").Element("user").Element("description").Value,
                                                    Protected   = (bool)element.Element("retweeted_status").Element("user").Element("protected"),
                                                    Location    = element.Element("retweeted_status").Element("user").Element("location").Value,
                                                },
                                            };
                                        }

                                        if (!string.IsNullOrEmpty(element.Element("in_reply_to_status_id").Value))
                                        {
                                            status.InReplyToStatusId = (ulong)element.Element("in_reply_to_status_id");
                                        }

                                        if (!string.IsNullOrEmpty(element.Element("in_reply_to_user_id").Value))
                                        {
                                            status.InReplyToUserId = (int)element.Element("in_reply_to_user_id");
                                        }

                                        status.IsAuthor  = status.Sender.Id == LoginedUser.Id;
                                        status.IsMention = status.InReplyToUserId == LoginedUser.Id;

                                        UserStreamUpdated(this, new StatusEventArgs(status)
                                        {
                                            Action = StatusAction.Update
                                        });
                                    }
                                    else if (element.Element("event") != null)
                                    {
                                        if (element.Element("event").Value == "favorite")
                                        {
                                            var status = new Status
                                            {
                                                Id     = (ulong)element.Element("target_object").Element("id"),
                                                Sender = new User
                                                {
                                                    Id = (int)element.Element("source").Element("id")
                                                }
                                            };

                                            UserStreamUpdated(this, new StatusEventArgs(status)
                                            {
                                                Action = StatusAction.Favorited
                                            });
                                        }
                                        else if (element.Element("event").Value == "unfavorite")
                                        {
                                            var status = new Status
                                            {
                                                Id     = (ulong)element.Element("target_object").Element("id"),
                                                Sender = new User
                                                {
                                                    Id = (int)element.Element("source").Element("id")
                                                }
                                            };

                                            UserStreamUpdated(this, new StatusEventArgs(status)
                                            {
                                                Action = StatusAction.Unfavorited
                                            });
                                        }
                                    }
                                }
                            }
                        }

                        _failureCount = 1;
                    }
                    catch
                    {
                        _failureCount++;

                        if (_failureCount > 10)
                        {
                            _failureCount = 10;
                        }
                    }
                    finally
                    {
                        Thread.Sleep(1000 * (int)Math.Pow(_failureCount, _failureCount));
                    }
                }
            });

            _thread.IsBackground = true;

            _thread.Start();
        }
Ejemplo n.º 23
0
        public PowerBISettings(string settingsFilePath = null, PowerBIEnvironmentType targetEnvironmentType = PowerBIEnvironmentType.Public, bool refreshGlobalServiceConfig = false)
        {
            if (string.IsNullOrEmpty(settingsFilePath))
            {
                var executingDirectory = DirectoryUtility.GetExecutingDirectory();
                settingsFilePath = Path.Combine(executingDirectory, FileName);
            }

            if (!File.Exists(settingsFilePath))
            {
                throw new FileNotFoundException("Unable to find setting configuration", settingsFilePath);
            }

            PowerBIConfiguration configuration = null;

            using (var fileReader = File.OpenRead(settingsFilePath))
            {
                var serializer = new DataContractJsonSerializer(typeof(PowerBIConfiguration));
                using (var jsonReader = JsonReaderWriterFactory.CreateJsonReader(fileReader, Encoding.UTF8, XmlDictionaryReaderQuotas.Max, null))
                {
                    configuration = serializer.ReadObject(jsonReader) as PowerBIConfiguration;
                }
            }

            this.Settings = configuration.Settings;
            var targetEnvironment = configuration.Environments
                                    .FirstOrDefault(e => Enum.TryParse(e.Name, out PowerBIEnvironmentType result) && result == targetEnvironmentType);
            var globalServiceEndpoint = (targetEnvironment != null && targetEnvironment.GlobalService != null) ? targetEnvironment.GlobalService : "https://api.powerbi.com";

            var cloudEnvironments = GetGlobalServiceConfig(globalServiceEndpoint, enforceRefresh: refreshGlobalServiceConfig).Result;

            if (cloudEnvironments != null)
            {
                // Ignore non-valid environments
                var environments = configuration.Environments
                                   .Where(e => Enum.TryParse(e.Name, out PowerBIEnvironmentType result))
                                   .Select(e =>
                {
                    if (!string.IsNullOrEmpty(e.CloudName))
                    {
                        string cloudName     = e.CloudName;
                        var cloudEnvironment = cloudEnvironments.Environments.FirstOrDefault(c => c.CloudName.Equals(cloudName, StringComparison.OrdinalIgnoreCase));
                        if (cloudEnvironment == null)
                        {
                            throw new NotSupportedException($"Unable to find cloud name: {cloudName}");
                        }

                        var backendService = cloudEnvironment.Services.First(s => s.Name.Equals("powerbi-backend", StringComparison.OrdinalIgnoreCase));
                        var redirectApp    = cloudEnvironment.Clients.First(s => s.Name.Equals(e.RedirectApp, StringComparison.OrdinalIgnoreCase));
                        return(new PowerBIEnvironment()
                        {
                            Name = (PowerBIEnvironmentType)Enum.Parse(typeof(PowerBIEnvironmentType), e.Name),
                            AzureADAuthority = cloudEnvironment.Services.First(s => s.Name.Equals("aad", StringComparison.OrdinalIgnoreCase)).Endpoint,
                            AzureADClientId = redirectApp.AppId,
                            AzureADRedirectAddress = redirectApp.RedirectUri,
                            AzureADResource = backendService.ResourceId,
                            GlobalServiceEndpoint = backendService.Endpoint
                        });
                    }
                    else
                    {
                        // Debug environments
                        string cloudName     = "GlobalCloud";
                        var cloudEnvironment = cloudEnvironments.Environments.FirstOrDefault(c => c.CloudName.Equals(cloudName, StringComparison.OrdinalIgnoreCase));
                        if (cloudEnvironment == null)
                        {
                            throw new NotSupportedException($"Unable to find cloud name: {cloudName}");
                        }

                        var redirectApp = cloudEnvironment.Clients.First(s => s.Name.Equals(e.RedirectApp, StringComparison.OrdinalIgnoreCase));
                        return(new PowerBIEnvironment()
                        {
                            Name = (PowerBIEnvironmentType)Enum.Parse(typeof(PowerBIEnvironmentType), e.Name),
                            AzureADAuthority = e.Authority,
                            AzureADClientId = redirectApp.AppId,
                            AzureADRedirectAddress = redirectApp.RedirectUri,
                            AzureADResource = e.Resource,
                            GlobalServiceEndpoint = e.GlobalService
                        });
                    }
                })
                                   .Cast <IPowerBIEnvironment>().ToDictionary(e => e.Name, e => e);
                this.Environments = environments;
            }
        }
Ejemplo n.º 24
0
        private void downloadHTMLPage()
        {
            List <string> thumbs   = new List <string>();
            string        htmlPage = "";
            string        str;

            try
            {
                htmlPage = new WebClient().DownloadString(this.getURL());

                string JURL = this.getURL().Replace(".html", ".json");

                string Content = new WebClient().DownloadString(JURL);

                byte[] bytes = Encoding.ASCII.GetBytes(Content);
                using (var stream = new MemoryStream(bytes))
                {
                    var quotas     = new XmlDictionaryReaderQuotas();
                    var jsonReader = JsonReaderWriterFactory.CreateJsonReader(stream, quotas);
                    var xml        = XDocument.Load(jsonReader);
                    str = xml.ToString();
                }

                // get single images
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(str);
                XmlNodeList xmlTim = doc.DocumentElement.SelectNodes("/root/posts/item/tim");
                XmlNodeList xmlExt = doc.DocumentElement.SelectNodes("/root/posts/item/ext");
                for (int i = 0; i < xmlExt.Count; i++)
                {
                    string ext = xmlExt[i].InnerText;
                    //                        if(ext == ".webm")
                    //                            ext = ".jpg";
                    thumbs.Add("https://8ch.net/file_store/thumb/" + xmlTim[i].InnerText + ext);

                    htmlPage = htmlPage.Replace("https://8ch.net/file_store/thumb/" + xmlTim[i].InnerText + ext, "thumb/" + xmlTim[i].InnerText + ext);
                    htmlPage = htmlPage.Replace("=\"/file_store/thumb/" + xmlTim[i].InnerText + ext, "=\"thumb/" + xmlTim[i].InnerText + ext);
                    htmlPage = htmlPage.Replace("=\"/file_store/" + xmlTim[i].InnerText + ext, "=\"" + xmlTim[i].InnerText + ext);
                    htmlPage = htmlPage.Replace("https://media.8ch.net/file_store/thumb/" + xmlTim[i].InnerText + ext, "thumb/" + xmlTim[i].InnerText + ext);
                    htmlPage = htmlPage.Replace("https://media.8ch.net/file_store/" + xmlTim[i].InnerText + ext, xmlTim[i].InnerText + ext);
                    htmlPage = htmlPage.Replace("https://8ch.net/file_store/" + xmlTim[i].InnerText + ext, xmlTim[i].InnerText + ext);
                }

                // get images of posts with multiple images
                xmlTim = doc.DocumentElement.SelectNodes("/root/posts/item/extra_files/item/tim");
                xmlExt = doc.DocumentElement.SelectNodes("/root/posts/item/extra_files/item/ext");
                for (int i = 0; i < xmlExt.Count; i++)
                {
                    string ext = xmlExt[i].InnerText;
                    //                        if(ext == ".webm")
                    //                            ext = ".jpg";
                    thumbs.Add("https://8ch.net/file_store/thumb/" + xmlTim[i].InnerText + ext);

                    htmlPage = htmlPage.Replace("https://8ch.net/file_store/thumb/" + xmlTim[i].InnerText + ext, "thumb/" + xmlTim[i].InnerText + ext);
                    htmlPage = htmlPage.Replace("=\"/file_store/thumb/" + xmlTim[i].InnerText + ext, "=\"thumb/" + xmlTim[i].InnerText + ext);
                    htmlPage = htmlPage.Replace("=\"/file_store/" + xmlTim[i].InnerText + ext, "=\"" + xmlTim[i].InnerText + ext);
                    htmlPage = htmlPage.Replace("https://media.8ch.net/file_store/thumb/" + xmlTim[i].InnerText + ext, "thumb/" + xmlTim[i].InnerText + ext);
                    htmlPage = htmlPage.Replace("https://media.8ch.net/file_store/" + xmlTim[i].InnerText + ext, xmlTim[i].InnerText + ext);
                    htmlPage = htmlPage.Replace("https://8ch.net/file_store/" + xmlTim[i].InnerText + ext, xmlTim[i].InnerText + ext);
                }

                htmlPage = htmlPage.Replace("=\"/", "=\"https://8ch.net/");

                for (int i = 0; i < thumbs.Count; i++)
                {
                    General.DownloadToDir(new FileInformation(thumbs[i]), this.SaveTo + "\\thumb");
                }

                if (!String.IsNullOrWhiteSpace(htmlPage))
                {
                    File.WriteAllText(this.SaveTo + "\\Thread.html", htmlPage); // save thread
                }
            }
            catch
            {
                throw;
            }
        }
Ejemplo n.º 25
0
        static IEnumerable <string> GetModifiedFilesRemotely(Harness harness, int pull_request)
        {
            var path = Path.Combine(harness.LogDirectory, "pr" + pull_request + "-remote-files.log");

            if (!File.Exists(path))
            {
                Directory.CreateDirectory(harness.LogDirectory);
                using (var client = CreateClient()) {
                    var rv  = new List <string> ();
                    var url = $"https://api.github.com/repos/xamarin/xamarin-macios/pulls/{pull_request}/files?per_page=100";                     // 100 items per page is max
                    do
                    {
                        byte [] data;
                        try {
                            data = client.DownloadData(url);
                        } catch (WebException we) {
                            harness.Log("Could not load pull request files: {0}\n{1}", we, new StreamReader(we.Response.GetResponseStream()).ReadToEnd());
                            File.WriteAllText(path, string.Empty);
                            return(new string [] { });
                        }
                        var reader = JsonReaderWriterFactory.CreateJsonReader(data, new XmlDictionaryReaderQuotas());
                        var doc    = new XmlDocument();
                        doc.Load(reader);
                        foreach (XmlNode node in doc.SelectNodes("/root/item/filename"))
                        {
                            rv.Add(node.InnerText);
                        }

                        url = null;

                        var link = client.ResponseHeaders ["Link"];
                        try {
                            if (link != null)
                            {
                                var ltIdx = link.IndexOf('<');
                                var gtIdx = link.IndexOf('>', ltIdx + 1);
                                while (ltIdx >= 0 && gtIdx > ltIdx)
                                {
                                    var linkUrl = link.Substring(ltIdx + 1, gtIdx - ltIdx - 1);
                                    if (link [gtIdx + 1] != ';')
                                    {
                                        break;
                                    }
                                    var    commaIdx = link.IndexOf(',', gtIdx + 1);
                                    string rel;
                                    if (commaIdx != -1)
                                    {
                                        rel = link.Substring(gtIdx + 3, commaIdx - gtIdx - 3);
                                    }
                                    else
                                    {
                                        rel = link.Substring(gtIdx + 3);
                                    }

                                    if (rel == "rel=\"next\"")
                                    {
                                        url = linkUrl;
                                        break;
                                    }

                                    if (commaIdx == -1)
                                    {
                                        break;
                                    }

                                    ltIdx = link.IndexOf('<', commaIdx);
                                    gtIdx = link.IndexOf('>', ltIdx + 1);
                                }
                            }
                        } catch (Exception e) {
                            harness.Log("Could not paginate github response: {0}: {1}", link, e.Message);
                        }
                    } while (url != null);
                    File.WriteAllLines(path, rv.ToArray());
                    return(rv);
                }
            }

            return(File.ReadAllLines(path));
        }
        private string MessageToString(ref Message message)
        {
            WebContentFormat    messageFormat = this.GetMessageContentFormat(message);
            MemoryStream        ms            = new MemoryStream();
            XmlDictionaryWriter writer        = null;

            switch (messageFormat)
            {
            case WebContentFormat.Default:
                // If we can't determine the message body format, we should ignore message body instead of creating the instance of writer object.
                break;

            case WebContentFormat.Xml:
                writer = XmlDictionaryWriter.CreateTextWriter(ms);
                break;

            case WebContentFormat.Json:
                writer = JsonReaderWriterFactory.CreateJsonWriter(ms);
                break;

            case WebContentFormat.Raw:
                // special case for raw, easier implemented separately
                return(this.ReadRawBody(ref message));
            }

            // Message body can't be determined, so writer object will be null.
            if (writer == null)
            {
                return(string.Empty);
            }

            message.WriteMessage(writer);
            writer.Flush();
            string messageBody = Encoding.UTF8.GetString(ms.ToArray());

            // Here would be a good place to change the message body, if so desired.

            // now that the message was read, it needs to be recreated.
            ms.Position = 0;

            // if the message body was modified, needs to reencode it, as show below
            // ms = new MemoryStream(Encoding.UTF8.GetBytes(messageBody));

            XmlDictionaryReader reader;

            if (messageFormat == WebContentFormat.Json)
            {
                reader = JsonReaderWriterFactory.CreateJsonReader(ms, XmlDictionaryReaderQuotas.Max);
            }
            else
            {
                reader = XmlDictionaryReader.CreateTextReader(ms, XmlDictionaryReaderQuotas.Max);
            }

            Message newMessage = Message.CreateMessage(reader, int.MaxValue, message.Version);

            newMessage.Properties.CopyProperties(message.Properties);
            message = newMessage;

            return(messageBody);
        }
Ejemplo n.º 27
0
        private async Task <bool> CheckOnGithub()
        {
            try
            {
                //If the app was installed by Chocolatey, avoid this.
                if (AppDomain.CurrentDomain.BaseDirectory.EndsWith(@"Chocolatey\lib\screentogif\content\"))
                {
                    return(true);
                }

                #region GraphQL equivalent

                //query {
                //    repository(owner: "NickeManarin", name: "ScreenToGif") {
                //        releases(first: 1, orderBy: { field: CREATED_AT, direction: DESC}) {
                //            nodes {
                //                name
                //                tagName
                //                createdAt
                //                url
                //                isPrerelease
                //                description
                //                releaseAssets(last: 2) {
                //                    nodes {
                //                        name
                //                        downloadCount
                //                        downloadUrl
                //                        size
                //                    }
                //                }
                //            }
                //        }
                //    }
                //}

                #endregion

                var request = (HttpWebRequest)WebRequest.Create("https://api.github.com/repos/NickeManarin/ScreenToGif/releases/latest");
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393";
                request.Proxy     = WebHelper.GetProxy();

                var response = (HttpWebResponse)await request.GetResponseAsync();

                using (var resultStream = response.GetResponseStream())
                {
                    if (resultStream == null)
                    {
                        return(false);
                    }

                    using (var reader = new StreamReader(resultStream))
                    {
                        var result = await reader.ReadToEndAsync();

                        var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(result), new System.Xml.XmlDictionaryReaderQuotas());
                        var release    = XElement.Load(jsonReader);

                        var version = Version.Parse(release.XPathSelectElement("tag_name")?.Value ?? "0.1");

                        if (version.Major == 0 || version <= Assembly.GetExecutingAssembly().GetName().Version)
                        {
                            return(true);
                        }

                        Global.UpdateAvailable = new UpdateAvailable
                        {
                            Version     = version,
                            Description = release.XPathSelectElement("body")?.Value ?? "",

                            PortableDownloadUrl = release.XPathSelectElement("assets/item[1]/browser_download_url")?.Value ?? "",
                            PortableSize        = Convert.ToInt64(release.XPathSelectElement("assets/item[1]/size")?.Value ?? "0"),
                            PortableName        = release.XPathSelectElement("assets/item[1]/name")?.Value ?? "ScreenToGif.zip",

                            InstallerDownloadUrl = release.XPathSelectElement("assets/item[2]/browser_download_url")?.Value ?? "",
                            InstallerSize        = Convert.ToInt64(release.XPathSelectElement("assets/item[2]/size")?.Value ?? "0"),
                            InstallerName        = release.XPathSelectElement("assets/item[2]/name")?.Value ?? "ScreenToGif.Setup.msi",
                        };

                        Application.Current.Dispatcher?.BeginInvoke(new Action(() => NotificationManager.AddNotification(string.Format(LocalizationHelper.Get("S.Updater.NewRelease.Info"),
                                                                                                                                       Global.UpdateAvailable.Version), StatusType.Update, "update", PromptUpdate)));

                        //Download update to be installed when the app closes.
                        if (UserSettings.All.InstallUpdates && !string.IsNullOrEmpty(Global.UpdateAvailable.InstallerDownloadUrl))
                        {
                            await DownloadUpdate();
                        }
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                LogWriter.Log(ex, "Impossible to check for updates on Github");
                return(false);
            }
            finally
            {
                GC.Collect();
            }
        }
Ejemplo n.º 28
0
        /// <summary>
        /// Called after an inbound message has been received but before the message is dispatched to the intended operation.
        /// </summary>
        /// <param name="request">The request message.</param>
        /// <param name="channel">The incoming channel.</param>
        /// <param name="instanceContext">The current service instance.</param>
        /// <returns>The object used to correlate state. This object is passed back in the <see cref="M:System.ServiceModel.Dispatcher.IDispatchMessageInspector.BeforeSendReply(System.ServiceModel.Channels.Message@,System.Object)" /> method.</returns>
        public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
        {
            if (!request.Properties.ContainsKey("Via"))
            {
                return(request);                                        // Nothing much we can do here
            }
            if (!request.Properties.ContainsKey("httpRequest"))
            {
                return(request);                                                // Same here
            }
            var httpRequest = request.Properties["httpRequest"] as HttpRequestMessageProperty;

            if (httpRequest == null)
            {
                return(request);
            }
            var httpMethod = httpRequest.Method.ToUpper();

            var uri = request.Properties["Via"] as Uri;

            if (uri == null)
            {
                return(request);             // Still nothing much we can do
            }
            var url         = uri.AbsoluteUri;
            var urlFragment = url;

            if (urlFragment.ToLower().StartsWith(_rootUrlLower))
            {
                urlFragment = urlFragment.Substring(_rootUrlLower.Length);
            }
            var operationInfo = RestHelper.GetMethodNameFromUrlFragmentAndContract(urlFragment, httpMethod, _contractType);
            var urlParameters = RestHelper.GetUrlParametersFromUrlFragmentAndContract(urlFragment, httpMethod, _contractType);

            if (httpMethod == "GET")
            {
                // TODO: Support GET if at all possible
                throw new Exception("REST-GET operations are not currently supported in the chosen hosting environment. Please use a different HTTP Verb, or host in a different environment (such as WebApi). We hope to add this feature in a future version.");

                // This is a REST GET operation. Therefore, there is no posted message. Instead, we have to decode the input parameters from the URL
                var parameters = operationInfo.GetParameters();
                if (parameters.Length != 1)
                {
                    throw new NotSupportedException("Only service methods/operations with a single input parameter can be mapped to REST-GET operations. Method " + operationInfo.Name + " has " + parameters.Length + " parameters. Consider changing the method to have a single object with multiple properties instead.");
                }
                var parameterType     = parameters[0].ParameterType;
                var parameterInstance = Activator.CreateInstance(parameterType);
                foreach (var propertyName in urlParameters.Keys)
                {
                    var urlProperty = parameterType.GetProperty(propertyName);
                    if (urlProperty == null)
                    {
                        continue;
                    }
                    urlProperty.SetValue(parameterInstance, urlParameters[propertyName], null);
                }

                // Seralize the object back into a new request message
                // TODO: We only need to do this for methods OTHER than GET
                var format = GetMessageContentFormat(request);
                switch (format)
                {
                case WebContentFormat.Xml:
                    var xmlStream     = new MemoryStream();
                    var xmlSerializer = new DataContractSerializer(parameterInstance.GetType());
                    xmlSerializer.WriteObject(xmlStream, parameterInstance);
                    var xmlReader     = XmlDictionaryReader.CreateTextReader(StreamHelper.ToArray(xmlStream), XmlDictionaryReaderQuotas.Max);
                    var newXmlMessage = Message.CreateMessage(xmlReader, int.MaxValue, request.Version);
                    newXmlMessage.Properties.CopyProperties(request.Properties);
                    newXmlMessage.Headers.CopyHeadersFrom(request.Headers);
                    if (format == WebContentFormat.Default)
                    {
                        if (newXmlMessage.Properties.ContainsKey(WebBodyFormatMessageProperty.Name))
                        {
                            newXmlMessage.Properties.Remove(WebBodyFormatMessageProperty.Name);
                        }
                        newXmlMessage.Properties.Add(WebBodyFormatMessageProperty.Name, WebContentFormat.Xml);
                    }
                    request = newXmlMessage;
                    break;

                case WebContentFormat.Default:
                case WebContentFormat.Json:
                    var jsonStream = new MemoryStream();
                    var serializer = new DataContractJsonSerializer(parameterInstance.GetType());
                    serializer.WriteObject(jsonStream, parameterInstance);
                    var jsonReader = JsonReaderWriterFactory.CreateJsonReader(StreamHelper.ToArray(jsonStream), XmlDictionaryReaderQuotas.Max);
                    var newMessage = Message.CreateMessage(jsonReader, int.MaxValue, request.Version);
                    newMessage.Properties.CopyProperties(request.Properties);
                    newMessage.Headers.CopyHeadersFrom(request.Headers);
                    if (format == WebContentFormat.Default)
                    {
                        if (newMessage.Properties.ContainsKey(WebBodyFormatMessageProperty.Name))
                        {
                            newMessage.Properties.Remove(WebBodyFormatMessageProperty.Name);
                        }
                        newMessage.Properties.Add(WebBodyFormatMessageProperty.Name, WebContentFormat.Json);
                    }
                    request = newMessage;
                    break;

                default:
                    throw new NotSupportedException("Mesage format " + format.ToString() + " is not supported form REST/JSON operations");
                }
            }

            return(null);
        }
Ejemplo n.º 29
0
        public string GetDotNetExecutable(string directory)
        {
            if (directory == null)
            {
                throw new ArgumentNullException(nameof(directory));
            }

            lock (dotnet_executables) {
                if (dotnet_executables.TryGetValue(directory, out var value))
                {
                    return(value);
                }
            }

            // Find the first global.json up the directory hierarchy (stopping at the root directory)
            string global_json = null;
            var    dir         = directory;

            while (dir.Length > 2)
            {
                global_json = Path.Combine(dir, "global.json");
                if (File.Exists(global_json))
                {
                    break;
                }
                dir = Path.GetDirectoryName(dir);
            }
            if (!File.Exists(global_json))
            {
                throw new Exception($"Could not find any global.json file in {directory} or above");
            }

            // Parse the global.json we found, and figure out if it tells us to use .NET 3.1.100 / 5.X.XXX or not.
            var contents = File.ReadAllBytes(global_json);

            using var reader = JsonReaderWriterFactory.CreateJsonReader(contents, new XmlDictionaryReaderQuotas());
            var doc = new XmlDocument();

            doc.Load(reader);

            var    version = doc.SelectSingleNode("/root/sdk").InnerText;
            string executable;

            switch (version [0])
            {
            case '3':
            case '5':
                executable = dotnetPath;
                break;

            default:
                executable = dotnet6Path;
                break;
            }

            getLog()?.WriteLine($"Mapped .NET SDK version {version} to {executable} for {directory}");

            lock (dotnet_executables) {
                dotnet_executables [directory] = executable;
            }

            return(executable);
        }
 public void ConstructorNullStream()
 {
     JsonReaderWriterFactory.CreateJsonReader((Stream)null, new XmlDictionaryReaderQuotas());
 }