Skip to content

Commit 4c66230

Browse files
committed
add helper to open editor logs for project (since 6.5 and later have local editor.log)
for 6.5: open editor.log or the log folder from Tools/editor log button, if single unity instance is running and its 6.5 or later #230
1 parent f4a9208 commit 4c66230

4 files changed

Lines changed: 90 additions & 44 deletions

File tree

UnityLauncherPro/GetProjects.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ private static void VisitProjectsInUnityHubJson(
197197
string title = JsonParser.GetStringValue(entry, "title");
198198
if (!string.IsNullOrEmpty(title)) p.Title = title;
199199

200+
// NOTE: this has changed in newer hub versions? (not checking from folder anymore?)
200201
// lastModified is a Unix millisecond timestamp
201202
string lastModifiedStr = JsonParser.GetNumberValue(entry, "lastModified");
202203
if (long.TryParse(lastModifiedStr, out long lastModifiedMs))

UnityLauncherPro/Helpers/ProcessHandler.cs

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace UnityLauncherPro.Helpers
1111
{
1212
public static class ProcessHandler
1313
{
14-
static Dictionary<string, Process> processes = new Dictionary<string, Process>();
14+
static Dictionary<string, (Process, Project)> processes = new Dictionary<string, (Process, Project)>();
1515

1616
public static void Add(Project proj, Process proc)
1717
{
@@ -21,11 +21,11 @@ public static void Add(Project proj, Process proc)
2121
if (processes.ContainsKey(key))
2222
{
2323
// already in the list, maybe trying to launch same project twice? only overwrite if previous process has closed
24-
if (processes[key] == null) processes[key] = proc;
24+
if (processes[key].Item1 == null) processes[key] = (proc, proj);
2525
}
2626
else
2727
{
28-
processes.Add(key, proc);
28+
processes.Add(key, (proc, proj));
2929
}
3030

3131
// subscribe to process exit here, so that can update proj details row (if it was changed in Unity)
@@ -45,13 +45,35 @@ public static void Add(Project proj, Process proc)
4545

4646
public static Process Get(string key)
4747
{
48-
if (processes.ContainsKey(key)) return processes[key];
48+
if (processes.ContainsKey(key) && (processes[key].Item1 != null))
49+
{
50+
return processes[key].Item1;
51+
}
4952
return null;
5053
}
5154

55+
// return project for given key
56+
//public static Project GetProject(string key)
57+
//{
58+
// if (processes.ContainsKey(key) && (processes[key].Item2 != null))
59+
// {
60+
// return processes[key].Item2;
61+
// }
62+
// return null;
63+
//}
64+
5265
public static bool IsRunning(string key)
5366
{
54-
return processes.ContainsKey(key) && (processes[key] != null);
67+
return processes.ContainsKey(key) && (processes[key].Item1 != null);
68+
}
69+
70+
public static Project GetSingleRunning()
71+
{
72+
if (processes.Count != 1) return null;
73+
var enumerator = processes.Values.GetEnumerator();
74+
enumerator.MoveNext();
75+
var entry = enumerator.Current;
76+
return entry.Item1 != null ? entry.Item2 : null;
5577
}
5678

5779
public static void Remove(string key)

UnityLauncherPro/MainWindow.xaml.cs

Lines changed: 28 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1587,18 +1587,29 @@ private void DataGridUpdates_PreviewKeyDown(object sender, KeyEventArgs e)
15871587

15881588
private void BtnOpenEditorLogsFolder_Click(object sender, RoutedEventArgs e)
15891589
{
1590-
var logfolder = Tools.GetGlobalEditorLogsFolder();
1591-
if (Directory.Exists(logfolder) == true)
1590+
var proj = ProcessHandler.GetSingleRunning();
1591+
if (proj != null && Tools.IsVersionAtLeast(proj.Version, "6000.5"))
15921592
{
1593-
if (Tools.LaunchExplorer(logfolder) == false)
1593+
var logFolder = Path.Combine(proj.Path, "Logs");
1594+
if (Directory.Exists(logFolder))
15941595
{
1595-
Console.WriteLine("Cannot open folder.." + logfolder);
1596-
SetStatus("Cannot open folder: " + logfolder);
1596+
Tools.LaunchExplorer(logFolder);
1597+
return;
1598+
}
1599+
}
1600+
1601+
var globalLogFolder = Tools.GetGlobalEditorLogsFolder();
1602+
if (Directory.Exists(globalLogFolder))
1603+
{
1604+
if (Tools.LaunchExplorer(globalLogFolder) == false)
1605+
{
1606+
Console.WriteLine("Cannot open folder.." + globalLogFolder);
1607+
SetStatus("Cannot open folder: " + globalLogFolder);
15971608
}
15981609
}
15991610
else
16001611
{
1601-
SetStatus("Folder does not exist: " + logfolder);
1612+
SetStatus("Folder does not exist: " + globalLogFolder);
16021613
}
16031614
}
16041615

@@ -3880,9 +3891,16 @@ private void btnOpenEditorLogsFolder_PreviewMouseDown(object sender, MouseButton
38803891
{
38813892
if (e.ChangedButton == MouseButton.Middle)
38823893
{
3883-
var logfolder = Tools.GetGlobalEditorLogsFolder();
3884-
var logFile = Path.Combine(logfolder, "Editor.log");
3885-
if (File.Exists(logFile) == true) Tools.LaunchExe(logFile);
3894+
var proj = ProcessHandler.GetSingleRunning();
3895+
if (proj != null && Tools.IsVersionAtLeast(proj.Version, "6000.5"))
3896+
{
3897+
Tools.OpenEditorLogForProject(proj);
3898+
return;
3899+
}
3900+
3901+
var logFolder = Tools.GetGlobalEditorLogsFolder();
3902+
var logFile = Path.Combine(logFolder, "Editor.log");
3903+
if (File.Exists(logFile)) Tools.LaunchExe(logFile);
38863904
}
38873905
}
38883906

@@ -4371,34 +4389,7 @@ private void MenuOpenEditorLogs_Click(object sender, RoutedEventArgs e)
43714389
{
43724390
var proj = GetSelectedProject();
43734391
if (proj == null) return;
4374-
4375-
// if version is 6000.5 or higher, then log file is in Proj/Logs, otherwise in Appdata/LocalLow
4376-
if (proj.Version != null && Tools.IsVersionAtLeast(proj.Version, "6000.5") == true)
4377-
{
4378-
var logFolder = Path.Combine(proj.Path, "Logs");
4379-
var logFile = Path.Combine(logFolder, "Editor.log");
4380-
if (File.Exists(logFile) == true)
4381-
{
4382-
Tools.LaunchExe(logFile);
4383-
}
4384-
else
4385-
{
4386-
SetStatus("Log file not found: " + logFile, MessageType.Warning);
4387-
}
4388-
}
4389-
else
4390-
{
4391-
var logFolder = Tools.GetGlobalEditorLogsFolder();
4392-
var logFile = Path.Combine(logFolder, "Editor.log");
4393-
if (File.Exists(logFile) == true)
4394-
{
4395-
Tools.LaunchExe(logFile);
4396-
}
4397-
else
4398-
{
4399-
SetStatus("Log file not found: " + logFile, MessageType.Warning);
4400-
}
4401-
}
4392+
Tools.OpenEditorLogForProject(proj);
44024393
}
44034394

44044395
//private void menuProjectProperties_Click(object sender, RoutedEventArgs e)

UnityLauncherPro/Tools.cs

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using System.Windows.Input;
1919
using System.Windows.Media;
2020
using System.Windows.Threading;
21+
using UnityLauncherPro.Data;
2122
using UnityLauncherPro.Helpers;
2223
using UnityLauncherPro.Properties;
2324

@@ -1926,6 +1927,37 @@ public static string GetGlobalEditorLogsFolder()
19261927
return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Unity", "Editor");
19271928
}
19281929

1930+
public static void OpenEditorLogForProject(Project proj)
1931+
{
1932+
// if version is 6000.5 or higher, then log file is in Proj/Logs, otherwise in Appdata/LocalLow
1933+
if (proj.Version != null && Tools.IsVersionAtLeast(proj.Version, "6000.5") == true)
1934+
{
1935+
var logFolder = Path.Combine(proj.Path, "Logs");
1936+
var logFile = Path.Combine(logFolder, "Editor.log");
1937+
if (File.Exists(logFile) == true)
1938+
{
1939+
Tools.LaunchExe(logFile);
1940+
}
1941+
else
1942+
{
1943+
SetStatus("Log file not found: " + logFile, MessageType.Warning);
1944+
}
1945+
}
1946+
else
1947+
{
1948+
var logFolder = Tools.GetGlobalEditorLogsFolder();
1949+
var logFile = Path.Combine(logFolder, "Editor.log");
1950+
if (File.Exists(logFile) == true)
1951+
{
1952+
Tools.LaunchExe(logFile);
1953+
}
1954+
else
1955+
{
1956+
SetStatus("Log file not found: " + logFile, MessageType.Warning);
1957+
}
1958+
}
1959+
}
1960+
19291961
public static string[] GetPlatformsForUnityVersion(string version)
19301962
{
19311963
// get platforms array for this unity version
@@ -2569,9 +2601,9 @@ internal static string GetBytesReadable(long i)
25692601
public static MainWindow mainWindow;
25702602

25712603
// set status bar in main thread
2572-
public static void SetStatus(string text)
2604+
public static void SetStatus(string text, MessageType messageType = MessageType.Info)
25732605
{
2574-
mainWindow.Dispatcher.Invoke(() => { mainWindow.SetStatus(text); });
2606+
mainWindow.Dispatcher.Invoke(() => { mainWindow.SetStatus(text, messageType); });
25752607
}
25762608

25772609
public static void SetBuildStatus(Color color)

0 commit comments

Comments
 (0)