{
try
{
- // get all installed gadgets for Settings
- installedGadgets = GadgetProvider.Gadgets.ToList();
+ GetInstalledGadgets();
// get initial customization from file
var initCust = FileStorage.ReadFromFile(FileStorage.InitialFilePath);
_ = UpdateCustomization(backupCust);
}
- return true;
- }
- catch (Exception e)
- {
- Logger.Error($"{e}");
- return false;
- }
- }
-
- public void SaveCustomizationToFiles()
- {
- try
- {
// save current customization to both files (current and backup)
var menuCustItems = installedGadgets.Select(x => new MenuCustomizationItem(x.Path, x.Order));
FileStorage.WriteToFiles(menuCustItems);
FileStorage.Instance.Changed += CustFileChanged;
FileStorage.Instance.Lost += CustFileLost;
FileStorage.Instance.StartMonitoring();
+
+ return true;
}
catch (Exception e)
{
Logger.Error($"{e}");
+ return false;
+ }
+ }
+
+ private void GetInstalledGadgets()
+ {
+ // get all installed gadgets for Settings
+ if (!installedGadgets.Any())
+ {
+ installedGadgets = GadgetProvider.Gadgets.ToList();
}
}
public IEnumerable<SettingGadgetInfo> GetMainWithCurrentOrder()
{
+ GetInstalledGadgets();
var main = installedGadgets
.Where(info => info.IsMainMenu);
private static SettingViewBorder appCustomBorder;
private ContentPage mMainPage;
private static Task rowsCreated;
+ private static Task gadgetManagerInitialized;
public Program(Size2D windowSize, Position2D windowPosition, ThemeOptions themeOptions, IBorderInterface borderInterface)
: base(windowSize, windowPosition, themeOptions, borderInterface)
mMainPage = CreateMainPage();
- bool initilized = GadgetManager.Instance.Init();
- mMainPage.Content = initilized ? CreateContent() : GetTextNotice("Failed to initialize GadgetManager.\nPlease check error logs for more information.", Color.Red);
- _ = SaveCustomization();
+ mMainPage.Content = CreateContent();
+ gadgetManagerInitialized = InitGadgetManager();
+ _ = CheckCustomization();
var navigator = new SettingNavigation();
navigator.WidthResizePolicy = ResizePolicyType.FillToParent;
LogScalableInfo();
}
- private async Task SaveCustomization()
+ private async Task InitGadgetManager()
{
await rowsCreated;
await Task.Run(() =>
{
- GadgetManager.Instance.SaveCustomizationToFiles();
+ GadgetManager.Instance.Init();
+ return true;
+ });
+ }
+
+ private async Task CheckCustomization()
+ {
+ await gadgetManagerInitialized;
+ await Task.Run(async () =>
+ {
+ var customizationMainMenus = GadgetManager.Instance.GetMainWithCurrentOrder();
+
+ var customizationMainMenusStr = customizationMainMenus.Where(i => i.IsVisible).Select(x => new string(x.Path));
+ var cacheMainMenuStr = MainMenuInfo.CacheMenu.Select(x => new string(x.Path));
+
+ if (!customizationMainMenusStr.SequenceEqual(cacheMainMenuStr))
+ {
+ Logger.Verbose($"customization has changed. Reload main view.");
+ if (mMainPage != null)
+ {
+ await Post(() =>
+ {
+ mMainPage.Content = CreateContent(true);
+ return true;
+ });
+ }
+ }
return true;
});
}
if (mMainPage != null && items.Any())
{
- mMainPage.Content = CreateContent();
+ mMainPage.Content = CreateContent(true);
}
}
});
}
- private static View CreateContent()
+ private static View CreateContent(bool customizationChanged = false)
{
- var mainMenus = GadgetManager.Instance.GetMainWithCurrentOrder();
- if (!mainMenus.Any())
- {
- return GetTextNotice("There is no setting menus installed.", Color.Orange);
- }
-
- var visibleMenus = mainMenus.Where(i => i.IsVisible);
- if (!visibleMenus.Any())
- {
- return GetTextNotice("There is no setting menus visible.", Color.Gray);
- }
-
var content = new ScrollableBase()
{
WidthSpecification = LayoutParamPolicies.MatchParent,
},
};
- rowsCreated = CreateContentRows(visibleMenus, content);
+ rowsCreated = CreateContentRows(content, customizationChanged);
return content;
}
- private static System.Threading.Tasks.Task CreateContentRows(IEnumerable<SettingGadgetInfo> visibleMenus, View content)
+ private static System.Threading.Tasks.Task CreateContentRows(View content, bool customizationChanged = false)
{
return System.Threading.Tasks.Task.Run(async () =>
{
- var menus = new List<MainMenuInfo>();
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start();
- foreach (var gadgetInfo in visibleMenus)
+ var menus = MainMenuInfo.CacheMenu;
+ if (menus.Count == 0 || customizationChanged)
{
- if (MainMenuInfo.Create(gadgetInfo) is MainMenuInfo menu)
+ var mainMenus = GadgetManager.Instance.GetMainWithCurrentOrder();
+ if (!mainMenus.Any())
+ {
+ await Post(() =>
+ {
+ var textLabel = GetTextNotice("There is no setting menus installed.", Color.Orange);
+ content.Add(textLabel);
+ return true;
+ });
+ return;
+ }
+
+ var visibleMenus = mainMenus.Where(i => i.IsVisible);
+ if (!visibleMenus.Any())
+ {
+ await Post(() =>
+ {
+ var textLabel = GetTextNotice("There is no setting menus visible.", Color.Gray);
+ content.Add(textLabel);
+ return true;
+ });
+ return;
+ }
+
+ menus = new List<MainMenuInfo>();
+ foreach (var gadgetInfo in visibleMenus)
{
- menus.Add(menu);
+ if (MainMenuInfo.Create(gadgetInfo) is MainMenuInfo menu)
+ {
+ menus.Add(menu);
+ }
}
}
+
stopwatch.Stop();
Logger.Debug($"MEASURE loaded all MainMenuInfos, total time: {stopwatch.Elapsed}");