Beispiel #1
0
 public void DateTimeParseTest(string date, DateTimeUtc excepted)
 => Assert.Equal(excepted, MyCommon.DateTimeParse(date));
Beispiel #2
0
 public static bool IsKeyDown(params Keys[] keys)
 => MyCommon._IsKeyDown(Control.ModifierKeys, keys);
Beispiel #3
0
 /// <summary>
 /// 指定された修飾キーが押されている状態かを取得します。
 /// </summary>
 /// <param name="keys">状態を調べるキー</param>
 /// <returns><paramref name="keys"/> で指定された修飾キーがすべて押されている状態であれば true。それ以外であれば false。</returns>
 public static bool IsKeyDown(params Keys[] keys)
 {
     return(MyCommon._IsKeyDown(Control.ModifierKeys, keys));
 }
        private static void ShowPreviousWindow()
        {
            // 実行中の同じアプリケーションのウィンドウ・ハンドルの取得
            var prevProcess = Win32Api.GetPreviousProcess();

            if (prevProcess != null && prevProcess.MainWindowHandle == IntPtr.Zero)
            {
                // 起動中のアプリケーションを最前面に表示
                Win32Api.WakeupWindow(prevProcess.MainWindowHandle);
            }
            else
            {
                if (prevProcess != null)
                {
                    //プロセス特定は出来たが、ウィンドウハンドルが取得できなかった(アイコン化されている)
                    //タスクトレイアイコンのクリックをエミュレート
                    //注:アイコン特定はTooltipの文字列で行うため、多重起動時は先に見つけた物がアクティブになる
                    var rslt = Win32Api.ClickTasktrayIcon(Application.ProductName);
                    if (!rslt)
                    {
                        // 警告を表示(見つからない、またはその他の原因で失敗)
                        var text = string.Format(MyCommon.ReplaceAppName(Properties.Resources.StartupText1), MyCommon.GetAssemblyName());
                        MessageBox.Show(text, MyCommon.ReplaceAppName(Properties.Resources.StartupText2), MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    // 警告を表示(プロセス見つからない場合)
                    var text = string.Format(MyCommon.ReplaceAppName(Properties.Resources.StartupText1), MyCommon.GetAssemblyName());
                    MessageBox.Show(text, MyCommon.ReplaceAppName(Properties.Resources.StartupText2), MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }
        private static bool SetConfigDirectoryPath()
        {
            if (StartupOptions.TryGetValue("configDir", out var configDir) && !MyCommon.IsNullOrEmpty(configDir))
            {
                // 起動オプション /configDir で設定ファイルの参照先を変更できます
                if (!Directory.Exists(configDir))
                {
                    var text = string.Format(Properties.Resources.ConfigDirectoryNotExist, configDir);
                    MessageBox.Show(text, ApplicationSettings.ApplicationName, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return(false);
                }

                MyCommon.settingPath = Path.GetFullPath(configDir);
            }
            else
            {
                // OpenTween.exe と同じディレクトリに設定ファイルを配置する
                MyCommon.settingPath = Application.StartupPath;

                SettingManager.LoadAll();

                try
                {
                    // 設定ファイルが書き込み可能な状態であるかテストする
                    SettingManager.SaveAll();
                }
                catch (UnauthorizedAccessException)
                {
                    // 書き込みに失敗した場合 (Program Files 以下に配置されている場合など)

                    // 通常は C:\Users\ユーザー名\AppData\Roaming\OpenTween\ となる
                    var roamingDir = Path.Combine(new[]
                    {
                        Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
                        ApplicationSettings.ApplicationName,
                    });
                    Directory.CreateDirectory(roamingDir);

                    MyCommon.settingPath = roamingDir;

                    /*
                     * 書き込みが制限されたディレクトリ内で起動された場合の設定ファイルの扱い
                     *
                     *  (A) StartupPath に存在する設定ファイル
                     *  (B) Roaming に存在する設定ファイル
                     *
                     *  1. A も B も存在しない場合
                     *    => B を新規に作成する
                     *
                     *  2. A が存在し、B が存在しない場合
                     *    => A の内容を B にコピーする (警告を表示)
                     *
                     *  3. A が存在せず、B が存在する場合
                     *    => B を使用する
                     *
                     *  4. A も B も存在するが、A の方が更新日時が新しい場合
                     *    => A の内容を B にコピーする (警告を表示)
                     *
                     *  5. A も B も存在するが、B の方が更新日時が新しい場合
                     *    => B を使用する
                     */
                    var startupDirFile = new FileInfo(Path.Combine(Application.StartupPath, "SettingCommon.xml"));
                    var roamingDirFile = new FileInfo(Path.Combine(roamingDir, "SettingCommon.xml"));

                    if (roamingDirFile.Exists && (!startupDirFile.Exists || startupDirFile.LastWriteTime <= roamingDirFile.LastWriteTime))
                    {
                        // 既に Roaming に設定ファイルが存在し、Roaming 内のファイルの方が新しい場合は
                        // StartupPath に設定ファイルが存在しても無視する
                        SettingManager.LoadAll();
                    }
                    else
                    {
                        if (startupDirFile.Exists)
                        {
                            // StartupPath に設定ファイルが存在し、Roaming 内のファイルよりも新しい場合のみ警告を表示する
                            var message = string.Format(Properties.Resources.SettingPath_Relocation, Application.StartupPath, MyCommon.settingPath);
                            MessageBox.Show(message, ApplicationSettings.ApplicationName, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }

                        // Roaming に設定ファイルを作成 (StartupPath に読み込みに成功した設定ファイルがあれば内容がコピーされる)
                        SettingManager.SaveAll();
                    }
                }
            }

            return(true);
        }
Beispiel #6
0
        public void CircularCountDown_StartFromLastIndexTest()
        {
            var actual = MyCommon.CircularCountDown(length: 6, startIndex: 5);

            Assert.Equal(new[] { 5, 4, 3, 2, 1, 0 }, actual);
        }
Beispiel #7
0
 [InlineData("http://example.com/%E3%81%82%ED%A0%80", "http://example.com/あ%ED%A0%80")] // 不正なUTF-8シーケンス (high surrogate)
 public void ConvertToReadableUrl(string url, string expected)
 => Assert.Equal(expected, MyCommon.ConvertToReadableUrl(url));
Beispiel #8
0
 public void GetStatusUrlTest1(PostClass post, string expected)
 => Assert.Equal(expected, MyCommon.GetStatusUrl(post));
Beispiel #9
0
 public void GetStatusUrlTest2(string screenName, long statusId, string expected)
 => Assert.Equal(expected, MyCommon.GetStatusUrl(screenName, statusId));
Beispiel #10
0
 public void ReplaceAppNameTest(string str, string excepted)
 => Assert.Equal(excepted, MyCommon.ReplaceAppName(str, "OpenTween"));
Beispiel #11
0
 public void GetReadableVersionTest(string fileVersion, string expected)
 => Assert.Equal(expected, MyCommon.GetReadableVersion(fileVersion));
Beispiel #12
0
 public void IsKeyDownTest(Keys modifierKeys, Keys[] checkKeys, bool expected)
 => Assert.Equal(expected, MyCommon._IsKeyDown(modifierKeys, checkKeys));
Beispiel #13
0
 public void IsValidEmailTest(string email, bool expected)
 => Assert.Equal(expected, MyCommon.IsValidEmail(email));
Beispiel #14
0
 public void CreateDataFromJsonTest <T>(string json, T expected)
 => Assert.Equal(expected, MyCommon.CreateDataFromJson <T>(json));
Beispiel #15
0
        public void CircularCountUp_StartFromZeroTest()
        {
            var actual = MyCommon.CircularCountUp(length: 6, startIndex: 0);

            Assert.Equal(new[] { 0, 1, 2, 3, 4, 5 }, actual);
        }
Beispiel #16
0
        public void CountUp_Test()
        {
            var actual = MyCommon.CountUp(from: 1, to: 5);

            Assert.Equal(new[] { 1, 2, 3, 4, 5 }, actual);
        }
Beispiel #17
0
        public void CircularCountDown_Test()
        {
            var actual = MyCommon.CircularCountDown(length: 6, startIndex: 3);

            Assert.Equal(new[] { 3, 2, 1, 0, 5, 4 }, actual);
        }
Beispiel #18
0
        public void CountUp_FromAndToAreEqualTest()
        {
            var actual = MyCommon.CountUp(from: 1, to: 1);

            Assert.Equal(new[] { 1 }, actual);
        }
Beispiel #19
0
 [InlineData("http://xn--a/", "http://xn--a/")] // 不正なpunycode
 public void IDNDecodeTest(string uri, string expected)
 => Assert.Equal(expected, MyCommon.IDNDecode(uri));
Beispiel #20
0
        public void CountUp_ToIsLessThanFromTest()
        {
            var actual = MyCommon.CountUp(from: 1, to: 0);

            Assert.Empty(actual);
        }
Beispiel #21
0
 public void ResizeBytesArrayTest(byte[] bytes, int size, byte[] expected)
 => Assert.Equal(expected, MyCommon.ResizeBytesArray(bytes, size));
Beispiel #22
0
        public void CountDown_Test()
        {
            var actual = MyCommon.CountDown(from: 5, to: 1);

            Assert.Equal(new[] { 5, 4, 3, 2, 1 }, actual);
        }
Beispiel #23
0
        private bool isValidIconFile(FileInfo info)
        {
            string ext = info.Extension.ToLower();

            return(isValidExtension(ext) && info.Length < 700 * 1024 && !MyCommon.IsAnimatedGif(info.FullName));
        }
Beispiel #24
0
        public void CountDown_FromAndToAreEqualTest()
        {
            var actual = MyCommon.CountDown(from: 5, to: 5);

            Assert.Equal(new[] { 5 }, actual);
        }
Beispiel #25
0
        public static bool ExceptionOut(Exception ex)
        {
            lock (LockObj)
            {
                var IsTerminatePermission = true;

                var ident = WindowsIdentity.GetCurrent();
                var princ = new WindowsPrincipal(ident);
                var now   = DateTimeUtc.Now;

                var errorReport = string.Join(Environment.NewLine,
                                              string.Format(Properties.Resources.UnhandledExceptionText1, now.ToLocalTimeString()),

                                              // 権限書き出し
                                              string.Format(Properties.Resources.UnhandledExceptionText11 + princ.IsInRole(WindowsBuiltInRole.Administrator)),
                                              string.Format(Properties.Resources.UnhandledExceptionText12 + princ.IsInRole(WindowsBuiltInRole.User)),
                                              "",

                                              // OSVersion,AppVersion書き出し
                                              string.Format(Properties.Resources.UnhandledExceptionText4),
                                              string.Format(Properties.Resources.UnhandledExceptionText5, Environment.OSVersion.VersionString),
                                              string.Format(Properties.Resources.UnhandledExceptionText6, Environment.Version),
                                              string.Format(Properties.Resources.UnhandledExceptionText7, ApplicationSettings.AssemblyName, FileVersion),

                                              ExceptionOutMessage(ex, ref IsTerminatePermission));

                var logPath = MyCommon.GetErrorLogPath();
                if (!Directory.Exists(logPath))
                {
                    Directory.CreateDirectory(logPath);
                }

                var fileName = $"{ApplicationSettings.AssemblyName}-{now.ToLocalTime():yyyyMMdd-HHmmss}.log";
                using (var writer = new StreamWriter(Path.Combine(logPath, fileName)))
                {
                    writer.Write(errorReport);
                }

                var settings = SettingManager.Common;
                var mainForm = Application.OpenForms.OfType <TweenMain>().FirstOrDefault();

                ErrorReport report;
                if (mainForm != null && !mainForm.IsDisposed)
                {
                    report = new ErrorReport(mainForm.TwitterInstance, errorReport);
                }
                else
                {
                    report = new ErrorReport(errorReport);
                }

                report.AnonymousReport = settings.ErrorReportAnonymous;

                OpenErrorReportDialog(mainForm, report);

                // ダイアログ内で設定が変更されていれば保存する
                if (settings.ErrorReportAnonymous != report.AnonymousReport)
                {
                    settings.ErrorReportAnonymous = report.AnonymousReport;
                    settings.Save();
                }

                return(false);
            }
        }
Beispiel #26
0
        public void CountDown_ToIsGreaterThanFromTest()
        {
            var actual = MyCommon.CountDown(from: 5, to: 6);

            Assert.Empty(actual);
        }
Beispiel #27
0
 public static string ReplaceAppName(string orig)
 => MyCommon.ReplaceAppName(orig, ApplicationSettings.ApplicationName);
Beispiel #28
0
        public void CircularCountUp_Test()
        {
            var actual = MyCommon.CircularCountUp(length: 6, startIndex: 3);

            Assert.Equal(new[] { 3, 4, 5, 0, 1, 2 }, actual);
        }
Beispiel #29
0
 /// <summary>
 /// 文字列中に含まれる %AppName% をアプリケーション名に置換する
 /// </summary>
 /// <param name="orig">対象となる文字列</param>
 /// <returns>置換後の文字列</returns>
 public static string ReplaceAppName(string orig)
 {
     return(MyCommon.ReplaceAppName(orig, Application.ProductName));
 }
Beispiel #30
0
 public void IsAnimatedGifTest(string filename, bool expected)
 => Assert.Equal(expected, MyCommon.IsAnimatedGif(filename));