コード例 #1
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
 public void DateTimeParseTest(string date, DateTimeUtc excepted)
 => Assert.Equal(excepted, MyCommon.DateTimeParse(date));
コード例 #2
0
ファイル: MyCommon.cs プロジェクト: shmdt2020/OpenTween
 public static bool IsKeyDown(params Keys[] keys)
 => MyCommon._IsKeyDown(Control.ModifierKeys, keys);
コード例 #3
0
ファイル: MyCommon.cs プロジェクト: alphaKAI/OpenTween
 /// <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));
 }
コード例 #4
0
        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);
                }
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
        public void CircularCountDown_StartFromLastIndexTest()
        {
            var actual = MyCommon.CircularCountDown(length: 6, startIndex: 5);

            Assert.Equal(new[] { 5, 4, 3, 2, 1, 0 }, actual);
        }
コード例 #7
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
 [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));
コード例 #8
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
 public void GetStatusUrlTest1(PostClass post, string expected)
 => Assert.Equal(expected, MyCommon.GetStatusUrl(post));
コード例 #9
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
 public void GetStatusUrlTest2(string screenName, long statusId, string expected)
 => Assert.Equal(expected, MyCommon.GetStatusUrl(screenName, statusId));
コード例 #10
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
 public void ReplaceAppNameTest(string str, string excepted)
 => Assert.Equal(excepted, MyCommon.ReplaceAppName(str, "OpenTween"));
コード例 #11
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
 public void GetReadableVersionTest(string fileVersion, string expected)
 => Assert.Equal(expected, MyCommon.GetReadableVersion(fileVersion));
コード例 #12
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
 public void IsKeyDownTest(Keys modifierKeys, Keys[] checkKeys, bool expected)
 => Assert.Equal(expected, MyCommon._IsKeyDown(modifierKeys, checkKeys));
コード例 #13
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
 public void IsValidEmailTest(string email, bool expected)
 => Assert.Equal(expected, MyCommon.IsValidEmail(email));
コード例 #14
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
 public void CreateDataFromJsonTest <T>(string json, T expected)
 => Assert.Equal(expected, MyCommon.CreateDataFromJson <T>(json));
コード例 #15
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
        public void CircularCountUp_StartFromZeroTest()
        {
            var actual = MyCommon.CircularCountUp(length: 6, startIndex: 0);

            Assert.Equal(new[] { 0, 1, 2, 3, 4, 5 }, actual);
        }
コード例 #16
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
        public void CountUp_Test()
        {
            var actual = MyCommon.CountUp(from: 1, to: 5);

            Assert.Equal(new[] { 1, 2, 3, 4, 5 }, actual);
        }
コード例 #17
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
        public void CircularCountDown_Test()
        {
            var actual = MyCommon.CircularCountDown(length: 6, startIndex: 3);

            Assert.Equal(new[] { 3, 2, 1, 0, 5, 4 }, actual);
        }
コード例 #18
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
        public void CountUp_FromAndToAreEqualTest()
        {
            var actual = MyCommon.CountUp(from: 1, to: 1);

            Assert.Equal(new[] { 1 }, actual);
        }
コード例 #19
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
 [InlineData("http://xn--a/", "http://xn--a/")] // 不正なpunycode
 public void IDNDecodeTest(string uri, string expected)
 => Assert.Equal(expected, MyCommon.IDNDecode(uri));
コード例 #20
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
        public void CountUp_ToIsLessThanFromTest()
        {
            var actual = MyCommon.CountUp(from: 1, to: 0);

            Assert.Empty(actual);
        }
コード例 #21
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
 public void ResizeBytesArrayTest(byte[] bytes, int size, byte[] expected)
 => Assert.Equal(expected, MyCommon.ResizeBytesArray(bytes, size));
コード例 #22
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
        public void CountDown_Test()
        {
            var actual = MyCommon.CountDown(from: 5, to: 1);

            Assert.Equal(new[] { 5, 4, 3, 2, 1 }, actual);
        }
コード例 #23
0
ファイル: ShowUserInfo.cs プロジェクト: alphaKAI/OpenTween
        private bool isValidIconFile(FileInfo info)
        {
            string ext = info.Extension.ToLower();

            return(isValidExtension(ext) && info.Length < 700 * 1024 && !MyCommon.IsAnimatedGif(info.FullName));
        }
コード例 #24
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
        public void CountDown_FromAndToAreEqualTest()
        {
            var actual = MyCommon.CountDown(from: 5, to: 5);

            Assert.Equal(new[] { 5 }, actual);
        }
コード例 #25
0
ファイル: MyCommon.cs プロジェクト: shmdt2020/OpenTween
        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);
            }
        }
コード例 #26
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
        public void CountDown_ToIsGreaterThanFromTest()
        {
            var actual = MyCommon.CountDown(from: 5, to: 6);

            Assert.Empty(actual);
        }
コード例 #27
0
ファイル: MyCommon.cs プロジェクト: shmdt2020/OpenTween
 public static string ReplaceAppName(string orig)
 => MyCommon.ReplaceAppName(orig, ApplicationSettings.ApplicationName);
コード例 #28
0
ファイル: MyCommonTest.cs プロジェクト: shmdt2020/OpenTween
        public void CircularCountUp_Test()
        {
            var actual = MyCommon.CircularCountUp(length: 6, startIndex: 3);

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