void ListUpdater::finish(DownloadOperation operation) { if (operation == DOWNLOAD_HASH) { if (compareHashes()) { // No new updates removeServerHashFile(); emit finished(NO_UPDATE); return ; } downloadList(); } else if (operation == DOWNLOAD_LIST) { removeOldFiles(); renameNewFiles(); emit finished(UPDATE); } }
char * findMissingSongs(char * masterList, char * clientList, char * masterHash, char * clientHash) { char MASTER[strlen(masterList)+1]; char CLIENT[strlen(clientList)+1]; char mHash[32]; char cHash[32]; char * cHashCounter = clientHash; memset(MASTER, 0, strlen(masterList)+1); memset(CLIENT, 0, strlen(clientList)+1); memset(mHash, 0, 32); memset(cHash, 0, 32); int i; strncpy(MASTER, masterList, strlen(masterList)); strncpy(CLIENT, clientList, strlen(clientList)); char CLIENTCopy[strlen(CLIENT)]; strncpy(CLIENTCopy, CLIENT, strlen(CLIENT)); char * MISSING = (char *) malloc(10000 * sizeof(char)); memset(MISSING, 0, sizeof(MISSING)); char * mHashIterator; char * cHashIterator; char * masterIterator; char * clientIterator; char * endmHash; char * endcHash; char * endMASTER; char * endCLIENT; int found=0; //Get next hash from master memcpy(mHash, masterHash, 32); /*printf("mHash: "); for(i = 0; i < 32; i++) printf("%02x", (unsigned char) mHash[i]); printf("\n");*/ //Get next file name from master masterIterator = strtok_r(MASTER,";",&endMASTER); while(masterIterator != NULL) { //Reset clientHash pointer cHashCounter = clientHash; //Get next hash from client memcpy(cHash, cHashCounter, 32); /*printf("cHash: "); for(i = 0; i < 32; i++) printf("%02x", (unsigned char) cHash[i]); printf("\n");*/ //Reset CLIENT File names list strncpy(CLIENTCopy,CLIENT,strlen(CLIENT)); //Get next file name from client clientIterator = strtok_r(CLIENTCopy, ";", &endCLIENT); while( clientIterator != NULL ) { //Compare Hashes if (compareHashes(mHash,cHash,32)){ found = 1; } //Get next hash from client cHashCounter = cHashCounter + 32; memcpy(cHash, cHashCounter, 32); /*printf("cHash: "); for(i = 0; i < 32; i++) printf("%02x", (unsigned char) cHash[i]); printf("\n");*/ //Get next file name from client clientIterator = strtok_r(NULL,";", &endCLIENT); } //No Matches if (found == 0) { //Add File name from master to MISSING list //MISSING = (char *) realloc(MISSING, strlen(masterIterator)); strncat(MISSING, masterIterator, strlen(masterIterator)); strncat(MISSING, ";", sizeof(char)); } //reset found found = 0; //Get next hash from master masterHash = masterHash + 32; memcpy(mHash, masterHash, 32); /*printf("mHash: "); for(i = 0; i < 32; i++) printf("%02x", (unsigned char) mHash[i]); printf("\n");*/ //Get next file name from master masterIterator = strtok_r(NULL,";",&endMASTER); } //Set null terminator in MISSING MISSING[strlen(MISSING)-1]=0; //printf("missing: %s\n", MISSING); return MISSING; }