CCObject* EziFacebookFriend::copyWithZone(CCZone *pZone) { CCZone* pNewZone = NULL; EziFacebookFriend* pCopy = NULL; if(pZone && pZone->m_pCopyObject) { //in case of being called at sub class pCopy = (EziFacebookFriend*)(pZone->m_pCopyObject); } else { pCopy = new EziFacebookFriend(); pNewZone = new CCZone(pCopy); } pCopy->setName(getName()); pCopy->setID(getFBID()); pCopy->setScore(getScore()); pCopy->setPhotoPath(getPhotoPath()); pCopy->setInstalled(isInstalled()); pCopy->setPhotoURL(getPhotoURL()); //pCopy->initWithAction((CCActionInterval *)(m_pInner->copy()->autorelease())); CC_SAFE_DELETE(pNewZone); return pCopy; }
QString Essence::getLocalPhotoFile() { QString result; QString idValue = getValue(photoIdField).toString().trimmed(); if (idValue.size() > 0) { result = app->getPhotosPath(getPhotoPath()) + "/" + idValue + ".jpg"; } return result; }
QString Essence::getPhotoFile(QString copyTo) { QString idValue; // Значение идентификатора фотографии QString file; // Полное имя файла с фотографией QString localFile; // Локальный путь к фотографии QString pictureUrl; bool phEnabled = photoEnabled; // Если справочник является частью документа if (isDocumentLoading()) { phEnabled = false; // То загрузка фотографий запрещена copyTo = ""; // И копирование тоже } if (phEnabled || copyTo.size() > 0) { // Сначала получим имя поля из которого будем брать значение идентификатора if (photoIdField.size() == 0 && isDictionary) { // Если имя поля, из которого нужно брать идентификатор фотографии не установлено, то будем считать идентификатором код позиции photoIdField = db->getObjectName("код"); } // Теперь получим значение идентификатора if (tableModel->rowCount() > 0 && photoIdField.size() > 0) { pictureUrl = preparePictureUrl(); idValue = getValue(photoIdField).toString().trimmed(); if (idValue.size() > 0) { localFile = getPhotoPath() + "/" + idValue + ".jpg"; // Запомним локальный путь к фотографии на случай обращения к серверу за фотографией file = getLocalPhotoFile(); if (!QFile(file).exists()) { // Локальный файл с фотографией не найден, попробуем получить фотографию с нашего сервера. Будем делать это только для справочника, а не для документа // Мы знаем, под каким именем искать фотографию на нашем сервере, то попробуем обратиться к нему за фотографией if (db->getFileCheckSum(localFile, PictureFileType, true) != 0) { // app->showMessageOnStatusBar(tr("Запущена загрузка с сервера фотографии с кодом ") + QString("%1").arg(idValue), 3000); QByteArray picture = db->getFile(localFile, PictureFileType, true); // Получить файл с картинкой из расширенной базы if (picture.size() > 0) { // Если удалось получить какую-то фотографию app->saveFile(file, &picture); if (copyTo.size() > 0) app->saveFileToServer(app->getPhotosPath() + "/" + copyTo, file, PictureFileType, true); // Если указано, что фотографию нужно скопировать, то скопируем ее } } if (!QFile(file).exists()) { // Фотография не найдена на сервере, попробуем получить фотографию из Интернета file = pictureUrl; // Если в скриптах указано, откуда брать фотографию if (file.left(4) == "http" && photoPath.size() > 0) // Имя файла - это адрес в интернете, и указано, куда этот файл будет сохраняться { QUrl url(file); if (url.isValid()) { if (urls.count() <= 1000) { // Если сетевой менеджер еще не подключен, то подключим его if (m_networkAccessManager == 0) { // Вызывается только один раз, по необходимости загрузить фотографию m_networkAccessManager = new QNetworkAccessManager(this); connect(m_networkAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); } if (m_networkAccessManager != 0) { urlId v = {idValue, copyTo}; urls.insert(QString("%1:%2%3").arg(url.host()).arg(url.port(80)).arg(url.path()), v); // Запомним URL картинки и его локальный код QNetworkRequest m_request(url); QNetworkReply* reply = m_networkAccessManager->get(m_request); // Запустим скачивание картинки if (reply->error() != QNetworkReply::NoError) app->showMessageOnStatusBar(reply->errorString(), 3000); } } else app->showMessageOnStatusBar(tr("Очередь на загрузку фотографий из Интернета превысила 1000 наименований."), 3000); } else