fixed that it checks the current dir for demos too

This commit is contained in:
oy 2010-09-24 13:38:03 +02:00
parent 1cbf731fc0
commit 7e0b37e06c
9 changed files with 29 additions and 17 deletions

View file

@ -863,7 +863,7 @@ int net_init()
return 0;
}
int fs_listdir(const char *dir, FS_LISTDIR_CALLBACK cb, void *user)
int fs_listdir(const char *dir, FS_LISTDIR_CALLBACK cb, int type, void *user)
{
#if defined(CONF_FAMILY_WINDOWS)
WIN32_FIND_DATA finddata;
@ -880,7 +880,7 @@ int fs_listdir(const char *dir, FS_LISTDIR_CALLBACK cb, void *user)
do
{
if(finddata.cFileName[0] != '.')
cb(finddata.cFileName, 0, user);
cb(finddata.cFileName, 0, type, user);
} while (FindNextFileA(handle, &finddata));
FindClose(handle);
@ -893,7 +893,7 @@ int fs_listdir(const char *dir, FS_LISTDIR_CALLBACK cb, void *user)
return 0;
while((entry = readdir(d)) != NULL)
cb(entry->d_name, 0, user);
cb(entry->d_name, 0, type, user);
/* close the directory and return */
closedir(d);

View file

@ -888,13 +888,14 @@ void str_hex(char *dst, int dst_size, const void *data, int data_size);
Parameters:
dir - Directory to list
cb - Callback function to call for each entry
type - Type of the directory
user - Pointer to give to the callback
Returns:
Always returns 0.
*/
typedef void (*FS_LISTDIR_CALLBACK)(const char *name, int is_dir, void *user);
int fs_listdir(const char *dir, FS_LISTDIR_CALLBACK cb, void *user);
typedef void (*FS_LISTDIR_CALLBACK)(const char *name, int is_dir, int dir_type, void *user);
int fs_listdir(const char *dir, FS_LISTDIR_CALLBACK cb, int type, void *user);
/*
Function: fs_makedir

View file

@ -137,23 +137,33 @@ public:
// list current directory
if(Types&TYPE_CURRENT)
{
fs_listdir(pPath, pfnCallback, pUser);
fs_listdir(pPath, pfnCallback, TYPE_CURRENT, pUser);
}
// list users directory
if(Types&TYPE_SAVE)
{
str_format(aBuffer, sizeof(aBuffer), "%s/%s", m_aApplicationSavePath, pPath);
fs_listdir(aBuffer, pfnCallback, pUser);
fs_listdir(aBuffer, pfnCallback, TYPE_SAVE, pUser);
}
// list datadir directory
if(Types&TYPE_DATA)
{
str_format(aBuffer, sizeof(aBuffer), "%s/%s", m_aDatadir, pPath);
fs_listdir(aBuffer, pfnCallback, pUser);
fs_listdir(aBuffer, pfnCallback, TYPE_DATA, pUser);
}
}
virtual const char *GetDirectory(int Type) const
{
switch(Type)
{
case TYPE_SAVE: return m_aApplicationSavePath;
case TYPE_DATA: return m_aDatadir;
default: return "";
}
}
virtual IOHANDLE OpenFile(const char *pFilename, int Flags, char *pBuffer = 0, int BufferSize = 0)
{

View file

@ -16,6 +16,7 @@ public:
};
virtual void ListDirectory(int Types, const char *pPath, FS_LISTDIR_CALLBACK pfnCallback, void *pUser) = 0;
virtual const char *GetDirectory(int Type) const = 0;
virtual IOHANDLE OpenFile(const char *pFilename, int Flags, char *pBuffer = 0, int BufferSize = 0) = 0;
virtual bool RemoveFile(const char *pFilename) = 0;
};

View file

@ -167,8 +167,7 @@ class CMenus : public CComponent
bool m_DemolistDelEntry;
void DemolistPopulate();
static void DemolistCountCallback(const char *pName, int IsDir, void *pUser);
static void DemolistFetchCallback(const char *pName, int IsDir, void *pUser);
static void DemolistFetchCallback(const char *pName, int IsDir, int DirType, void *pUser);
// found in menus.cpp
int Render();

View file

@ -408,7 +408,7 @@ int CMenus::UiDoListboxEnd(float *pScrollValue, bool *pItemActivated)
return gs_ListBoxNewSelected;
}
void CMenus::DemolistFetchCallback(const char *pName, int IsDir, void *pUser)
void CMenus::DemolistFetchCallback(const char *pName, int IsDir, int DirType, void *pUser)
{
if(pName[0] == '.')
return;
@ -416,7 +416,8 @@ void CMenus::DemolistFetchCallback(const char *pName, int IsDir, void *pUser)
CMenus *pSelf = (CMenus *)pUser;
CDemoItem Item;
str_format(Item.m_aFilename, sizeof(Item.m_aFilename), "%s/%s/%s", pSelf->Client()->UserDirectory(), pSelf->m_aCurrentDemoFolder, pName);
str_format(Item.m_aFilename, sizeof(Item.m_aFilename), "%s%s%s/%s", pSelf->Storage()->GetDirectory(DirType),
pSelf->Storage()->GetDirectory(DirType)[0] ? "/" : "", pSelf->m_aCurrentDemoFolder, pName);
str_copy(Item.m_aName, pName, sizeof(Item.m_aName));
pSelf->m_lDemos.add(Item);
}
@ -433,7 +434,7 @@ void CMenus::DemolistPopulate()
m_lDemos.add(Item);
}
Storage()->ListDirectory(IStorage::TYPE_SAVE, m_aCurrentDemoFolder, DemolistFetchCallback, this);
Storage()->ListDirectory(IStorage::TYPE_SAVE|IStorage::TYPE_CURRENT, m_aCurrentDemoFolder, DemolistFetchCallback, this);
}

View file

@ -10,7 +10,7 @@
#include "skins.h"
void CSkins::SkinScan(const char *pName, int IsDir, void *pUser)
void CSkins::SkinScan(const char *pName, int IsDir, int DirType, void *pUser)
{
CSkins *pSelf = (CSkins *)pUser;
int l = str_length(pName);

View file

@ -28,6 +28,6 @@ public:
private:
sorted_array<CSkin> m_aSkins;
static void SkinScan(const char *pName, int IsDir, void *pUser);
static void SkinScan(const char *pName, int IsDir, int DirType, void *pUser);
};
#endif

View file

@ -2146,9 +2146,9 @@ void CEditor::RenderImages(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
}
static void EditorListdirCallback(const char *pName, int IsDir, void *pUser)
static void EditorListdirCallback(const char *pName, int IsDir, int DirType, void *pUser)
{
if(pName[0] == '.' && pName[1] == 0)
if(pName[0] == '.' && pName[1] == 0)
return;
CEditor *pEditor = (CEditor*)pUser;