void SyncDatabase::removeRecords(int r_id) { QSqlQuery query(*db); query.exec(QString("DELETE FROM content WHERE id = %1").arg(r_id)); if (!query.exec(QString("SELECT id FROM content WHERE parent_id = %1").arg(r_id))) return; while (query.next()) { removeRecords(query.value(0).toInt()); } }
void SyncDatabase::saveSyncFile(SyncFile * sf, int parent_id) { if (!sf->isInDatabase()) { QSqlQuery(*db).exec(QString("INSERT INTO content (id, parent_id, file_name, last_modified) VALUES (%1, %2, '%3', '%4')") .arg(sf->index()) .arg(parent_id) .arg(sf->getName()) .arg(sf->lastModifiedString())); } else if (sf->wasModified() && sf->wasDeleted()) { removeRecords(sf->index()); return; } else if (sf->wasModified()) { QSqlQuery(*db).exec(QString("UPDATE content SET parent_id = %1, file_name = '%2', last_modified = '%3' WHERE id = %4") .arg(parent_id) .arg(sf->getName()) .arg(sf->lastModifiedString()) .arg(sf->index())); } for (int i = 0; i < sf->childCount(); ++i) { saveSyncFile(sf->childAt(i), sf->index()); } }
MRESULT EXPENTRY wpCD(HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) { switch (msg) { case WM_INITDLG: { ULONG rc, i; HFILE CDDevice; ULONG action; ULONG len; struct { USHORT CountCD; USHORT FirstCD; } CDInfo; FIELDINFO *firstFieldInfo, *posFieldInfo, *splitFieldInfo; FIELDINFOINSERT fieldInfoInsert; CNRINFO cnrInfo; cnrInfo.cb = sizeof(cnrInfo); firstFieldInfo = posFieldInfo = allocaFieldInfo(hwnd, CT_TRACK, NUM_FIELDS); posFieldInfo->flData = CFA_BITMAPORICON | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Icon"; posFieldInfo->offStruct = FIELDOFFSET(RECORDCORE,hptrIcon); fieldInfo[0] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Filename"; posFieldInfo->offStruct = FIELDOFFSET(RECORDCORE,pszIcon); fieldInfo[1] = posFieldInfo; cnrInfo.pFieldInfoLast = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_ULONG | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Track #"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,track); fieldInfo[2] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR | CFA_FIREADONLY; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Type"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,typepointer); fieldInfo[3] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR | CFA_FIREADONLY; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Time"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,timepointer); fieldInfo[4] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_ULONG | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Size"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,size); fieldInfo[5] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_ULONG | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "MP3 Size"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,mp3size); fieldInfo[6] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Title"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,titleptr); fieldInfo[7] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Artist"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,artistptr); fieldInfo[8] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Album"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,albumptr); fieldInfo[9] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Year"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,yearptr); fieldInfo[10] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Genre"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,genreptr); fieldInfo[11] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Comment"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,commentptr); fieldInfo[12] = posFieldInfo; fieldInfoInsert.cb = sizeof(fieldInfoInsert); fieldInfoInsert.pFieldInfoOrder = (FIELDINFO *) CMA_FIRST; fieldInfoInsert.fInvalidateFieldInfo = TRUE; fieldInfoInsert.cFieldInfoInsert = NUM_FIELDS; insertFieldInfo(hwnd, CT_TRACK, firstFieldInfo, &fieldInfoInsert); cnrInfo.xVertSplitbar = 100; cnrInfo.flWindowAttr = CV_DETAIL | CA_DETAILSVIEWTITLES; WinSendDlgItemMsg(hwnd,CT_TRACK,CM_SETCNRINFO, MPFROMP(&cnrInfo), MPFROMLONG(CMA_PFIELDINFOLAST | CMA_XVERTSPLITBAR | CMA_FLWINDOWATTR)); loadConfig(CFGFILE, &grabbers, &countGrabbers); for(i = 0; i < countGrabbers; i++) insertItemText(hwnd,CB_GRABBER,LIT_END,grabbers[i].id); selectItem(hwnd,CB_GRABBER,0); setText(hwnd, EF_TITLE, "Title"); /* wohw, this is too powerful, need cooling */ len = sizeof(CDInfo); if(!DosOpen("\\DEV\\CD-ROM2$", &CDDevice, &action, 0, FILE_NORMAL, OPEN_ACTION_OPEN_IF_EXISTS, OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY, NULL)) { if(!DosDevIOCtl(CDDevice, 0x82, 0x60, NULL, 0, NULL, &CDInfo, len, &len)) { for(i = 0; i < CDInfo.CountCD; i++) { char driveLetter[3] = { (char) ('A' + CDInfo.FirstCD + i), ':', 0}; insertItemText(hwnd,CB_DRIVE,LIT_END,driveLetter); } } DosClose(CDDevice); } selectItem(hwnd,CB_DRIVE,0); wpCT = WinSubclassWindow(WinWindowFromID(hwnd,CT_TRACK),wpCTTrack); dataIco = WinLoadPointer(HWND_DESKTOP, NULLHANDLE, ICO_DATA); trackIco = WinLoadPointer(HWND_DESKTOP, NULLHANDLE, ICO_TRACK); loadIni(hwnd); return 0; } case WM_COMMAND: return processCommand(hwnd,mp1,mp2); case WM_CONTROL: return processControl(hwnd,mp1,mp2); case WM_ADJUSTFRAMEPOS: { SWP *pos = (SWP*) PVOIDFROMMP(mp1); static int bitRateCheck = 0; if(pos->fl & SWP_SIZE) { SWP ctpos; WinQueryWindowPos(WinWindowFromID(hwnd, CT_TRACK), &ctpos); WinSetWindowPos (WinWindowFromID(hwnd, CT_TRACK), 0, 0, ctpos.y, pos->cx, pos->cy - ctpos.y, SWP_SIZE | SWP_SHOW | SWP_MOVE); } if((pos->fl & SWP_SHOW) && bitRateChanged != bitRateCheck) { bitRateCheck = bitRateChanged; refreshFieldInfo(hwnd, CT_TRACK); } break; } case WM_MENUEND: removeSourceEmphasis(HWNDFROMMP(mp2),&sourceEmphasisInfo); return 0; case WM_CLOSE: { WinDestroyPointer(dataIco); WinDestroyPointer(trackIco); free(grabbers); saveIni(hwnd); /* delete all current records */ CDTRACKRECORD *record = (CDTRACKRECORD *) enumRecords(hwnd, CT_TRACK, NULL, CMA_FIRST); while(record && record != (CDTRACKRECORD *) -1) { free(record->record.pszIcon); record = (CDTRACKRECORD *) enumRecords(hwnd, CT_TRACK, (RECORDCORE *) record, CMA_NEXT); } removeRecords(hwnd, CT_TRACK, NULL, 0); removeFieldInfo(hwnd,CT_TRACK, NULL, 0); return 0; } case WM_CHAR: if(SHORT2FROMMP(mp2) == VK_ESC) return 0; else break; /* back from worker thread */ case DLGCD_REFRESH: dlgcd_refresh2(mp1,mp2); return 0; case CDDB_FUZZYMATCH: { CDDBQUERY_DATA *matches = (CDDBQUERY_DATA *) mp1, *chosen = (CDDBQUERY_DATA *) mp2; FUZZYMATCHCREATEPARAMS data = {matches,chosen}; WinDlgBox(HWND_DESKTOP, hwnd, wpMatch, NULLHANDLE, DLG_MATCH, &data); return 0; } } return WinDefDlgProc( hwnd, msg, mp1, mp2 ); }
void dlgcd_refresh2(void *mp1, void *mp2) { int i; HWND hwnd = (HWND) mp1; CDTRACKRECORD *record; CDTRACKRECORD *firstRecord, *posRecord; RECORDINSERT recordInfo; char buffer[256]; char buffer2[256]; USHORT bitrate = getBitRate(); if(!cdDrive) return; if(cddbSocket) { setText(hwnd,EF_ARTIST,cddbSocket->get_disc_title(0)); setText(hwnd,EF_TITLE,cddbSocket->get_disc_title(1)); setText(hwnd,EF_COMMENTS,cddbSocket->get_disc_title(2)); setText(hwnd,EF_GENRE,queryData.category); } /* delete all current records */ record = (CDTRACKRECORD *) enumRecords(hwnd, CT_TRACK, NULL, CMA_FIRST); while(record && record != (CDTRACKRECORD *) -1) { free(record->record.pszIcon); record = (CDTRACKRECORD *) enumRecords(hwnd, CT_TRACK, (RECORDCORE *) record, CMA_NEXT); } removeRecords(hwnd, CT_TRACK, NULL, 0); /* allocate and fill container with CD Track Info */ firstRecord = posRecord = (CDTRACKRECORD *) allocaRecords(hwnd, CT_TRACK, cdDrive->getCount(), sizeof(CDTRACKRECORD) - sizeof(RECORDCORE)); for (i = 0; i < cdDrive->getCount(); i++) { UCHAR track = cdDrive->getCDInfo()->firstTrack+i; /* setting kludges and other weird things */ posRecord->timepointer = posRecord->time; posRecord->typepointer = posRecord->type; posRecord->titleptr = posRecord->title; posRecord->artistptr = posRecord->artist; posRecord->albumptr = posRecord->album; posRecord->yearptr = posRecord->year; posRecord->genreptr = posRecord->genre; posRecord->commentptr = posRecord->comment; posRecord->record.hptrMiniIcon = 0; /* ask God */ /* loading info fields */ if(cdDrive->getTrackInfo(track)->data) { strcat(posRecord->time,"N/A"); strcat(posRecord->type,"Data"); posRecord->mp3size = 0; posRecord->record.hptrIcon = dataIco; } else { posRecord->minutes = cdDrive->getTrackInfo(track)->length.minute; posRecord->seconds = cdDrive->getTrackInfo(track)->length.second; sprintf(posRecord->time,"%d:%.2d",cdDrive->getTrackInfo(track)->length.minute, cdDrive->getTrackInfo(track)->length.second); strcat(posRecord->type,"Audio"); if(bitrate) posRecord->mp3size = cdDrive->getTrackInfo(track)->size / ((cdDrive->getTrackInfo(track)->channels*2*44100) / ((double) bitrate * 1000/8)) + 0.5; else posRecord->mp3size = 0; posRecord->record.hptrIcon = trackIco; } posRecord->track = cdDrive->getTrackInfo(track)->number; posRecord->size = cdDrive->getTrackInfo(track)->size; posRecord->channels = cdDrive->getTrackInfo(track)->channels; posRecord->data = cdDrive->getTrackInfo(track)->data; if(cddbSocket) { strncpy(posRecord->title, cddbSocket->get_track_title(i,0), sizeof(posRecord->title)-1); strncpy(posRecord->artist, cddbSocket->get_disc_title(0), sizeof(posRecord->artist)-1); strncpy(posRecord->album, cddbSocket->get_disc_title(1), sizeof(posRecord->album)-1); strncpy(posRecord->comment, cddbSocket->get_track_title(i,1), sizeof(posRecord->comment)-1); strncpy(posRecord->genre, queryData.category, sizeof(posRecord->genre)-1); // cddbSocket->get_disc_title(2) getFilenameFormat(buffer2,sizeof(buffer2)); } else { getText(hwnd,EF_ARTIST,buffer,sizeof(buffer)); strncpy(posRecord->artist, buffer, sizeof(posRecord->artist)-1); getText(hwnd,EF_TITLE,buffer,sizeof(buffer)); strncpy(posRecord->album, buffer, sizeof(posRecord->album)-1); getText(hwnd,EF_COMMENTS,buffer,sizeof(buffer)); strncpy(posRecord->comment, buffer, sizeof(posRecord->comment)-1); getText(hwnd,EF_GENRE,buffer,sizeof(buffer)); strncpy(posRecord->genre, buffer, sizeof(posRecord->genre)-1); getFallbackFF(buffer2, sizeof(buffer2)); } formatFilename(buffer,sizeof(buffer),buffer2,posRecord,hwnd); posRecord->record.pszIcon = posRecord->record.pszText = posRecord->record.pszName = posRecord->record.pszTree = (char*) malloc(strlen(buffer)+1); strcpy(posRecord->record.pszIcon,makeValidLFN(buffer)); /* "next!" */ posRecord = (CDTRACKRECORD *) posRecord->record.preccNextRecord; } recordInfo.cb = sizeof(recordInfo); recordInfo.pRecordOrder = (RECORDCORE *) CMA_END; recordInfo.pRecordParent = NULL; recordInfo.fInvalidateRecord = TRUE; recordInfo.zOrder = CMA_TOP; recordInfo.cRecordsInsert = cdDrive->getCount(); insertRecords(hwnd, CT_TRACK, (RECORDCORE *) firstRecord, &recordInfo); delete cdDrive; cdDrive = NULL; delete cddbSocket; cddbSocket = NULL; }