OSDN Git Service

タイムゾーンの変更を検知して発言一覧などに表示される時刻を全て再描画する
authorKimura Youichi <kim.upsilon@bucyou.net>
Tue, 8 May 2018 18:46:04 +0000 (03:46 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Wed, 9 May 2018 01:43:17 +0000 (10:43 +0900)
OpenTween/Resources/ChangeLog.txt
OpenTween/Tween.cs

index b61968b..aa473dd 100644 (file)
@@ -1,6 +1,7 @@
 更新履歴
 
 ==== Ver 1.4.2-dev(xxxx/xx/xx)
+ * NEW: システムのタイムゾーンの変更を検知して、ツイートの投稿日時などの表示を新しいタイムゾーンに同期します
  * FIX: 動画のサムネイル画像に「URLをコピー」を行うとエラーが発生する不具合を修正
 
 ==== Ver 1.4.1(2017/11/12)
index 9829d6c..a6dcda4 100644 (file)
@@ -402,6 +402,7 @@ namespace OpenTween
             // 終了時にRemoveHandlerしておかないとメモリリークする
             // http://msdn.microsoft.com/ja-jp/library/microsoft.win32.systemevents.powermodechanged.aspx
             Microsoft.Win32.SystemEvents.PowerModeChanged -= SystemEvents_PowerModeChanged;
+            Microsoft.Win32.SystemEvents.TimeChanged -= SystemEvents_TimeChanged;
 
             this.disposed = true;
         }
@@ -696,6 +697,7 @@ namespace OpenTween
 
             MyCommon.TwitterApiInfo.AccessLimitUpdated += TwitterApiStatus_AccessLimitUpdated;
             Microsoft.Win32.SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
+            Microsoft.Win32.SystemEvents.TimeChanged += SystemEvents_TimeChanged;
 
             Regex.CacheSize = 100;
 
@@ -12101,6 +12103,24 @@ namespace OpenTween
             if (e.Mode == Microsoft.Win32.PowerModes.Resume) osResumed = true;
         }
 
+        private async void SystemEvents_TimeChanged(object sender, EventArgs e)
+        {
+            var prevTimeOffset = TimeZoneInfo.Local.BaseUtcOffset;
+
+            TimeZoneInfo.ClearCachedData();
+
+            var curTimeOffset = TimeZoneInfo.Local.BaseUtcOffset;
+
+            if (curTimeOffset != prevTimeOffset)
+            {
+                // タイムゾーンの変更を反映
+                this.PurgeListViewItemCache();
+                this._curList.Refresh();
+
+                await this.DispSelectedPost(forceupdate: true);
+            }
+        }
+
         private void TimelineRefreshEnableChange(bool isEnable)
         {
             if (isEnable)