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);
}
Esempio n. 3
0
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;
}