123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- /** (c) Nullsoft, Inc. C O N F I D E N T I A L
- ** Filename:
- ** Project:
- ** Description:
- ** Author:
- ** Created:
- **/
- #include "main.h"
- #include "../Plugins/Library/ml_bookmarks/bookmark.h"
- #include <malloc.h>
- #include "api.h"
- #include "../nu/AutoCharFn.h"
- #include "../nu/AutoChar.h"
- #include <strsafe.h>
- void Bookmark_additem(wchar_t *fn, wchar_t *ft)
- {
- if ((!fn || fn && !*fn) || (!ft || ft && !*ft)) return;
- BookmarkWriter bookmarks;
- bookmarks.Open(BOOKMARKFILE);
- bookmarks.Write(AutoCharFn(fn), AutoCharFn(ft));
- bookmarks.Close();
- bookmarks.Open(BOOKMARKFILE8);
- bookmarks.Write(AutoChar(fn, CP_UTF8), AutoChar(ft, CP_UTF8));
- bookmarks.Close();
- size_t bufSize = wcslen(fn)+wcslen(ft)+3;
- wchar_t *buf=(wchar_t*)_malloca(bufSize*sizeof(wchar_t)), *buf2pass = buf;
- if (buf)
- {
- StringCchCopyExW(buf, bufSize, fn, &buf, &bufSize, 0);
- buf++; bufSize--;
- StringCchCopyW(buf, bufSize, ft);
- SendMessageW(hMainWindow,WM_WA_IPC,(WPARAM)buf2pass,IPC_ADDBOOKMARKW);
- AGAVE_API_STATS->IncrementStat(api_stats::BOOKMARK_COUNT);
- _freea(buf);
- }
- }
- void Bookmark_AddCommandline(wchar_t *lpszCmdParam)
- {
- wchar_t *p = lpszCmdParam;
- if (p)
- {
- if (*p == L'\"') { p++; p[lstrlenW(p) - 1] = 0; }
- Bookmark_additem(p, PlayList_gettitle(p, 1));
- }
- }
- void WriteEscaped(FILE *fp, const char *str)
- {
- // TODO: for speed optimization,
- // we should wait until we hit a special character
- // and write out everything else so before it,
- // like how ASX loader does it
- while (str && *str)
- {
- switch(*str)
- {
- case '&':
- fputs("&", fp);
- break;
- case '>':
- fputs(">", fp);
- break;
- case '<':
- fputs("<", fp);
- break;
- case '\'':
- fputs("'", fp);
- break;
- case '\"':
- fputs(""", fp);
- break;
- default:
- fputc(*str, fp);
- break;
- }
- // write out the whole character
- char *next = CharNextA(str);
- while (++str != next)
- fputc(*str, fp);
- }
- }
- void Bookmark_WriteAsXML(const wchar_t *filename, int max)
- {
- FILE *destFp=_wfopen(filename,L"wb");
- FILE *fp=_wfopen(BOOKMARKFILE8,L"rt");
- if (fp && destFp)
- {
- //fprintf(destFp, "<?xml version=\"1.0\" encoding=\"windows-%u\"?>", GetACP());
- fprintf(destFp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
- fputs("<bookmarks>\n", destFp);
- int x=0;
- for (;;)
- {
- char ft[4096] = {0}, fn[4096] = {0};
- fgets(fn,4096,fp);
- if (feof(fp)) break;
- fgets(ft,4096,fp);
- if (feof(fp)) break;
- if (ft[0] && fn[0])
- {
- if (fn[strlen(fn)-1]=='\n') fn[strlen(fn)-1]=0;
- if (ft[strlen(ft)-1]=='\n') ft[strlen(ft)-1]=0;
- if (ft[0] && fn[0])
- {
- fputs("<bookmark file=\"", destFp);
- WriteEscaped(destFp, fn);
- fputs("\" title=\"", destFp);
- WriteEscaped(destFp, ft);
- fputs("\"/>\n", destFp);
- x++;
- }
- }
- if (x == max)
- break;
- }
- fputs("</bookmarks>", destFp);
- }
- if (fp)
- fclose(fp);
- if (destFp)
- fclose(destFp);
- }
|