def syncFeatures(self, features, vectorLayerDescriptor): try: self.csvDataSourceHandler.syncFeaturesWithCsv(vectorLayerDescriptor, features) NotificationHandler.pushSuccess(QApplication.translate('VectorLayerController', 'CSV File updated'), QApplication.translate('VectorLayerController', 'Changes to layer "{}" successfully stored in csv file.').format(self.csvVectorLayer().qgsVectorLayer.name())) return True except: VectorLayerSaveConflictController(self.csvVectorLayer(), self.csvDataSourceHandler).handleConflict() return False
def _onConflictSaveAsButton(self): filePath = QFileDialog.getSaveFileName(self.conflictDialog, QApplication.translate('VectorLayerSaveConflictController', 'Save File'), "", QApplication.translate('VectorLayerSaveConflictController', 'Files (*.csv *.tsv *.*)')); if filePath: self.conflictDialog.accept() try: self.csvDataSourceHandler.moveDataSourcesToPath(filePath) self.csvDataSourceHandler.syncFeaturesWithCsv(self.csvVectorLayer().vectorLayerDescriptor, self.features, filePath) self.csvVectorLayer().updateGeoCsvPath(filePath) NotificationHandler.pushSuccess(QApplication.translate('VectorLayerSaveConflictController', 'CSV File updated'), QApplication.translate('VectorLayerSaveConflictController', 'Changes to layer "{}" successfully stored in csv file.').format(self.csvVectorLayer().qgsVectorLayer.name())) except: QMessageBox.information(None, QApplication.translate('VectorLayerSaveConflictController', 'Invalid path'), QApplication.translate('VectorLayerSaveConflictController', 'An error occured while trying to save file on new location. Please try again.'))
def _onCharsetConvert(self): csvFilePath = self.newDialog.filePath.text() encoding = self.newDialog.charsetDropDown.currentText() try: GeoCsvDataSourceHandler.createBackupFile(csvFilePath) NotificationHandler.pushInfo(QApplication.translate('GeoCsvNewController', 'backup created'), QApplication.translate('GeoCsvNewController', 'Created backup on "{}"').format(csvFilePath)) GeoCsvDataSourceHandler.convertFileToUTF8(csvFilePath, encoding) NotificationHandler.pushSuccess(QApplication.translate('GeoCsvNewController', 'Converted'), QApplication.translate('GeoCsvNewController', 'Successfully converted to utf-8')) self._analyseCsv() except: self.newDialog.statusNotificationLabel.setText(QApplication.translate('GeoCsvNewController', 'error in converting'))
def reconnectCsvVectorLayers(self, csvVectorLayers): layers = QgsMapLayerRegistry.instance().mapLayers() for qgsLayer in layers.itervalues(): csvFilePath = qgsLayer.customProperty('editablegeocsv_path', '') if csvFilePath: try: dataSourceHandler = GeoCsvDataSourceHandler(csvFilePath) vectorLayerDescriptor = dataSourceHandler.createCsvVectorDescriptorFromCsvt() if not dataSourceHandler.hasPrj(): dataSourceHandler.updatePrjFile(qgsLayer.crs().toWkt()) csvVectorLayer = GeoCsvVectorLayerFactory.createCsvVectorLayer(dataSourceHandler, vectorLayerDescriptor, qgsLayer) vectorLayerController = VectorLayerController(csvVectorLayer, dataSourceHandler) csvVectorLayer.initController(vectorLayerController) csvVectorLayers.append(csvVectorLayer) NotificationHandler.pushSuccess(QApplication.translate('GeoCsvReconnectController', 'GeoCSV Layer reconnected'), QApplication.translate('GeoCsvReconnectController', 'Layer "{}" is successfully reconnected').format(qgsLayer.name())) except: GeoCsvNewController.getInstance().createCsvVectorLayer(csvVectorLayers, qgsLayer, QApplication.translate('GeoCsvReconnectController', 'Couldn\'t automatically restore csv layer "{}"').format(qgsLayer.name()))
def createCsvVectorLayer(self, csvVectorLayers, qgsVectorLayer=None, customTitle=None): if self.newDialog.isVisible(): self.newDialog.reject() # enable help hyperlink self.newDialog.helpLabel.setOpenExternalLinks(True) self.dataSourceHandler = None self.vectorDescriptor = None self.csvtFileIsDirty = False if customTitle: self.newDialog.setWindowTitle(customTitle) if qgsVectorLayer: csvPath = qgsVectorLayer.customProperty('editablegeocsv_path') if csvPath: self.newDialog.filePath.setText(csvPath) self._updateAcceptButton() self._analyseCsv() self.newDialog.show() #wait for user input result = self.newDialog.exec_() #if user pressed ok if result == 1: if self.dataSourceHandler and self.vectorDescriptor: csvVectorLayer = GeoCsvVectorLayerFactory.createCsvVectorLayer(self.dataSourceHandler, self.vectorDescriptor, qgsVectorLayer) vectorLayerController = VectorLayerController(csvVectorLayer, self.dataSourceHandler) csvVectorLayer.initController(vectorLayerController) QgsMapLayerRegistry.instance().addMapLayer(csvVectorLayer.qgsVectorLayer) NotificationHandler.pushSuccess(QApplication.translate('GeoCsvNewController', 'GeoCSV Layer created'), QApplication.translate('GeoCsvNewController', 'The layer "{}" was created successfully.').format(csvVectorLayer.qgsVectorLayer.name())) csvVectorLayers.append(csvVectorLayer) if self.csvtFileIsDirty: try: self.dataSourceHandler.updateCsvtFile(self.vectorDescriptor.getAttributeTypes()) NotificationHandler.pushInfo(QApplication.translate('GeoCsvNewController', 'CSVT File created/updated.'), QApplication.translate('GeoCsvNewController', 'The CSVT file was successfully created/updated on disk.')) except FileIOException: NotificationHandler.pushWarning(QApplication.translate('GeoCsvNewController', 'CSVT File Error'), QApplication.translate('GeoCsvNewController', 'The csvt file couldn\'t be updated on disk.')) if not self.dataSourceHandler.hasPrj(): self.dataSourceHandler.updatePrjFile(csvVectorLayer.qgsVectorLayer.crs().toWkt()) NotificationHandler.pushInfo(QApplication.translate('GeoCsvNewController', 'PRJ File created.'), QApplication.translate('GeoCsvNewController', 'The PRJ file was successfully created on disk.'))