Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
93
Src/Plugins/Library/ml_history/HistoryAPI.cpp
Normal file
93
Src/Plugins/Library/ml_history/HistoryAPI.cpp
Normal file
|
@ -0,0 +1,93 @@
|
|||
#include "HistoryAPI.h"
|
||||
#include "ml_history.h"
|
||||
|
||||
static void saveQueryToList(nde_scanner_t s, historyRecordList *obj)
|
||||
{
|
||||
emptyRecentRecordList(obj);
|
||||
|
||||
NDE_Scanner_First(s);
|
||||
|
||||
int r;
|
||||
do
|
||||
{
|
||||
nde_field_t f = NDE_Scanner_GetFieldByID(s, HISTORYVIEW_COL_FILENAME);
|
||||
if (f)
|
||||
{
|
||||
allocRecentRecordList(obj, obj->Size + 1);
|
||||
if (!obj->Alloc) break;
|
||||
|
||||
wchar_t *strval = NDE_StringField_GetString(f);
|
||||
ndestring_retain(strval);
|
||||
obj->Items[obj->Size].filename = strval;
|
||||
recentScannerRefToObjCacheNFN(s, obj);
|
||||
}
|
||||
|
||||
r = NDE_Scanner_Next(s);
|
||||
}
|
||||
while (r && !NDE_Scanner_EOF(s));
|
||||
|
||||
if (obj->Size && obj->Size < obj->Alloc - 1024)
|
||||
{
|
||||
size_t old_Alloc = obj->Alloc;
|
||||
obj->Alloc = obj->Size;
|
||||
historyRecord *data = (historyRecord*)realloc(obj->Items, sizeof(historyRecord) * obj->Alloc);
|
||||
if (data)
|
||||
{
|
||||
obj->Items=data;
|
||||
}
|
||||
else
|
||||
{
|
||||
data=(historyRecord*)malloc(sizeof(historyRecord)*obj->Alloc);
|
||||
if (data)
|
||||
{
|
||||
memcpy(data, obj->Items, sizeof(historyRecord)*old_Alloc);
|
||||
free(obj->Items);
|
||||
obj->Items=data;
|
||||
}
|
||||
else obj->Alloc = (int)old_Alloc;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
historyRecordList *HistoryAPI::Query(const wchar_t *query)
|
||||
{
|
||||
if (!openDb())
|
||||
return 0;
|
||||
|
||||
// run query
|
||||
EnterCriticalSection(&g_db_cs);
|
||||
nde_scanner_t s=NDE_Table_CreateScanner(g_table);
|
||||
NDE_Scanner_Query(s, query);
|
||||
|
||||
historyRecordList obj;
|
||||
|
||||
obj.Alloc = 0;
|
||||
obj.Items = NULL;
|
||||
obj.Size = 0;
|
||||
saveQueryToList(s, &obj);
|
||||
NDE_Table_DestroyScanner(g_table, s);
|
||||
LeaveCriticalSection(&g_db_cs);
|
||||
if (obj.Size)
|
||||
{
|
||||
historyRecordList *result = (historyRecordList *)malloc(sizeof(historyRecordList));
|
||||
memcpy(result, &obj, sizeof(historyRecordList));
|
||||
return result;
|
||||
}
|
||||
else
|
||||
{
|
||||
freeRecentRecordList(&obj);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void HistoryAPI::FreeHistoryList(historyRecordList *historyList)
|
||||
{
|
||||
freeRecentRecordList(historyList);
|
||||
}
|
||||
|
||||
#define CBCLASS HistoryAPI
|
||||
START_DISPATCH;
|
||||
CB(API_HISTORY_QUERY, Query)
|
||||
VCB(API_HISTORY_FREEHISTORYLIST, FreeHistoryList)
|
||||
END_DISPATCH;
|
||||
#undef CBCLASS
|
Loading…
Add table
Add a link
Reference in a new issue