void doFirstLoad(){ float x = 10; float y = 10; thumbs.clear(); for(int i = 0; i < videos.size(); i++){ string name = videos[i].substr(7, videos[i].length()-7); string thumb = "thumbs/"+name+".jpg"; cout <<"thumb " << thumb <<endl; if( !ofFile::doesFileExist(thumb) ){ makeThumb(videos[i], thumb); } imageThumb it; it.setup(x,y,thumb,videos[i]); if( x + it.r.width >= ofGetWidth() ){ x = 10; y += 100; }else{ x += it.r.width + 10; } thumbs.push_back(it); } }
bool Images::downloadImages () { // all done if we got a valid thumbnail //if ( m_thumbnailValid ) return true; long srcLen; char *src = NULL; long node; // downloading an image from diffbot json reply? if ( m_xd->m_isDiffbotJSONObject ) { // i guess this better not block cuz we'll core! char **iup = m_xd->getDiffbotPrimaryImageUrl(); // if no image, nothing to download if ( ! *iup ) { //log("no diffbot image url for %s", // m_xd->m_firstUrl.m_url); return true; } // force image count to one m_numImages = 1; // do not error out m_errors[0] = 0; // set it to the full url src = *iup; srcLen = gbstrlen(src); // need this m_imageUrl.set ( src , srcLen ); // jump into the for loop below //if ( m_phase == 0 ) goto insertionPoint; } // . download each leftover image // . stop as soon as we get one with good dimensions // . make a thumbnail of that one for ( ; m_j < m_numImages ; m_j++ , m_phase = 0 ) { // did collection get nuked? CollectionRec *cr = g_collectiondb.getRec(m_collnum); if ( ! cr ) { g_errno = ENOCOLLREC; return true; } // clear error g_errno = 0; if ( m_phase == 0 ) { // advance m_phase++; // only if not diffbot, we set "src" above for it if ( ! m_xd->m_isDiffbotJSONObject ) { // get img tag node node = m_imageNodes[m_j]; // get the url of the image src = m_xml->getString(node,"src",&srcLen); // use "pageUrl" as the baseUrl m_imageUrl.set ( m_pageUrl , src , srcLen ); } // if we should stop, stop if ( m_stopDownloading ) break; // skip if bad or not unique if ( m_errors[m_j] ) continue; // set status msg sprintf ( m_statusBuf ,"downloading image %li",m_j); // point to it if ( m_xd ) m_xd->setStatus ( m_statusBuf ); } // get image ip if ( m_phase == 1 ) { // advance m_phase++; // this increments phase if it should if ( ! getImageIp() ) return false; // error? if ( g_errno ) continue; } // download the actual image if ( m_phase == 2 ) { // advance m_phase++; // download image data if ( ! downloadImage() ) return false; // error downloading? if ( g_errno ) continue; } // get thumbnail using threaded call to netpbm stuff if ( m_phase == 3 ) { // advance m_phase++; // call pnmscale etc. to make thumbnail if ( ! makeThumb() ) return false; // error downloading? if ( g_errno ) continue; } // error making thumb or just not a good thumb size? if ( ! m_thumbnailValid ) { // free old image we downloaded, if any m_msg13.reset(); // i guess do this too, it was pointing at it in msg13 m_imgReply = NULL; // try the next image candidate continue; } // it's a keeper long urlSize = m_imageUrl.getUrlLen() + 1; // include \0 // . make our ThumbnailArray out of it long need = 0; // the array itself need += sizeof(ThumbnailArray); // and each thumbnail it contains need += urlSize; need += m_thumbnailSize; need += sizeof(ThumbnailInfo); // reserve it m_imageBuf.reserve ( need ); // point to array ThumbnailArray *ta =(ThumbnailArray *)m_imageBuf.getBufStart(); // set that as much as possible, version... ta->m_version = 0; // and thumb count ta->m_numThumbnails = 1; // now store the thumbnail info ThumbnailInfo *ti = ta->getThumbnailInfo (0); // and set our one thumbnail ti->m_origDX = m_dx; ti->m_origDY = m_dy; ti->m_dx = m_tdx; ti->m_dy = m_tdy; ti->m_urlSize = urlSize; ti->m_dataSize = m_thumbnailSize; // now copy the data over sequentially char *p = ti->m_buf; // the image url memcpy(p,m_imageUrl.getUrl(),urlSize); p += urlSize; // the image thumbnail data memcpy(p,m_imgData,m_thumbnailSize); p += m_thumbnailSize; // update buf length of course m_imageBuf.setLength ( p - m_imageBuf.getBufStart() ); // validate the buffer m_imageBufValid = true; // save mem. do this after because m_imgData uses m_msg13's // reply buf to store the thumbnail for now... m_msg13.reset(); m_imgReply = NULL; g_errno = 0; return true; } // don't tell caller EBADIMG it will make him fail to index doc g_errno = 0; return true; }