void addDirectoryToMenu(menu_s* m, char* path) { if(!m || !path)return; static menuEntry_s tmpEntry; static smdh_s tmpSmdh; static char execPath[128]; static char iconPath[128]; static char xmlPath[128]; int i, l=-1; for(i=0; path[i]; i++) if(path[i]=='/') l=i; snprintf(execPath, 128, "%s/boot.3dsx", path); if(!fileExists(execPath, &sdmcArchive)) { snprintf(execPath, 128, "%s/%s.3dsx", path, &path[l+1]); if(!fileExists(execPath, &sdmcArchive))return; } bool icon=false; snprintf(iconPath, 128, "%s/icon.bin", path); if(!icon && !(icon=fileExists(iconPath, &sdmcArchive)))snprintf(iconPath, 128, "%s/icon.smdh", path); if(!icon && !(icon=fileExists(iconPath, &sdmcArchive)))snprintf(iconPath, 128, "%s/icon.icn", path); if(!icon && !(icon=fileExists(iconPath, &sdmcArchive)))snprintf(iconPath, 128, "%s/%s.smdh", path, &path[l+1]); if(!icon && !(icon=fileExists(iconPath, &sdmcArchive)))snprintf(iconPath, 128, "%s/%s.icn", path, &path[l+1]); int ret=loadFile(iconPath, &tmpSmdh, &sdmcArchive, sizeof(smdh_s)); if(!ret) { initEmptyMenuEntry(&tmpEntry); ret=extractSmdhData(&tmpSmdh, tmpEntry.name, tmpEntry.description, tmpEntry.author, tmpEntry.iconData); strncpy(tmpEntry.executablePath, execPath, ENTRY_PATHLENGTH); } if(ret)initMenuEntry(&tmpEntry, execPath, &path[l+1], execPath, "", (u8*)installerIcon_bin); snprintf(xmlPath, 128, "%s/descriptor.xml", path); if(!fileExists(xmlPath, &sdmcArchive))snprintf(xmlPath, 128, "%s/%s.xml", path, &path[l+1]); loadDescriptor(&tmpEntry.descriptor, xmlPath); addBannerPathToMenuEntry(tmpEntry.bannerImagePath, path, &path[l+1], &tmpEntry.bannerIsFullScreen, &tmpEntry.hasBanner); addMenuEntryCopy(m, &tmpEntry); }
void addShortcutToMenu(menu_s* m, char* shortcutPath) { if(!m || !shortcutPath)return; static shortcut_s tmpShortcut; Result ret = createShortcut(&tmpShortcut, shortcutPath); if(!ret) { int i, l=-1; for(i=0; shortcutPath[i]; i++) if(shortcutPath[i]=='.') l=i; char bannerPath[128]; strcpy(bannerPath, ""); strncat(bannerPath, &shortcutPath[0], l); strcat(bannerPath, ""); addBannerPathToMenuEntry(tmpShortcut.bannerImagePath, bannerPath, NULL, &tmpShortcut.bannerIsFullScreen, &tmpShortcut.hasBanner); createMenuEntryShortcut(m, &tmpShortcut); } freeShortcut(&tmpShortcut); }
void addThemeToList(char * fullPath, menuEntry_s * me, char * smdhName, int folderPathLen) { me->hidden = false; me->isTitleEntry = false; me->isRegionFreeEntry = false; me->isShortcut = false; char smdhPath[strlen(fullPath) + strlen(smdhName) + 1]; strcpy(smdhPath, fullPath); strcat(smdhPath, smdhName); bool iconNeedsToBeGenerated = true; strcpy(me->name, ""); strcpy(me->description, ""); strcpy(me->author, ""); if(fileExists(smdhPath, &sdmcArchive)) { static smdh_s tmpSmdh; int ret = loadFile(smdhPath, &tmpSmdh, &sdmcArchive, sizeof(smdh_s)); if (!ret) { ret = extractSmdhData(&tmpSmdh, me->name, me->description, me->author, me->iconData); if (!ret) { iconNeedsToBeGenerated = false; } } } if (iconNeedsToBeGenerated) { memcpy(me->iconData, settingsIconTheme_bin, 48*48*3); } if (strlen(me->name) == 0) { if (strcmp(fullPath, "/3ds/") == 0) { strcpy(me->name, "3ds"); } else { strcpy(me->name, fullPath+folderPathLen); } } if (strlen(me->description) == 0) { strcpy(me->description, ""); } if (strlen(me->author) == 0) { strcpy(me->author, ""); } me->drawFirstLetterOfName = iconNeedsToBeGenerated; me->drawFullTitle = true; strcpy(me->executablePath, fullPath+folderPathLen); int i, l=-1; for(i=0; fullPath[i]; i++) if(fullPath[i]=='.') l=i; char bannerPath[128]; strcpy(bannerPath, ""); strncat(bannerPath, &fullPath[0], l); strcat(bannerPath, ""); addBannerPathToMenuEntry(me->bannerImagePath, bannerPath, "theme", &me->bannerIsFullScreen, &me->hasBanner); addMenuEntryCopy(&themesMenu, me); // themesMenu.numEntries = themesMenu.numEntries + 1; }