📄 mediainfogetnew.c
字号:
}
}
else if (FilterType == NUM_SEARCH)
{
uiID += SearchInfo[2].IndexID;
}
else
{
if (uiID < SearchInfo[0].ItemNum)
{
uiID = uiID + SearchInfo[0].IndexID;
}
else if (uiID < SearchInfo[0].ItemNum + SearchInfo[1].ItemNum)
{
uiID = uiID + SearchInfo[1].IndexID - SearchInfo[0].ItemNum;
}
else if (uiID < SearchInfo[0].ItemNum + SearchInfo[1].ItemNum + SearchInfo[3].ItemNum)
{
uiID = uiID + SearchInfo[3].IndexID - SearchInfo[0].ItemNum - SearchInfo[1].ItemNum;
}
else if (uiID < SearchInfo[0].ItemNum + SearchInfo[1].ItemNum + SearchInfo[3].ItemNum + SearchInfo[30].ItemNum)
{
uiID = uiID + SearchInfo[30].IndexID - SearchInfo[0].ItemNum - SearchInfo[1].ItemNum - SearchInfo[3].ItemNum;
}
else if (uiID < SearchInfo[0].ItemNum + SearchInfo[1].ItemNum + SearchInfo[3].ItemNum + SearchInfo[30].ItemNum + SearchInfo[31].ItemNum)
{
uiID = uiID + SearchInfo[31].IndexID - SearchInfo[0].ItemNum - SearchInfo[1].ItemNum - SearchInfo[3].ItemNum - SearchInfo[30].ItemNum;
}
else
{
uiID = uiID + SearchInfo[58].IndexID - SearchInfo[0].ItemNum - SearchInfo[1].ItemNum - SearchInfo[3].ItemNum - SearchInfo[30].ItemNum - SearchInfo[31].ItemNum;
}
}
GetMediaALLMusicInfo(pMediaInfo, uiID, 0);
}
/*----------------------------------------------------------------------
Name : SearchFun
Desc : 获取unicode字符对应字符拼音首个字母
Params: Word:unicode字符
Return:
Author: phc
Date : 07-12-23
----------------------------------------------------------------------*/
char GetWordFirstLetter(UINT16 Word)
{
UINT16 i = 0;
if (Word >= 'A' && Word <= 'Z') // 'A' ~ 'Z'
{
return (char)Word;
}
else if (Word >= 'a' && Word <= 'z') // 'a' ~ 'z'
{
return (char)(Word - 32);
}
else if (Word >= 0x4E00 && Word <= 0x9fa4)
{
Word = GetCmpResult(Word); // 转化为对应拼音值
for (i = 0;i < 26;i++)
{
if (Word <= SearchKey[i+32])
return (char)(i + 'A');
}
}
else
{
return 0;
}
}
/*----------------------------------------------------------------------
Name : SearchFun
Desc : 根据输入,获取所有音乐中满足搜索条件文件
Params: ptr:首字母字符串
Return: 满足条件文件个数
Author: phc
Date : 07-12-23
----------------------------------------------------------------------*/
UINT16 SearchFun(char *ptr)
{
UINT16 i = 0, j = 0;
UINT16 FilterType = 0;
UINT16 FileNum0 = 0; // 首个字符满足个数
UINT16 Temp = 0;
UINT16 uiID = 0;
UINT16 SearchResult = 0;
FS_FILE* fFile = NULL;
MEDIA_SEARCH_INFO_STRUCT SearchInfo[CHILD_CHAIN_NUM];
MEDIA_SORT_INFO_STRUCT SortIndex;
FILE_SAVE_STRUCT FileInfo;
if (ptr[0] == '\0')
return 0;
fFile = FS_fopen(SortInfoPath, "r");//FileInfoSavePath
if (fFile == NULL)
return 0;
FS_fseek(fFile, SEARCH_INFO_ALL_MUISIC_ADDR, FS_SEEK_SET); //
FS_fread(SearchInfo, sizeof(MEDIA_SEARCH_INFO_STRUCT), CHILD_CHAIN_NUM, fFile);
FS_fclose(fFile);
fFile = NULL;
#ifdef PYSORT_ENABLE
if (TRUE != LoadPYTable(&pPYTableBuff, PYTablePath))
return 0;
#endif
RKmemset(SearchIndexBuffer, 0, sizeof(SearchIndexBuffer)); // 清空搜索buffer
FilterType = ptr[0] - 'A';
FileNum0 = GetSearchTotalNum(ALLMUSIC_SEARCH, FilterType); // 在所有音乐中,获取首个字符满足条件的文件数
Temp = SearchInfo[4+FilterType].ItemNum;
for (i = 0;i < FileNum0;i++)
{
RKmemset(&SortIndex, 0, sizeof(MEDIA_SORT_INFO_STRUCT));
RKmemset(&FileInfo, 0, sizeof(FILE_SAVE_STRUCT));
j = 0;
if (i < Temp)
{
uiID = i + SearchInfo[4+FilterType].IndexID;
}
else
{
uiID = (i + SearchInfo[32+FilterType].IndexID) - Temp;
}
GetSortInfo(&SortIndex, uiID, All_SORT_ADDR);
GetSaveFileInfo(&FileInfo, SortIndex.FileSearchID);
while (ptr[j] != '\0')
{
if (ptr[j] != GetWordFirstLetter(FileInfo.LongFileName[j]))
break;
j++;
}
if (ptr[j] == '\0')
{
SearchIndexBuffer[SearchResult] = SortIndex.FileSearchID;
SearchResult++;
}
}
#ifdef PYSORT_ENABLE
FreePYTable(pPYTableBuff);
pPYTableBuff = NULL;
#endif
return SearchResult;
}
/*----------------------------------------------------------------------
Name : GetMusicInfoBySearchString
Desc : 根据搜索字符串,在检索出的文件中读取文件信息
Params: pMediaInfo:文件列出信息 uiID:文件排序号 uiBaseID:排序基号,在这里无用
Return:
Author: phc
Date : 07-12-23
----------------------------------------------------------------------*/
void GetMusicInfoBySearchString(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 uiBaseID)
{
FILE_SAVE_STRUCT FileInfo;
uiID = SearchIndexBuffer[uiID];
RKmemset(&FileInfo, 0, sizeof(FILE_SAVE_STRUCT));
GetSaveFileInfo(&FileInfo, uiID);
RKmemcpy(pMediaInfo->ListName1, FileInfo.LongFileName, CHAR_NUM_PER_FILE_NAME*sizeof(UINT16)); // 保存的长文件名
RKmemcpy(pMediaInfo->ListName2, FileInfo.ID3Artist, ID3_SAVE_CHAR_NUM*sizeof(UINT16)); // 提取歌手信息
RKmemcpy(pMediaInfo->Name, FileInfo.Name, 11);
RKmemcpy(pMediaInfo->Path, FileInfo.Path, FS_MAX_PATH_LEN);
}
/*----------------------------------------------------------------------
Name : GetSearchPlayMusic
Desc : 播放搜索音乐时,读取搜索播放列表的音乐信息, 该信息不会应重新搜索音乐而改变,只在重新点击搜索音乐播放时会改变
Params: pMediaInfo:文件列出信息 uiID:文件排序号 uiBaseID:排序基号,在这里无用
Return:
Author: phc
Date : 07-12-23
----------------------------------------------------------------------*/
void GetSearchPlayMusic(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 uiBaseID)
{
FILE_SAVE_STRUCT FileInfo;
uiID = SearchPlayBuffer[uiID];
RKmemset(&FileInfo, 0, sizeof(FILE_SAVE_STRUCT));
GetSaveFileInfo(&FileInfo, uiID);
RKmemcpy(pMediaInfo->ListName1, FileInfo.LongFileName, CHAR_NUM_PER_FILE_NAME*sizeof(UINT16)); // 保存的长文件名
RKmemcpy(pMediaInfo->ListName2, FileInfo.ID3Artist, ID3_SAVE_CHAR_NUM*sizeof(UINT16)); // 提取歌手信息
RKmemcpy(pMediaInfo->Name, FileInfo.Name, 11);
RKmemcpy(pMediaInfo->Path, FileInfo.Path, FS_MAX_PATH_LEN);
}
/*----------------------------------------------------------------------
Name : CopySearchInfoToPlayBuffer
Desc : 将搜索信息拷贝到播放buffer中
Params:
Return:
Author: phc
Date : 07-12-24
----------------------------------------------------------------------*/
void CopySearchInfoToPlayBuffer(void)
{
RKmemset(SearchPlayBuffer, 0, sizeof(SearchPlayBuffer));
RKmemcpy(SearchPlayBuffer, SearchIndexBuffer, sizeof(SearchPlayBuffer));
}
/* ---------------------------------------------------------------------------------------------------------------
----------- 媒体库统计信息获取 ------------
------------------------------------------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------
Name : MediaStatInfoLoad
Desc : 获取媒体库统计信息
Params: pMediaStatInfo:统计信息结构体
Return:
Author: phc
Date : 07-10-26
----------------------------------------------------------------------*/
void MediaStatInfoLoad(MEDIA_STAT_STRUCT *pMediaStatInfo)
{
#if 0
MEDIA_STAT_STRUCT *ptr;
char MediaStatKey[] = "MEDIASORT\\MEDIASTAINFO";
ptr = (MEDIA_STAT_STRUCT*)RKRegisterGetKeyValueEx(MediaStatKey, NULL);;
if (ptr == NULL)
{
RKEY key = RKRegisterAddKey(MediaStatKey, sizeof(MEDIA_STAT_STRUCT));
//ptr = (IMAGECONFIG*)RegisterGetRKEYData(MediaStatKey, NULL );
RKmemset(ptr, 0, sizeof(MEDIA_STAT_STRUCT));
}
RKmemcpy(pMediaStatInfo, ptr, sizeof(MEDIA_STAT_STRUCT));
#else
FS_FILE* fFile = NULL;
char *pPath = SortStaInfoPath;
RKmemset(pMediaStatInfo, 0, sizeof(MEDIA_STAT_STRUCT));
fFile = FS_fopen(pPath, "r");
if (fFile != NULL)
{
FS_fread(pMediaStatInfo, sizeof(MEDIA_STAT_STRUCT), 1, fFile);
FS_fclose(fFile);
}
#endif
}
/*----------------------------------------------------------------------
Name : MediaStatInfoSave
Desc : 保存媒体库统计信息到注册表中
Params: pMediaStatInfo:统计信息结构体
Return:
Author: phc
Date : 07-10-26
----------------------------------------------------------------------*/
void MediaStatInfoSave(MEDIA_STAT_STRUCT *pMediaStatInfo)
{
#if 0// 注册表方式写入
MEDIA_STAT_STRUCT *ptr;
char MediaStatKey[] = "MEDIASORT\\MEDIASTAINFO";
ptr = (MEDIA_STAT_STRUCT*)RKRegisterGetKeyValueEx(MediaStatKey, NULL);;
if (ptr == NULL)
{
RKEY key = RKRegisterAddKey(MediaStatKey, sizeof(MEDIA_STAT_STRUCT));
//ptr = (IMAGECONFIG*)RegisterGetRKEYData(MediaStatKey, NULL );
}
RKmemcpy(ptr, pMediaStatInfo, sizeof(MEDIA_STAT_STRUCT));
#else
FS_FILE* fFile = NULL;
char *pPath = SortStaInfoPath;
fFile = FS_fopen(pPath, "rb+");
if (fFile == NULL)
{
fFile = FSFileOpen(pPath, "wb");
}
else
{
FSFileSeek(fFile, 0, SEEK_SET); // 定位到最前面
}
if (fFile != NULL)
{
FS_fwrite(pMediaStatInfo, sizeof(MEDIA_STAT_STRUCT), 1, fFile);
FS_fclose(fFile);
}
#endif
}
#endif
/*----------------------------------------------------------------------
Name : IsMediaNeedChange
Desc : 媒体库是否需要更新标志获取
Params: FlagVal:更新标志,0代表无需更新或更新完毕, 1代表等待更新
Return:
Author: phc
Date : 07-12-20
----------------------------------------------------------------------*/
void SetMediaChangeFlag(UINT16 FlagVal)
{
#if 0
UINT16 *pFlag = NULL;
char MediaChangeKey[] = "MEDSOT\\SOTFLAG";
pFlag = (UINT16*)RKRegisterGetKeyValueEx(MediaChangeKey, NULL);
if (pFlag == NULL)
{
RKEY key = RKRegisterAddKey(MediaChangeKey, sizeof(UINT16));
pFlag = (UINT16*)RKRegisterGetKeyValueEx(MediaChangeKey, NULL);
}
*pFlag = FlagVal;
#else
gInitSysConfig.UpdateMediaLib = FlagVal;
#endif
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -