MCPcopy Create free account
hub / github.com/crosspoint-reader/crosspoint-reader / ensureLoaded

Method ensureLoaded

src/SdCardFontSystem.cpp:47–104  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

45}
46
47void SdCardFontSystem::ensureLoaded(GfxRenderer& renderer) {
48 // If the web server (or another task) installed/deleted fonts, re-discover.
49 // Track whether we just re-discovered so we can force a reload below even
50 // when the wanted family/size still maps to the same point size — the file
51 // contents on disk may have changed (e.g. user re-uploaded a new build).
52 const bool registryWasDirty = registryDirty_.exchange(false, std::memory_order_acquire);
53 if (registryWasDirty) {
54 LOG_DBG("SDFS", "Registry dirty — re-discovering fonts");
55 registry_.discover();
56 }
57
58 const char* wantedFamily = SETTINGS.sdFontFamilyName;
59 const std::string& currentFamily = manager_.currentFamilyName();
60 const uint8_t sizeEnum = fontSizeEnumFromSettings();
61
62 if (wantedFamily[0] == '\0') {
63 if (!currentFamily.empty()) {
64 manager_.unloadAll(renderer);
65 }
66 return;
67 }
68
69 // Reload if family changed OR if the user-selected size maps to a
70 // different file than what's currently loaded OR if the registry was
71 // just rediscovered (file may have been replaced on disk).
72 bool familyMatches = (currentFamily == wantedFamily);
73 if (familyMatches) {
74 const auto* family = registry_.findFamily(wantedFamily);
75 if (!family) {
76 LOG_DBG("SDFS", "SD font family disappeared: %s (clearing)", wantedFamily);
77 manager_.unloadAll(renderer);
78 SETTINGS.sdFontFamilyName[0] = '\0';
79 return;
80 }
81 const auto* selected = family->findClosestReaderSize(sizeEnum);
82 const uint8_t wantedPt = selected ? selected->pointSize : 0;
83 if (!registryWasDirty && wantedPt == manager_.currentPointSize()) return;
84 LOG_DBG("SDFS", "Reloading %s: size %u -> %u (enum %u)%s", wantedFamily, manager_.currentPointSize(), wantedPt,
85 sizeEnum, registryWasDirty ? " [registry dirty]" : "");
86 }
87
88 if (!currentFamily.empty()) {
89 manager_.unloadAll(renderer);
90 }
91
92 const auto* family = registry_.findFamily(wantedFamily);
93 if (family) {
94 if (manager_.loadFamily(*family, renderer, sizeEnum)) {
95 LOG_DBG("SDFS", "Loaded SD font family: %s", wantedFamily);
96 } else {
97 LOG_ERR("SDFS", "Failed to load SD font family: %s (clearing)", wantedFamily);
98 SETTINGS.sdFontFamilyName[0] = '\0';
99 }
100 } else {
101 LOG_DBG("SDFS", "SD font family not found: %s (clearing)", wantedFamily);
102 SETTINGS.sdFontFamilyName[0] = '\0';
103 }
104}

Callers 2

onEnterMethod · 0.80
loopMethod · 0.80

Calls 8

fontSizeEnumFromSettingsFunction · 0.85
discoverMethod · 0.80
unloadAllMethod · 0.80
findFamilyMethod · 0.80
findClosestReaderSizeMethod · 0.80
currentPointSizeMethod · 0.80
loadFamilyMethod · 0.80
emptyMethod · 0.45

Tested by

no test coverage detected