Feature: Detection of inaccessible folders

When a folder cannot be accessed due to rights management, it will show 'inaccessible' instead of 'empty'
This commit is contained in:
Peter Kirmeier 2019-07-05 23:09:55 +02:00
parent c2845ee3f3
commit 5dd5e68d3d
6 changed files with 649 additions and 608 deletions

View file

@ -20,6 +20,7 @@ namespace SystemTrayMenu
Main,
Sub,
Empty,
NoAccess,
MaxReached
}
@ -69,6 +70,10 @@ namespace SystemTrayMenu
{
SetType(Type.Empty);
}
public void SetTypeNoAccess()
{
SetType(Type.NoAccess);
}
public void SetType(Type type)
{
@ -84,6 +89,10 @@ namespace SystemTrayMenu
SetTitle(Program.Translate("Folder empty"));
labelTitle.BackColor = MenuDefines.Background;
break;
case Type.NoAccess:
SetTitle(Program.Translate("Folder inaccessible"));
labelTitle.BackColor = MenuDefines.Background;
break;
case Type.MaxReached:
SetTitle($"Max {MenuDefines.MenusMax - 1} Menus");
labelTitle.BackColor = MenuDefines.Background;

View file

@ -15,10 +15,17 @@ using TAFactory.IconPack;
namespace SystemTrayMenu.Controls
{
public enum MenuDataValidity
{
Valid,
Invalid,
NoAccess
}
public struct MenuData
{
public List<RowData> RowDatas;
public bool Valid;
public MenuDataValidity Validity;
public int Level;
};
}

View file

@ -177,6 +177,15 @@ namespace SystemTrayMenu.Resources {
}
}
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Folder inaccessible ähnelt.
/// </summary>
internal static string Folder_inaccessible {
get {
return ResourceManager.GetString("Folder inaccessible", resourceCulture);
}
}
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Deutsch ähnelt.
/// </summary>

View file

@ -135,6 +135,33 @@
<data name="Folder" xml:space="preserve">
<value>Ordner</value>
</data>
<data name="Folder empty" xml:space="preserve">
<value>Ordner leer</value>
</data>
<data name="ALT" xml:space="preserve">
<value>ALT</value>
</data>
<data name="CTRL" xml:space="preserve">
<value>STRG</value>
</data>
<data name="English" xml:space="preserve">
<value>English</value>
</data>
<data name="(e.g. F12)" xml:space="preserve">
<value>(z.B. F12)</value>
</data>
<data name="buttonDetails" xml:space="preserve">
<value>Details</value>
</data>
<data name="buttonSystemInfo" xml:space="preserve">
<value>System Info</value>
</data>
<data name="Folder inaccessible" xml:space="preserve">
<value>Ordner unzugänglich</value>
</data>
<data name="German" xml:space="preserve">
<value>Deutsch</value>
</data>
<data name="HintDragDropText" xml:space="preserve">
<value>Ziehe das Notify-Icon per DragDrop vom SystemTray in die Taskleiste</value>
</data>
@ -150,31 +177,7 @@
<data name="Restart" xml:space="preserve">
<value>Neustart</value>
</data>
<data name="Folder empty" xml:space="preserve">
<value>Ordner leer</value>
</data>
<data name="ALT" xml:space="preserve">
<value>ALT</value>
</data>
<data name="CTRL" xml:space="preserve">
<value>STRG</value>
</data>
<data name="Shortcut key" xml:space="preserve">
<value>Tastenkombination</value>
</data>
<data name="English" xml:space="preserve">
<value>English</value>
</data>
<data name="German" xml:space="preserve">
<value>Deutsch</value>
</data>
<data name="(e.g. F12)" xml:space="preserve">
<value>(z.B. F12)</value>
</data>
<data name="buttonDetails" xml:space="preserve">
<value>Details</value>
</data>
<data name="buttonSystemInfo" xml:space="preserve">
<value>System Info</value>
</data>
</root>

View file

@ -138,6 +138,27 @@
<data name="Folder" xml:space="preserve">
<value>Folder</value>
</data>
<data name="Folder empty" xml:space="preserve">
<value>Folder empty</value>
</data>
<data name="ALT" xml:space="preserve">
<value>ALT</value>
</data>
<data name="CTRL" xml:space="preserve">
<value>CTRL</value>
</data>
<data name="(e.g. F12)" xml:space="preserve">
<value>(e.g. F12)</value>
</data>
<data name="buttonDetails" xml:space="preserve">
<value>Details</value>
</data>
<data name="buttonSystemInfo" xml:space="preserve">
<value>System Info</value>
</data>
<data name="Folder inaccessible" xml:space="preserve">
<value>Folder inaccessible</value>
</data>
<data name="German" xml:space="preserve">
<value>Deutsch</value>
</data>
@ -156,25 +177,7 @@
<data name="Restart" xml:space="preserve">
<value>Restart</value>
</data>
<data name="Folder empty" xml:space="preserve">
<value>Folder empty</value>
</data>
<data name="ALT" xml:space="preserve">
<value>ALT</value>
</data>
<data name="CTRL" xml:space="preserve">
<value>CTRL</value>
</data>
<data name="Shortcut key" xml:space="preserve">
<value>Shortcut key</value>
</data>
<data name="(e.g. F12)" xml:space="preserve">
<value>(e.g. F12)</value>
</data>
<data name="buttonDetails" xml:space="preserve">
<value>Details</value>
</data>
<data name="buttonSystemInfo" xml:space="preserve">
<value>System Info</value>
</data>
</root>

View file

@ -160,7 +160,7 @@ namespace SystemTrayMenu
ResetSelectedByKey();
menuNotifyIcon.LoadingStop();
MenuData menuData = (MenuData)e.Result;
if (menuData.Valid)
if (menuData.Validity == MenuDataValidity.Valid)
{
menus[0] = CreateMenu(menuData, Path.GetFileName(Config.Path));
menus[0].AdjustLocationAndSize(screen);
@ -397,7 +397,7 @@ namespace SystemTrayMenu
{
MenuData menuData = new MenuData();
menuData.RowDatas = new List<RowData>();
menuData.Valid = false;
menuData.Validity = MenuDataValidity.Invalid;
menuData.Level = level;
if (!worker.CancellationPending)
{
@ -440,10 +440,15 @@ namespace SystemTrayMenu
Array.Sort(files, new WindowsExplorerSort());
}
catch (Exception ex)
{
if ((uint)ex.HResult == 0x80070005) // E_ACCESSDENIED
menuData.Validity = MenuDataValidity.NoAccess;
else
{
log.Info($"path:'{path}'");
log.Error($"{ex.ToString()}");
}
}
foreach (string file in files)
{
@ -468,7 +473,8 @@ namespace SystemTrayMenu
if (!worker.CancellationPending)
{
menuData.Valid = true;
if (menuData.Validity == MenuDataValidity.Invalid)
menuData.Validity = MenuDataValidity.Valid;
}
return menuData;
@ -1064,13 +1070,17 @@ namespace SystemTrayMenu
{
menuNotifyIcon.LoadingStop();
menuNotifyIcon.LoadWait();
if (menuData.Valid)
if (menuData.Validity != MenuDataValidity.Invalid)
{
menu = CreateMenu(menuData);
if (menuData.RowDatas.Count > 0)
{
menu.SetTypeSub();
}
else if (menuData.Validity == MenuDataValidity.NoAccess)
{
menu.SetTypeNoAccess();
}
else
{
menu.SetTypeEmpty();