static string GetImportDataName(string filename, string[] lines)
        {
            string need = "//NAME=";

            foreach (string l in lines)
            {
                int found = l.IndexOf(need);
                if (found < 0)
                {
                    continue;
                }
                string name = U.substr(l, found + need.Length);
                return(name);
            }

            {
                string name = RegexCache.MatchSimple(filename, "MapActionAnimation_[^ ]+(.+)\\.");
                return(name);
            }
        }
Пример #2
0
        //ファイル名にある _swap_[0-9] にある番号で、パレットを切り替える.
        Bitmap PaletteSwapper(Bitmap bitmap)
        {
            string lastFilename = Program.LastSelectedFilename.Load(this, "");

            Match m = RegexCache.Match(lastFilename, "_swap_([0-9])");

            if (m.Groups.Count < 2)
            {
                return(bitmap);
            }
            int palIndex = (int)U.atoh(m.Groups[1].Value);

            if (palIndex <= 0 || palIndex >= 10)
            {
                return(bitmap);
            }

            Bitmap newbitmap = ImageUtil.SwapPalette(bitmap, (int)palIndex);

            return(newbitmap);
        }
Пример #3
0
        public static void TEST_DateParseTest()
        {
            {
                string a     = "Expires: Wed, 27 Jan 2021 04:03:09 GMT\r\nLast-Modified: Mon, 27 Jan 2020 07:06:32 GMT\r\nVary: Accept-Encoding";
                string regex = "Last-Modified: (.+?)\r\n";
                Match  m     = RegexCache.Match(a, regex);
                string r     = m.Groups[1].ToString();
                Debug.Assert(r == "Mon, 27 Jan 2020 07:06:32 GMT");

                DateTime d = DateTime.Parse(r);
                r = d.ToString();
                Debug.Assert(r == "2020/01/27 16:06:32");
            }
            {
                string r = "20/01/27 20:04";

                DateTime d = DateTime.Parse(r, new CultureInfo("ja-JP", false));
                r = d.ToString();
                Debug.Assert(r == "2020/01/27 20:04:00");
            }
        }
Пример #4
0
        void RunDownloadAndExtract(InputFormRef.AutoPleaseWait pleaseWait)
        {
            string url = U.at(this.Lines, "UPDATE_URL");

            if (url == "")
            {
                R.ShowStopError("UPDATE_URLの項目がありません");
                return;
            }

            string regex = U.at(this.Lines, "UPDATE_REGEX");

            if (regex == "")
            {
                R.ShowStopError("UPDATE_REGEXの項目がありません");
                return;
            }

            if (regex == "@DIRECT_URL")
            {//直リン
            }
            else
            {
                string html = U.HttpGet(url);
                Match  m    = RegexCache.Match(html, regex);
                if (m.Groups.Count < 2)
                {
                    R.ShowStopError("UPDATE_REGEXでマッチしたデータがありませんでした。\r\n{0}", html);
                    return;
                }
                url = m.Groups[1].ToString();
            }

            //少し時間がかかるので、しばらくお待ちください表示.
            DownloadAndExtract(url, pleaseWait);

            R.ShowOK("アップデートが完了しました。\r\nROMを再読み込みします。\r\n");
            MainFormUtil.Open(this, Program.ROM.Filename, true, "");
        }
Пример #5
0
        public static UPDATE_RESULT CheckUpdateLow(Dictionary <string, string> lines, string romfilename, bool isSlientMode)
        {
            string url = U.at(lines, "CHECK_URL");

            if (url == "")
            {
                if (!isSlientMode)
                {
                    R.ShowStopError("CHECK_URLの項目がありません");
                }
                return(UPDATE_RESULT.ERROR);
            }

            string regex = U.at(lines, "CHECK_REGEX");

            if (regex == "")
            {
                if (!isSlientMode)
                {
                    R.ShowStopError("CHECK_REGEXの項目がありません");
                }
                return(UPDATE_RESULT.ERROR);
            }

            string dateString;
            string match;

            if (regex == "@DIRECT_URL")
            {
                match = url;
            }
            else
            {
                string html = U.HttpGet(url);
                Match  m    = RegexCache.Match(html, regex);
                if (m.Groups.Count < 2)
                {
                    if (!isSlientMode)
                    {
                        R.ShowStopError("CHECK_REGEXでマッチしたデータがありませんでした。\r\n{0}", html);
                    }
                    return(UPDATE_RESULT.ERROR);
                }
                match = m.Groups[1].ToString();
            }

            if (U.isURL(match))
            {//直URL
                WebResponse rsp = U.HttpHead(url);
                dateString = rsp.Headers["LastModified"];
                if (dateString == null)
                {
                    if (!isSlientMode)
                    {
                        R.ShowStopError("Last-Modifiedを検知できませんでした。\r\n仕方がないので、常に最新版に更新します。");
                    }
                    dateString = DateTime.Now.ToString();
                }
            }
            else
            {
                dateString = match;
            }

            DateTime datetime;

            try
            {
                if (url.IndexOf("getuploader.com") >= 0)
                {
                    datetime = DateTime.Parse(dateString, new CultureInfo("ja-JP", false));
                }
                else
                {
                    if (U.TryParseUnitTime(dateString, out datetime))
                    {//unittmie
                    }
                    else
                    {//通常の日付
                        datetime = DateTime.Parse(dateString);
                    }
                }
            }
            catch (Exception)
            {
                if (!isSlientMode)
                {
                    R.ShowStopError("日付({0})をパースできませんでした。\r\n仕方がないので、常に最新版に更新します。", dateString);
                }
                datetime = DateTime.Now;
            }

            DateTime romDatetime = GetROMDateTime(romfilename);

            Log.Notify("romDatetime:{0} vs datetime:{1}", romDatetime.ToString(), datetime.ToString());
            if (romDatetime < datetime)
            {//更新する必要あり!
                return(UPDATE_RESULT.UPDATEABLE);
            }
            //更新する必要なし
            return(UPDATE_RESULT.LATEST);
        }
Пример #6
0
        static string CheckUpdateURLByGetUploader(out string out_url, out string out_version)
        {
            out_url     = "";
            out_version = "";

            string versionString = U.getVersion();
            double version       = U.atof(versionString);

            string url = "https://ux.getuploader.com/FE4/";
            string contents;

            try
            {
                contents = U.HttpGet(url);
            }
            catch (Exception e)
            {
#if DEBUG
                R.Error("Webサイトにアクセスできません。 URL:{0} Message:{1}", url, e.ToString());
                throw;
#else
                return(R.Error("Webサイトにアクセスできません。 URL:{0} Message:{1}", url, e.ToString()));
#endif
            }

            System.Text.RegularExpressions.Match match = RegexCache.Match(contents
                                                                          , "<td><a href=\"(https://ux.getuploader.com/FE4/download/[0-9]+)\" title=\"FEBuilder(?:GBA)?_[0-9.]+.7z\">FEBuilder(?:GBA)?_([0-9.]+).7z</a></td><td></td><td>FEBuilder(?:GBA)?_[0-9.]+.7z</td><td>(2|3|4)\\.[0-9] MB</td>"
                                                                          );
            Log.Error(U.var_dump(match.Groups));
            if (match.Groups.Count < 2)
            {
                return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n"
                       + "href can not parse" + "\r\n"
                       + "contents:\r\n" + contents + "\r\n"
                       + "match.Groups:\r\n" + U.var_dump(match.Groups));
            }

            out_version = match.Groups[2].Value;
            double net_version = U.atof(match.Groups[2].Value);
            if (version >= net_version)
            {
                if (net_version == 0)
                {
                    return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n"
                           + "version can not parse" + "\r\n"
                           + "contents:\r\n" + contents + "\r\n"
                           + "match.Groups:\r\n" + U.var_dump(match.Groups));
                }
                return(R._("現在のバージョンが最新です。version:{0}", version));
            }

            double yyyymmdd = U.atof(DateTime.Now.AddDays(3).ToString("yyyyMMdd.HH"));
            if (net_version > yyyymmdd)
            {//いたずらで変な日付のものが挙げられた可能性あり
                return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n"
                       + "date can not parse" + "\r\n"
                       + "contents:\r\n" + contents + "\r\n"
                       + "match.Groups:\r\n" + U.var_dump(match.Groups));
            }

            out_url = match.Groups[1].Value;
            return("");
        }
Пример #7
0
        static string CheckUpdateURLByGitHub(out string out_url, out string out_version)
        {
            out_url     = "";
            out_version = "";

            string versionString = U.getVersion();
            double version       = U.atof(versionString);

            string url = "https://api.github.com/repos/FEBuilderGBA/FEBuilderGBA/releases/latest";
            string contents;

            try
            {
                contents = U.HttpGet(url);
            }
            catch (Exception e)
            {
#if DEBUG
                R.Error("Webサイトにアクセスできません。 URL:{0} Message:{1}", url, e.ToString());
                throw;
#else
                return(R.Error("Webサイトにアクセスできません。 URL:{0} Message:{1}", url, e.ToString()));
#endif
            }


            string downloadurl;
            {
                System.Text.RegularExpressions.Match match = RegexCache.Match(contents
                                                                              , "\"browser_download_url\": \"(.+)\""
                                                                              );
                if (match.Groups.Count < 2)
                {
                    return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n"
                           + "browser_download_url not found" + "\r\n"
                           + "contents:\r\n" + contents + "\r\n"
                           + "match.Groups:\r\n" + U.var_dump(match.Groups));
                }
                downloadurl = match.Groups[1].Value;
            }

            {
                System.Text.RegularExpressions.Match match = RegexCache.Match(contents
                                                                              , "download/ver_([0-9.]+)/"
                                                                              );
                if (match.Groups.Count < 2)
                {
                    return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n"
                           + "download/ver_ not found" + "\r\n"
                           + "contents:\r\n" + contents + "\r\n"
                           + "match.Groups:\r\n" + U.var_dump(match.Groups));
                }
                out_version = match.Groups[1].Value;

                double net_version = U.atof(out_version);
                if (version >= net_version)
                {
                    if (net_version == 0)
                    {
                        return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n"
                               + "version can not parse" + "\r\n"
                               + "contents:\r\n" + contents + "\r\n"
                               + "match.Groups:\r\n" + U.var_dump(match.Groups));
                    }
                    return(R._("現在のバージョンが最新です。version:{0}", version));
                }
            }

            out_url = downloadurl;
            return("");
        }
Пример #8
0
 string  ReplaceOffsetAddress(string code)
 {
     return(RegexCache.Replace(code, "(0x0.......)", "$1 + . - origin"));
 }
Пример #9
0
 string  ReplaceOffsetAddress(string code)
 {
     return(RegexCache.Replace(code, "#?(0x0?[8-9][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f])", "$1 + . - origin"));
 }