summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2009-11-27 23:37:37 (GMT)
committerRemko Tronçon <git@el-tramo.be>2009-11-27 23:37:37 (GMT)
commit91570ab79252b37afeae3b230cb6023c5b52547a (patch)
tree011d77857557a28671a63a444dcf8e10db64ab3f
parentba717874781a33ea40a1aea1ad8b9efce3580fc2 (diff)
downloadswift-contrib-91570ab79252b37afeae3b230cb6023c5b52547a.zip
swift-contrib-91570ab79252b37afeae3b230cb6023c5b52547a.tar.bz2
Integrated Sparkle auto-updater.
-rw-r--r--BuildTools/SCons/Tools/AppBundle.py6
-rw-r--r--SConstruct1
-rw-r--r--SwifTools/AutoUpdater/DummyAutoUpdater.h10
-rw-r--r--SwifTools/AutoUpdater/PlatformAutoUpdaterFactory.cpp19
-rw-r--r--SwifTools/AutoUpdater/PlatformAutoUpdaterFactory.h9
-rw-r--r--SwifTools/SConscript3
-rw-r--r--Swift/QtUI/QtSwift.cpp14
-rw-r--r--Swift/QtUI/QtSwift.h2
-rw-r--r--Swift/QtUI/SConscript145
-rw-r--r--Swift/QtUI/main.cpp3
-rw-r--r--Swiften/Application/MacOSX/MacOSXApplication.h2
-rw-r--r--Swiften/Application/SConscript3
12 files changed, 143 insertions, 74 deletions
diff --git a/BuildTools/SCons/Tools/AppBundle.py b/BuildTools/SCons/Tools/AppBundle.py
index 2849435..3d06e97 100644
--- a/BuildTools/SCons/Tools/AppBundle.py
+++ b/BuildTools/SCons/Tools/AppBundle.py
@@ -1,9 +1,10 @@
import SCons.Util
def generate(env) :
- def createAppBundle(env, bundle, version = "1.0", resources = [], info = {}) :
+ def createAppBundle(env, bundle, version = "1.0", resources = [], frameworks = [], info = {}) :
bundleContentsDir = bundle + ".app" + "/Contents"
resourcesDir = bundleContentsDir + "/Resources"
+ frameworksDir = bundleContentsDir + "/Frameworks"
env.Install(bundleContentsDir + "/MacOS", bundle)
env.WriteVal(bundleContentsDir + "/PkgInfo", env.Value("APPL\77\77\77\77"))
@@ -38,6 +39,9 @@ def generate(env) :
for resource in resources :
env.Install(resourcesDir, resource)
+ for framework in frameworks :
+ env.Install(frameworksDir, framework)
+
env.AddMethod(createAppBundle, "AppBundle")
diff --git a/SConstruct b/SConstruct
index 98cd348..121df77 100644
--- a/SConstruct
+++ b/SConstruct
@@ -224,6 +224,7 @@ if env["PLATFORM"] == "darwin" :
if conf.CheckObjCHeader("Sparkle/Sparkle.h") :
env["HAVE_SPARKLE"] = 1
env["SPARKLE_FLAGS"] = sparkle_flags
+ env["SPARKLE_FRAMEWORK"] = "/Library/Frameworks/Sparkle.framework"
conf.Finish()
# LibXML
diff --git a/SwifTools/AutoUpdater/DummyAutoUpdater.h b/SwifTools/AutoUpdater/DummyAutoUpdater.h
new file mode 100644
index 0000000..bdddb2a
--- /dev/null
+++ b/SwifTools/AutoUpdater/DummyAutoUpdater.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#include "SwifTools/AutoUpdater/AutoUpdater.h"
+
+namespace Swift {
+ class DummyAutoUpdater : public AutoUpdater {
+ public:
+ void checkForUpdates() {}
+ };
+}
diff --git a/SwifTools/AutoUpdater/PlatformAutoUpdaterFactory.cpp b/SwifTools/AutoUpdater/PlatformAutoUpdaterFactory.cpp
new file mode 100644
index 0000000..2049a4e
--- /dev/null
+++ b/SwifTools/AutoUpdater/PlatformAutoUpdaterFactory.cpp
@@ -0,0 +1,19 @@
+#include "SwifTools/AutoUpdater/PlatformAutoUpdaterFactory.h"
+
+#ifdef HAVE_SPARKLE
+#include "SwifTools/AutoUpdater/SparkleAutoUpdater.h"
+#else
+#include "SwifTools/AutoUpdater/DummyAutoUpdater.h"
+#endif
+
+namespace Swift {
+
+AutoUpdater* PlatformAutoUpdaterFactory::createAutoUpdater(const String& appcastURL) {
+#ifdef HAVE_SPARKLE
+ return new SparkleAutoUpdater(appcastURL);
+#else
+ return new DummyAutoUpdater();
+#endif
+}
+
+}
diff --git a/SwifTools/AutoUpdater/PlatformAutoUpdaterFactory.h b/SwifTools/AutoUpdater/PlatformAutoUpdaterFactory.h
new file mode 100644
index 0000000..4e3cef1
--- /dev/null
+++ b/SwifTools/AutoUpdater/PlatformAutoUpdaterFactory.h
@@ -0,0 +1,9 @@
+namespace Swift {
+ class AutoUpdater;
+ class String;
+
+ class PlatformAutoUpdaterFactory {
+ public:
+ AutoUpdater* createAutoUpdater(const String& appcastURL);
+ };
+}
diff --git a/SwifTools/SConscript b/SwifTools/SConscript
index 92e82be..a1b3d18 100644
--- a/SwifTools/SConscript
+++ b/SwifTools/SConscript
@@ -14,10 +14,13 @@ sources = [
"Idle/IdleQuerier.cpp",
"Idle/PlatformIdleQuerier.cpp",
"AutoUpdater/AutoUpdater.cpp",
+ "AutoUpdater/PlatformAutoUpdaterFactory.cpp",
"Linkify.cpp",
]
if myenv.get("HAVE_SPARKLE", 0) :
+ myenv.MergeFlags(myenv["SPARKLE_FLAGS"])
+ myenv.Append(CPPDEFINES = ["HAVE_SPARKLE"])
sources += ["AutoUpdater/SparkleAutoUpdater.mm"]
if myenv["PLATFORM"] == "win32" :
diff --git a/Swift/QtUI/QtSwift.cpp b/Swift/QtUI/QtSwift.cpp
index 7e204e9..4c7eabb 100644
--- a/Swift/QtUI/QtSwift.cpp
+++ b/Swift/QtUI/QtSwift.cpp
@@ -15,14 +15,24 @@
#include "Swiften/Application/Application.h"
#include "Swiften/Application/Platform/PlatformApplication.h"
#include "Swiften/Base/String.h"
+#include "Swiften/Base/Platform.h"
#include "Swiften/Elements/Presence.h"
#include "Swiften/Client/Client.h"
#include "Swift/Controllers/ChatController.h"
#include "Swift/Controllers/MainController.h"
#include "Swift/QtUI/BuildVersion.h"
+#include "SwifTools/AutoUpdater/AutoUpdater.h"
+#include "SwifTools/AutoUpdater/PlatformAutoUpdaterFactory.h"
namespace Swift{
+#if defined(SWIFTEN_PLATFORM_MACOSX)
+#define SWIFT_APPCAST_URL "http://swift.im/appcast/psi-mac.xml"
+#else
+#define SWIFT_APPCAST_URL ""
+#endif
+
+
QtSwift::QtSwift(bool netbookMode) {
if (netbookMode) {
splitter_ = new QSplitter();
@@ -48,9 +58,13 @@ QtSwift::QtSwift(bool netbookMode) {
splitter_->show();
}
mainController_ = new MainController(chatWindowFactory_, rosterWindowFactory_, loginWindowFactory_, treeWidgetFactory_, settings_, application_, systemTray_, soundPlayer_, xmlConsoleWidgetFactory_);
+
+ autoUpdater_ = PlatformAutoUpdaterFactory().createAutoUpdater(SWIFT_APPCAST_URL);
+ autoUpdater_->checkForUpdates();
}
QtSwift::~QtSwift() {
+ delete autoUpdater_;
delete chatWindowFactory_;
delete rosterWindowFactory_;
delete loginWindowFactory_;
diff --git a/Swift/QtUI/QtSwift.h b/Swift/QtUI/QtSwift.h
index ad113d6..0ba9926 100644
--- a/Swift/QtUI/QtSwift.h
+++ b/Swift/QtUI/QtSwift.h
@@ -11,6 +11,7 @@
class QSplitter;
namespace Swift {
+ class AutoUpdater;
class Application;
class MainController;
class QtChatWindowFactory;
@@ -40,6 +41,7 @@ namespace Swift {
QtSoundPlayer* soundPlayer_;
QtChatTabs* tabs_;
Application* application_;
+ AutoUpdater* autoUpdater_;
};
}
diff --git a/Swift/QtUI/SConscript b/Swift/QtUI/SConscript
index f8de60e..3a9545c 100644
--- a/Swift/QtUI/SConscript
+++ b/Swift/QtUI/SConscript
@@ -2,19 +2,19 @@ import os, shutil, datetime
import Version
def generateDefaultTheme(env, target, source) :
- sourceDir = source[0].abspath
- output = open(target[0].abspath, "w")
- output.write("<RCC version =\"1.0\">")
- output.write("<qresource prefix=\"/themes/Default\">")
- for (path, dirs, files) in os.walk(sourceDir) :
- for file in files :
- filePath = os.path.join(path,file)
- output.write("<file alias=\"%(alias)s\">%(path)s</file>" % {
- "alias": filePath[len(sourceDir)+1:],
- "path": filePath
- })
- output.write("</qresource>")
- output.write("</RCC>")
+ sourceDir = source[0].abspath
+ output = open(target[0].abspath, "w")
+ output.write("<RCC version =\"1.0\">")
+ output.write("<qresource prefix=\"/themes/Default\">")
+ for (path, dirs, files) in os.walk(sourceDir) :
+ for file in files :
+ filePath = os.path.join(path,file)
+ output.write("<file alias=\"%(alias)s\">%(path)s</file>" % {
+ "alias": filePath[len(sourceDir)+1:],
+ "path": filePath
+ })
+ output.write("</qresource>")
+ output.write("</RCC>")
Import("env")
@@ -24,6 +24,8 @@ myenv.MergeFlags(env["SWIFT_CONTROLLERS_FLAGS"])
myenv.MergeFlags(env["SWIFTOOLS_FLAGS"])
if myenv["HAVE_XSS"] :
myenv.MergeFlags(env["XSS_FLAGS"])
+if myenv["HAVE_SPARKLE"] :
+ myenv.MergeFlags(env["SPARKLE_FLAGS"])
myenv.MergeFlags(env["SWIFTEN_FLAGS"])
myenv.MergeFlags(env["CPPUNIT_FLAGS"])
myenv.MergeFlags(env["LIBIDN_FLAGS"])
@@ -42,60 +44,60 @@ myenv.Append(CPPPATH = ["/usr/include/phonon"])
myenv.Append(CPPPATH = ["."])
if env["PLATFORM"] == "win32" :
- #myenv["LINKFLAGS"] = ["/SUBSYSTEM:CONSOLE"]
- myenv.Append(LINKFLAGS = ["/SUBSYSTEM:WINDOWS"])
- myenv.Append(LIBS = "qtmain")
+ #myenv["LINKFLAGS"] = ["/SUBSYSTEM:CONSOLE"]
+ myenv.Append(LINKFLAGS = ["/SUBSYSTEM:WINDOWS"])
+ myenv.Append(LIBS = "qtmain")
myenv.Command("DefaultTheme.qrc", "../resources/themes/Default", Action(generateDefaultTheme, cmdstr = "$GENCOMSTR"))
sources = [
- "main.cpp",
- "QtAboutWidget.cpp",
- "QtAddContactDialog.cpp",
- "QtChatWindow.cpp",
- "QtChatWindowFactory.cpp",
- "QtJoinMUCDialog.cpp",
- "QtLoginWindow.cpp",
- "QtLoginWindowFactory.cpp",
- "QtMainWindow.cpp",
- "QtMainWindowFactory.cpp",
- "QtSettingsProvider.cpp",
- "QtStatusWidget.cpp",
- "QtSwift.cpp",
- "QtChatView.cpp",
- "QtChatTabs.cpp",
- "QtSoundPlayer.cpp",
- "QtSystemTray.cpp",
- "QtTabbable.cpp",
- "QtTextEdit.cpp",
- "QtXMLConsoleWidgetFactory.cpp",
- "QtXMLConsoleWidget.cpp",
- "ChatSnippet.cpp",
- "MessageSnippet.cpp",
- "SystemMessageSnippet.cpp",
- "Roster/RosterModel.cpp",
- "Roster/QtTreeWidget.cpp",
- "Roster/QtTreeWidgetItem.cpp",
- "Roster/RosterDelegate.cpp",
- "EventViewer/EventView.cpp",
- "EventViewer/EventModel.cpp",
- "EventViewer/EventDelegate.cpp",
- "QtRosterHeader.cpp",
- "qrc_DefaultTheme.cc",
- "qrc_Swift.cc",
- ]
+ "main.cpp",
+ "QtAboutWidget.cpp",
+ "QtAddContactDialog.cpp",
+ "QtChatWindow.cpp",
+ "QtChatWindowFactory.cpp",
+ "QtJoinMUCDialog.cpp",
+ "QtLoginWindow.cpp",
+ "QtLoginWindowFactory.cpp",
+ "QtMainWindow.cpp",
+ "QtMainWindowFactory.cpp",
+ "QtSettingsProvider.cpp",
+ "QtStatusWidget.cpp",
+ "QtSwift.cpp",
+ "QtChatView.cpp",
+ "QtChatTabs.cpp",
+ "QtSoundPlayer.cpp",
+ "QtSystemTray.cpp",
+ "QtTabbable.cpp",
+ "QtTextEdit.cpp",
+ "QtXMLConsoleWidgetFactory.cpp",
+ "QtXMLConsoleWidget.cpp",
+ "ChatSnippet.cpp",
+ "MessageSnippet.cpp",
+ "SystemMessageSnippet.cpp",
+ "Roster/RosterModel.cpp",
+ "Roster/QtTreeWidget.cpp",
+ "Roster/QtTreeWidgetItem.cpp",
+ "Roster/RosterDelegate.cpp",
+ "EventViewer/EventView.cpp",
+ "EventViewer/EventModel.cpp",
+ "EventViewer/EventDelegate.cpp",
+ "QtRosterHeader.cpp",
+ "qrc_DefaultTheme.cc",
+ "qrc_Swift.cc",
+ ]
myenv.BuildVersion("BuildVersion.h", version = env["SWIFT_VERSION"])
if env["PLATFORM"] == "win32" :
- myenv.RES("../resources/Windows/Swift.rc")
- sources += ["../resources/Windows/Swift.res"]
+ myenv.RES("../resources/Windows/Swift.rc")
+ sources += ["../resources/Windows/Swift.res"]
if env["PLATFORM"] == "darwin" or env["PLATFORM"] == "win32" :
- swiftProgram = myenv.Program("Swift", sources)
+ swiftProgram = myenv.Program("Swift", sources)
else :
- swiftProgram = myenv.Program("swift", sources)
+ swiftProgram = myenv.Program("swift", sources)
myenv.Uic4("QtJoinMUCDialog.ui")
myenv.Uic4("QtAddContactDialog.ui")
@@ -103,22 +105,25 @@ myenv.Qrc("DefaultTheme.qrc")
myenv.Qrc("Swift.qrc")
if env["PLATFORM"] == "darwin" :
- myenv.AppBundle("Swift", version = env["SWIFT_VERSION"], resources = ["../resources/MacOSX/Swift.icns"])
+ frameworks = []
+ if env["HAVE_SPARKLE"] :
+ frameworks.append(env["SPARKLE_FRAMEWORK"])
+ myenv.AppBundle("Swift", version = env["SWIFT_VERSION"], resources = ["../resources/MacOSX/Swift.icns"], frameworks = frameworks)
if env.get("SWIFT_INSTALLDIR", "") :
- env.Install(os.path.join(env["SWIFT_INSTALLDIR"], "bin"), swiftProgram)
+ env.Install(os.path.join(env["SWIFT_INSTALLDIR"], "bin"), swiftProgram)
if env["PLATFORM"] == "win32" :
- if "dist" in COMMAND_LINE_TARGETS or env.GetOption("clean") :
- myenv.WindowsBundle("Swift", resources = [
- os.path.join(env["OPENSSL_DIR"], "bin", "ssleay32.dll"),
- os.path.join(env["OPENSSL_DIR"], "bin", "libeay32.dll"),
- ],
- qtimageformats = ["gif", "ico", "jpeg", "mng", "svg", "tiff"],
- qtlibs = ["QtCore4", "QtGui4", "QtNetwork4", "QtWebKit4", "phonon4"])
-
- myenv.Append(NSIS_OPTIONS = [
- "/DmsvccRedistributableDir=\"" + env["vcredist"] + "\"",
- "/DbuildVersion=" + env["SWIFT_VERSION"]
- ])
- myenv.Nsis("../Packaging/nsis/swift.nsi")
+ if "dist" in COMMAND_LINE_TARGETS or env.GetOption("clean") :
+ myenv.WindowsBundle("Swift", resources = [
+ os.path.join(env["OPENSSL_DIR"], "bin", "ssleay32.dll"),
+ os.path.join(env["OPENSSL_DIR"], "bin", "libeay32.dll"),
+ ],
+ qtimageformats = ["gif", "ico", "jpeg", "mng", "svg", "tiff"],
+ qtlibs = ["QtCore4", "QtGui4", "QtNetwork4", "QtWebKit4", "phonon4"])
+
+ myenv.Append(NSIS_OPTIONS = [
+ "/DmsvccRedistributableDir=\"" + env["vcredist"] + "\"",
+ "/DbuildVersion=" + env["SWIFT_VERSION"]
+ ])
+ myenv.Nsis("../Packaging/nsis/swift.nsi")
diff --git a/Swift/QtUI/main.cpp b/Swift/QtUI/main.cpp
index a7a715c..b76acfa 100644
--- a/Swift/QtUI/main.cpp
+++ b/Swift/QtUI/main.cpp
@@ -2,8 +2,7 @@
#include "QtSwift.h"
-int main(int argc, char* argv[])
-{
+int main(int argc, char* argv[]) {
QApplication app(argc, argv);
bool netbookMode = argc > 1;
Swift::QtSwift swift(netbookMode);
diff --git a/Swiften/Application/MacOSX/MacOSXApplication.h b/Swiften/Application/MacOSX/MacOSXApplication.h
index e408ffd..cd5e69f 100644
--- a/Swiften/Application/MacOSX/MacOSXApplication.h
+++ b/Swiften/Application/MacOSX/MacOSXApplication.h
@@ -3,6 +3,7 @@
#include "Swiften/Application/Application.h"
#include "Swiften/Application/MacOSX/MacOSXApplicationMessageDisplay.h"
+#include "Swiften/Application/MacOSX/MacOSXApplicationInitializer.h"
namespace Swift {
class ApplicationMessageDisplay;
@@ -16,6 +17,7 @@ namespace Swift {
boost::filesystem::path getSettingsDir() const;
private:
+ MacOSXApplicationInitializer initializer_;
MacOSXApplicationMessageDisplay messageDisplay_;
};
}
diff --git a/Swiften/Application/SConscript b/Swiften/Application/SConscript
index d13b63b..7696bd7 100644
--- a/Swiften/Application/SConscript
+++ b/Swiften/Application/SConscript
@@ -8,7 +8,8 @@ sources = [
if swiften_env["PLATFORM"] == "darwin" :
sources += [
"MacOSX/MacOSXApplication.cpp",
- "MacOSX/MacOSXApplicationMessageDisplay.mm"
+ "MacOSX/MacOSXApplicationMessageDisplay.mm",
+ "MacOSX/MacOSXApplicationInitializer.mm",
]
objects = swiften_env.StaticObject(sources)