コード例 #1
0
ファイル: olm.c プロジェクト: Jahor/osm-tools
static void updateNode(void* abstractSelf) {
    osm2olm* self = (osm2olm*) abstractSelf;
    
    //printf("Write node\n");
    for(int c = 0; c < self->countriesCount; c++) {
        //printf("Check if belongs Country %i\n", c);
        if(nodeBelongsCountry(self, self->countries + c)) {
            //printf("Write node in country\n");
            //            printf("Updating node %i\n", self->node.id);
            addTree16Node(&(self->countries[c].nodesIndex), self->node.id, self->node.id);
            //printf("Added to index\n");
            //printf("Adding to db with statement: %x\n", self->countries[c].insertNodeStatement);
            beginTransaction(self->countries[c].db);
            sqlite3_bind_int(self->countries[c].updateNodeStatement, 1, self->node.id);
            sqlite3_bind_int(self->countries[c].updateNodeStatement, 2, self->node.lat);
            sqlite3_bind_int(self->countries[c].updateNodeStatement, 3, self->node.lon);
            //printf("Binded\n");
            sqlite3_step(self->countries[c].updateNodeStatement);
            //printf("Written\n");
            sqlite3_reset(self->countries[c].updateNodeStatement);
            //printf("Reset\n");
            deleteFromDbById(self->countries[c].db, self->countries[c].deleteNodeTagsStatement, self->node.id);
            writeTags(self, &(self->tags), self->countries[c].insertNodeTagStatement, self->node.id);
            //printf("Writing tags\n");
            commitTransaction(self->countries[c].db);
        } else {
            deleteNodeFromCountry(self->countries + c, self->node.id);
        }
    }
    //printf("Write node - end\n");
    removeAllPlainTags(&(self->tags));
}
コード例 #2
0
ファイル: olm.c プロジェクト: Jahor/osm-tools
static void writeNode(void* abstractSelf) {
    osm2olm* self = (osm2olm*) abstractSelf;
    
    //printf("Write node\n");
    for(int c = 0; c < self->countriesCount; c++) {
        //printf("Check if belongs Country %i\n", c);
        if(nodeBelongsCountry(self, self->countries + c)) {
            //printf("Write node in country\n");
            
            addTree16Node(&(self->countries[c].nodesIndex), self->node.id, self->node.id);
            //printf("Added to index\n");
            //printf("Adding to db with statement: %x\n", self->countries[c].insertNodeStatement);
            beginTransaction(self->countries[c].db);       
            sqlite3_bind_int64(self->countries[c].insertNodeStatement, 1, self->node.id);
            sqlite3_bind_int(self->countries[c].insertNodeStatement, 2, self->node.lat);
            sqlite3_bind_int(self->countries[c].insertNodeStatement, 3, self->node.lon);
            sqlite3_bind_int64(self->countries[c].insertNodeStatement, 4, self->node.timestamp);
            //printf("Binded\n");
            sqlite3_step(self->countries[c].insertNodeStatement);
            //printf("Written\n");
            sqlite3_reset(self->countries[c].insertNodeStatement);
            //printf("Reset\n");
            writeTags(self, &(self->tags), self->countries[c].insertNodeTagStatement, self->node.id);
            //printf("Writing tags\n");
            commitTransaction(self->countries[c].db);
        }
    }
    //printf("Write node - end\n");
    self->tags.count = 0;
}
コード例 #3
0
void Mp3Writer::close() {
	if (!file.isOpen()) {
		debug("WARNING: Mp3Writer::close() called, but file not open");
		return;
	}

	if (!hasFlushed) {
		debug("WARNING: Mp3Writer::close() called but no flush happened, flushing now");
		QByteArray dummy1, dummy2;
		write(dummy1, dummy2, 0, true);
	}

	AudioFileWriter::close();
	writeTags();
}
コード例 #4
0
ファイル: olm.c プロジェクト: Jahor/osm-tools
static void writeWay(void* abstractSelf) {
    osm2olm* self = (osm2olm*) abstractSelf;
    
    for(int c = 0; c < self->countriesCount; c++) {
        if(wayBelongsCountry(self, self->countries + c)) {
            addTree16Node(&(self->countries[c].waysIndex), self->way.id, self->way.id);
            beginTransaction(self->countries[c].db);
            sqlite3_bind_int64(self->countries[c].insertWayStatement, 1, self->way.id);
            sqlite3_bind_int64(self->countries[c].insertWayStatement, 2, self->way.timestamp);
            sqlite3_step(self->countries[c].insertWayStatement);
            sqlite3_reset(self->countries[c].insertWayStatement);
            
            writeTags(self, &(self->tags), self->countries[c].insertWayTagStatement, self->way.id);
            writeWayNodes(self, self->countries+c);
            commitTransaction(self->countries[c].db);
        }
    }    
    removeAllPlainTags(&(self->tags));
    removeAllWayNodes(&(self->wayNodes));
}
コード例 #5
0
bool MetadataHub::writeTags(const QString& filePath, WriteComponent writeMode,
                            const MetadataSettingsContainer& settings)
{
    applyChangeNotifications();

    // if no DMetadata object is needed at all, don't construct one -
    // important optimization if writing to file is turned off in setup!
    if (!willWriteMetadata(writeMode, settings))
    {
        return false;
    }

    DMetadata metadata(filePath);
    metadata.setSettings(settings);
    bool saveFaces = settings.saveFaceTags;
    bool saveTags  = settings.saveTags;


    if (saveFaces)
    {
        metadata.setImageFacesMap(d->faceTagsList,true);
    }
    else
    {
        metadata.setImageFacesMap(d->faceTagsList,false);
    }

    writeToBaloo(filePath);

    if (writeTags(metadata, saveTags))
    {
        bool success = metadata.applyChanges();
        ImageAttributesWatch::instance()->fileMetadataChanged(QUrl::fromLocalFile(filePath));
        return success;
    }
    else
    {
        return false;
    }
}
コード例 #6
0
ファイル: olm.c プロジェクト: Jahor/osm-tools
static void updateWay(void* abstractSelf) {
    osm2olm* self = (osm2olm*) abstractSelf;
    
    //    printf("Updating way %i\n", self->way.id);
    for(int c = 0; c < self->countriesCount; c++) {
        if(wayBelongsCountry(self, self->countries + c)) {
            addTree16Node(&(self->countries[c].waysIndex), self->way.id, self->way.id);
            beginTransaction(self->countries[c].db);
            sqlite3_bind_int64(self->countries[c].updateWayStatement, 1, self->way.id);
            sqlite3_step(self->countries[c].updateWayStatement);
            sqlite3_reset(self->countries[c].updateWayStatement);
            deleteFromDbById(self->countries[c].db, self->countries[c].deleteWayTagsStatement, self->way.id);
            writeTags(self, &(self->tags), self->countries[c].insertWayTagStatement, self->way.id);
            deleteFromDbById(self->countries[c].db, self->countries[c].deleteWayNodesStatement, self->way.id);
            writeWayNodes(self, self->countries+c);
            commitTransaction(self->countries[c].db);
        } else {
            deleteWayFromCountry(self->countries + c, self->way.id);
        }
    }    
    removeAllPlainTags(&(self->tags));
    removeAllWayNodes(&(self->wayNodes));
}
コード例 #7
0
ファイル: olm.c プロジェクト: Jahor/osm-tools
static void writeRelations(osm2olm* self, LCountry* country) {
    Tree16 pseudoIndex;
    initTree16(&pseudoIndex);
    Tree16 whishesIndex;
    initTree16(&whishesIndex);
    int found;
    printf("Writing relations for %s. Total relations: %i\n", country->polygon->name, self->relations.count);
    int iterations = 0;
    do {
        found = 0;
        for(int r = 0; r < self->relations.count; r++) {
            if(!isInTree16(&pseudoIndex, self->relations.values[r].base.info.id)) {
                if(self->relations.values[r].change != OSM_CHANGE_DELETE) {
                    if((self->relations.values[r].change == OSM_CHANGE_NONE || relationBelongsCountry(self->relations.values + r, country, &pseudoIndex))) {
                        addTree16Node(&pseudoIndex, self->relations.values[r].base.info.id, 0);
                        
                        found++;
                    } else {
                        if(self->relations.values[r].change != OSM_CHANGE_NONE) {
                            printf("Relation %i does not belongs country\n", self->relations.values[r].base.info.id);
                        } else {
                            printf("Relation %i exists in DB and was'nt changed\n", self->relations.values[r].base.info.id);
                        }
                        
                    }
                } else {
                    printf("Relation %i was deleted\n", self->relations.values[r].base.info.id);
                }
            } else {
                //printf("Relation %i already encountered\n", self->relations.values[r].base.info.id);
            }
        }
        iterations++;
    } while(found);
    printf("Relations found in %i iterations\n", iterations);
    int written = 0;
    for(int r=0;r < self->relations.count; r++) {
        if(isInTree16(&pseudoIndex, self->relations.values[r].base.info.id)){
            beginTransaction(country->db);
            addTree16Node(&(country->relationsIndex), self->relations.values[r].base.info.id, self->relations.values[r].base.info.id);
            switch (self->relations.values[r].change) {
                case OSM_CHANGE_CREATE:
                    sqlite3_bind_int(country->insertRelationStatement, 1, self->relations.values[r].base.info.id);
                    sqlite3_bind_int64(country->insertRelationStatement, 2, self->relations.values[r].base.info.timestamp);
                    sqlite3_step(country->insertRelationStatement);
                    sqlite3_reset(country->insertRelationStatement);
                    writeTags(self, &(self->relations.values[r].base.tags), country->insertRelationTagStatement, self->relations.values[r].base.info.id);
                    writeRelationMember(self->relations.values + r, country);
                    break;
                case OSM_CHANGE_DELETE:
                    deleteRelationFromCountry(country, self->relations.values[r].base.info.id);
                case OSM_CHANGE_MODIFY:
                    sqlite3_bind_int(country->insertRelationStatement, 1, self->relations.values[r].base.info.id);
                    sqlite3_bind_int64(country->insertRelationStatement, 2, self->relations.values[r].base.info.timestamp);
                    sqlite3_step(country->insertRelationStatement);
                    sqlite3_reset(country->insertRelationStatement);
                    deleteFromDbById(country->db, country->deleteRelationTagsStatement, self->relations.values[r].base.info.id);
                    writeTags(self, &(self->relations.values[r].base.tags), country->insertRelationTagStatement, self->relations.values[r].base.info.id);
                    deleteFromDbById(country->db, country->deleteRelationMembersStatement, self->relations.values[r].base.info.id);
                    writeRelationMember(self->relations.values + r, country);
                    break;
                case OSM_CHANGE_COUNT:
                case OSM_CHANGE_NONE:
                    //Just do nothing, as db is up to date
                    break;
                    
            }
            commitTransaction(country->db);
            written++;
        } else {
            deleteRelationFromCountry(country, self->relations.values[r].base.info.id);
            //printf("Skip relation %i. %s\n", self->relations.values[r].info.id, isInTree16(&pseudoIndex, self->relations.values[r].info.id) ? (relationIsFullyBelongsCountry(self->relations.values + r, country, &pseudoIndex)? "HM.." : "It does not have some members.") : "it is not in list");
        }
    }
    freeTree16(&pseudoIndex);
    printf("Relations written: %i\n", written);
}
コード例 #8
0
bool MetadataHub::write(DMetadata& metadata, WriteComponent writeMode, const MetadataSettingsContainer& settings)
{
    applyChangeNotifications();

    bool dirty = false;

    metadata.setSettings(settings);

    // find out in advance if we have something to write - needed for FullWriteIfChanged mode
    bool saveTitle      = (settings.saveComments   && (d->titlesStatus     == MetadataAvailable) && writeMode.testFlag(WRITE_TITLE));
    bool saveComment    = (settings.saveComments   && (d->commentsStatus   == MetadataAvailable) && writeMode.testFlag(WRITE_COMMENTS));
    bool saveDateTime   = (settings.saveDateTime   && (d->dateTimeStatus   == MetadataAvailable) && writeMode.testFlag(WRITE_DATETIME));
    bool savePickLabel  = (settings.savePickLabel  && (d->pickLabelStatus  == MetadataAvailable) && writeMode.testFlag(WRITE_PICKLABEL));
    bool saveColorLabel = (settings.saveColorLabel && (d->colorLabelStatus == MetadataAvailable) && writeMode.testFlag(WRITE_COLORLABEL));
    bool saveRating     = (settings.saveRating     && (d->ratingStatus     == MetadataAvailable) && writeMode.testFlag(WRITE_RATING));
    bool saveTemplate   = (settings.saveTemplate   && (d->templateStatus   == MetadataAvailable) && writeMode.testFlag(WRITE_TEMPLATE));
    bool saveTags       = settings.saveTags && writeMode.testFlag(WRITE_TAGS);
    bool saveFaces      = settings.saveFaceTags && writeMode.testFlag((WRITE_TAGS));


    if (saveTitle)
    {
        // Store titles in image as Iptc Object name and Xmp.
        dirty |= metadata.setImageTitles(d->titles);
    }

    if (saveComment)
    {
        // Store comments in image as JFIF comments, Exif comments, Iptc Caption, and Xmp.
        dirty |= metadata.setImageComments(d->comments);
    }

    if (saveDateTime)
    {
        // Store Image Date & Time as Exif and Iptc tags.
        dirty |= metadata.setImageDateTime(d->dateTime, false);
    }

    if (savePickLabel)
    {
        // Store Image Pick Label as XMP tag.
        dirty |= metadata.setImagePickLabel(d->pickLabel);
    }

    if (saveColorLabel)
    {
        // Store Image Color Label as XMP tag.
        dirty |= metadata.setImageColorLabel(d->colorLabel);
    }

    if (saveRating)
    {
        // Store Image rating as Iptc tag.
        dirty |= metadata.setImageRating(d->rating);
    }

    if (saveTemplate)
    {
        QString title = d->metadataTemplate.templateTitle();

        if (title == Template::removeTemplateTitle())
        {
            dirty |= metadata.removeMetadataTemplate();
        }
        else if (title.isEmpty())
        {
            // Nothing to do.
        }
        else
        {
            // Store metadata template as XMP tag.
            dirty |= metadata.removeMetadataTemplate();
            dirty |= metadata.setMetadataTemplate(d->metadataTemplate);
        }
    }

    dirty |= metadata.setImageFacesMap(d->faceTagsList,saveFaces);

    dirty |= writeTags(metadata,saveTags);

    return dirty;
}
コード例 #9
0
ファイル: mymoneystoragexml.cpp プロジェクト: CGenie/kmymoney
void MyMoneyStorageXML::writeFile(QIODevice* qf, IMyMoneySerialize* storage)
{
  Q_CHECK_PTR(qf);
  Q_CHECK_PTR(storage);
  if (!storage) {
    return;
  }
  m_storage = storage;

  // qDebug("XMLWRITER: Starting file write");
  m_doc = new QDomDocument("KMYMONEY-FILE");
  Q_CHECK_PTR(m_doc);
  QDomProcessingInstruction instruct = m_doc->createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\"");
  m_doc->appendChild(instruct);

  QDomElement mainElement = m_doc->createElement("KMYMONEY-FILE");
  m_doc->appendChild(mainElement);

  QDomElement fileInfo = m_doc->createElement("FILEINFO");
  writeFileInformation(fileInfo);
  mainElement.appendChild(fileInfo);

  QDomElement userInfo = m_doc->createElement("USER");
  writeUserInformation(userInfo);
  mainElement.appendChild(userInfo);

  QDomElement institutions = m_doc->createElement("INSTITUTIONS");
  writeInstitutions(institutions);
  mainElement.appendChild(institutions);

  QDomElement payees = m_doc->createElement("PAYEES");
  writePayees(payees);
  mainElement.appendChild(payees);

  QDomElement tags = m_doc->createElement("TAGS");
  writeTags(tags);
  mainElement.appendChild(tags);

  QDomElement accounts = m_doc->createElement("ACCOUNTS");
  writeAccounts(accounts);
  mainElement.appendChild(accounts);

  QDomElement transactions = m_doc->createElement("TRANSACTIONS");
  writeTransactions(transactions);
  mainElement.appendChild(transactions);

  QDomElement keyvalpairs = writeKeyValuePairs(m_storage->pairs());
  mainElement.appendChild(keyvalpairs);

  QDomElement schedules = m_doc->createElement("SCHEDULES");
  writeSchedules(schedules);
  mainElement.appendChild(schedules);

  QDomElement equities = m_doc->createElement("SECURITIES");
  writeSecurities(equities);
  mainElement.appendChild(equities);

  QDomElement currencies = m_doc->createElement("CURRENCIES");
  writeCurrencies(currencies);
  mainElement.appendChild(currencies);

  QDomElement prices = m_doc->createElement("PRICES");
  writePrices(prices);
  mainElement.appendChild(prices);

  QDomElement reports = m_doc->createElement("REPORTS");
  writeReports(reports);
  mainElement.appendChild(reports);

  QDomElement budgets = m_doc->createElement("BUDGETS");
  writeBudgets(budgets);
  mainElement.appendChild(budgets);

  QDomElement onlineJobs = m_doc->createElement("ONLINEJOBS");
  writeOnlineJobs(onlineJobs);
  mainElement.appendChild(onlineJobs);

  QTextStream stream(qf);
  stream.setCodec("UTF-8");
  stream << m_doc->toString();

  delete m_doc;
  m_doc = 0;

  //hides the progress bar.
  signalProgress(-1, -1);

  // this seems to be nonsense, but it clears the dirty flag
  // as a side-effect.
  m_storage->setLastModificationDate(m_storage->lastModificationDate());

  m_storage = 0;
}