1 // OpenTween - Client of Twitter
2 // Copyright (c) 2007-2012 kiri_feather (@kiri_feather) <kiri.feather@gmail.com>
3 // (c) 2008-2012 Moz (@syo68k)
4 // (c) 2008-2012 takeshik (@takeshik) <http://www.takeshik.org/>
5 // (c) 2010-2012 anis774 (@anis774) <http://d.hatena.ne.jp/anis774/>
6 // (c) 2010-2012 fantasticswallow (@f_swallow) <http://twitter.com/f_swallow>
7 // (c) 2012 Egtra (@egtra) <http://dev.activebasic.com/egtra/>
8 // (c) 2012 kim_upsilon (@kim_upsilon) <https://upsilo.net/~upsilon/>
9 // All rights reserved.
11 // This file is part of OpenTween.
13 // This program is free software; you can redistribute it and/or modify it
14 // under the terms of the GNU General public License as published by the Free
15 // Software Foundation; either version 3 of the License, or (at your option)
18 // This program is distributed in the hope that it will be useful, but
19 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
20 // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General public License
23 // You should have received a copy of the GNU General public License along
24 // with this program. If not, see <http://www.gnu.org/licenses/>, or write to
25 // the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
26 // Boston, MA 02110-1301, USA.
31 using System.Windows.Forms;
32 using OpenTween.Connection;
33 using OpenTween.Setting;
34 using OpenTween.SocialProtocol;
38 internal class ApplicationEvents
41 /// 起動時に指定されたオプションを取得します
43 public static CommandLineArgs StartupOptions { get; private set; } = null!;
46 /// アプリケーションのメイン エントリ ポイントです。
49 public static int Main(string[] args)
51 Application.EnableVisualStyles();
52 Application.SetCompatibleTextRenderingDefault(false);
54 using var errorReportHandler = new ErrorReportHandler();
56 StartupOptions = new(args);
57 InitializeTraceFrag();
59 if (!ApplicationPreconditions.CheckAll())
62 var settingsPath = SettingManager.DetermineSettingsPath(StartupOptions);
63 if (MyCommon.IsNullOrEmpty(settingsPath))
66 var settings = new SettingManager(settingsPath);
69 using var container = new ApplicationContainer(settings);
71 settings.Common.Validate();
73 ThemeManager.ApplyGlobalUIFont(settings.Local);
74 container.CultureService.Initialize();
76 Networking.Initialize();
77 settings.ApplySettings();
79 // 同じ設定ファイルを使用する OpenTween プロセスの二重起動を防止する
80 using var mutex = new ApplicationInstanceMutex(ApplicationSettings.AssemblyName, settings.SettingsPath);
82 if (mutex.InstanceExists)
84 var text = string.Format(MyCommon.ReplaceAppName(Properties.Resources.StartupText1), ApplicationSettings.AssemblyName);
85 MessageBox.Show(text, MyCommon.ReplaceAppName(Properties.Resources.StartupText2), MessageBoxButtons.OK, MessageBoxIcon.Information);
87 mutex.TryActivatePreviousInstance();
91 if (settings.IsIncomplete)
93 var completed = ShowSettingsDialog(settings, container.IconAssetsManager);
95 return 1; // 設定が完了しなかったため終了
98 SetupAccounts(container.AccountCollection, settings);
100 Application.Run(container.MainForm);
105 private static void InitializeTraceFrag()
107 var traceFlag = false;
113 if (StartupOptions.ContainsKey("d"))
116 var version = Version.Parse(MyCommon.FileVersion);
117 if (version.Build != 0)
120 MyCommon.TraceFlag = traceFlag;
123 private static bool ShowSettingsDialog(SettingManager settings, IconAssetsManager iconAssets)
125 using var settingDialog = new AppendSettingDialog();
126 settingDialog.Icon = iconAssets.IconMain;
127 settingDialog.ShowInTaskbar = true; // この時点では TweenMain が表示されていないため代わりに表示する
128 settingDialog.LoadConfig(settings.Common, settings.Local);
130 var ret = settingDialog.ShowDialog();
131 if (ret != DialogResult.OK)
134 settingDialog.SaveConfig(settings.Common, settings.Local);
136 if (settings.IsIncomplete)
143 private static void SetupAccounts(AccountCollection accounts, SettingManager settings)
145 accounts.LoadFromSettings(settings.Common);
147 // アクセストークンが有効であるか確認する
148 // ここが Twitter API への最初のアクセスになるようにすること
151 accounts.Primary.VerifyCredentials();
153 catch (WebApiException ex)
156 string.Format(Properties.Resources.StartupAuthError_Text, ex.Message),
157 ApplicationSettings.ApplicationName,
158 MessageBoxButtons.OK,
159 MessageBoxIcon.Warning