コード例 #1
0
ファイル: ShowLyricApp.c プロジェクト: cszipper/showlyric
// 加载歌词
gboolean _LoadLyric(SongInfo info)
{
	const gchar * pszTitle = info.szTitle;
	const gchar * pszArtist = info.szArtist;
	LyricDebug("LoadLyric(%s, %s)", pszTitle, pszArtist);
#define LRC_PATH_NUM	12
	gchar szLrcFile[LRC_PATH_NUM][MAX_PATH];
	if (strlen((char *) pszTitle) <= 0)
		return FALSE;
	int nCount = 0;
	sprintf(szLrcFile[nCount++], "%s/%s/%s.lrc", theApp.m_configs.szLyricPath, pszArtist, pszTitle);
	sprintf(szLrcFile[nCount++], "%s/%s - %s.lrc", theApp.m_configs.szLyricPath, pszArtist, pszTitle);
	sprintf(szLrcFile[nCount++], "%s/%s.lrc", theApp.m_configs.szLyricPath, pszTitle);
	sprintf(szLrcFile[nCount++], "%s/%s/%s.lrc", info.szSongFolder, pszArtist, pszTitle);
	sprintf(szLrcFile[nCount++], "%s/%s - %s.lrc", info.szSongFolder, pszArtist, pszTitle);
	sprintf(szLrcFile[nCount++], "%s/%s.lrc", info.szSongFolder, pszTitle);
	gchar szTmp[MAX_PATH] = {0};
	sprintf(szLrcFile[nCount++], "%s/%s.lrc", info.szSongFolder, GetNameFromFileName(info.szFileName, szTmp, MAX_PATH));
	sprintf(szLrcFile[nCount++], "%s/%s.lrc", theApp.m_configs.szLyricPath, GetNameFromFileName(info.szFileName, szTmp, MAX_PATH));
	szLrcFile[LRC_PATH_NUM - 1][0] = 0;
	// 检查该歌曲的歌词是否存在
	int i = 0;
	for (i = 0; i < nCount; i++)
	{
		if (g_file_test(szLrcFile[i], G_FILE_TEST_IS_REGULAR))
		{
			break;
		}
	}
	theApp.m_CurrSongInfo = info;
	if (i < nCount)
	{
		strcpy(theApp.m_CurrSongInfo.szLyricFileName, szLrcFile[i]);
		return theApp.m_LyricWnd.ParseLyric(theApp.m_CurrSongInfo.szLyricFileName);
	}
	else
	{
		theApp.m_CurrSongInfo = info;
		return SearchLyric(info, theApp.m_configs.bSmartDownLoad, theApp.m_configs.nSearchAppIndex, TRUE);
	}
}
コード例 #2
0
/**
 * Function name			CDeleteObject::DeleteFile
 * Description		Asks the user if he really wants to delete the file. if so
	                the file is deleted
 * @param			CString strFileName
 * @return			file deleted? 
 * @exception		file exeption catchen internally	
 * @see			    GetNameFromFileName, 
*/
BOOL CDeleteObject::DeleteFile(CString strFileName)
{
    CString strAddInfo = m_sAdditionalInfo;

    CString strFilePathName;
    strFilePathName = (CString)m_ProjectPath + _T("\\") + strFileName;
    CFileStatus tFileStatus;
    if(!CFile::GetStatus(strFilePathName, tFileStatus))
    {
        if(!m_bSilent)
        {
            CString strMessage;
            strMessage.Format(IDS_FILE_ALREADY_REMOVED, strFilePathName);
            ::AfxMessageBox(strMessage, MB_OK | MB_ICONWARNING);
        }
        return TRUE;
    }
    CString errorMsg;
    CString errorTitle;

    m_sName = GetNameFromFileName(strFileName);
    if(!m_bSilent)
    {
        errorMsg.Format(IDS_REALLY_DELETE_FILE1, m_sName, strFilePathName);
        int Res = ::AfxMessageBox(errorMsg, MB_YESNO|MB_ICONWARNING);
        if(Res != IDYES)
        {
            return FALSE;
        }
    }
    if(!::DeleteFile(strFilePathName))
    {
        if(!m_bSilent)
        {
            errorMsg.Format(IDS_ERROR_DELETE_FILE, strFilePathName);
            ::AfxMessageBox(errorMsg, MB_OK);
        }
        return FALSE;
    }
    else
    {
        // file has been removed, now trigger close editor, if open
        ASSERT(m_pAddonHandler);
        if(m_pAddonHandler)
        {
            CComBSTR    sFilePathName(strFilePathName);
            m_pAddonHandler->Fire_OnFileRemoved(sFilePathName);
        }
    }
    return TRUE;
}
コード例 #3
0
ファイル: AudaPlugin.c プロジェクト: cszipper/showlyric
gboolean Lyric_GetSongInfo(SongInfo * pInfo)
{
	gchar *pszTitle= NULL, *pszArtist= NULL, *lpszTmp= NULL;
	Playlist *pl= NULL;
	int iPlPos = 0;
	if (!audacious_drct_get_playing())
		return FALSE;
	gint iPlLen= audacious_drct_pl_get_length();

	if (iPlLen <= 0)
	{
		return FALSE;
	}

	iPlPos = audacious_drct_pl_get_pos();
	if (iPlPos < 0)
	{
		return FALSE;
	}
	Tuple *out = NULL;
	gint iLen = 0;

	pl = aud_playlist_get_active();
	out = aud_playlist_get_tuple(pl, iPlPos);
	if (!out)
	{
		return FALSE;
	}
	iLen = aud_tuple_get_int(out, FIELD_LENGTH, NULL);
	if (iLen < 1)
	{
		LyricLog("The song's tuple is empty!\n");
		return FALSE;
	}

	// 获取文件完整路径名
	lpszTmp = aud_playlist_get_filename(pl, iPlPos);
	if (!lpszTmp)return FALSE;
	gchar * lpszFileName = g_filename_from_uri(lpszTmp, NULL, NULL);
	g_free(lpszTmp);

	// 获取文件名
	lpszTmp = g_path_get_basename(lpszFileName);
	strncpy(pInfo->szFileName, lpszTmp, MAX_PATH);
	g_free(lpszTmp);

	// 获取目录名
	lpszTmp = g_path_get_dirname(lpszFileName);
	strncpy(pInfo->szSongFolder, lpszTmp, MAX_PATH);
	g_free(lpszTmp);

	g_free(lpszFileName);
	lpszFileName = NULL;

	// 获取歌曲标题
	pszTitle = (gchar *) aud_tuple_get_string(out, FIELD_TITLE, NULL);
	if (pszTitle)
	{
		strncpy(pInfo->szTitle, pszTitle, TITLE_LENGTH);

		pInfo->szTitle[TITLE_LENGTH] = 0;
		pszTitle = NULL;
	}
	else
	{
		int iLenght = strlen((const char *) pInfo->szFileName);
		int iDotPos = iLenght, iNameBegin = 0, iCurr = iLenght;

		while (iCurr> 0)
		{
			if (pInfo->szFileName[iCurr] == '.' && iDotPos == iLenght)
			{
				iDotPos = iCurr;
				iCurr--;
				continue;
			}
			if (pInfo->szFileName[iCurr] == '.')
			{
				iNameBegin = iCurr + 2;
				if (iNameBegin != iDotPos)
				break;
			}
			iCurr--;
		}
		int iTitleLen = iDotPos - iNameBegin;
		LyricDebug ("iDotPos:%d, iNameBegin:%d, iTitleLen:%d, iLenght:%d",
		iDotPos, iNameBegin, iTitleLen, strlen((const char *) pInfo->szFileName));
		if (iTitleLen <= 0)
		return FALSE;
		strncpy(pInfo->szTitle, pInfo->szFileName + iNameBegin, iTitleLen);
		pInfo->szTitle[iTitleLen] = '\0';
	}

	// 获取歌曲作者
	pszArtist = (gchar *) aud_tuple_get_string(out, FIELD_ARTIST, NULL);
	if (pszArtist)
	{
		strncpy(pInfo->szArtist, pszArtist, ARTIST_LENGTH);
		pInfo->szArtist[ARTIST_LENGTH] = '\0';
		//free(pszArtist);
		pszArtist = NULL;
	}
	else
	{
		pInfo->szArtist[0] = 0;
	}

	// 由于Audacious提供的信息可能不正确,所以我们需要根据对歌曲标题和作者进行修复
	if(g_strstr_len(pInfo->szTitle, strlen(pInfo->szTitle), "????"))
	{
		gchar szTmp[MAX_PATH] = {0};
		gchar* lpszName = GetNameFromFileName(pInfo->szFileName, szTmp, MAX_PATH);
		// 如果存在乱码,那么就拿文件名当歌曲的标题
		strncpy(pInfo->szTitle, lpszName, MAX_PATH);
	}

	if(g_strstr_len(pInfo->szArtist, strlen(pInfo->szArtist), "????"))
	{
		// 如果存在乱码,那么清空。
		// 因为作者不是必须的关键字
		memset(pInfo->szArtist, 0, sizeof(pInfo->szArtist));
	}

	gchar szName[MAX_PATH] = {0};
	if (theApp.m_configs.bSaveLyricToSongFolder)
	{
		if (theApp.m_configs.bSaveLyricAsFileName)
		{
			snprintf(pInfo->szLyricFileName, MAX_PATH, "%s/%s.lrc", pInfo->szSongFolder, GetNameFromFileName(pInfo->szFileName, szName, MAX_PATH));
		}
		else
		{
			snprintf(pInfo->szLyricFileName, MAX_PATH, "%s/%s - %s.lrc", pInfo->szSongFolder, pInfo->szArtist, pInfo->szTitle);
		}
	}
	else
	{
		if (theApp.m_configs.bSaveLyricAsFileName)
		{
			snprintf(pInfo->szLyricFileName, MAX_PATH, "%s/%s.lrc", theApp.m_configs.szLyricPath, GetNameFromFileName(pInfo->szFileName, szName, MAX_PATH));
		}
		else
		{
			snprintf(pInfo->szLyricFileName, MAX_PATH, "%s/%s/%s.lrc", theApp.m_configs.szLyricPath, pInfo->szArtist, pInfo->szTitle);
		}
	}
	LyricDebug("szSongFolder: %s", pInfo->szSongFolder);
	LyricDebug("szFileName: %s", pInfo->szFileName);
	LyricDebug("szTitle:    %s", pInfo->szTitle);
	LyricDebug("szArtist:   %s", pInfo->szArtist);
	LyricDebug("szLyricFileName:   %s\n\n", pInfo->szLyricFileName);
	return TRUE;
}
コード例 #4
0
UI_GameSettingsMenu::UI_GameSettingsMenu() : UI_Menu()
{
    miSettingsStartButton = new MI_Button(&rm->spr_selectfield, 70, 45, "Start", 500, 0);
    miSettingsStartButton->SetCode(MENU_CODE_START_GAME);

    miModeField = new MI_ImageSelectField(&rm->spr_selectfield, &rm->menu_mode_small, 70, 85, "Mode", 500, 120, 16, 16);

    for (short iGameMode = 0; iGameMode < GAMEMODE_LAST; iGameMode++) {
        miModeField->Add(gamemodes[iGameMode]->GetModeName(), iGameMode, "", false, false);
    }
    miModeField->SetData(&currentgamemode, NULL, NULL);
    miModeField->SetKey(0);
    miModeField->SetItemChangedCode(MENU_CODE_MODE_CHANGED);

    for (short iGameMode = 0; iGameMode < GAMEMODE_LAST; iGameMode++) {
        miGoalField[iGameMode] = new MI_SelectField(&rm->spr_selectfield, 70, 125, gamemodes[iGameMode]->GetGoalName(), 352, 120);
        //miGoalField[iGameMode]->SetKey(gamemodes[iGameMode]->goal);
        miGoalField[iGameMode]->Show(iGameMode == 0);

        for (short iGameModeOption = 0; iGameModeOption < GAMEMODE_NUM_OPTIONS; iGameModeOption++) {
            SModeOption * option = &gamemodes[iGameMode]->GetOptions()[iGameModeOption];
            miGoalField[iGameMode]->Add(option->szName, option->iValue, "", false, false);
        }

        miGoalField[iGameMode]->SetData(&gamemodes[iGameMode]->goal, NULL, NULL);
        miGoalField[iGameMode]->SetKey(gamemodes[iGameMode]->goal);
    }

    miModeSettingsButton = new MI_Button(&rm->spr_selectfield, 430, 125, "Settings", 140, 0);
    miModeSettingsButton->SetCode(MENU_CODE_TO_MODE_SETTINGS_MENU);

    miMapField = new MI_MapField(&rm->spr_selectfield, 70, 165, "Map", 400, 120, true);

    miMapFiltersButton = new MI_Button(&rm->spr_selectfield, 430, 205, "Filters", 140, 0);
    miMapFiltersButton->SetCode(MENU_CODE_TO_MAP_FILTERS);

    miMapFiltersOnImage = new MI_Image(&rm->menu_map_filter, 530, 213, 0, 48, 16, 16, 1, 1, 0);
    miMapFiltersOnImage->Show(false);

    miMapThumbnailsButton = new MI_Button(&rm->spr_selectfield, 430, 245, "Thumbs", 140, 0);
    miMapThumbnailsButton->SetCode(MENU_CODE_TO_MAP_BROWSER_THUMBNAILS);

    miMapFilterScroll = new MI_MapFilterScroll(&rm->menu_plain_field, 120, 72, 400, 9);
    miMapFilterScroll->SetAutoModify(true);
    miMapFilterScroll->Show(false);

    //Add auto map filters
    for (short iFilter = 0; iFilter < NUM_AUTO_FILTERS; iFilter++) {
        miMapFilterScroll->Add(g_szAutoFilterNames[iFilter], g_iAutoFilterIcons[iFilter]);
    }

    //Add user defined filters
    char szTemp[256];
    for (short iFilter = 0; iFilter < filterslist->GetCount(); iFilter++) {
        GetNameFromFileName(szTemp, filterslist->GetIndex(iFilter), true);
        miMapFilterScroll->Add(szTemp, game_values.piFilterIcons[NUM_AUTO_FILTERS + iFilter]);
    }


    miGameSettingsLeftHeaderBar = new MI_Image(&rm->menu_plain_field, 0, 0, 0, 0, 320, 32, 1, 1, 0);
    miGameSettingsMenuRightHeaderBar = new MI_Image(&rm->menu_plain_field, 320, 0, 192, 0, 320, 32, 1, 1, 0);
    miGameSettingsMenuHeaderText = new MI_Text("Single Game Menu", 320, 5, 0, 2, 1);


    //Exit tournament dialog box
    miGameSettingsExitDialogImage = new MI_Image(&rm->spr_dialog, 224, 176, 0, 0, 192, 128, 1, 1, 0);
    miGameSettingsExitDialogExitText = new MI_Text("Exit", 320, 195, 0, 2, 1);
    miGameSettingsExitDialogTournamentText = new MI_Text("Tournament", 320, 220, 0, 2, 1);
    miGameSettingsExitDialogYesButton = new MI_Button(&rm->spr_selectfield, 235, 250, "Yes", 80, 1);
    miGameSettingsExitDialogNoButton = new MI_Button(&rm->spr_selectfield, 325, 250, "No", 80, 1);

    miGameSettingsExitDialogYesButton->SetCode(MENU_CODE_EXIT_TOURNAMENT_YES);
    miGameSettingsExitDialogNoButton->SetCode(MENU_CODE_EXIT_TOURNAMENT_NO);

    miGameSettingsExitDialogImage->Show(false);
    miGameSettingsExitDialogTournamentText->Show(false);
    miGameSettingsExitDialogExitText->Show(false);
    miGameSettingsExitDialogYesButton->Show(false);
    miGameSettingsExitDialogNoButton->Show(false);

    AddControl(miSettingsStartButton, miMapThumbnailsButton, miModeField, NULL, NULL);
    AddControl(miModeField, miSettingsStartButton, miGoalField[0], NULL, NULL);

    AddControl(miGoalField[0], miModeField, miGoalField[1], NULL, miModeSettingsButton);

    for (short iGoalField = 1; iGoalField < GAMEMODE_LAST - 1; iGoalField++)
        AddControl(miGoalField[iGoalField], miGoalField[iGoalField - 1], miGoalField[iGoalField + 1], miGoalField[iGoalField - 1], miModeSettingsButton);

    AddControl(miGoalField[GAMEMODE_LAST - 1], miGoalField[GAMEMODE_LAST - 2], miMapField, miGoalField[GAMEMODE_LAST - 2], miModeSettingsButton);

    AddControl(miModeSettingsButton, miModeField, miMapField, miGoalField[GAMEMODE_LAST - 1], NULL);
    AddControl(miMapField, miGoalField[GAMEMODE_LAST - 1], miMapFiltersButton, NULL, NULL);
    AddControl(miMapFiltersButton, miMapField, miMapThumbnailsButton, NULL, NULL);
    AddControl(miMapThumbnailsButton, miMapFiltersButton, miSettingsStartButton, NULL, NULL);

    AddControl(miMapFilterScroll, NULL, NULL, NULL, NULL);

    AddNonControl(miGameSettingsLeftHeaderBar);
    AddNonControl(miGameSettingsMenuRightHeaderBar);
    AddNonControl(miGameSettingsMenuHeaderText);

    AddNonControl(miGameSettingsExitDialogImage);
    AddNonControl(miGameSettingsExitDialogExitText);
    AddNonControl(miGameSettingsExitDialogTournamentText);

    AddNonControl(miMapFiltersOnImage);

    AddControl(miGameSettingsExitDialogYesButton, NULL, NULL, NULL, miGameSettingsExitDialogNoButton);
    AddControl(miGameSettingsExitDialogNoButton, NULL, NULL, miGameSettingsExitDialogYesButton, NULL);

    SetHeadControl(miSettingsStartButton);

    SetCancelCode(MENU_CODE_BACK_TEAM_SELECT_MENU);
};