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());
    }
}
Exemple #3
0
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 );
}
Exemple #4
0
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;
}