diff options
Diffstat (limited to 'Src/Winamp/MoreItems.cpp')
-rw-r--r-- | Src/Winamp/MoreItems.cpp | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/Src/Winamp/MoreItems.cpp b/Src/Winamp/MoreItems.cpp new file mode 100644 index 00000000..3446887e --- /dev/null +++ b/Src/Winamp/MoreItems.cpp @@ -0,0 +1,134 @@ +#include "main.h" +#include "MoreItems.h" + +static const wchar_t g_noentry[] = L"No Entry"; + + wchar_t *strFile; + size_t cbFile; + wchar_t *strTitle; + size_t cbTitle; + char *strCurtain; + size_t cbCurtain; + int length; + int index; + unsigned long starttime; // Start time in MS (0, begin of file) + unsigned long endtime; // End time in MS (0, end of file) + moreitems *Next; // Next Item in linked list + +moreitems::moreitems() +: strFile(0), cbFile(0), strTitle(0), cbTitle(0), + strCurtain(0), cbCurtain(0), length(0), index(0), + starttime(0), endtime(0), Next(0) +{ +} + +moreitems::~moreitems() +{ + // recursive, find the _tail and remove it, work back to _head + delete Next; Next = NULL; + delete[] strFile; strFile=NULL; + delete[] strTitle; + delete[] strCurtain; +} + +const wchar_t *moreitems::GetHiddenFilename(int index) +{ + if (this->index == index) + return strFile; + if (Next == NULL) + return g_noentry; + return Next->GetHiddenFilename(index); +} + +int moreitems::SetRange(int index, unsigned long start, unsigned long end) +{ + if (this->index == index) + { + this->starttime = start; + this->endtime = end; + return 1; + } + if (Next == NULL) + return 0; + return Next->SetRange(index,start,end); +} + +unsigned long moreitems::GetStart(int index) +{ + if (this->index == index) + { + return this->starttime; + } + if (Next == NULL) + return 0; + return Next->GetStart(index); +} + +unsigned long moreitems::GetEnd(int index) +{ + if (this->index == index) + { + return this->endtime; + } + if (Next == NULL) + return 0; + return Next->GetEnd(index); +} + +int moreitems::AddHiddenItem(const wchar_t *filename, const wchar_t *title, int length, int index, char *curtain) +{ + // Linked list _head + moreitems *additem = this; + if (additem && index == 1) + { + // List empty + // Use placeholder + } + else + { + // Found items, walk to the end + while (additem && additem->Next) additem = additem->Next; + if (additem) + { + additem->Next = new moreitems; + additem = additem->Next; + } + } + if (additem) + { + additem->cbFile = lstrlenW(filename) + 1; + additem->strFile = new wchar_t[additem->cbFile]; + StringCchCopyW(additem->strFile , additem->cbFile, filename); + additem->cbTitle = (int)lstrlenW(title) + 1; + additem->strTitle = new wchar_t[additem->cbFile]; + StringCchCopyW(additem->strTitle, additem->cbTitle, title); + if (curtain && *curtain) + { + additem->cbCurtain = (int)strlen(curtain) + 1; + additem->strCurtain = new char[additem->cbCurtain]; + StringCchCopyA(additem->strCurtain, additem->cbCurtain, curtain); + } + else + { + additem->cbCurtain = 0; + additem->strCurtain = NULL; + } + + additem->length = length; + additem->index = index; + + return 1; + } + return 0; +} + +const char *moreitems::GetHiddenCurtain(int index) +{ + moreitems *where = this; + while ( where ) + { + if ( where->index == index && where->cbCurtain ) return where->strCurtain; + where = where->Next; + } + return NULL; +} |