Wrap Sparkle's minimum interface with C++.
This commit is contained in:
parent
312744b863
commit
08dbdd9718
6 changed files with 188 additions and 0 deletions
5
atom.gyp
5
atom.gyp
|
@ -53,6 +53,11 @@
|
|||
'browser/api/atom_api_window.h',
|
||||
'browser/api/atom_browser_bindings.cc',
|
||||
'browser/api/atom_browser_bindings.h',
|
||||
'browser/auto_updater.cc',
|
||||
'browser/auto_updater.h',
|
||||
'browser/auto_updater_delegate.cc',
|
||||
'browser/auto_updater_delegate.h',
|
||||
'browser/auto_updater_mac.mm',
|
||||
'browser/atom_application_mac.h',
|
||||
'browser/atom_application_mac.mm',
|
||||
'browser/atom_application_delegate_mac.h',
|
||||
|
|
19
browser/auto_updater.cc
Normal file
19
browser/auto_updater.cc
Normal file
|
@ -0,0 +1,19 @@
|
|||
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "browser/auto_updater.h"
|
||||
|
||||
namespace auto_updater {
|
||||
|
||||
AutoUpdaterDelegate* AutoUpdater::delegate_ = NULL;
|
||||
|
||||
AutoUpdaterDelegate* AutoUpdater::GetDelegate() {
|
||||
return delegate_;
|
||||
}
|
||||
|
||||
void AutoUpdater::SetDelegate(AutoUpdaterDelegate* delegate) {
|
||||
delegate_ = delegate;
|
||||
}
|
||||
|
||||
} // namespace auto_updater
|
34
browser/auto_updater.h
Normal file
34
browser/auto_updater.h
Normal file
|
@ -0,0 +1,34 @@
|
|||
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef ATOM_BROWSER_AUTO_UPDATER_H_
|
||||
#define ATOM_BROWSER_AUTO_UPDATER_H_
|
||||
|
||||
#include "base/basictypes.h"
|
||||
|
||||
namespace auto_updater {
|
||||
|
||||
class AutoUpdaterDelegate;
|
||||
|
||||
class AutoUpdater {
|
||||
public:
|
||||
// Gets/Sets the delegate.
|
||||
static AutoUpdaterDelegate* GetDelegate();
|
||||
static void SetDelegate(AutoUpdaterDelegate* delegate);
|
||||
|
||||
static void Init();
|
||||
|
||||
static void SetAutomaticallyChecksForUpdates(bool yes);
|
||||
static void SetAutomaticallyDownloadsUpdates(bool yes);
|
||||
static void CheckForUpdatesInBackground();
|
||||
|
||||
private:
|
||||
static AutoUpdaterDelegate* delegate_;
|
||||
|
||||
DISALLOW_IMPLICIT_CONSTRUCTORS(AutoUpdater);
|
||||
};
|
||||
|
||||
} // namespace auto_updater
|
||||
|
||||
#endif // ATOM_BROWSER_AUTO_UPDATER_H_
|
16
browser/auto_updater_delegate.cc
Normal file
16
browser/auto_updater_delegate.cc
Normal file
|
@ -0,0 +1,16 @@
|
|||
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "browser/auto_updater_delegate.h"
|
||||
|
||||
#include "base/callback.h"
|
||||
|
||||
namespace auto_updater {
|
||||
|
||||
void AutoUpdaterDelegate::WillInstallUpdate(const std::string& version,
|
||||
const base::Closure& install) {
|
||||
install.Run();
|
||||
}
|
||||
|
||||
} // namespace auto_updater
|
25
browser/auto_updater_delegate.h
Normal file
25
browser/auto_updater_delegate.h
Normal file
|
@ -0,0 +1,25 @@
|
|||
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef ATOM_BROWSER_AUTO_UPDATER_DELEGATE_H_
|
||||
#define ATOM_BROWSER_AUTO_UPDATER_DELEGATE_H_
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "base/callback_forward.h"
|
||||
|
||||
namespace auto_updater {
|
||||
|
||||
class AutoUpdaterDelegate {
|
||||
public:
|
||||
virtual void WillInstallUpdate(const std::string& version,
|
||||
const base::Closure& install);
|
||||
|
||||
protected:
|
||||
virtual ~AutoUpdaterDelegate() {}
|
||||
};
|
||||
|
||||
} // namespace auto_updater
|
||||
|
||||
#endif // ATOM_BROWSER_AUTO_UPDATER_DELEGATE_H_
|
89
browser/auto_updater_mac.mm
Normal file
89
browser/auto_updater_mac.mm
Normal file
|
@ -0,0 +1,89 @@
|
|||
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "browser/auto_updater.h"
|
||||
|
||||
// Sparkle's headers are throwing compilation warnings, supress them.
|
||||
#pragma GCC diagnostic ignored "-Wmissing-method-return-type"
|
||||
#import <Sparkle/Sparkle.h>
|
||||
|
||||
#include "base/bind.h"
|
||||
#include "base/memory/scoped_ptr.h"
|
||||
#include "base/strings/sys_string_conversions.h"
|
||||
#include "browser/auto_updater_delegate.h"
|
||||
|
||||
using auto_updater::AutoUpdaterDelegate;
|
||||
|
||||
namespace {
|
||||
|
||||
struct NSInvocationDeleter {
|
||||
inline void operator()(NSInvocation* invocation) const {
|
||||
[invocation release];
|
||||
}
|
||||
};
|
||||
|
||||
typedef scoped_ptr<NSInvocation, NSInvocationDeleter> ScopedNSInvocation;
|
||||
|
||||
// We are passing the NSInvocation as scoped_ptr, because we want to make sure
|
||||
// whether or not the callback is called, the NSInvocation should alwasy be
|
||||
// released, the only way to ensure it is to use scoped_ptr.
|
||||
void CallNSInvocation(ScopedNSInvocation invocation) {
|
||||
[invocation.get() invoke];
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
@interface SUUpdaterDelegate : NSObject {
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation SUUpdaterDelegate
|
||||
|
||||
- (void)updater:(SUUpdater*)updater
|
||||
willInstallUpdateOnQuit:(SUAppcastItem*)update
|
||||
immediateInstallationInvocation:(NSInvocation*)invocation {
|
||||
AutoUpdaterDelegate* delegate = auto_updater::AutoUpdater::GetDelegate();
|
||||
if (!delegate) {
|
||||
[invocation invoke];
|
||||
return;
|
||||
}
|
||||
|
||||
std::string version(base::SysNSStringToUTF8([update versionString]));
|
||||
ScopedNSInvocation invocation_ptr([invocation retain]);
|
||||
delegate->WillInstallUpdate(
|
||||
version,
|
||||
base::Bind(&CallNSInvocation, base::Passed(invocation_ptr.Pass())));
|
||||
}
|
||||
|
||||
- (void)updaterWillRelaunchApplication:(SUUpdater*)updater {
|
||||
[[SUUpdater sharedUpdater] setDelegate:nil];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
namespace auto_updater {
|
||||
|
||||
// static
|
||||
void AutoUpdater::Init() {
|
||||
SUUpdaterDelegate* delegate = [[SUUpdaterDelegate alloc] init];
|
||||
[delegate autorelease];
|
||||
[[SUUpdater sharedUpdater] setDelegate:delegate];
|
||||
}
|
||||
|
||||
// static
|
||||
void AutoUpdater::SetAutomaticallyChecksForUpdates(bool yes) {
|
||||
[[SUUpdater sharedUpdater] setAutomaticallyChecksForUpdates:yes];
|
||||
}
|
||||
|
||||
// static
|
||||
void AutoUpdater::SetAutomaticallyDownloadsUpdates(bool yes) {
|
||||
[[SUUpdater sharedUpdater] setAutomaticallyDownloadsUpdates:yes];
|
||||
}
|
||||
|
||||
// static
|
||||
void AutoUpdater::CheckForUpdatesInBackground() {
|
||||
[[SUUpdater sharedUpdater] checkForUpdatesInBackground];
|
||||
}
|
||||
|
||||
} // namespace auto_updater
|
Loading…
Add table
Reference in a new issue