bool PreviewGenerator::event(QEvent *e) { if (e->type() != (QEvent::Type) MythEvent::MythEventMessage) return QObject::event(e); MythEvent *me = (MythEvent*)e; if (me->Message() != "GENERATED_PIXMAP" || me->ExtraDataCount() < 3) return QObject::event(e); bool ok = me->ExtraData(0) == "OK"; bool ours = false; uint i = ok ? 4 : 3; for (; i < (uint) me->ExtraDataCount() && !ours; i++) ours |= me->ExtraData(i) == token; if (!ours) return false; QString pginfokey = me->ExtraData(1); QMutexLocker locker(&previewLock); gotReply = true; pixmapOk = ok; if (!ok) { LOG(VB_GENERAL, LOG_ERR, LOC + pginfokey + ": " + me->ExtraData(2)); previewWaitCondition.wakeAll(); return true; } if (me->ExtraDataCount() < 5) { pixmapOk = false; previewWaitCondition.wakeAll(); return true; // could only happen with very broken client... } QDateTime datetime = QDateTime::fromString(me->ExtraData(3), Qt::ISODate); if (!datetime.isValid()) { pixmapOk = false; LOG(VB_GENERAL, LOG_ERR, LOC + pginfokey + "Got invalid date"); previewWaitCondition.wakeAll(); return false; } size_t length = me->ExtraData(4).toULongLong(); quint16 checksum16 = me->ExtraData(5).toUInt(); QByteArray data = QByteArray::fromBase64(me->ExtraData(6).toAscii()); if ((size_t) data.size() < length) { // (note data.size() may be up to 3 // bytes longer after decoding LOG(VB_GENERAL, LOG_ERR, LOC + QString("Preview size check failed %1 < %2") .arg(data.size()).arg(length)); data.clear(); } data.resize(length); if (checksum16 != qChecksum(data.constData(), data.size())) { LOG(VB_GENERAL, LOG_ERR, LOC + "Preview checksum failed"); data.clear(); } pixmapOk = (data.isEmpty()) ? false : SaveOutFile(data, datetime); previewWaitCondition.wakeAll(); return true; }
//---------------------------------------------------------------------------------- bool TrKMclass::Process() { if(!initialized) return false; if(!AdjustMemoryLimits()) return false; //w1.startTimer(); //// Create monitors mm = new CMemoryMonitor(max_mem_size); //bo = new CBinOrdering(n_bins); //// Create queues int n_splitters_read = 1; pkmer = new CPartKMERQueue(max_mem_seqKMER); // wczytany plik z kmerami // ---------------------------------- kmers ------------- //new ----------------- bin_kmers = new CBinKmers_all_new(n_splitters, kmer_len, num_kmer, max_mem_binsKMER); w_splittersKMER.resize(n_splitters); for(int i = 0; i < n_splitters; ++i) { w_splittersKMER[i] = new CWKmersSplitter_new(mm, pkmer, bin_kmers, kmer_len, prefix_len); //wstawianie kmerow do koszy gr2.create_thread(boost::ref(*w_splittersKMER[i])); } w_kmers = new CWKmersReader(mm, data_file_name, kmers_buffer_size, pkmer, kmer_len, bin_kmers->fun_start_prefix()); gr1.create_thread(boost::ref(*w_kmers)); gr1.join_all(); // read kmers gr2.join_all(); // split kmers delete w_kmers; for(int i = 0; i < n_splitters; ++i) { delete w_splittersKMER[i]; } //w1.stopTimer(); cout << "\n"; //w2.startTimer(); SaveOutFile(); // ---------------------------------------------------- //delete pread; delete pkmer; delete bin_kmers; //delete bpq; //delete bd; //delete bq; //delete kq; //w2.stopTimer(); return true; }