aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPCSVExporterDelegate.m
diff options
context:
space:
mode:
authorstuconnolly <stuart02@gmail.com>2010-05-24 18:07:43 +0000
committerstuconnolly <stuart02@gmail.com>2010-05-24 18:07:43 +0000
commitbbe0f861dd4e3ab99aa3d555d3fc5db5ee5ae39d (patch)
tree1cf7d41f091854e8e2288946684267ce0f8ceaf4 /Source/SPCSVExporterDelegate.m
parentd48005bd9b34f2fb1afd31f7487b7bbf8b9b978f (diff)
downloadsequelpro-bbe0f861dd4e3ab99aa3d555d3fc5db5ee5ae39d.tar.gz
sequelpro-bbe0f861dd4e3ab99aa3d555d3fc5db5ee5ae39d.tar.bz2
sequelpro-bbe0f861dd4e3ab99aa3d555d3fc5db5ee5ae39d.zip
Merge export redesign branch back into trunk.
Includes a completely redesign approach to all export data types based on the use of NSOperation subclasses. CSV, SQL, XML and dot export types are currently functional, while the source files for PDF and HTML export types exist they are to be implemented, but are currently hidden from the interface. Also includes the following: - Completely redesigned export interface. - The ability to customize CSV NULL values. - The ability to specify whether the UTF-8 BOM should be used in SQL dumps. - The ability to specify whether BLOB fields are output as hex or plain text during SQL dumps. Defaults to hex. - Exporting currently selected tables via the tables list context menu. Outstanding issues: - Not all progress indicators for all export types are functional (or functioning correctly). - A few issues related to the introduction of only exporting the content and create and drop syntax of specific tables during SQL dumps. Needs some serious testing and benchmarking to ensure it replicates the current export functionality.
Diffstat (limited to 'Source/SPCSVExporterDelegate.m')
-rw-r--r--Source/SPCSVExporterDelegate.m141
1 files changed, 141 insertions, 0 deletions
diff --git a/Source/SPCSVExporterDelegate.m b/Source/SPCSVExporterDelegate.m
new file mode 100644
index 00000000..ed5f4514
--- /dev/null
+++ b/Source/SPCSVExporterDelegate.m
@@ -0,0 +1,141 @@
+//
+// $Id$
+//
+// SPCSVExporterDelegate.m
+// sequel-pro
+//
+// Created by Stuart Connolly (stuconnolly.com) on March 21, 2010
+// Copyright (c) 2010 Stuart Connolly. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// More info at <http://code.google.com/p/sequel-pro/>
+
+#import <Cocoa/Cocoa.h>
+
+#import "SPCSVExporter.h"
+#import "SPCSVExporterDelegate.h"
+#import "TableDocument.h"
+#import "SPMainThreadTrampoline.h"
+#import "SPFileHandle.h"
+
+@implementation SPExportController (SPCSVExporterDelegate)
+
+/**
+ *
+ */
+- (void)csvExportProcessWillBegin:(SPCSVExporter *)exporter
+{
+ [[exportProgressText onMainThread] displayIfNeeded];
+
+ [[exportProgressIndicator onMainThread] setIndeterminate:YES];
+ [[exportProgressIndicator onMainThread] setUsesThreadedAnimation:YES];
+ [[exportProgressIndicator onMainThread] startAnimation:self];
+
+ // Only update the progress text if this is a table export
+ if (exportSource == SPTableExport) {
+ // Update the current table export index
+ currentTableExportIndex = (exportTableCount - [exporters count]);
+
+ [[exportProgressText onMainThread] setStringValue:[NSString stringWithFormat:NSLocalizedString(@"Table %lu of %lu (%@): Fetching data...", @"export label showing that the app is fetching data for a specific table"), currentTableExportIndex, exportTableCount, [exporter csvTableName]]];
+ }
+ else {
+ [[exportProgressText onMainThread] setStringValue:NSLocalizedString(@"Fetching data...", @"export label showing that the app is fetching data")];
+ }
+
+ [[exportProgressText onMainThread] displayIfNeeded];
+}
+
+/**
+ *
+ */
+- (void)csvExportProcessComplete:(SPCSVExporter *)exporter
+{
+ NSUInteger exportCount = [exporters count];
+
+ // If required add the next exporter to the operation queue
+ if ((exportCount > 0) && (exportSource == SPTableExport)) {
+
+ // If we're only exporting to a single file then write a header for the next table
+ if (!exportToMultipleFiles) {
+
+ // If we're exporting multiple tables to a single file then append some space and the next table's
+ // name, but only if there is at least 2 exportes left.
+ [[exporter exportOutputFileHandle] writeData:[[NSString stringWithFormat:@"%@%@%@ %@%@%@",
+ [exporter csvLineEndingString],
+ [exporter csvLineEndingString],
+ NSLocalizedString(@"Table", @"csv export table heading"),
+ [(SPCSVExporter *)[exporters objectAtIndex:0] csvTableName],
+ [exporter csvLineEndingString],
+ [exporter csvLineEndingString]] dataUsingEncoding:[exporter exportOutputEncoding]]];
+ }
+ // Otherwise close the file handle of the exporter that just finished
+ // ensuring it's data is written to disk.
+ else {
+ [[exporter exportOutputFileHandle] closeFile];
+ }
+
+ [operationQueue addOperation:[exporters objectAtIndex:0]];
+
+ // Remove the exporter we just added to the operation queue from our list of exporters
+ // so we know it's already been done.
+ [exporters removeObjectAtIndex:0];
+ }
+ // Otherwise if the exporter list is empty, close the progress sheet
+ else {
+ // Close the last exporter's file handle
+ [[exporter exportOutputFileHandle] closeFile];
+
+ [NSApp endSheet:exportProgressWindow returnCode:0];
+ [exportProgressWindow orderOut:self];
+
+ // Restore query mode
+ [tableDocumentInstance setQueryMode:SPInterfaceQueryMode];
+
+ // Display Growl notification
+ [self displayExportFinishedGrowlNotification];
+ }
+}
+
+/**
+ *
+ */
+- (void)csvExportProcessWillBeginWritingData:(SPCSVExporter *)exporter
+{
+ // Only update the progress text if this is a table export
+ if (exportSource == SPTableExport) {
+ [[exportProgressText onMainThread] setStringValue:[NSString stringWithFormat:NSLocalizedString(@"Table %lu of %lu (%@): Writing data...", @"export label showing app if writing data for a specific table"), currentTableExportIndex, exportTableCount, [exporter csvTableName]]];
+ }
+ else {
+ [[exportProgressText onMainThread] setStringValue:NSLocalizedString(@"Writing data...", @"export label showing app is writing data")];
+ }
+
+ [[exportProgressText onMainThread] displayIfNeeded];
+
+ [[exportProgressIndicator onMainThread] stopAnimation:self];
+ [[exportProgressIndicator onMainThread] setUsesThreadedAnimation:NO];
+ [[exportProgressIndicator onMainThread] setIndeterminate:NO];
+ [[exportProgressIndicator onMainThread] setDoubleValue:0];
+}
+
+/**
+ *
+ */
+- (void)csvExportProcessProgressUpdated:(SPCSVExporter *)exporter
+{
+ [exportProgressIndicator setDoubleValue:[exporter exportProgressValue]];
+}
+
+@end