/**************************************************************************
|
**
|
** Copyright (C) 2017 The Qt Company Ltd.
|
** Contact: https://www.qt.io/licensing/
|
**
|
** This file is part of the Qt Installer Framework.
|
**
|
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
|
** Commercial License Usage
|
** Licensees holding valid commercial Qt licenses may use this file in
|
** accordance with the commercial license agreement provided with the
|
** Software or, alternatively, in accordance with the terms contained in
|
** a written agreement between you and The Qt Company. For licensing terms
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
** information use the contact form at https://www.qt.io/contact-us.
|
**
|
** GNU General Public License Usage
|
** Alternatively, this file may be used under the terms of the GNU
|
** General Public License version 3 as published by the Free Software
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
** included in the packaging of this file. Please review the following
|
** information to ensure the GNU General Public License requirements will
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
**
|
** $QT_END_LICENSE$
|
**
|
**************************************************************************/
|
|
var ComponentSelectionPage = null;
|
|
var Dir = new function () {
|
this.toNativeSparator = function (path) {
|
if (systemInfo.productType === "windows")
|
return path.replace(/\//g, '\\');
|
return path;
|
}
|
};
|
|
function Component() {
|
|
installer.gainAdminRights();
|
|
if (installer.isInstaller()) {
|
|
component.loaded.connect(this, Component.prototype.installerLoaded);
|
ComponentSelectionPage = gui.pageById(QInstaller.ComponentSelection);
|
|
installer.setDefaultPageVisible(QInstaller.TargetDirectory, false);
|
installer.setDefaultPageVisible(QInstaller.ComponentSelection, false);
|
installer.setDefaultPageVisible(QInstaller.LicenseCheck, false);
|
if (systemInfo.productType === "windows")
|
installer.setDefaultPageVisible(QInstaller.StartMenuSelection, false);
|
installer.setDefaultPageVisible(QInstaller.ReadyForInstallation, false);
|
|
gui.pageById(QInstaller.PerformInstallation).entered.connect(this, this.performInstallationPageEntered);
|
}
|
|
}
|
|
Component.prototype.isDefault = function()
|
{
|
return true;
|
}
|
|
|
Component.prototype.createOperations = function()
|
{
|
try {
|
//call the base create operations function
|
component.createOperations();
|
|
if (systemInfo.productType === "windows") {
|
//开始菜单快捷方式
|
component.addOperation("CreateShortcut",
|
"@TargetDir@/mbc.exe",
|
"@StartMenuDir@/mbc.lnk",
|
"workingDirectory=@TargetDir@");
|
|
component.addOperation("CreateShortcut",
|
"@TargetDir@/uninstall.exe",
|
"@StartMenuDir@/uninstall.lnk",
|
"workingDirectory=@TargetDir@");
|
|
//桌面快捷方式
|
component.addOperation("CreateShortcut",
|
"@TargetDir@/mbc.exe",
|
"@DesktopDir@/mbc.lnk",
|
"workingDirectory=@TargetDir@");
|
|
component.addOperation("Execute", "@TargetDir@/mbwatch.exe", "-i", "");
|
component.addOperation("Execute", "@TargetDir@/mbwatch.exe", "start", "");
|
|
} else{
|
var params = "Name=mbc" + "\n";
|
params += "Icon=@TargetDir@/logo.png " + "\n";
|
params += "Version=@Version@" + "\n";
|
params += "Exec=@TargetDir@/mbc" + "\n";
|
params += "Terminal=false" + "\n";
|
params += "Encoding=UTF-8" + "\n";
|
params += "Type=Application" + "\n";
|
params += "Categories=Network" + "\n";
|
|
var desktop = "mbc" + ".desktop";
|
component.addOperation("CreateDesktopEntry", desktop, params);
|
|
var homeDir = installer.environmentVariable("HOME");
|
if(homeDir.length > 0){
|
//获取XDG_DATA_HOME环境变量
|
var deskTopSaveDir = installer.environmentVariable("XDG_DATA_HOME");
|
|
if(deskTopSaveDir.length === 0){
|
//XDG_DATA_HOME环境变量不存在,则查找固定目录下
|
if(installer.fileExists(homeDir + "/.local/share/applications/mbc.desktop")){
|
deskTopSaveDir = homeDir + "/.local/share/";
|
}
|
}
|
if(deskTopSaveDir.length > 0){
|
component.addOperation("Copy", deskTopSaveDir+"/applications/" + desktop, homeDir + "/Desktop/");
|
}
|
}
|
|
component.addOperation("Execute", "@TargetDir@/mbwatch", "-i", "");
|
component.addOperation("Execute", "@TargetDir@/mbwatch", "start", "");
|
|
}
|
|
} catch(e) {
|
console.log(e);
|
}
|
}
|
|
|
Component.prototype.installerLoaded = function () {
|
if (installer.addWizardPage(component, "TargetWidget", QInstaller.TargetDirectory)) {
|
var widget = gui.pageWidgetByObjectName("DynamicTargetWidget");
|
if (widget != null) {
|
widget.targetChooser.clicked.connect(this, Component.prototype.chooseTarget);
|
widget.targetDirectory.textChanged.connect(this, Component.prototype.targetChanged);
|
|
widget.windowTitle = "安装目录";
|
widget.targetDirectory.text = Dir.toNativeSparator(installer.value("TargetDir"));
|
}
|
}
|
|
// var widget = gui.pageWidgetByObjectName("DynamicInstallationWidget");
|
// if (widget != null) {
|
// widget.customInstall.toggled.connect(this, Component.prototype.customInstallToggled);
|
// widget.defaultInstall.toggled.connect(this, Component.prototype.defaultInstallToggled);
|
// widget.completeInstall.toggled.connect(this, Component.prototype.completeInstallToggled);
|
|
// widget.defaultInstall.checked = true;
|
// widget.windowTitle = "Select Installation Type";
|
// }
|
|
if (installer.addWizardPage(component, "LicenseWidget", QInstaller.LicenseCheck)) {
|
var widget = gui.pageWidgetByObjectName("DynamicLicenseWidget");
|
if (widget != null) {
|
widget.acceptLicense.toggled.connect(this, Component.prototype.checkAccepted);
|
|
widget.complete = false;
|
widget.declineLicense.checked = true;
|
widget.windowTitle = "协议";
|
}
|
|
}
|
|
|
if (installer.addWizardPage(component, "ReadyToInstallWidget", QInstaller.ReadyForInstallation)) {
|
var widget = gui.pageWidgetByObjectName("DynamicReadyToInstallWidget");
|
if (widget != null) {
|
widget.showDetails.checked = false;
|
widget.windowTitle = "准备安装";
|
}
|
var page = gui.pageByObjectName("DynamicReadyToInstallWidget");
|
if (page != null) {
|
page.entered.connect(this, Component.prototype.readyToInstallWidgetEntered);
|
}
|
//gui.pageById(QInstaller.ReadyForInstallation).entered.connect(this, this.performInstallationPageEntered);
|
}
|
|
// if (installer.addWizardPage(component, "InstallationWidget", QInstaller.ComponentSelection)) {
|
|
// }
|
}
|
|
Component.prototype.targetChanged = function (text) {
|
|
var widget = gui.pageWidgetByObjectName("DynamicTargetWidget");
|
if (widget != null) {
|
var dir = widget.targetDirectory.text;
|
var appName = dir;
|
if (systemInfo.productType === "windows"){
|
appName += "/mbc.exe"
|
}else{
|
appName += "/mbc"
|
}
|
console.log(appName);
|
if (installer.fileExists(dir) && installer.fileExists(appName)) {
|
widget.warning.setText("<p style=\"color: red\">检测到程序已安装,继续将会被覆盖。</p>");
|
} else {
|
widget.warning.setText("");
|
}
|
|
|
installer.setValue("TargetDir", dir);
|
widget.complete = true;
|
}
|
}
|
|
Component.prototype.chooseTarget = function () {
|
var widget = gui.pageWidgetByObjectName("DynamicTargetWidget");
|
if (widget != null) {
|
var newTarget = QFileDialog.getExistingDirectory("Choose your target directory.", widget
|
.targetDirectory.text);
|
if (newTarget != "")
|
widget.targetDirectory.text = Dir.toNativeSparator(newTarget);
|
}
|
}
|
|
|
Component.prototype.performInstallationPageEntered = function()
|
{
|
var dir = installer.value("TargetDir");
|
|
if (systemInfo.productType === "windows") {
|
if (installer.fileExists(dir) && installer.fileExists(dir + "/uninstall.exe")) {
|
installer.execute(dir + "/uninstall.exe",["purge"],"yes");
|
//installer.execute(dir + "/install.exe", "--script=" + dir + "/script/uninstallscript.qs");
|
}
|
|
}else{
|
if (installer.fileExists(dir) && installer.fileExists(dir + "/uninstall")) {
|
installer.execute(dir + "/uninstall",["purge"],"yes");
|
}
|
|
}// end if
|
|
|
}
|
|
// Component.prototype.customInstallToggled = function (checked) {
|
// if (checked) {
|
// if (ComponentSelectionPage != null)
|
// ComponentSelectionPage.selectDefault();
|
// installer.setDefaultPageVisible(QInstaller.ComponentSelection, true);
|
// }
|
// }
|
|
// Component.prototype.defaultInstallToggled = function (checked) {
|
// if (checked) {
|
// if (ComponentSelectionPage != null)
|
// ComponentSelectionPage.selectDefault();
|
// installer.setDefaultPageVisible(QInstaller.ComponentSelection, false);
|
// }
|
// }
|
|
// Component.prototype.completeInstallToggled = function (checked) {
|
// if (checked) {
|
// if (ComponentSelectionPage != null)
|
// ComponentSelectionPage.selectAll();
|
// installer.setDefaultPageVisible(QInstaller.ComponentSelection, false);
|
// }
|
// }
|
|
Component.prototype.readyToInstallWidgetEntered = function () {
|
var widget = gui.pageWidgetByObjectName("DynamicReadyToInstallWidget");
|
if (widget != null) {
|
var html = "<b>组件安装:</b><ul>";
|
var components = installer.components();
|
for (i = 0; i < components.length; ++i) {
|
if (components[i].installationRequested())
|
html = html + "<li>" + components[i].displayName + "</li>"
|
}
|
html = html + "</ul>";
|
widget.showDetailsBrowser.html = html;
|
}
|
}
|
|
|
// Component.prototype.IntroductionPageCallback = function()
|
// {
|
// // Installer is "updater" when it is run with "--updater"
|
// // or Controller does "installer.setUpdater()"
|
// if (installer.isUpdater()) {
|
// var widget = gui.currentPageWidget(); // Same as gui.pageById(QInstaller.Introduction);
|
// }
|
// }
|
|
Component.prototype.checkAccepted = function (checked) {
|
var widget = gui.pageWidgetByObjectName("DynamicLicenseWidget");
|
if (widget != null)
|
widget.complete = checked;
|
}
|
|