pax_global_header00006660000000000000000000000064135076152530014521gustar00rootroot0000000000000052 comment=26150608141a9aa9cdbc47ac9ac43d91eb8c269c deepin-deb-installer-5.0.0/000077500000000000000000000000001350761525300155125ustar00rootroot00000000000000deepin-deb-installer-5.0.0/.clog.toml000066400000000000000000000002341350761525300174100ustar00rootroot00000000000000[clog] repository = "https://github.com/linuxdeepin/deepin-deb-installer" from-latest-tag = true changelog = "CHANGELOG.md" [sections] Others = ["chore"] deepin-deb-installer-5.0.0/.gitignore000066400000000000000000000003561350761525300175060ustar00rootroot00000000000000# Compiled Object files *.slo *.lo *.o # Compiled Dynamic libraries *.so *.dylib # Compiled Static libraries *.lai *.la *.a build*/ *.core *.autosave *.user* # qm file is auto generate from .ts file *.qm .vscode/ # vim tmp file *.swp deepin-deb-installer-5.0.0/.tx/000077500000000000000000000000001350761525300162235ustar00rootroot00000000000000deepin-deb-installer-5.0.0/.tx/config000066400000000000000000000006671350761525300174240ustar00rootroot00000000000000[main] host = https://www.transifex.com minimum_perc = 80 mode = developer [deepin-package-manager.deepin-deb-installer] file_filter = translations/deepin-deb-installer_.ts source_file = translations/deepin-deb-installer.ts source_lang = en type = QT [deepin-package-manager.deepin-deb-installer_desktop] file_filter = translations/desktop/desktop_.ts source_file = translations/desktop/desktop.ts source_lang = en type = QT deepin-deb-installer-5.0.0/.tx/ts2desktop000066400000000000000000000002671350761525300202550ustar00rootroot00000000000000DESKTOP_TEMP_FILE=deepin-deb-installer.desktop.tmp DESKTOP_SOURCE_FILE=deepin-deb-installer.desktop DESKTOP_DEST_FILE=deepin-deb-installer.desktop DESKTOP_TS_DIR=translations/desktop deepin-deb-installer-5.0.0/CHANGELOG.md000066400000000000000000000031121350761525300173200ustar00rootroot00000000000000 ## 1.3.2 (2019-04-10) ## 1.3.1 (2019-03-27) #### Bug Fixes * only one file be passed when select multiple files in DFM and open with deb installer ([43b8e6b5](https://github.com/linuxdeepin/deepin-deb-installer/commit/43b8e6b5e988e4e84b26f95b9d34652fd60ac42c)) ## 1.3.0 (2019-01-24) ### 1.2.9 (2018-11-23) #### Features * add genericName ([676b441c](https://github.com/linuxdeepin/deepin-deb-installer/commit/676b441c13051a28a962116bb4f9db5abced3d99)) * support the recent file spec. ([2c736215](https://github.com/linuxdeepin/deepin-deb-installer/commit/2c7362153eb2ea70a860a65a4ba70b870d0174bb)) ## 1.2.7 (2018-11-01) ## 1.2.7 (2018-11-01) ### 1.2.6 (2018-10-25) #### Features * **file_dialog:** save history folder. ([9116f168](https://github.com/linuxdeepin/deepin-deb-installer/commit/9116f1688758627894192d08f5e08ef769eedba4)) ### 1.2.5 (2018-07-20) #### Bug Fixes * have prohibit drag and drop icons ([32668a8a](https://github.com/linuxdeepin/deepin-deb-installer/commit/32668a8aa9911cf81028668effba0ecd22479f94)) ## 1.2.4 (2018-03-13) #### Bug Fixes * Adapt lintian ([91b40e71](91b40e71)) # 1.2.3 - Compatibility with old dtk. # 1.2.2 - Fix some Deb packages conflict with DDE but dont detected correctly. # 1.2.1 - Update translate files. # 1.2 - HiDPI support. # 1.1 - Support remove packages before execute install. - Support back when operate finshed. deepin-deb-installer-5.0.0/CMakeLists.txt000066400000000000000000000041411350761525300202520ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) if (NOT DEFINED VERSION) set(VERSION 1.2.2) endif () project(deepin-deb-installer) #set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") if (NOT (${CMAKE_BUILD_TYPE} MATCHES "Debug")) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") # generate qm files execute_process(COMMAND bash "translate_generation.sh" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) execute_process(COMMAND bash "translate_ts2desktop.sh" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) else () set(CMAKE_CXX_COMPILER "clang++") endif () configure_file(environments.h.in environments.h @ONLY) # Sources files file(GLOB SRCS "*.h" "*.cpp" "widgets/*.h" "widgets/*.cpp") # Find the library find_package(PkgConfig REQUIRED) find_package(Qt5Widgets REQUIRED) find_package(Qt5Concurrent REQUIRED) find_package(QApt REQUIRED) find_package(DtkWidget REQUIRED) # Tell CMake to create the executable add_executable(deepin-deb-installer ${SRCS} resources/resources.qrc) target_include_directories(deepin-deb-installer PUBLIC ${DtkWidget_INCLUDE_DIRS} ${OBJECT_BINARY_DIR}) target_link_libraries(deepin-deb-installer QApt ${DtkWidget_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Concurrent_LIBRARIES} ) # Install settings if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX /usr) endif () # Install qm files file(GLOB QM_FILES "translations/*.qm") install(FILES ${QM_FILES} DESTINATION share/deepin-deb-installer/translations) # Install icons foreach (ICON_SIZE 16 24 32 48 64 96 128 256) install(FILES resources/images/deepin-deb-installer-${ICON_SIZE}px.svg RENAME deepin-deb-installer.svg DESTINATION share/icons/hicolor/${ICON_SIZE}x${ICON_SIZE}/apps) endforeach () install(TARGETS deepin-deb-installer DESTINATION bin) install(FILES deepin-deb-installer.desktop DESTINATION share/applications) install(FILES deepin-deb-installer.applications DESTINATION share/application-registry) deepin-deb-installer-5.0.0/README.md000066400000000000000000000215051350761525300167740ustar00rootroot00000000000000# deepin-deb-installer # 架构设计 ## 前端 主窗口为 DebInstaller 类,前端主页面为 `FileChooseWidget`,它是一个文件选择界面,当用户选择了一个/多个 deb 文件后,进入后续的安装界面。 > 在用户选择了软件包后,应该对 deb 包进行格式效验,以过滤那些 Invalid 的文件。 单个安装界面与批量安装界面是可以互相转换的,如果在单软件包界面继续拖放更多的软件包,即跳转到多软件包安装界面。而如果在批量安装界面将软件包一个个删除,当安装列表只剩一个软件包时,则自动跳转到单软件包安装界面。 由于这些界面转换的需求,在单/多软件包安装界面层上,只是一个选择性的数据显示,真正的等待安装的软件包列表保存在 `DebListModel` 类中。 ### 单软件包安装界面 当用户只选择了一个软件包后,进入单软件包安装界面。如果继续向里面添加软件包,则跳转到多软件包安装界面。 ### 批量安装界面 当用户选择了一个以上的软件包后,进入批量安装界面。当用户删除比量安装列表至最后一个时,跳转到单软件包安装界面。 批量安装界面使用 Qt Model-View 设计模式,`DebListModel` 作为数据层,`PackagesListDelegate` 作为绘画的代理层,而 `PackageListView` 为表示层。通过这个模式,可以在不对 `DebListModel` 做过多侵入式设计的前提下,实现数据的获取。 ### 卸载确认界面 这是一个在执行卸载命令之前,用来让用户确认所卸载的包列表的界面。 ## 控制端 `DebListModel` 是联系前/后端并提供查询、安装、卸载命令等最主要最核心的类。对上,它提供了软件包列表的各种数据;对下,它封装了具体的安装、卸载等操作。 利用 `PackagesManager` 类所提供的数据,向界面上显示对应的软件包信息。通过封装 `libqapt` 的查询与安装接口,提供统一的 `Transaction` 类来回报进度等信息。 ## 后端 ### PackagesManager `PackagesManager` 类是主要的 deb 包管理类,他使用 `libqapt` 来进行 deb 包格式的读取与解析。 #### 依赖解析 `PackagesManager` 类另一个核心功能,也是 `deepin-deb-installer` 项目最重大的问题,就是软件包的依赖解析。在本类中,实现了一个对 deb 包的依赖解析流程。 #### 依赖解析结果 依赖解析的结果分为 3 种,分别是: - 依赖冲突,不可安装此软件包 - 依赖可用,安装或升级某些依赖包后可以安装此软件包 - 依赖满足,可以直接安装此软件包 #### 不同种类的依赖解析 此外,在依赖解析的过程中,要考虑可升级/降级依赖、间接依赖、循环依赖、虚包、Providers 包等问题: - 可升级依赖:当前依赖不满足条件,但仓库中此包的新版本可用,可以升级到仓库中的版本来解决依赖。 - 间接依赖:当前第一级依赖都满足条件,但其中一个依赖包的依赖关系不满足,此时也无法安装。即,所有依赖关系的查找必须查找到基础包为止,才能发现所有的间接依赖。 - 循环依赖:在查找依赖链时,有可能出现 A 依赖 B 而 B 也依赖 A 的情况,程序应该要有有效的机制避免循环依赖带来的问题。 - 虚包:当发现依赖包是一个虚包时,应该查找它由哪些包所填实,并依次解决它们的依赖关系。 - Providers:例如某些程序依赖 java,而 java 是由 jdk 或 jre 提供的子包,并不单独存在 java 这个包。在此时,就应该遍历仓库,查找包的 Providers 并比对相关信息,以正确的安装对应的依赖。 #### 多架构问题 另外,还要解决多架构及跨架构依赖带来的问题: 这个问题主要发生在 x86 64Bits 系统下,系统中可能同时存在 x86 32Bits、x86 64Bits 两个包架构。 - 一般来说,没有特别指明的情况下,都安装默认的架构(即 64Bits)。 - 在安装依赖时,安装与本包相同的架构。即本包是 32Bits,就安装 32Bits 的依赖包。 - 要特殊处理的是 AnyArch 及 NativeArch 的相关问题 - 某些包是架构不相关或不敏感的(例如一些 Python 库),此时可以跨架构解决依赖,要解析对应的字段来完成这个判断。 > 当多架构依赖与之前的各种依赖解决方案混合时,问题变得比较复杂,这部分要做仔细的 code-review 和测试。 #### 总结 区别与其它的 deb 安装器,`deepin-deb-installer` 支持批量安装。在考虑问题的过程中,可以以单个应用程序安装过程为例,批量安装仅仅是对单个程序安装的重复操作。但是在设计数据结构及编写具体逻辑时,要考虑多应用同时安装的情况。 由于 deb 软件包的复杂性,对其依赖进行解析并不是一件简单的事。在不同的策略、不同的解析顺序下,可能有多种解决依赖关系的可能。所以,这种不确定性可能会导致用户的一些困惑(即与其它安装器的依赖解析结果不相同)。而如何判断是程序出了 bug,还是这是一个正常的依赖解析结果,就需要对 deb 包及软件仓库有更多了解。 在批量安装时,每安装完成一个软件包,都应当对仓库状态、依赖状态进行重新刷新与解析。因为在某些包安装后,系统环境中的依赖关系可能已经与之前不同了。 > 即便是 apt 和 gdebi 这两个最常用到的 deb 安装程序,在安装某些包时,解决依赖的方法都不一定完全相同。 > 将来,可以考虑换用其它库进行依赖解析。自己实现依赖解析既复杂、难维护,又容易出 bug,解析行为上也难以和 apt 保持一致。 #### 依赖解析示例 以下举几个比较经典的例子: ##### 解析示例 1 - A -> B | C # 软件包 A 依赖软件包 B 或者软件包 C - B -> D(v1.0) # 软件包 B 依赖包 D 的 v1.0 版本 - C -> D(v2.0) # 软件包 C 依赖包 D 的 v2.0 版本 - 已安装 D(v1.0) # 系统中已经安装了包 D 的 v1.0 版本 - 可升级 D(v2.0) # 仓库中有包 D 的 v2.0 版本 在这种情况下,当安装软件包 A 时,就有两种方法可以解决依赖。 1. 安装软件包 B。 2. 安装软件包 C,并升级软件包 D 到仓库中的 v2.0 版本。 这两种方法都是正确的并可以满足软件包 A 的依赖需求。但是要注意在第 2 种解决方案下,要检查一下软件包 D 由 v1.0 升级到 v2.0 是否会引入冲突等问题。 # 缺陷 由于安装器完全使用自己的依赖解析逻辑。并且调用了 `libqapt` 进行软件包安装(其底层是包装 `dpkg -i` 命令执行的安装),与 apt 不同的是,这样做 apt 是无法知道哪些包是用户主动安装的(即用户主动拖动到列表中执行安装),哪些是作为依赖被动安装的。这样,以后在卸载某个包是,当初作为它的依赖被安装上的包就无法使用 autoremove 被卸载了(因为所有的包在 apt 看来都是主动安装的)。 即使不改变目前的依赖解析及软件包安装逻辑,这个问题也是可以解决的。在 apt 中修改包的属性,将它的安装原因改为依赖安装即可,不过目前还没有实现。 # libqapt ## 简介 libqapt 是 qapt 的一个库,qapt 是像 gdebi 一样的一个 deb 安装程序。它底层使用了 `libapt-pkg` 进行一些仓库的访问。本身实现了以调用 dpkg 命令为基础的软件包安装逻辑。 libqapt-runtime 是这个库中实现权限操作的后端,它会注册一个 system-dbus 提供服务。libqapt 中相应的权限操作都通过 RPC 方式与此后端通信。 ## Debug libqapt 本身是一个 C++ 项目,很容易编译安装,可以直接下载源码通过加日志、GDB 等方式进行调试。要注意的是可能需要在调试时修改代码禁止或者放宽某些超时操作。在调试 runtime 的时候要确保当前运行的不是旧版本 runtime。 ## 为 libqapt 打补丁 在开发过程中,发现了数个 `libqapt` 的 bug。为了快速解决问题,现在已经给 `libqapt` 打了以下几个补丁,在上游的新版本推送后,应该积极维护这些补丁列表。 - 0001-add-zh_CN-translate.patch 添加中文翻译,hack 的做法。 - 0001-fix-long-description-error.patch 修复 libqapt 在解析 deb 包时,对某些不是特别规范的 control 文件解析出错。 - 0001-fix-old-error-not-clear.patch 修复 libqapt 在重复使用 dpkg 命令时,相应的类没有清理旧错误信息。 - ~~0001-Fix-install-transaction-timeout.patch 修复 libqapt 在安装时超时信息设置错误导致安装失败。~~ __上游已经合并__ # 参考资料 - libqapt - [sources](https://github.com/KDE/libqapt) - [online doc](https://api.kde.org/extragear-api/sysadmin-apidocs/libqapt/html/index.html) deepin-deb-installer-5.0.0/debian/000077500000000000000000000000001350761525300167345ustar00rootroot00000000000000deepin-deb-installer-5.0.0/debian/changelog000066400000000000000000000002411350761525300206030ustar00rootroot00000000000000deepin-deb-installer (1.0.0-1) unstable; urgency=medium * Initial release -- Deepin Packages Builder Thu, 29 Jun 2017 11:33:08 +0800 deepin-deb-installer-5.0.0/debian/compat000066400000000000000000000000021350761525300201320ustar00rootroot000000000000009 deepin-deb-installer-5.0.0/debian/control000066400000000000000000000011141350761525300203340ustar00rootroot00000000000000Source: deepin-deb-installer Section: utils Priority: optional Maintainer: Deepin Packages Builder Build-Depends: debhelper (>= 9), cmake, pkg-config, libqt5widgets5, libqt5concurrent5, libqapt-dev, libdtkwidget-dev, qt5-default, qttools5-dev-tools Standards-Version: 3.9.8 Homepage: https://www.deepin.com/ Package: deepin-deb-installer Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, libqapt3-runtime Description: deepin deb installer tool Deepin Package Manager is used to help users install and remove local software, supports to bulk install. deepin-deb-installer-5.0.0/debian/copyright000066400000000000000000000016561350761525300206770ustar00rootroot00000000000000Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: deepin-deb-installer Files: * Copyright: 2017 Deepin Technology Co., Ltd. License: GPL-3+ This package 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 3 of the License, or (at your option) any later version. . This package 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, see . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". deepin-deb-installer-5.0.0/debian/postinst000077500000000000000000000002541350761525300205460ustar00rootroot00000000000000#!/bin/sh set -e # set to default sed -i -E 's/(application\/x-deb=).*$/\1deepin-deb-installer.desktop/' /usr/share/applications/mimeapps.list || true #DEBHELPER# exit 0 deepin-deb-installer-5.0.0/debian/rules000077500000000000000000000004431350761525300200150ustar00rootroot00000000000000#!/usr/bin/make -f # See debhelper(7) (uncomment to enable) # output every command that modifies files on the build system. #export DH_VERBOSE = 1 include /usr/share/dpkg/default.mk %: dh $@ --parallel override_dh_auto_configure: dh_auto_configure -- -DVERSION=$(DEB_VERSION_UPSTREAM) deepin-deb-installer-5.0.0/debian/source/000077500000000000000000000000001350761525300202345ustar00rootroot00000000000000deepin-deb-installer-5.0.0/debian/source/format000066400000000000000000000000151350761525300214430ustar00rootroot000000000000003.0 (native) deepin-deb-installer-5.0.0/debinstaller.cpp000066400000000000000000000212111350761525300206630ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #include "debinstaller.h" #include "filechoosewidget.h" #include "singleinstallpage.h" #include "multipleinstallpage.h" #include "deblistmodel.h" #include "uninstallconfirmpage.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include using QApt::DebFile; DCORE_USE_NAMESPACE DWIDGET_USE_NAMESPACE #define THEME_DARK "dark" #define THEME_LIGHT "light" DebInstaller::DebInstaller(QWidget *parent) : DMainWindow(parent), m_fileListModel(new DebListModel(this)), m_fileChooseWidget(new FileChooseWidget), m_centralLayout(new QStackedLayout), m_qsettings(new QSettings(this)), m_tbMenu(new QMenu(this)), m_darkThemeAction(new QAction(tr("Dark theme"), this)) { m_fileChooseWidget->setObjectName("FileChooseWidget"); m_centralLayout->addWidget(m_fileChooseWidget); m_centralLayout->setContentsMargins(0, 0, 0, 0); m_centralLayout->setSpacing(0); QWidget *wrapWidget = new QWidget; wrapWidget->setLayout(m_centralLayout); DTitlebar *tb = titlebar(); tb->setIcon(QIcon::fromTheme("deepin-deb-installer")); tb->setTitle(QString()); #if DTK_VERSION >= 0x02000600 tb->setBackgroundTransparent(true); #endif tb->setMenu(m_tbMenu); m_tbMenu->addAction(m_darkThemeAction); m_tbMenu->addSeparator(); m_darkThemeAction->setCheckable(true); setCentralWidget(wrapWidget); setAcceptDrops(true); setFixedSize(480, 380); setWindowTitle(tr("Deepin Package Manager")); setWindowIcon(QIcon::fromTheme("deepin-deb-installer")); move(qApp->primaryScreen()->geometry().center() - geometry().center()); connect(m_fileChooseWidget, &FileChooseWidget::packagesSelected, this, &DebInstaller::onPackagesSelected); connect(m_fileListModel, &DebListModel::lockForAuth, this, &DebInstaller::onAuthing); connect(m_fileListModel, &DebListModel::appendOutputInfo, this, [=](const QString &output) { qDebug() << output.trimmed(); }); connect(m_darkThemeAction, &QAction::toggled, this, &DebInstaller::toggleDarkTheme); reloadTheme(); } DebInstaller::~DebInstaller() { } void DebInstaller::toggleDarkTheme(bool checked) { m_qsettings->setValue("theme", checked ? THEME_DARK : THEME_LIGHT); reloadTheme(); } void DebInstaller::reloadTheme() { QString theme = m_qsettings->value("theme").toString(); if (theme.isEmpty()) { theme = THEME_LIGHT; m_qsettings->setValue("theme", THEME_LIGHT); } m_darkThemeAction->setChecked(theme == THEME_DARK); QFile themeFile(theme == THEME_DARK ? ":/theme/dark/dark.qss" : ":/theme/light/light.qss"); if (!themeFile.open(QFile::ReadOnly)) { qDebug() << "theme file not find!" << themeFile.fileName(); } setStyleSheet(themeFile.readAll()); DThemeManager::instance()->setTheme(theme); } void DebInstaller::keyPressEvent(QKeyEvent *e) { switch (e->key()) { #ifdef QT_DEBUG case Qt::Key_Escape: qApp->quit(); break; #endif default:; } } void DebInstaller::dragEnterEvent(QDragEnterEvent *e) { auto * const mime = e->mimeData(); if (!mime->hasUrls()) return e->ignore(); for (const auto &item : mime->urls()) { const QFileInfo info(item.path()); if (info.isDir()) return e->accept(); if (info.isFile() && info.suffix() == "deb") return e->accept(); } e->ignore(); } void DebInstaller::dropEvent(QDropEvent *e) { auto * const mime = e->mimeData(); if (!mime->hasUrls()) return e->ignore(); e->accept(); // find .deb files QStringList file_list; for (const auto &url : mime->urls()) { if (!url.isLocalFile()) continue; const QString local_path = url.toLocalFile(); const QFileInfo info(local_path); if (info.isFile() && info.suffix() == "deb") file_list << local_path; else if (info.isDir()) { for (auto deb : QDir(local_path).entryInfoList(QStringList() << "*.deb", QDir::Files)) file_list << deb.absoluteFilePath(); } } onPackagesSelected(file_list); } void DebInstaller::dragMoveEvent(QDragMoveEvent *e) { e->accept(); } void DebInstaller::onPackagesSelected(const QStringList &packages) { for (const auto &package : packages) { DebFile *p = new DebFile(package); if (!p->isValid()) { qWarning() << "package invalid: " << package; delete p; continue; } DRecentData data; data.appName = "Deepin Deb Installer"; data.appExec = "deepin-deb-installer"; DRecentManager::addItem(package, data); m_fileListModel->appendPackage(p); } refreshInstallPage(); } void DebInstaller::showUninstallConfirmPage() { Q_ASSERT(m_centralLayout->count() == 2); const QModelIndex index = m_fileListModel->first(); UninstallConfirmPage *p = new UninstallConfirmPage; p->setPackage(index.data().toString()); p->setRequiredList(index.data(DebListModel::PackageReverseDependsListRole).toStringList()); m_centralLayout->addWidget(p); m_centralLayout->setCurrentIndex(2); connect(p, &UninstallConfirmPage::accepted, this, &DebInstaller::onUninstallAccepted); connect(p, &UninstallConfirmPage::canceled, this, &DebInstaller::onUninstallCalceled); } void DebInstaller::onUninstallAccepted() { SingleInstallPage *p = backToSinglePage(); p->uninstallCurrentPackage(); } void DebInstaller::onUninstallCalceled() { backToSinglePage(); } void DebInstaller::onAuthing(const bool authing) { setEnabled(!authing); } void DebInstaller::reset() { Q_ASSERT(m_centralLayout->count() == 2); Q_ASSERT(!m_lastPage.isNull()); titlebar()->setTitle(QString()); m_fileListModel->reset(); m_lastPage->deleteLater(); m_centralLayout->setCurrentIndex(0); } void DebInstaller::removePackage(const int index) { m_fileListModel->removePackage(index); refreshInstallPage(); } void DebInstaller::refreshInstallPage() { // clear widgets if needed if (!m_lastPage.isNull()) m_lastPage->deleteLater(); const int packageCount = m_fileListModel->preparedPackages().size(); // no packages found if (packageCount == 0) return; if (packageCount == 1) { // single package install titlebar()->setTitle(QString()); SingleInstallPage *singlePage = new SingleInstallPage(m_fileListModel); singlePage->setObjectName("SingleInstallPage"); connect(singlePage, &SingleInstallPage::back, this, &DebInstaller::reset); connect(singlePage, &SingleInstallPage::requestUninstallConfirm, this, &DebInstaller::showUninstallConfirmPage); m_lastPage = singlePage; m_centralLayout->addWidget(singlePage); } else { // multiple packages install titlebar()->setTitle(tr("Bulk Install")); MultipleInstallPage *multiplePage = new MultipleInstallPage(m_fileListModel); multiplePage->setObjectName("MultipleInstallPage"); connect(multiplePage, &MultipleInstallPage::back, this, &DebInstaller::reset); connect(multiplePage, &MultipleInstallPage::requestRemovePackage, this, &DebInstaller::removePackage); m_lastPage = multiplePage; m_centralLayout->addWidget(multiplePage); } // switch to new page. m_centralLayout->setCurrentIndex(1); } SingleInstallPage *DebInstaller::backToSinglePage() { Q_ASSERT(m_centralLayout->count() == 3); QWidget *confirmPage = m_centralLayout->widget(2); m_centralLayout->removeWidget(confirmPage); confirmPage->deleteLater(); SingleInstallPage *p = qobject_cast(m_centralLayout->widget(1)); Q_ASSERT(p); return p; } deepin-deb-installer-5.0.0/debinstaller.h000066400000000000000000000040101350761525300203260ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #ifndef DEBINSTALLER_H #define DEBINSTALLER_H #include #include #include #include class FileChooseWidget; class DebListModel; class SingleInstallPage; class DebInstaller : public Dtk::Widget::DMainWindow { Q_OBJECT public: DebInstaller(QWidget *parent = nullptr); virtual ~DebInstaller(); protected: void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE; void dragEnterEvent(QDragEnterEvent *e) Q_DECL_OVERRIDE; void dropEvent(QDropEvent *e) Q_DECL_OVERRIDE; void dragMoveEvent(QDragMoveEvent *e) Q_DECL_OVERRIDE; private slots: void toggleDarkTheme(bool checked); void reloadTheme(); void onPackagesSelected(const QStringList &packages); void showUninstallConfirmPage(); void onUninstallAccepted(); void onUninstallCalceled(); void onAuthing(const bool authing); void reset(); void removePackage(const int index); private: void refreshInstallPage(); SingleInstallPage *backToSinglePage(); private: DebListModel *m_fileListModel; FileChooseWidget *m_fileChooseWidget; QStackedLayout *m_centralLayout; QSettings *m_qsettings; QMenu *m_tbMenu; QAction *m_darkThemeAction; QPointer m_lastPage; }; #endif // DEBINSTALLER_H deepin-deb-installer-5.0.0/deblistmodel.cpp000066400000000000000000000350011350761525300206640ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #include "deblistmodel.h" #include "packagesmanager.h" #include #include #include #include #include #include #include #include using namespace QApt; bool isDpkgRunning() { QProcess proc; proc.start("ps", QStringList() << "-e" << "-o" << "comm"); proc.waitForFinished(); const QString output = proc.readAllStandardOutput(); for (const auto &item : output.split('\n')) if (item == "dpkg") return true; return false; } const QString workerErrorString(const int e) { switch (e) { case FetchError: case DownloadDisallowedError: return QApplication::translate("DebListModel", "Installation failed, please check your network connection"); case NotFoundError: return QApplication::translate("DebListModel", "Installation failed, please check updates in Control Center"); case DiskSpaceError: return QApplication::translate("DebListModel", "Installation failed, insufficient disk space"); } return QApplication::translate("DebListModel", "Installation Failed"); } DebListModel::DebListModel(QObject *parent) : QAbstractListModel(parent), m_workerStatus(WorkerPrepare), m_packagesManager(new PackagesManager(this)) { } bool DebListModel::isReady() const { return m_packagesManager->isBackendReady(); } const QList DebListModel::preparedPackages() const { return m_packagesManager->m_preparedPackages; } QModelIndex DebListModel::first() const { return index(0); } int DebListModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); return m_packagesManager->m_preparedPackages.size(); } QVariant DebListModel::data(const QModelIndex &index, int role) const { const int r = index.row(); const DebFile *deb = m_packagesManager->package(r); switch (role) { case WorkerIsPrepareRole: return isWorkerPrepare(); case ItemIsCurrentRole: return m_currentIdx == index; case PackageNameRole: return deb->packageName(); case PackagePathRole: return deb->filePath(); case PackageVersionRole: return deb->version(); case PackageVersionStatusRole: return m_packagesManager->packageInstallStatus(r); case PackageDependsStatusRole: return m_packagesManager->packageDependsStatus(r).status; case PackageInstalledVersionRole: return m_packagesManager->packageInstalledVersion(r); case PackageAvailableDependsListRole: return m_packagesManager->packageAvailableDepends(r); case PackageReverseDependsListRole: return m_packagesManager->packageReverseDependsList(deb->packageName(), deb->architecture()); case PackageDescriptionRole: return deb->shortDescription(); case PackageFailReasonRole: return packageFailedReason(r); case PackageOperateStatusRole: if (m_packageOperateStatus.contains(r)) return m_packageOperateStatus[r]; else return Prepare; case Qt::SizeHintRole: return QSize(0, 60); default:; } return QVariant(); } void DebListModel::installAll() { Q_ASSERT_X(m_workerStatus == WorkerPrepare, Q_FUNC_INFO, "installer status error"); if (m_workerStatus != WorkerPrepare) return; m_workerStatus = WorkerProcessing; m_operatingIndex = 0; // emit workerStarted(); // start first installNextDeb(); } void DebListModel::uninstallPackage(const int idx) { Q_ASSERT(idx == 0); Q_ASSERT_X(m_workerStatus == WorkerPrepare, Q_FUNC_INFO, "installer status error"); m_workerStatus = WorkerProcessing; m_operatingIndex = idx; DebFile *deb = m_packagesManager->package(m_operatingIndex); const QStringList rdepends = m_packagesManager->packageReverseDependsList(deb->packageName(), deb->architecture()); Backend *b = m_packagesManager->m_backendFuture.result(); for (const auto &r : rdepends) b->markPackageForRemoval(r); b->markPackageForRemoval(deb->packageName() + ':' + deb->architecture()); // uninstall qDebug() << Q_FUNC_INFO << "starting to remove package: " << deb->packageName() << rdepends; refreshOperatingPackageStatus(Operating); Transaction *trans = b->commitChanges(); connect(trans, &Transaction::progressChanged, this, &DebListModel::transactionProgressChanged); connect(trans, &Transaction::statusDetailsChanged, this, &DebListModel::appendOutputInfo); connect(trans, &Transaction::statusChanged, this, &DebListModel::onTransactionStatusChanged); connect(trans, &Transaction::errorOccurred, this, &DebListModel::onTransactionErrorOccurred); connect(trans, &Transaction::finished, this, &DebListModel::uninstallFinished); connect(trans, &Transaction::finished, trans, &Transaction::deleteLater); m_currentTransaction = trans; trans->run(); } void DebListModel::removePackage(const int idx) { Q_ASSERT_X(m_workerStatus == WorkerPrepare, Q_FUNC_INFO, "installer status error"); m_packagesManager->removePackage(idx); } void DebListModel::appendPackage(DebFile *package) { Q_ASSERT_X(m_workerStatus == WorkerPrepare, Q_FUNC_INFO, "installer status error"); m_packagesManager->appendPackage(package); } void DebListModel::onTransactionErrorOccurred() { Q_ASSERT_X(m_workerStatus == WorkerProcessing, Q_FUNC_INFO, "installer status error"); Transaction *trans = static_cast(sender()); const QApt::ErrorCode e = trans->error(); Q_ASSERT(e); qWarning() << Q_FUNC_INFO << e << workerErrorString(e); qWarning() << trans->errorDetails() << trans->errorString(); if (trans->isCancellable()) trans->cancel(); if (e == AuthError) { trans->deleteLater(); qDebug() << "reset env to prepare"; // reset env emit lockForAuth(false); m_workerStatus = WorkerPrepare; return; } // DO NOT install next, this action will finished and will be install next automatic. trans->setProperty("exitStatus", QApt::ExitFailed); } void DebListModel::onTransactionStatusChanged(TransactionStatus stat) { switch (stat) { case TransactionStatus::AuthenticationStatus: emit lockForAuth(true); break; case TransactionStatus::WaitingStatus: emit lockForAuth(false); break; default:; } } void DebListModel::reset() { Q_ASSERT_X(m_workerStatus == WorkerFinished, Q_FUNC_INFO, "worker status error"); m_workerStatus = WorkerPrepare; m_operatingIndex = 0; m_packageOperateStatus.clear(); m_packageFailReason.clear(); m_packagesManager->reset(); } void DebListModel::bumpInstallIndex() { Q_ASSERT_X(m_currentTransaction.isNull(), Q_FUNC_INFO, "previous transaction not finished"); // install finished if (++m_operatingIndex == m_packagesManager->m_preparedPackages.size()) { qDebug() << "congraulations, install finished !!!"; m_workerStatus = WorkerFinished; emit workerFinished(); emit workerProgressChanged(100); emit transactionProgressChanged(100); return; } // install next installNextDeb(); } void DebListModel::refreshOperatingPackageStatus(const DebListModel::PackageOperationStatus stat) { m_packageOperateStatus[m_operatingIndex] = stat; const QModelIndex idx = index(m_operatingIndex); emit dataChanged(idx, idx); } QString DebListModel::packageFailedReason(const int idx) const { const auto stat = m_packagesManager->packageDependsStatus(idx); if (stat.isBreak()) { if (!stat.package.isEmpty()) return tr("Broken Dependencies: %1").arg(stat.package); if (m_packagesManager->isArchError(idx)) return tr("Unmatched package architecture"); const auto conflict = m_packagesManager->packageConflictStat(idx); if (!conflict.is_ok()) return tr("Broken Dependencies: %1").arg(conflict.unwrap()); // return tr("Conflicts: %1").arg(conflict.unwrap()); Q_UNREACHABLE(); } Q_ASSERT(m_packageOperateStatus.contains(idx)); Q_ASSERT(m_packageOperateStatus[idx] == Failed); Q_ASSERT(m_packageFailReason.contains(idx)); return workerErrorString(m_packageFailReason[idx]); } void DebListModel::onTransactionFinished() { Q_ASSERT_X(m_workerStatus == WorkerProcessing, Q_FUNC_INFO, "installer status error"); Transaction *trans = static_cast(sender()); // prevent next signal disconnect(trans, &Transaction::finished, this, &DebListModel::onTransactionFinished); // report new progress emit workerProgressChanged(100. * (m_operatingIndex + 1) / m_packagesManager->m_preparedPackages.size()); DebFile *deb = m_packagesManager->package(m_operatingIndex); qDebug() << "install" << deb->packageName() << "finished with exit status:" << trans->exitStatus(); if (trans->exitStatus()) { qWarning() << trans->error() << trans->errorDetails() << trans->errorString(); m_packageFailReason[m_operatingIndex] = trans->error(); refreshOperatingPackageStatus(Failed); emit appendOutputInfo(trans->errorString()); } else if (m_packageOperateStatus.contains(m_operatingIndex) && m_packageOperateStatus[m_operatingIndex] != Failed) { refreshOperatingPackageStatus(Success); } // delete trans; trans->deleteLater(); m_currentTransaction = nullptr; bumpInstallIndex(); } void DebListModel::onDependsInstallTransactionFinished() { Q_ASSERT_X(m_workerStatus == WorkerProcessing, Q_FUNC_INFO, "installer status error"); Transaction *trans = static_cast(sender()); const auto ret = trans->exitStatus(); DebFile *deb = m_packagesManager->package(m_operatingIndex); qDebug() << "install" << deb->packageName() << "dependencies finished with exit status:" << ret; if (ret) qWarning() << trans->error() << trans->errorDetails() << trans->errorString(); if (ret) { // record error m_packageFailReason[m_operatingIndex] = trans->error(); refreshOperatingPackageStatus(Failed); emit appendOutputInfo(trans->errorString()); } // delete trans; trans->deleteLater(); m_currentTransaction = nullptr; // check current operate exit status to install or install next if (ret) bumpInstallIndex(); else installNextDeb(); } void DebListModel::installNextDeb() { Q_ASSERT_X(m_workerStatus == WorkerProcessing, Q_FUNC_INFO, "installer status error"); Q_ASSERT_X(m_currentTransaction.isNull(), Q_FUNC_INFO, "previous transaction not finished"); if (isDpkgRunning()) { qDebug() << "dpkg running, waitting..."; QTimer::singleShot(1000 * 5, this, &DebListModel::installNextDeb); return; } // fetch next deb DebFile *deb = m_packagesManager->package(m_operatingIndex); auto * const backend = m_packagesManager->m_backendFuture.result(); Transaction *trans = nullptr; // reset package depends status m_packagesManager->resetPackageDependsStatus(m_operatingIndex); // check available dependencies const auto dependsStat = m_packagesManager->packageDependsStatus(m_operatingIndex); if (dependsStat.isBreak()) { refreshOperatingPackageStatus(Failed); bumpInstallIndex(); return; } else if (dependsStat.isAvailable()) { Q_ASSERT_X(m_packageOperateStatus[m_operatingIndex] == Prepare, Q_FUNC_INFO, "package operate status error when start install availble dependencies"); const QStringList availableDepends = m_packagesManager->packageAvailableDepends(m_operatingIndex); for (auto const &p : availableDepends) backend->markPackageForInstall(p); qDebug() << Q_FUNC_INFO << "install" << deb->packageName() << "dependencies: " << availableDepends; trans = backend->commitChanges(); connect(trans, &Transaction::finished, this, &DebListModel::onDependsInstallTransactionFinished); } else { qDebug() << Q_FUNC_INFO << "starting to install package: " << deb->packageName(); trans = backend->installFile(*deb); connect(trans, &Transaction::progressChanged, this, &DebListModel::transactionProgressChanged); connect(trans, &Transaction::finished, this, &DebListModel::onTransactionFinished); } // NOTE: DO NOT remove this. // see: https://bugs.kde.org/show_bug.cgi?id=382272 trans->setLocale(".UTF-8"); connect(trans, &Transaction::statusDetailsChanged, this, &DebListModel::appendOutputInfo); connect(trans, &Transaction::statusDetailsChanged, this, &DebListModel::onTransactionOutput); connect(trans, &Transaction::statusChanged, this, &DebListModel::onTransactionStatusChanged); connect(trans, &Transaction::errorOccurred, this, &DebListModel::onTransactionErrorOccurred); m_currentTransaction = trans; m_currentTransaction->run(); } void DebListModel::onTransactionOutput() { Q_ASSERT_X(m_workerStatus == WorkerProcessing, Q_FUNC_INFO, "installer status error"); Transaction *trans = static_cast(sender()); Q_ASSERT(trans == m_currentTransaction.data()); refreshOperatingPackageStatus(Operating); disconnect(trans, &Transaction::statusDetailsChanged, this, &DebListModel::onTransactionOutput); } void DebListModel::uninstallFinished() { Q_ASSERT_X(m_workerStatus == WorkerProcessing, Q_FUNC_INFO, "installer status error"); qDebug() << Q_FUNC_INFO; m_workerStatus = WorkerFinished; refreshOperatingPackageStatus(Success); emit workerFinished(); } void DebListModel::setCurrentIndex(const QModelIndex &idx) { if (m_currentIdx == idx) return; const QModelIndex index = m_currentIdx; m_currentIdx = idx; emit dataChanged(index, index); emit dataChanged(m_currentIdx, m_currentIdx); } deepin-deb-installer-5.0.0/deblistmodel.h000066400000000000000000000074221350761525300203370ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #ifndef DEBLISTMODEL_H #define DEBLISTMODEL_H #include #include #include #include #include #include class PackagesManager; class DebListModel : public QAbstractListModel { Q_OBJECT public: explicit DebListModel(QObject *parent = 0); enum PackageRole { PackageNameRole = Qt::DisplayRole, UnusedRole = Qt::UserRole, WorkerIsPrepareRole, ItemIsCurrentRole, PackageVersionRole, PackagePathRole, PackageInstalledVersionRole, PackageDescriptionRole, PackageVersionStatusRole, PackageDependsStatusRole, PackageAvailableDependsListRole, PackageFailReasonRole, PackageOperateStatusRole, PackageReverseDependsListRole, }; enum WorkerStatus { WorkerPrepare, WorkerProcessing, WorkerFinished, }; enum PackageInstallStatus { NotInstalled, InstalledSameVersion, InstalledEarlierVersion, InstalledLaterVersion, }; enum PackageDependsStatus { DependsOk, DependsAvailable, DependsBreak, }; enum PackageOperationStatus { Prepare, Operating, Success, Failed, }; void reset(); bool isReady() const; bool isWorkerPrepare() const { return m_workerStatus == WorkerPrepare; } const QList preparedPackages() const; QModelIndex first() const; int rowCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role) const override; signals: // void workerStarted() const; void lockForAuth(const bool lock) const; void workerFinished() const; void workerProgressChanged(const int progress) const; void transactionProgressChanged(const int progress) const; void appendOutputInfo(const QString &info) const; void packageOperationChanged(const QModelIndex &index, int status) const; void packageDependsChanged(const QModelIndex &index, int status) const; public slots: void setCurrentIndex(const QModelIndex &idx); void installAll(); void uninstallPackage(const int idx); void removePackage(const int idx); void appendPackage(QApt::DebFile *package); void onTransactionErrorOccurred(); void onTransactionStatusChanged(QApt::TransactionStatus stat); private: void bumpInstallIndex(); void onTransactionOutput(); void onTransactionFinished(); void onDependsInstallTransactionFinished(); void installNextDeb(); void uninstallFinished(); void refreshOperatingPackageStatus(const PackageOperationStatus stat); QString packageFailedReason(const int idx) const; private: int m_workerStatus; int m_operatingIndex; QModelIndex m_currentIdx; PackagesManager *m_packagesManager; QPointer m_currentTransaction; QHash m_packageOperateStatus; QHash m_packageFailReason; }; #endif // DEBLISTMODEL_H deepin-deb-installer-5.0.0/deepin-deb-installer.applications000066400000000000000000000003131350761525300241060ustar00rootroot00000000000000 Deepin deb installer command=deepin-deb-installer name=Install Package (Deepin deb installer) can_open_multiple_files=true expects_uris=false requires_terminal=false mime_types=application/x-deb deepin-deb-installer-5.0.0/deepin-deb-installer.desktop000066400000000000000000000177321350761525300231060ustar00rootroot00000000000000[Desktop Entry] Categories=System; Comment=Deepin Package Manager is used to help users install and remove local package, supports bulk install. Exec=deepin-deb-installer %F GenericName=Package Manager Icon=deepin-deb-installer MimeType=application/vnd.debian.binary-package;application/x-deb; Name=Deepin Package Manager StartupNotify=true Terminal=false Type=Application X-Deepin-Vendor=deepin # Translations: # Do not manually modify! Comment[bg]=Deepin Мениджър на пакети се използва, за да помогне на потребителите да инсталират и премахват локален пакет, поддръжка на групово инсталиране. Comment[ca]=El Gestor de paquets del Deepin s'usa per ajudar els usuaris a instal·lar i eliminar paquets locals. Admet la instal·lació massiva. Comment[cs]=Správce balíčků se používá k pomoci uživatelům instalovat a odebírat místní balíčky, podporuje hromadnou instalaci. Comment[da]=Deepin pakkehåndtering bruges til at hjælpe brugere med at installere og fjerne lokal pakke, med understøttelse af masseinstallation. Comment[de]=Die Deepin Paketverwaltung unterstützt Benutzer beim Installieren und Entfernen von Softwarepaketen und unterstützt zudem die Installation via Stapelverarbeitung. Comment[en_AU]=The Deepin Package Manager helps users install and remove local packages. It supports bulk package installation. Comment[es]=Deepin Package Manager es usada para ayudar a los usuarios a instalar y quitar paquete local, soporta instalación en lote. Comment[es_419]=El Gestor de Paquetes Deepin se usa para ayudar a los usuarios a instalar y eliminar paquetes locales, admite la instalación masiva. Comment[et]=Deepin pakihaldur on rakendus, millega kasutajad saavad arvutisse tarkvara paigaldada ja seda sealt eemaldada. Toetab ka hulgipaigaldamist. Comment[fi]=Deepin-paketinhallintaa käytetään auttamaan käyttäjiä asentamaan ja poistamaan paikallisia paketteja. Comment[fr]=Deepin Package Manager est une application pour aider les utilisateurs à gérer les paquets installés, il supporte également l'installation multiple. Comment[id]=Manajer Paket Deepin digunakan untuk menolong para pengguna install dan menghapus paket lokal, mendukung install massal Comment[it]=Deepin Package Manager è utile per installare e rimuovere software in locale, supporta inoltre l'installazione massiva. Localizzazione italiana a cura di Massimo A. Carofano. Comment[ko]=Deepin 패키지 관리자는 사용자가 로컬 패키지를 설치 및 제거하고 일괄 설치를 지원하는데 사용됩니다. Comment[lt]=Deepin paketų tvarkytuvė yra naudojama padėti naudotojams įdiegti ir šalinti vietinius paketus, ši programa palaiko masinį įdiegimą. Comment[mn]=Деепин Багц Зохицуулагч нь хэрэглэгчдэд програм суулгах устгахад туслахаас гадна бүлэг суулгалтыг дэмждэг. Comment[ms]=Pengurus Pakej Deepin digunakan digunakan untuk bantu pengguna memasang dan membuang perisian setempat, selain itu ia menyokong pemasangan secara pukal. Comment[ne]=डिपिन प्याकेज प्रबन्धक, प्याकेज फाइल स्थापना र स्थापना रद्द गर्न प्रयोग हुन्छ Comment[nl]=Deepin Pakketbeheer is een applicatie die gebruikers helpt bij het installeren en verwijderen van lokale software, zowel één voor één als meerdere tegelijk. Comment[pl]=Zarządzanie pakietami Deepin pomaga użytkownikom instalować i usuwać lokalne pakiety, obsługuje instalację zbiorczą. Comment[pt]=O Deepin Package Manager é uma aplicação utilizada para ajudar os utilizadores a instalar e remover pacotes locais, suporta instalações em massa. Comment[pt_BR]=O Gerenciador de Pacotes Deepin tem como finalidade ajudar os usuários a instalar e remover pacotes locais, suportando a instalação em massa. Comment[ru]=Пакетный Менеджер Deepin используется для помощи пользователям в установке и удалении программного обеспечения, с поддержкой массовой установки. Comment[sk]=Aplikácia Deepin Správca balíčkov slúži na pomoc používateľom pri inštalácii a odstraňovaní lokálnych balíčkov, podporuje hromadnú inštaláciu. Comment[sq]=Përgjegjësi Deepin i Paketave përdoret për t’i ndihmuar përdoruesit të instalojnë dhe heqin paketa vendore. Mbulon instalime në masë. Comment[sr]=Дипин Управник Пакета је програм који помаже корисницима при инсталирању и уклањању локалног софтвера. Подржава групну инсталацију. Comment[tr]=Deepin Paket Yöneticisi, kullanıcıların yerel uygulamaları kurup kaldırmasını sağlayan ve toplu kurulum özelliği olan bir uygulamadır. Comment[uk]=Засіб керування пакунками Deepin використовується для полегшення встановлення і вилучення локальних пакунків користувачем. Передбачено підтримку пакетного встановлення. Comment[zh_CN]=深度软件包管理器用于帮助用户安装和卸载本地软件,支持批量安装。 Comment[zh_TW]=Deepin 軟體包管理器用來幫助使用者安裝和移除本機軟體包。支援批次安裝。 GenericName[ast]=Xestor de paquetes GenericName[bg]=Мениджър на пакети GenericName[ca]=Gestor de paquets GenericName[cs]=Správce balíčků GenericName[da]=Pakkehåndtering GenericName[de]=Paketverwaltung GenericName[en_AU]=Package Manager GenericName[es]=Package Manager GenericName[es_419]=Gestor de Paquetes GenericName[et]=Pakihaldur GenericName[fi]=Paketinhallinta GenericName[fr]=Gestionnaire de paquets Deepin GenericName[hu]=Csomagkezelő GenericName[id]=Manajer Paket GenericName[it]=Package Manager GenericName[ko]=패키지 관리자 GenericName[lt]=Paketų tvarkytuvė GenericName[mn]=Багц Зохицуулагч GenericName[ms]=Pengurus Pakej GenericName[ne]=प्याकेज प्रबन्धक GenericName[nl]=Pakketbeheer GenericName[pa]=ਪੈਕੇਜ ਮੈਨੇਜਰ GenericName[pl]=Zarządzanie pakietami GenericName[pt]=Gestor de Pacotes GenericName[pt_BR]=Gerenciador de Pacotes GenericName[ru]=Менеджер Пакетов GenericName[sk]=Správca balíčkov GenericName[sq]=Përgjegjës Paketash GenericName[sr]=Управник Пакета GenericName[tr]=Paket Yöneticisi GenericName[uk]=Керування пакунками GenericName[zh_CN]=软件包管理器 GenericName[zh_TW]=軟體包管理器 Name[ast]=Deepin Package Manager Name[bg]=Deepin Мениджър на пакети Name[ca]=Gestor de paquets del Deepin Name[cs]=Správce balíčků Name[da]=Deepin pakkehåndtering Name[de]=Deepin Paketverwaltung Name[en_AU]=Deepin Package Manager Name[es]=Deepin Package Manager Name[es_419]=Gestor de Paquetes Deepin Name[et]=Deepin pakihaldur Name[fi]=Deepin Paketinhallinta Name[fr]=Gestionnaire de paquets Deepin Name[hu]=Deepin csomagkezelő Name[id]=Manajer Paket Deepin Name[it]=Deepin Package Manager Name[ko]=Deepin 패키지 관리자 Name[lt]=Deepin paketų tvarkytuvė Name[mn]=Деепин Багц Зохицуулагч Name[ms]=Pengurus Pakej Deepin Name[ne]=डिपिन प्याकेज प्रबन्धक Name[nl]=Deepin Pakketbeheer Name[pa]=ਡੀਪਿਨ ਪੈਕੇਜ ਮੈਨੇਜਰ Name[pl]=Zarządzanie pakietami Deepin Name[pt]=Deepin Package Manager Name[pt_BR]=Deepin Gerenciador de Pacotes Name[ru]=Менеджер Пакетов Deepin Name[sk]=Deepin Správca balíčkov Name[sq]=Përgjegjësi Deepin i Paketave Name[sr]=Дипин Управник Пакета Name[tr]=Deepin Paket Yöneticisi Name[uk]=Керування пакунками Deepin Name[zh_CN]=深度软件包管理器 Name[zh_TW]=Deepin 軟體包管理器 deepin-deb-installer-5.0.0/environments.h.in000066400000000000000000000001651350761525300210210ustar00rootroot00000000000000#ifndef __ENVIRONMENTS_H_ #define __ENVIRONMENTS_H_ #define VERSION "@VERSION@" #endif // __ENVIRONMENTS_H_ deepin-deb-installer-5.0.0/filechoosewidget.cpp000066400000000000000000000073151350761525300215500ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #include "filechoosewidget.h" #include "utils.h" #include #include #include #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE FileChooseWidget::FileChooseWidget(QWidget *parent) : QWidget(parent), m_settings("deepin", "deepin-deb-install") { const auto ratio = devicePixelRatioF(); QPixmap iconPix = Utils::renderSVG(":/images/icon.svg", QSize(140, 140)); iconPix.setDevicePixelRatio(ratio); QLabel *iconImage = new QLabel; iconImage->setFixedSize(140, 140); iconImage->setPixmap(iconPix); QLabel *dndTips = new QLabel; dndTips->setText(tr("Drag and drop file here")); dndTips->setAlignment(Qt::AlignCenter); dndTips->setObjectName("DNDTips"); QVBoxLayout *centerWrapLayout = new QVBoxLayout; centerWrapLayout->addWidget(iconImage); centerWrapLayout->setAlignment(iconImage, Qt::AlignTop | Qt::AlignHCenter); centerWrapLayout->addSpacing(20); centerWrapLayout->addWidget(dndTips); centerWrapLayout->setSpacing(0); centerWrapLayout->setContentsMargins(0, 0, 0, 15); QWidget *centerWidget = new QFrame; centerWidget->setFixedWidth(240); centerWidget->setLayout(centerWrapLayout); centerWidget->setObjectName("CenterWidget"); QLabel *split_line = new QLabel; split_line->setObjectName("SplitLine"); //split_line->setPixmap(QPixmap(":/images/split_line.svg")); split_line->setAlignment(Qt::AlignCenter); m_fileChooseBtn = new DLinkButton; m_fileChooseBtn->setObjectName("FileChooseButton"); m_fileChooseBtn->setText(tr("Select File")); QVBoxLayout *centralLayout = new QVBoxLayout; centralLayout->addStretch(); centralLayout->addWidget(centerWidget); centralLayout->setAlignment(centerWidget, Qt::AlignTop | Qt::AlignCenter); centralLayout->addWidget(split_line); centralLayout->addSpacing(20); centralLayout->addWidget(m_fileChooseBtn); centralLayout->setAlignment(m_fileChooseBtn, Qt::AlignCenter); centralLayout->setSpacing(0); centralLayout->setContentsMargins(0, 0, 0, 60); setLayout(centralLayout); connect(m_fileChooseBtn, &QPushButton::clicked, this, &FileChooseWidget::chooseFiles); } void FileChooseWidget::chooseFiles() { QString historyDir = m_settings.value("history_dir").toString(); if (historyDir.isEmpty()) { historyDir = QDir::homePath(); } QFileDialog dialog; dialog.setFileMode(QFileDialog::ExistingFiles); dialog.setNameFilter("Debian Package Files (*.deb)"); dialog.setDirectory(historyDir); const int mode = dialog.exec(); // save the directory string to config file. m_settings.setValue("history_dir", dialog.directoryUrl().toLocalFile()); if (mode != QDialog::Accepted) return; const QStringList selected_files = dialog.selectedFiles(); emit packagesSelected(selected_files); } deepin-deb-installer-5.0.0/filechoosewidget.h000066400000000000000000000023231350761525300212070ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #ifndef FILECHOOSEWIDGET_H #define FILECHOOSEWIDGET_H #include #include #include class FileChooseWidget : public QWidget { Q_OBJECT public: explicit FileChooseWidget(QWidget *parent = nullptr); signals: void packagesSelected(const QStringList files) const; private slots: void chooseFiles(); private: Dtk::Widget::DLinkButton *m_fileChooseBtn; QSettings m_settings; }; #endif // FILECHOOSEWIDGET_H deepin-deb-installer-5.0.0/infocontrolbutton.cpp000066400000000000000000000045061350761525300220130ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #include "infocontrolbutton.h" #include #include #include #include InfoControlButton::InfoControlButton(const QString &expandTips, const QString &shrinkTips, QWidget *parent) : QWidget(parent), m_expand(false), m_expandTips(expandTips), m_shrinkTips(shrinkTips), m_arrowIcon(new QLabel), m_tipsText(new QLabel) { m_arrowIcon->setAlignment(Qt::AlignCenter); m_arrowIcon->setPixmap(QIcon(":/images/arrow_up.svg").pixmap(21, 8)); m_tipsText->setAlignment(Qt::AlignCenter); m_tipsText->setText(expandTips); m_tipsText->setObjectName("TipsText"); QVBoxLayout *centralLayout = new QVBoxLayout; centralLayout->addSpacing(2); centralLayout->addWidget(m_arrowIcon); centralLayout->addStretch(); centralLayout->addWidget(m_tipsText); centralLayout->setSpacing(0); centralLayout->setContentsMargins(0, 0, 0, 0); setLayout(centralLayout); setFixedSize(200, 33); } void InfoControlButton::mouseReleaseEvent(QMouseEvent *e) { QWidget::mouseReleaseEvent(e); onMouseRelease(); } void InfoControlButton::onMouseRelease() { if (m_expand) emit shrink(); else emit expand(); m_expand = !m_expand; if (!m_expand) { m_arrowIcon->setPixmap(QIcon(":/images/arrow_up.svg").pixmap(21, 8)); m_tipsText->setText(m_expandTips); setFixedSize(200, 33); } else { m_arrowIcon->setPixmap(QIcon(":/images/arrow_down.svg").pixmap(21, 8)); m_tipsText->setText(m_shrinkTips); setFixedSize(200, 28); } } deepin-deb-installer-5.0.0/infocontrolbutton.h000066400000000000000000000025011350761525300214510ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #ifndef INFOCONTROLBUTTON_H #define INFOCONTROLBUTTON_H #include #include class InfoControlButton : public QWidget { Q_OBJECT public: explicit InfoControlButton(const QString &expandTips, const QString &shrinkTips, QWidget *parent = 0); signals: void expand(); void shrink(); protected: void mouseReleaseEvent(QMouseEvent *); private slots: void onMouseRelease(); private: bool m_expand; QString m_expandTips; QString m_shrinkTips; QLabel *m_arrowIcon; QLabel *m_tipsText; }; #endif // INFOCONTROLBUTTON_H deepin-deb-installer-5.0.0/main.cpp000066400000000000000000000051771350761525300171540ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #include "debinstaller.h" #include "environments.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE #ifdef DUTIL_USE_NAMESPACE DUTIL_USE_NAMESPACE #else DCORE_USE_NAMESPACE #endif int main(int argc, char *argv[]) { DApplication::loadDXcbPlugin(); DApplication app(argc, argv); app.setOrganizationName("deepin"); app.setApplicationName("deepin-deb-installer"); app.setApplicationVersion(VERSION); app.setApplicationAcknowledgementPage("https://www.deepin.org/acknowledgments/deepin-package-manager/"); app.setProductIcon(QIcon(":/images/icon.svg")); app.setAttribute(Qt::AA_UseHighDpiPixmaps); app.setAttribute(Qt::AA_EnableHighDpiScaling); // app.loadTranslator(QList() << QLocale("zh_CN")); app.loadTranslator(); app.setProductName(QApplication::translate("main", "Deepin Package Manager")); app.setApplicationDescription(QApplication::translate("main", "Deepin Package Manager is used to help users install and remove local packages, supporting bulk install.")); DLogManager::registerConsoleAppender(); DLogManager::registerFileAppender(); qDebug() << qApp->applicationName() << "started, version = " << qApp->applicationVersion(); // command line arguments QCommandLineParser parser; parser.setApplicationDescription("Deepin deb package manager."); parser.addHelpOption(); parser.addVersionOption(); parser.addPositionalArgument("filename", "Deb package path.", "file [file..]"); parser.process(app); const QStringList file_list = parser.positionalArguments(); qDebug() << file_list; DebInstaller w; w.show(); // select files from args if (!file_list.isEmpty()) QMetaObject::invokeMethod(&w, "onPackagesSelected", Qt::QueuedConnection, Q_ARG(QStringList, file_list)); return app.exec(); } deepin-deb-installer-5.0.0/multipleinstallpage.cpp000066400000000000000000000126631350761525300223050ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #include "multipleinstallpage.h" #include "packagelistview.h" #include "packageslistdelegate.h" #include "deblistmodel.h" #include "workerprogress.h" #include "widgets/bluebutton.h" #include "widgets/graybutton.h" #include #include #include #include #include MultipleInstallPage::MultipleInstallPage(DebListModel *model, QWidget *parent) : QWidget(parent), m_debListModel(model), m_appsView(new PackagesListView), m_infoArea(new QTextEdit), m_infoControlButton(new InfoControlButton(tr("Display details"), tr("Collapse"))), m_installProgress(new WorkerProgress), m_progressAnimation(new QPropertyAnimation(m_installProgress, "value", this)), m_installButton(new BlueButton), m_acceptButton(new GrayButton), m_backButton(new GrayButton) { PackagesListDelegate *delegate = new PackagesListDelegate; m_appsView->setObjectName("AppsView"); m_infoArea->setObjectName("InfoArea"); m_infoControlButton->setObjectName("InfoControlButton"); m_appsView->setModel(model); m_appsView->setFixedHeight(213); m_appsView->setItemDelegate(delegate); m_installButton->setText(tr("Install")); m_acceptButton->setText(tr("Done")); m_acceptButton->setVisible(false); m_backButton->setText(tr("Back")); m_backButton->setVisible(false); m_infoArea->setReadOnly(true); m_infoArea->setVisible(false); m_infoArea->setAcceptDrops(false); m_infoArea->setFixedHeight(186); m_infoArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_infoControlButton->setVisible(false); m_installProgress->setVisible(false); QHBoxLayout *btnsLayout = new QHBoxLayout; btnsLayout->addStretch(); btnsLayout->addWidget(m_installButton); btnsLayout->addWidget(m_backButton); btnsLayout->addWidget(m_acceptButton); btnsLayout->setSpacing(10); btnsLayout->addStretch(); btnsLayout->setContentsMargins(0, 0, 0, 0); QVBoxLayout *centralLayout = new QVBoxLayout; centralLayout->addWidget(m_appsView); centralLayout->addWidget(m_infoControlButton); centralLayout->setAlignment(m_infoControlButton, Qt::AlignHCenter); centralLayout->addWidget(m_infoArea); centralLayout->addStretch(); centralLayout->addWidget(m_installProgress); centralLayout->setAlignment(m_installProgress, Qt::AlignHCenter); centralLayout->addLayout(btnsLayout); centralLayout->setSpacing(0); centralLayout->setContentsMargins(20, 0, 20, 30); setLayout(centralLayout); connect(m_infoControlButton, &InfoControlButton::expand, this, &MultipleInstallPage::showInfo); connect(m_infoControlButton, &InfoControlButton::shrink, this, &MultipleInstallPage::hideInfo); connect(m_installButton, &QPushButton::clicked, m_debListModel, &DebListModel::installAll); connect(m_backButton, &QPushButton::clicked, this, &MultipleInstallPage::back); connect(m_acceptButton, &QPushButton::clicked, qApp, &QApplication::quit); connect(m_appsView, &PackagesListView::clicked, this, &MultipleInstallPage::onItemClicked); connect(m_appsView, &PackagesListView::entered, m_debListModel, &DebListModel::setCurrentIndex); connect(model, &DebListModel::workerProgressChanged, this, &MultipleInstallPage::onProgressChanged); connect(model, &DebListModel::appendOutputInfo, this, &MultipleInstallPage::onOutputAvailable); } void MultipleInstallPage::onWorkerFinshed() { m_acceptButton->setVisible(true); m_backButton->setVisible(true); m_installProgress->setVisible(false); } void MultipleInstallPage::onOutputAvailable(const QString &output) { m_infoArea->append(output.trimmed()); // change to install if (m_installButton->isVisible()) { m_installButton->setVisible(false); m_installProgress->setVisible(true); m_infoControlButton->setVisible(true); } } void MultipleInstallPage::onProgressChanged(const int progress) { m_progressAnimation->setStartValue(m_installProgress->value()); m_progressAnimation->setEndValue(progress); m_progressAnimation->start(); // finished if (progress == 100) { onOutputAvailable(QString()); QTimer::singleShot(m_progressAnimation->duration(), this, &MultipleInstallPage::onWorkerFinshed); } } void MultipleInstallPage::onItemClicked(const QModelIndex &index) { if (!m_debListModel->isWorkerPrepare()) return; const int r = index.row(); emit requestRemovePackage(r); } void MultipleInstallPage::showInfo() { m_appsView->setVisible(false); m_infoArea->setVisible(true); } void MultipleInstallPage::hideInfo() { m_appsView->setVisible(true); m_infoArea->setVisible(false); } deepin-deb-installer-5.0.0/multipleinstallpage.h000066400000000000000000000034761350761525300217540ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #ifndef MULTIPLEINSTALLPAGE_H #define MULTIPLEINSTALLPAGE_H #include "infocontrolbutton.h" #include #include #include #include #include class PackagesListView; class DebListModel; class MultipleInstallPage : public QWidget { Q_OBJECT public: explicit MultipleInstallPage(DebListModel *model, QWidget *parent = 0); signals: void back() const; void requestRemovePackage(const int index) const; private slots: void onWorkerFinshed(); void onOutputAvailable(const QString &output); void onProgressChanged(const int progress); void onItemClicked(const QModelIndex &index); void showInfo(); void hideInfo(); private: DebListModel *m_debListModel; PackagesListView *m_appsView; QTextEdit *m_infoArea; InfoControlButton *m_infoControlButton; QProgressBar *m_installProgress; QPropertyAnimation *m_progressAnimation; QPushButton *m_installButton; QPushButton *m_acceptButton; QPushButton *m_backButton; }; #endif // MULTIPLEINSTALLPAGE_H deepin-deb-installer-5.0.0/packagelistview.cpp000066400000000000000000000021431350761525300214000ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #include "packagelistview.h" PackagesListView::PackagesListView(QWidget *parent) : QListView(parent) { setVerticalScrollMode(ScrollPerPixel); setSelectionMode(NoSelection); setAutoScroll(false); setMouseTracking(true); } void PackagesListView::leaveEvent(QEvent *e) { QListView::leaveEvent(e); emit entered(QModelIndex()); } deepin-deb-installer-5.0.0/packagelistview.h000066400000000000000000000020171350761525300210450ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #ifndef PACKAGESLISTVIEW_H #define PACKAGESLISTVIEW_H #include class PackagesListView : public QListView { Q_OBJECT public: explicit PackagesListView(QWidget *parent = 0); protected: void leaveEvent(QEvent *e); }; #endif // PACKAGESLISTVIEW_H deepin-deb-installer-5.0.0/packageslistdelegate.cpp000066400000000000000000000147401350761525300223710ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #include "packageslistdelegate.h" #include "deblistmodel.h" #include "utils.h" #include #include #include #define THEME_DARK "dark" #define THEME_LIGHT "light" DWIDGET_USE_NAMESPACE PackagesListDelegate::PackagesListDelegate(QObject *parent) : QAbstractItemDelegate(parent) { const QIcon icon = QIcon::fromTheme("application-vnd.debian.binary-package", QIcon::fromTheme("debian-swirl")); const auto ratio = qApp->devicePixelRatio(); m_packageIcon = icon.pixmap(32, 32); m_removeIcon = Utils::renderSVG(":/images/active_tab_close_normal.svg", QSize(16, 16)); m_removeIcon.setDevicePixelRatio(ratio); } void PackagesListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { // painter->fillRect(option.rect, Qt::gray); const int content_x = 45; const QString &theme = m_qsettings.value("theme").toString(); // draw top border if (index.row()) { const QPoint start(content_x, option.rect.top()); const QPoint end(option.rect.right() - 10, option.rect.top()); painter->setPen(theme == THEME_LIGHT ? QColor(0, 0, 0, 255 * .05) : QColor(255, 255, 255, 255 * 0.05)); painter->setRenderHint(QPainter::Antialiasing, false); painter->drawLine(start, end); } painter->setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform); // draw package icon const int x = 5; const int y = option.rect.top() + (option.rect.height() - m_packageIcon.height() / m_packageIcon.devicePixelRatio()) / 2; painter->drawPixmap(x, y, m_packageIcon); // draw package name QRect name_rect = option.rect; name_rect.setLeft(content_x); name_rect.setHeight(name_rect.height() / 2); const QString name = index.data(DebListModel::PackageNameRole).toString(); const QFont old_font = painter->font(); QFont f = old_font; if (theme == THEME_LIGHT) { f.setWeight(QFont::DemiBold); } painter->setFont(f); const QString name_str = painter->fontMetrics().elidedText(name, Qt::ElideRight, 306); const QRectF name_bounding_rect = painter->boundingRect(name_rect, name_str, Qt::AlignLeft | Qt::AlignBottom); painter->setPen(theme == THEME_LIGHT ? Qt::black : QColor("#efefef")); painter->drawText(name_rect, name_str, Qt::AlignLeft | Qt::AlignBottom); painter->setFont(old_font); // draw package version const int version_x = name_bounding_rect.right() + 8; QRect version_rect = name_rect; version_rect.setLeft(version_x); version_rect.setRight(option.rect.right() - 85); const QString version = index.data(DebListModel::PackageVersionRole).toString(); const QString version_str = painter->fontMetrics().elidedText(version, Qt::ElideRight, version_rect.width()); painter->setPen(theme == THEME_LIGHT ? Qt::black : QColor("#929292")); painter->drawText(version_rect, version_str, Qt::AlignLeft | Qt::AlignBottom); // install status const int operate_stat = index.data(DebListModel::PackageOperateStatusRole).toInt(); if (operate_stat != DebListModel::Prepare) { QRect install_status_rect = option.rect; install_status_rect.setRight(option.rect.right() - 15); install_status_rect.setLeft(option.rect.right() - 80); switch (operate_stat) { case DebListModel::Operating: painter->setPen(QColor(124, 124, 124)); painter->drawText(install_status_rect, tr("Installing"), Qt::AlignVCenter | Qt::AlignRight); break; case DebListModel::Success: painter->setPen(QColor(65, 117, 5)); painter->drawText(install_status_rect, tr("Installed"), Qt::AlignVCenter | Qt::AlignRight); break; default: painter->setPen(QColor(255, 109, 109)); painter->drawText(install_status_rect, tr("Failed"), Qt::AlignVCenter | Qt::AlignRight); break; } } else if (index.data(DebListModel::WorkerIsPrepareRole).toBool() && index.data(DebListModel::ItemIsCurrentRole).toBool()) { // draw remove icon const int x = option.rect.right() - m_removeIcon.width() / m_removeIcon.devicePixelRatio() - 10; const int y = option.rect.top() + (option.rect.height() - m_removeIcon.height() / m_removeIcon.devicePixelRatio()) / 2; painter->drawPixmap(x, y, m_removeIcon); } // draw package info QString info_str; QRect info_rect = option.rect; info_rect.setLeft(content_x); info_rect.setTop(name_rect.bottom() + 1 + 3); const int install_stat = index.data(DebListModel::PackageVersionStatusRole).toInt(); if (operate_stat == DebListModel::Failed) { info_str = index.data(DebListModel::PackageFailReasonRole).toString(); painter->setPen(QColor(255, 109, 109)); } else if (install_stat != DebListModel::NotInstalled) { if (install_stat == DebListModel::InstalledSameVersion) { info_str = tr("Same version installed"); painter->setPen(QColor(65, 117, 5)); } else { info_str = tr("Other version installed: %1").arg(index.data(DebListModel::PackageInstalledVersionRole).toString()); painter->setPen(QColor(255, 109, 109)); } } else { info_str = index.data(DebListModel::PackageDescriptionRole).toString(); painter->setPen(QColor(90, 90, 90)); } info_str = painter->fontMetrics().elidedText(info_str, Qt::ElideRight, 306); painter->drawText(info_rect, info_str, Qt::AlignLeft | Qt::AlignTop); } QSize PackagesListDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { Q_UNUSED(option); return index.data(Qt::SizeHintRole).toSize(); } deepin-deb-installer-5.0.0/packageslistdelegate.h000066400000000000000000000025071350761525300220340ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #ifndef PACKAGESLISTDELEGATE_H #define PACKAGESLISTDELEGATE_H #include #include class PackagesListDelegate : public QAbstractItemDelegate { Q_OBJECT public: explicit PackagesListDelegate(QObject *parent = 0); private: void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; private: QPixmap m_packageIcon; QPixmap m_removeIcon; QSettings m_qsettings; }; #endif // PACKAGESLISTDELEGATE_H deepin-deb-installer-5.0.0/packagesmanager.cpp000066400000000000000000000617201350761525300213350ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #include "packagesmanager.h" #include "deblistmodel.h" #include #include #include using namespace QApt; QString relationName(const RelationType type) { switch (type) { case LessOrEqual: return "<="; case GreaterOrEqual: return ">="; case LessThan: return "<"; case GreaterThan: return ">"; case Equals: return "="; case NotEqual: return "!="; default:; } return QString(); } bool isArchMatches(QString sysArch, const QString &packageArch, const int multiArchType) { Q_UNUSED(multiArchType); if (sysArch.startsWith(':')) sysArch.remove(0, 1); if (sysArch == "all" || sysArch == "any") return true; // if (multiArchType == MultiArchForeign) // return true; return sysArch == packageArch; } QString resolvMultiArchAnnotation(const QString &annotation, const QString &debArch, const int multiArchType = InvalidMultiArchType) { if (annotation == "native" || annotation == "any") return QString(); if (multiArchType == MultiArchForeign) return QString(); QString arch; if (annotation.isEmpty()) arch = debArch; else arch = annotation; if (!arch.startsWith(':') && !arch.isEmpty()) return arch.prepend(':'); else return arch; } bool dependencyVersionMatch(const int result, const RelationType relation) { switch (relation) { case LessOrEqual: return result <= 0; case GreaterOrEqual: return result >= 0; case LessThan: return result < 0; case GreaterThan: return result > 0; case Equals: return result == 0; case NotEqual: return result != 0; default:; } return true; } Backend *init_backend() { Backend *b = new Backend; if (b->init()) return b; qFatal("%s", b->initErrorMessage().toStdString().c_str()); return nullptr; } PackagesManager::PackagesManager(QObject *parent) : QObject(parent) { m_backendFuture = QtConcurrent::run(init_backend); } bool PackagesManager::isBackendReady() { return m_backendFuture.isFinished(); } bool PackagesManager::isArchError(const int idx) { Backend *b = m_backendFuture.result(); DebFile *deb = m_preparedPackages[idx]; const QString arch = deb->architecture(); if (arch == "all" || arch == "any") return false; return !b->architectures().contains(deb->architecture()); } const ConflictResult PackagesManager::packageConflictStat(const int index) { auto *p = m_preparedPackages[index]; return isConflictSatisfy(p->architecture(), p->conflicts()); } const ConflictResult PackagesManager::isConflictSatisfy(const QString &arch, Package *package) { const QString &name = package->name(); qDebug() << "check conflict for package" << name << arch; const auto ret_installed = isInstalledConflict(name, package->version(), package->architecture()); if (!ret_installed.is_ok()) return ret_installed; // if (!ret_installed.is_ok()) // { // bool found_provider = false; // // check providers // Backend *b = m_backendFuture.result(); // for (auto *ap : b->availablePackages()) // { // if (ap->providesList().contains(name)) // { // found_provider = true; // break; // } // } // // not found providers, return error // if (!found_provider) // return ret_installed; // } qDebug() << "check conflict for local installed package is ok."; const auto ret_package = isConflictSatisfy(arch, package->conflicts()); qDebug() << "check finished, conflict is satisfy:" << package->name() << bool(ret_package.is_ok()); return ret_package; } const ConflictResult PackagesManager::isInstalledConflict(const QString &packageName, const QString &packageVersion, const QString &packageArch) { static QList> sysConflicts; if (sysConflicts.isEmpty()) { Backend *b = m_backendFuture.result(); for (Package *p : b->availablePackages()) { if (!p->isInstalled()) continue; const auto &conflicts = p->conflicts(); if (conflicts.isEmpty()) continue; for (const auto &conflict_list : conflicts) for (const auto &conflict : conflict_list) sysConflicts << QPair(p->name(), conflict); } } for (const auto &info : sysConflicts) { const auto &conflict = info.second; const auto &pkgName = conflict.packageName(); const auto &pkgVersion = conflict.packageVersion(); const auto &pkgArch = conflict.multiArchAnnotation(); if (pkgName != packageName) continue; qDebug() << pkgName << pkgVersion << pkgArch; // pass if arch not match if (!pkgArch.isEmpty() && pkgArch != packageArch && pkgArch != "any" && pkgArch != "native") continue; if (pkgVersion.isEmpty()) return ConflictResult::err(info.first); const int relation = Package::compareVersion(packageVersion, conflict.packageVersion()); // match, so is bad if (dependencyVersionMatch(relation, conflict.relationType())) return ConflictResult::err(info.first); } return ConflictResult::ok(QString()); } const ConflictResult PackagesManager::isConflictSatisfy(const QString &arch, const QList &conflicts) { for (const auto &conflict_list : conflicts) { for (const auto &conflict : conflict_list) { const QString name = conflict.packageName(); Package *p = packageWithArch(name, arch, conflict.multiArchAnnotation()); if (!p || !p->isInstalled()) continue; // arch error, conflicts if (!isArchMatches(arch, p->architecture(), p->multiArchType())) { qDebug() << "conflicts package installed: " << arch << p->name() << p->architecture() << p->multiArchTypeString(); return ConflictResult::err(name); } const QString conflict_version = conflict.packageVersion(); const QString installed_version = p->installedVersion(); const auto type = conflict.relationType(); const auto result = Package::compareVersion(installed_version, conflict_version); // not match, ok if (!dependencyVersionMatch(result, type)) continue; // test package const QString mirror_version = p->availableVersion(); if (mirror_version == installed_version) continue; // mirror version is also break const auto mirror_result = Package::compareVersion(mirror_version, conflict_version); if (dependencyVersionMatch(mirror_result, type)) { qDebug() << "conflicts package installed: " << arch << p->name() << p->architecture() << p->multiArchTypeString() << mirror_version << conflict_version; return ConflictResult::err(name); } } } return ConflictResult::ok(QString()); } int PackagesManager::packageInstallStatus(const int index) { if (m_packageInstallStatus.contains(index)) return m_packageInstallStatus[index]; const QString packageName = m_preparedPackages[index]->packageName(); const QString packageArch = m_preparedPackages[index]->architecture(); Backend *b = m_backendFuture.result(); Package *p = b->package(packageName + ":" + packageArch); int ret = DebListModel::NotInstalled; do { if (!p) break; const QString installedVersion = p->installedVersion(); if (installedVersion.isEmpty()) break; const QString packageVersion = m_preparedPackages[index]->version(); const int result = Package::compareVersion(packageVersion, installedVersion); if (result == 0) ret = DebListModel::InstalledSameVersion; else if (result < 0) ret = DebListModel::InstalledLaterVersion; else ret = DebListModel::InstalledEarlierVersion; } while (false); m_packageInstallStatus.insert(index, ret); return ret; } PackageDependsStatus PackagesManager::packageDependsStatus(const int index) { if (m_packageDependsStatus.contains(index)) return m_packageDependsStatus[index]; if (isArchError(index)) return PackageDependsStatus::_break(QString()); DebFile *deb = m_preparedPackages[index]; const QString architecture = deb->architecture(); PackageDependsStatus ret = PackageDependsStatus::ok(); // conflicts const ConflictResult debConflitsResult = isConflictSatisfy(architecture, deb->conflicts()); if (!debConflitsResult.is_ok()) { qDebug() << "depends break because conflict" << deb->packageName(); ret.package = debConflitsResult.unwrap(); ret.status = DebListModel::DependsBreak; } else { const ConflictResult localConflictsResult = isInstalledConflict(deb->packageName(), deb->version(), architecture); if (!localConflictsResult.is_ok()) { qDebug() << "depends break because conflict with local package" << deb->packageName(); ret.package = localConflictsResult.unwrap(); ret.status = DebListModel::DependsBreak; } else { qDebug() << "depends:"; qDebug() << "Check for package" << deb->packageName(); QSet choose_set; choose_set << deb->packageName(); ret = checkDependsPackageStatus(choose_set, deb->architecture(), deb->depends()); } } if (ret.isBreak()) Q_ASSERT(!ret.package.isEmpty()); m_packageDependsStatus[index] = ret; qDebug() << "Check finished for package" << deb->packageName() << ret.status; if (ret.status == DebListModel::DependsAvailable) { const auto list = packageAvailableDepends(index); qDebug() << "available depends:" << list.size() << list; } return ret; } const QString PackagesManager::packageInstalledVersion(const int index) { Q_ASSERT(m_packageInstallStatus.contains(index)); Q_ASSERT(m_packageInstallStatus[index] == DebListModel::InstalledEarlierVersion || m_packageInstallStatus[index] == DebListModel::InstalledLaterVersion); Backend *b = m_backendFuture.result(); Package *p = b->package(m_preparedPackages[index]->packageName()); return p->installedVersion(); } const QStringList PackagesManager::packageAvailableDepends(const int index) { Q_ASSERT(m_packageDependsStatus.contains(index)); Q_ASSERT(m_packageDependsStatus[index].isAvailable()); DebFile *deb = m_preparedPackages[index]; QSet choose_set; const QString debArch = deb->architecture(); const auto &depends = deb->depends(); packageCandidateChoose(choose_set, debArch, depends); // TODO: check upgrade from conflicts return choose_set.toList(); } void PackagesManager::packageCandidateChoose(QSet &choosed_set, const QString &debArch, const QList &dependsList) { for (auto const &candidate_list : dependsList) packageCandidateChoose(choosed_set, debArch, candidate_list); } void PackagesManager::packageCandidateChoose(QSet &choosed_set, const QString &debArch, const DependencyItem &candidateList) { bool choosed = false; for (const auto &info : candidateList) { Package *dep = packageWithArch(info.packageName(), debArch, info.multiArchAnnotation()); if (!dep) continue; const auto choosed_name = dep->name() + resolvMultiArchAnnotation(QString(), dep->architecture()); if (choosed_set.contains(choosed_name)) { choosed = true; break; } // TODO: upgrade? if (!dep->installedVersion().isEmpty()) return; if (!isConflictSatisfy(debArch, dep->conflicts()).is_ok()) { qDebug() << "conflict error in choose candidate" << dep->name(); continue; } // pass if break QSet set = choosed_set; set << choosed_name; const auto stat = checkDependsPackageStatus(set, dep->architecture(), dep->depends()); if (stat.isBreak()) { qDebug() << "depends error in choose candidate" << dep->name(); continue; } choosed = true; choosed_set << choosed_name; packageCandidateChoose(choosed_set, debArch, dep->depends()); break; } Q_ASSERT(choosed); } const QStringList PackagesManager::packageReverseDependsList(const QString &packageName, const QString &sysArch) { Package *p = packageWithArch(packageName, sysArch); Q_ASSERT(p); QSet ret { packageName }; QQueue testQueue; for (const auto &item : p->requiredByList().toSet()) testQueue.append(item); while (!testQueue.isEmpty()) { const auto item = testQueue.first(); testQueue.pop_front(); if (ret.contains(item)) continue; Package *p = packageWithArch(item, sysArch); if (!p || !p->isInstalled()) continue; if (p->recommendsList().contains(packageName)) continue; ret << item; // append new reqiure list for (const auto &r : p->requiredByList()) { if (ret.contains(r) || testQueue.contains(r)) continue; testQueue.append(r); } } // remove self ret.remove(packageName); return ret.toList(); } void PackagesManager::reset() { m_preparedPackages.clear(); m_packageInstallStatus.clear(); m_packageDependsStatus.clear(); m_appendedPackagesMd5.clear(); m_backendFuture.result()->reloadCache(); } void PackagesManager::resetPackageDependsStatus(const int index) { if (!m_packageDependsStatus.contains(index)) return; // reload backend cache m_backendFuture.result()->reloadCache(); m_packageDependsStatus.remove(index); } void PackagesManager::removePackage(const int index) { DebFile *deb = m_preparedPackages[index]; const auto md5 = deb->md5Sum(); m_appendedPackagesMd5.remove(md5); m_preparedPackages.removeAt(index); m_packageInstallStatus.clear(); m_packageDependsStatus.clear(); } void PackagesManager::appendPackage(DebFile *debPackage) { const auto md5 = debPackage->md5Sum(); if (m_appendedPackagesMd5.contains(md5)) return; m_preparedPackages << debPackage; m_appendedPackagesMd5 << md5; } const PackageDependsStatus PackagesManager::checkDependsPackageStatus(QSet &choosed_set, const QString &architecture, const QList &depends) { PackageDependsStatus ret = PackageDependsStatus::ok(); for (const auto &candicate_list : depends) { const auto r = checkDependsPackageStatus(choosed_set, architecture, candicate_list); ret.maxEq(r); if (ret.isBreak()) break; } return ret; } const PackageDependsStatus PackagesManager::checkDependsPackageStatus(QSet &choosed_set, const QString &architecture, const DependencyItem &candicate) { PackageDependsStatus ret = PackageDependsStatus::_break(QString()); for (const auto &info : candicate) { const auto r = checkDependsPackageStatus(choosed_set, architecture, info); ret.minEq(r); if (!ret.isBreak()) break; } return ret; } const PackageDependsStatus PackagesManager::checkDependsPackageStatus(QSet &choosed_set, const QString &architecture, const DependencyInfo &dependencyInfo) { const QString package_name = dependencyInfo.packageName(); Package *p = packageWithArch(package_name, architecture, dependencyInfo.multiArchAnnotation()); if (!p) { qDebug() << "depends break because package" << package_name << "not available"; return PackageDependsStatus::_break(package_name); } qDebug() << DependencyInfo::typeName(dependencyInfo.dependencyType()) << package_name << p->architecture() << relationName(dependencyInfo.relationType()) << dependencyInfo.packageVersion(); // if (dependencyInfo.packageVersion().isEmpty()) // return PackageDependsStatus::ok(); const RelationType relation = dependencyInfo.relationType(); const QString &installedVersion = p->installedVersion(); if (!installedVersion.isEmpty()) { const int result = Package::compareVersion(installedVersion, dependencyInfo.packageVersion()); if (dependencyVersionMatch(result, relation)) return PackageDependsStatus::ok(); else { const QString &mirror_version = p->availableVersion(); if (mirror_version != installedVersion) { const auto mirror_result = Package::compareVersion(mirror_version, dependencyInfo.packageVersion()); if (dependencyVersionMatch(mirror_result, relation)) { qDebug() << "availble by upgrade package" << p->name() << p->architecture() << "from" << installedVersion << "to" << mirror_version; return PackageDependsStatus::available(); } } qDebug() << "depends break by" << p->name() << p->architecture() << dependencyInfo.packageVersion(); qDebug() << "installed version not match" << installedVersion; return PackageDependsStatus::_break(p->name()); } } else { const int result = Package::compareVersion(p->version(), dependencyInfo.packageVersion()); if (!dependencyVersionMatch(result, relation)) { qDebug() << "depends break by" << p->name() << p->architecture() << dependencyInfo.packageVersion(); qDebug() << "available version not match" << p->version(); return PackageDependsStatus::_break(p->name()); } // is that already choosed? if (choosed_set.contains(p->name())) return PackageDependsStatus::ok(); // check arch conflicts if (p->multiArchType() == MultiArchSame) { Backend *b = backend(); for (const auto &arch : b->architectures()) { if (arch == p->architecture()) continue; Package *tp = b->package(p->name() + ":" + arch); if (tp && tp->isInstalled()) { qDebug() << "multi arch installed: " << p->name() << p->version() << p->architecture() << "with" << tp->name() << tp->version() << tp->architecture(); return PackageDependsStatus::_break(p->name() + ":" + p->architecture()); } } } // let's check conflicts if (!isConflictSatisfy(architecture, p).is_ok()) { qDebug() << "depends break because conflict, ready to find providers" << p->name(); Backend *b = m_backendFuture.result(); for (auto *ap : b->availablePackages()) { if (!ap->providesList().contains(p->name())) continue; // is that already provide by another package? if (ap->isInstalled()) { qDebug() << "find a exist provider: " << ap->name(); return PackageDependsStatus::ok(); } // provider is ok, switch to provider. if (isConflictSatisfy(architecture, ap).is_ok()) { qDebug() << "switch to depends a new provider: " << ap->name(); choosed_set << ap->name(); return PackageDependsStatus::ok(); } } qDebug() << "providers not found, still break: " << p->name(); return PackageDependsStatus::_break(p->name()); } // now, package dependencies status is available or break, // time to check depends' dependencies, but first, we need // to add this package to choose list choosed_set << p->name(); qDebug() << "Check indirect dependencies for package" << p->name(); const auto r = checkDependsPackageStatus(choosed_set, p->architecture(), p->depends()); if (r.isBreak()) { choosed_set.remove(p->name()); qDebug() << "depends break by direct depends" << p->name() << p->architecture() << r.package; return PackageDependsStatus::_break(p->name()); } // const auto &depends = p->depends(); // for (auto const &item : depends) // { // PackageDependsStatus rs = PackageDependsStatus::_break(QString()); // for (auto const &info : item) // { // const QString arch = resolvMultiArchAnnotation(info.multiArchAnnotation(), p->architecture(), p->multiArchType()); // const auto r = checkDependsPackageStatus(choosed_set, arch, info); // rs.minEq(r); // } // if (rs.isBreak()) // { // // we are break, remove self // choosed_set.remove(p->name()); // qDebug() << "depends break by direct depends" << p->name() << p->architecture() << dependencyInfo.packageVersion(); // return PackageDependsStatus::_break(p->name()); // } // } qDebug() << "Check finshed for package" << p->name(); return PackageDependsStatus::available(); } } Package *PackagesManager::packageWithArch(const QString &packageName, const QString &sysArch, const QString &annotation) { qDebug() << "package with arch" << packageName << sysArch << annotation; Backend *b = m_backendFuture.result(); Package *p = b->package(packageName + resolvMultiArchAnnotation(annotation, sysArch)); do { if (!p) p = b->package(packageName); if (!p) break; const QString arch = resolvMultiArchAnnotation(annotation, sysArch, p->multiArchType()); // if (!arch.isEmpty()) // reset to check foreign arch p = b->package(packageName + arch); } while(false); if (p) return p; qDebug() << "check virtual package providers for package" << packageName << sysArch << annotation; // check virtual package providers for (auto *ap : b->availablePackages()) if (ap->name() != packageName && ap->providesList().contains(packageName)) return packageWithArch(ap->name(), sysArch, annotation); return nullptr; } PackageDependsStatus PackageDependsStatus::ok() { return { DebListModel::DependsOk, QString() }; } PackageDependsStatus PackageDependsStatus::available() { return { DebListModel::DependsAvailable, QString() }; } PackageDependsStatus PackageDependsStatus::_break(const QString &package) { return { DebListModel::DependsBreak, package }; } PackageDependsStatus::PackageDependsStatus() : PackageDependsStatus(DebListModel::DependsOk, QString()) { } PackageDependsStatus::PackageDependsStatus(const int status, const QString &package) : status(status), package(package) { } PackageDependsStatus PackageDependsStatus::operator =(const PackageDependsStatus &other) { status = other.status; package = other.package; return *this; } PackageDependsStatus PackageDependsStatus::max(const PackageDependsStatus &other) { if (other.status > status) *this = other; return *this; } PackageDependsStatus PackageDependsStatus::maxEq(const PackageDependsStatus &other) { if (other.status >= status) *this = other; return *this; } PackageDependsStatus PackageDependsStatus::min(const PackageDependsStatus &other) { if (other.status < status) *this = other; return *this; } PackageDependsStatus PackageDependsStatus::minEq(const PackageDependsStatus &other) { if (other.status <= status) *this = other; return *this; } bool PackageDependsStatus::isBreak() const { return status == DebListModel::DependsBreak; } bool PackageDependsStatus::isAvailable() const { return status == DebListModel::DependsAvailable; } deepin-deb-installer-5.0.0/packagesmanager.h000066400000000000000000000100651350761525300207760ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #ifndef PACKAGESMANAGER_H #define PACKAGESMANAGER_H #include "result.h" #include #include #include #include typedef Result ConflictResult; class PackageDependsStatus { public: static PackageDependsStatus ok(); static PackageDependsStatus available(); static PackageDependsStatus _break(const QString &package); PackageDependsStatus(); PackageDependsStatus(const int status, const QString &package); PackageDependsStatus operator =(const PackageDependsStatus &other); PackageDependsStatus max(const PackageDependsStatus &other); PackageDependsStatus maxEq(const PackageDependsStatus &other); PackageDependsStatus min(const PackageDependsStatus &other); PackageDependsStatus minEq(const PackageDependsStatus &other); bool isBreak() const; bool isAvailable() const; public: int status; QString package; }; class DebListModel; class PackagesManager : public QObject { Q_OBJECT friend class DebListModel; public: explicit PackagesManager(QObject *parent = 0); bool isBackendReady(); bool isArchError(const int idx); const ConflictResult packageConflictStat(const int index); const ConflictResult isConflictSatisfy(const QString &arch, QApt::Package *package); const ConflictResult isInstalledConflict(const QString &packageName, const QString &packageVersion, const QString &packageArch); const ConflictResult isConflictSatisfy(const QString &arch, const QList &conflicts); int packageInstallStatus(const int index); PackageDependsStatus packageDependsStatus(const int index); const QString packageInstalledVersion(const int index); const QStringList packageAvailableDepends(const int index); void packageCandidateChoose(QSet &choosed_set, const QString &debArch, const QList &dependsList); void packageCandidateChoose(QSet &choosed_set, const QString &debArch, const QApt::DependencyItem &candidateItem); const QStringList packageReverseDependsList(const QString &packageName, const QString &sysArch); void reset(); void resetPackageDependsStatus(const int index); void removePackage(const int index); void appendPackage(QApt::DebFile *debPackage); QApt::DebFile * const package(const int index) const { return m_preparedPackages[index]; } QApt::Backend * const backend() const { return m_backendFuture.result(); } private: const PackageDependsStatus checkDependsPackageStatus(QSet &choosed_set,const QString &architecture, const QList &depends); const PackageDependsStatus checkDependsPackageStatus(QSet &choosed_set,const QString &architecture, const QApt::DependencyItem &candicate); const PackageDependsStatus checkDependsPackageStatus(QSet &choosed_set,const QString &architecture, const QApt::DependencyInfo &dependencyInfo); QApt::Package * packageWithArch(const QString &packageName, const QString &sysArch, const QString &annotation = QString()); private: QFuture m_backendFuture; QList m_preparedPackages; QHash m_packageInstallStatus; QHash m_packageDependsStatus; QSet m_appendedPackagesMd5; }; #endif // PACKAGESMANAGER_H deepin-deb-installer-5.0.0/resources/000077500000000000000000000000001350761525300175245ustar00rootroot00000000000000deepin-deb-installer-5.0.0/resources/images/000077500000000000000000000000001350761525300207715ustar00rootroot00000000000000deepin-deb-installer-5.0.0/resources/images/active_tab_close_hover.svg000066400000000000000000000026761350761525300262160ustar00rootroot00000000000000 active_tab_close_hover Created with Sketch. deepin-deb-installer-5.0.0/resources/images/active_tab_close_normal.svg000066400000000000000000000030551350761525300263530ustar00rootroot00000000000000 active_tab_close_normal Created with Sketch. deepin-deb-installer-5.0.0/resources/images/active_tab_close_press.svg000066400000000000000000000026261350761525300262220ustar00rootroot00000000000000 active_tab_close_press Created with Sketch. deepin-deb-installer-5.0.0/resources/images/arrow_down.svg000066400000000000000000000014641350761525300237000ustar00rootroot00000000000000 下箭头 Created with Sketch. deepin-deb-installer-5.0.0/resources/images/arrow_up.svg000066400000000000000000000014471350761525300233560ustar00rootroot00000000000000 上箭头 Created with Sketch. deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-128px.svg000066400000000000000000001117471350761525300263740ustar00rootroot00000000000000 软件包安装器-128px Created with Sketch. deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-16px.svg000066400000000000000000000324501350761525300263010ustar00rootroot00000000000000 软件包安装器-16px Created with Sketch. deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-24px.svg000066400000000000000000000343141350761525300263010ustar00rootroot00000000000000 软件包安装器-24px Created with Sketch. deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-256px.svg000066400000000000000000001720761350761525300264000ustar00rootroot00000000000000 软件包安装器-256px Created with Sketch. deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-32px.svg000066400000000000000000000344421350761525300263020ustar00rootroot00000000000000 软件包安装器-32px Created with Sketch. deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-48px.svg000066400000000000000000000353431350761525300263120ustar00rootroot00000000000000 软件包安装器-48px Created with Sketch. deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-64px.svg000066400000000000000000000552001350761525300263020ustar00rootroot00000000000000 软件包安装器-64px Created with Sketch. deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-96px.svg000066400000000000000000001061141350761525300263100ustar00rootroot00000000000000 软件包安装器-96px Created with Sketch. deepin-deb-installer-5.0.0/resources/images/icon.svg000066400000000000000000002667461350761525300224670ustar00rootroot00000000000000 主图标 Created with Sketch. deepin-deb-installer-5.0.0/resources/images/split_line.svg000066400000000000000000000012471350761525300236600ustar00rootroot00000000000000 split_line Created with Sketch. deepin-deb-installer-5.0.0/resources/images/split_line_dark.svg000066400000000000000000000003511350761525300246540ustar00rootroot00000000000000 deepin-deb-installer-5.0.0/resources/resources.qrc000066400000000000000000000010071350761525300222430ustar00rootroot00000000000000 images/active_tab_close_hover.svg images/active_tab_close_normal.svg images/active_tab_close_press.svg images/arrow_down.svg images/arrow_up.svg images/icon.svg images/split_line.svg images/split_line_dark.svg theme/dark/dark.qss theme/light/light.qss deepin-deb-installer-5.0.0/resources/theme/000077500000000000000000000000001350761525300206265ustar00rootroot00000000000000deepin-deb-installer-5.0.0/resources/theme/dark/000077500000000000000000000000001350761525300215475ustar00rootroot00000000000000deepin-deb-installer-5.0.0/resources/theme/dark/dark.qss000066400000000000000000000026361350761525300232270ustar00rootroot00000000000000GrayButton { color: #dddddd; border: 0; border-radius: 4px; background-color: rgba(255, 255, 255, 0.15); } GrayButton:hover { color: white; background-color: #919191; } GrayButton:pressed { color: #0699ff; background-color: #4A4A4A; } #FileChooseWidget #DNDTips { color: #6a6a6a; } #FileChooseWidget #SplitLine { qproperty-pixmap: url(":/images/split_line_dark.svg"); } #FileChooseWidget #FileChooseButton { } #SingleInstallPage #InfoControlButton #TipsText { color: #6a6a6a; } #SingleInstallPage #WorkerInformation { color: #609dc9; border: 1px solid rgba(255, 255, 255, 0.05); margin: 6px 0 0px 0; background-color: rgba(255, 255, 255, 0.02);; } #SingleInstallPage #PackageName { color: #929292; } #SingleInstallPage #PackageNameTitle { color: #797979; } #SingleInstallPage #PackageVersion { color: #929292; } #SingleInstallPage #PackageVersionTitle { color: #797979; } #SingleInstallPage #PackageDescription { color: #929292; } #MultipleInstallPage #AppsView { border: 1px solid rgba(255, 255, 255, 0.05); margin: 30px 0 2px 0; background-color: rgba(255, 255, 255, 0.02);; } #MultipleInstallPage #InfoArea { color: #609dc9; border: 1px solid rgba(255, 255, 255, 0.05); margin: 2px 0 0 0; background-color: rgba(255, 255, 255, 0.02);; } #MultipleInstallPage #InfoControlButton #TipsText { color: #6a6a6a; } deepin-deb-installer-5.0.0/resources/theme/light/000077500000000000000000000000001350761525300217355ustar00rootroot00000000000000deepin-deb-installer-5.0.0/resources/theme/light/light.qss000066400000000000000000000024161350761525300235770ustar00rootroot00000000000000GrayButton { color: #303030; border: 1px solid rgba(0, 0, 0, .1); border-radius: 4px; } GrayButton:hover { color: white; background-color: qlineargradient(x1:0 y1:0, x2:0 y2:1, stop:0 #8ccfff, stop:1 #4bb8ff); } GrayButton:pressed { background-color: qlineargradient(x1:0 y1:0, x2:0 y2:1, stop:0 #0b8cff, stop:1 #0aa1ff); } #FileChooseWidget #DNDTips { color: #6a6a6a; } #FileChooseWidget #SplitLine { qproperty-pixmap: url(":/images/split_line.svg"); } #FileChooseWidget #FileChooseButton { } #SingleInstallPage #InfoControlButton #TipsText { color: #6a6a6a; } #SingleInstallPage #WorkerInformation { color: #609dc9; border: 1px solid #eee; margin: 6px 0 0px 0; } #SingleInstallPage #PackageName { color: black; } #SingleInstallPage #PackageNameTitle { color: #797979; } #SingleInstallPage #PackageVersion { color: black; } #SingleInstallPage #PackageVersionTitle { color: #797979; } #SingleInstallPage #PackageDescription { color: black; } #MultipleInstallPage #AppsView { border: 1px solid #eee; margin: 30px 0 2px 0; } #MultipleInstallPage #InfoArea { color: #609dc9; border: 1px solid #eee; margin: 2px 0 0 0; } #MultipleInstallPage #InfoControlButton #TipsText { color: #6a6a6a; } deepin-deb-installer-5.0.0/result.h000066400000000000000000000026271350761525300172100ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #ifndef RESULT_H #define RESULT_H template class Result { public: static Result ok(const T &value); static Result err(const T &value); Result(const bool stat, const T &value); bool is_ok() const { return m_ok; } T unwrap() const { return m_value; } private: bool m_ok; T m_value; }; template Result Result::ok(const T &value) { return { true, value }; } template Result Result::err(const T &value) { return { false, value }; } template Result::Result(const bool stat, const T &value) : m_ok(stat), m_value(value) { } #endif // RESULT_H deepin-deb-installer-5.0.0/singleinstallpage.cpp000066400000000000000000000333541350761525300217330ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #include "singleinstallpage.h" #include "deblistmodel.h" #include "workerprogress.h" #include "widgets/bluebutton.h" #include "widgets/graybutton.h" #include #include #include #include #include #include #include #include using QApt::DebFile; using QApt::Transaction; DWIDGET_USE_NAMESPACE const QString holdTextInRect(const QFont &font, QString text, const QSize &size) { QFontMetrics fm(font); QTextLayout layout(text); layout.setFont(font); QStringList lines; QTextOption &text_option = *const_cast(&layout.textOption()); text_option.setWrapMode(QTextOption::WordWrap); text_option.setAlignment(Qt::AlignTop | Qt::AlignLeft); layout.beginLayout(); QTextLine line = layout.createLine(); int height = 0; int lineHeight = fm.height(); while (line.isValid()) { height += lineHeight; if (height + lineHeight > size.height()) { const QString &end_str = fm.elidedText(text.mid(line.textStart()), Qt::ElideRight, size.width()); layout.endLayout(); layout.setText(end_str); text_option.setWrapMode(QTextOption::NoWrap); layout.beginLayout(); line = layout.createLine(); line.setLineWidth(size.width() - 1); text = end_str; } else { line.setLineWidth(size.width()); } lines.append(text.mid(line.textStart(), line.textLength())); if (height + lineHeight > size.height()) break; line = layout.createLine(); } layout.endLayout(); return lines.join(""); } SingleInstallPage::SingleInstallPage(DebListModel *model, QWidget *parent) : QWidget(parent), m_operate(Install), m_workerStarted(false), m_packagesModel(model), m_itemInfoWidget(new QWidget), m_packageIcon(new QLabel), m_packageName(new QLabel), m_packageVersion(new QLabel), m_packageDescription(new QLabel), m_tipsLabel(new QLabel), m_progress(new WorkerProgress), m_workerInfomation(new QTextEdit), m_strengthWidget(new QWidget), m_infoControlButton(new InfoControlButton(tr("Display details"), tr("Collapse"))), m_installButton(new BlueButton), m_uninstallButton(new GrayButton), m_reinstallButton(new GrayButton), m_confirmButton(new GrayButton), m_backButton(new GrayButton), m_doneButton(new BlueButton) { m_packageName->setObjectName("PackageName"); m_packageVersion->setObjectName("PackageVersion"); m_infoControlButton->setObjectName("InfoControlButton"); m_workerInfomation->setObjectName("WorkerInformation"); m_packageDescription->setObjectName("PackageDescription"); m_packageIcon->setText("icon"); m_packageIcon->setFixedSize(64, 64); m_packageName->setAlignment(Qt::AlignBottom | Qt::AlignLeft); m_packageVersion->setAlignment(Qt::AlignTop | Qt::AlignLeft); m_tipsLabel->setAlignment(Qt::AlignCenter); m_tipsLabel->setStyleSheet("QLabel {" "color: #ff5a5a;" "}"); m_progress->setVisible(false); m_infoControlButton->setVisible(false); m_workerInfomation->setReadOnly(true); m_workerInfomation->setVisible(false); m_workerInfomation->setAcceptDrops(false); m_workerInfomation->setFixedHeight(210); m_workerInfomation->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); m_installButton->setText(tr("Install")); m_installButton->setVisible(false); m_uninstallButton->setText(tr("Remove")); m_uninstallButton->setVisible(false); m_reinstallButton->setText(tr("Reinstall")); m_reinstallButton->setVisible(false); m_confirmButton->setText(tr("OK")); m_confirmButton->setVisible(false); m_backButton->setText(tr("Back")); m_backButton->setVisible(false); m_doneButton->setText(tr("Done")); m_doneButton->setVisible(false); m_packageDescription->setWordWrap(true); m_packageDescription->setFixedHeight(50); m_packageDescription->setFixedWidth(320); m_packageDescription->setAlignment(Qt::AlignLeft | Qt::AlignTop); QLabel *packageName = new QLabel; packageName->setText(tr("Name: ")); packageName->setAlignment(Qt::AlignBottom | Qt::AlignLeft); packageName->setObjectName("PackageNameTitle"); QLabel *packageVersion = new QLabel; packageVersion->setText(tr("Version: ")); packageVersion->setAlignment(Qt::AlignTop | Qt::AlignLeft); packageVersion->setObjectName("PackageVersionTitle"); QGridLayout *itemInfoLayout = new QGridLayout; itemInfoLayout->addWidget(packageName, 0, 0); itemInfoLayout->addWidget(m_packageName, 0, 1); itemInfoLayout->addWidget(packageVersion, 1, 0); itemInfoLayout->addWidget(m_packageVersion, 1, 1); itemInfoLayout->setSpacing(0); itemInfoLayout->setVerticalSpacing(10); itemInfoLayout->setMargin(0); QHBoxLayout *itemBlockLayout = new QHBoxLayout; itemBlockLayout->addStretch(); itemBlockLayout->addWidget(m_packageIcon); itemBlockLayout->addLayout(itemInfoLayout); itemBlockLayout->addStretch(); itemBlockLayout->setSpacing(10); itemBlockLayout->setContentsMargins(0, 0, 0, 0); QHBoxLayout *btnsLayout = new QHBoxLayout; btnsLayout->addStretch(); btnsLayout->addWidget(m_installButton); btnsLayout->addWidget(m_uninstallButton); btnsLayout->addWidget(m_reinstallButton); btnsLayout->addWidget(m_backButton); btnsLayout->addWidget(m_confirmButton); btnsLayout->addWidget(m_doneButton); btnsLayout->addStretch(); btnsLayout->setSpacing(30); btnsLayout->setContentsMargins(0, 0, 0, 0); QVBoxLayout *itemLayout = new QVBoxLayout; itemLayout->addSpacing(45); itemLayout->addLayout(itemBlockLayout); itemLayout->addSpacing(20); itemLayout->addWidget(m_packageDescription); itemLayout->addStretch(); itemLayout->setMargin(0); itemLayout->setSpacing(0); m_itemInfoWidget->setLayout(itemLayout); m_itemInfoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_itemInfoWidget->setVisible(false); m_strengthWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_strengthWidget->setVisible(false); QVBoxLayout *centralLayout = new QVBoxLayout; centralLayout->addWidget(m_itemInfoWidget); centralLayout->setAlignment(m_itemInfoWidget, Qt::AlignHCenter); centralLayout->addWidget(m_infoControlButton); centralLayout->setAlignment(m_infoControlButton, Qt::AlignHCenter); centralLayout->addWidget(m_workerInfomation); centralLayout->addWidget(m_strengthWidget); centralLayout->addWidget(m_tipsLabel); centralLayout->addWidget(m_progress); centralLayout->setAlignment(m_progress, Qt::AlignHCenter); centralLayout->addSpacing(8); centralLayout->addLayout(btnsLayout); centralLayout->setSpacing(0); centralLayout->setContentsMargins(20, 0, 20, 30); setLayout(centralLayout); connect(m_infoControlButton, &InfoControlButton::expand, this, &SingleInstallPage::showInfomation); connect(m_infoControlButton, &InfoControlButton::shrink, this, &SingleInstallPage::hideInfomation); connect(m_installButton, &QPushButton::clicked, this, &SingleInstallPage::install); connect(m_reinstallButton, &QPushButton::clicked, this, &SingleInstallPage::install); connect(m_uninstallButton, &QPushButton::clicked, this, &SingleInstallPage::requestUninstallConfirm); connect(m_backButton, &QPushButton::clicked, this, &SingleInstallPage::back); connect(m_confirmButton, &QPushButton::clicked, qApp, &QApplication::quit); connect(m_doneButton, &QPushButton::clicked, qApp, &QApplication::quit); connect(model, &DebListModel::appendOutputInfo, this, &SingleInstallPage::onOutputAvailable); connect(model, &DebListModel::transactionProgressChanged, this, &SingleInstallPage::onWorkerProgressChanged); if (m_packagesModel->isReady()) setPackageInfo(); else QTimer::singleShot(120, this, &SingleInstallPage::setPackageInfo); } void SingleInstallPage::install() { m_operate = Install; m_packagesModel->installAll(); } void SingleInstallPage::uninstallCurrentPackage() { m_operate = Uninstall; m_packagesModel->uninstallPackage(0); } void SingleInstallPage::showInfomation() { m_workerInfomation->setVisible(true); m_strengthWidget->setVisible(true); m_itemInfoWidget->setVisible(false); } void SingleInstallPage::hideInfomation() { m_workerInfomation->setVisible(false); m_strengthWidget->setVisible(false); m_itemInfoWidget->setVisible(true); } void SingleInstallPage::showInfo() { m_infoControlButton->setVisible(true); m_progress->setVisible(true); m_progress->setValue(0); m_tipsLabel->clear(); m_installButton->setVisible(false); m_reinstallButton->setVisible(false); m_uninstallButton->setVisible(false); m_confirmButton->setVisible(false); m_doneButton->setVisible(false); m_backButton->setVisible(false); } void SingleInstallPage::onOutputAvailable(const QString &output) { m_workerInfomation->append(output.trimmed()); // pump progress if (m_progress->value() < 90) m_progress->setValue(m_progress->value() + 10); if (!m_workerStarted) { m_workerStarted = true; showInfo(); } } void SingleInstallPage::onWorkerFinished() { m_progress->setVisible(false); m_uninstallButton->setVisible(false); m_reinstallButton->setVisible(false); m_backButton->setVisible(true); const QModelIndex index = m_packagesModel->first(); const int stat = index.data(DebListModel::PackageOperateStatusRole).toInt(); if (stat == DebListModel::Success) { m_doneButton->setVisible(true); m_doneButton->setFocus(); if (m_operate == Install) m_tipsLabel->setText(tr("Installed successfully")); else m_tipsLabel->setText(tr("Uninstalled successfully")); m_tipsLabel->setStyleSheet("QLabel {" "color: #47790c;" "}"); } else if (stat == DebListModel::Failed) { m_confirmButton->setVisible(true); m_confirmButton->setFocus(); if (m_operate == Install) m_tipsLabel->setText(index.data(DebListModel::PackageFailReasonRole).toString()); else m_tipsLabel->setText(tr("Uninstall Failed")); } else { Q_UNREACHABLE(); } } void SingleInstallPage::onWorkerProgressChanged(const int progress) { if (progress < m_progress->value()) return; m_progress->setValue(progress); if (progress == m_progress->maximum()) QTimer::singleShot(100, this, &SingleInstallPage::onWorkerFinished); } void SingleInstallPage::setPackageInfo() { qApp->processEvents(); DebFile *package = m_packagesModel->preparedPackages().first(); const QIcon icon = QIcon::fromTheme("application-vnd.debian.binary-package", QIcon::fromTheme("debian-swirl")); const QPixmap iconPix = icon.pixmap(m_packageIcon->size()); m_itemInfoWidget->setVisible(true); m_packageIcon->setPixmap(iconPix); m_packageName->setText(package->packageName()); m_packageVersion->setText(package->version()); // set package description // const QRegularExpression multiLine("\n+", QRegularExpression::MultilineOption); // const QString description = package->longDescription().replace(multiLine, "\n"); const QString description = package->longDescription(); const QSize boundingSize = QSize(m_packageDescription->width(), m_packageDescription->maximumHeight()); m_packageDescription->setText(holdTextInRect(m_packageDescription->font(), description, boundingSize)); // package install status const QModelIndex index = m_packagesModel->index(0); const int installStat = index.data(DebListModel::PackageVersionStatusRole).toInt(); const bool installed = installStat != DebListModel::NotInstalled; const bool installedSameVersion = installStat == DebListModel::InstalledSameVersion; m_installButton->setVisible(!installed); m_uninstallButton->setVisible(installed); m_reinstallButton->setVisible(installed); m_confirmButton->setVisible(false); m_doneButton->setVisible(false); m_backButton->setVisible(false); if (installed) { if (installedSameVersion) m_tipsLabel->setText(tr("Same version installed")); else m_tipsLabel->setText(tr("Other version installed: %1").arg(index.data(DebListModel::PackageInstalledVersionRole).toString())); return; } // package depends status const int dependsStat = index.data(DebListModel::PackageDependsStatusRole).toInt(); if (dependsStat == DebListModel::DependsBreak) { m_tipsLabel->setText(index.data(DebListModel::PackageFailReasonRole).toString()); m_installButton->setVisible(false); m_reinstallButton->setVisible(false); m_confirmButton->setVisible(true); m_backButton->setVisible(true); } } deepin-deb-installer-5.0.0/singleinstallpage.h000066400000000000000000000043721350761525300213760ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #ifndef SINGLEINSTALLPAGE_H #define SINGLEINSTALLPAGE_H #include "infocontrolbutton.h" #include #include #include #include #include #include #include class DebListModel; class SingleInstallPage : public QWidget { Q_OBJECT public: explicit SingleInstallPage(DebListModel *model, QWidget *parent = 0); signals: void back() const; void requestUninstallConfirm() const; public slots: void uninstallCurrentPackage(); private: enum Operate { Install, Uninstall, }; private: void setPackageInfo(); private slots: void install(); void showInfomation(); void hideInfomation(); void showInfo(); void onOutputAvailable(const QString &output); void onWorkerFinished(); void onWorkerProgressChanged(const int progress); private: int m_operate; bool m_workerStarted; DebListModel *m_packagesModel; QWidget *m_itemInfoWidget; QLabel *m_packageIcon; QLabel *m_packageName; QLabel *m_packageVersion; QLabel *m_packageDescription; QLabel *m_tipsLabel; QProgressBar *m_progress; QTextEdit *m_workerInfomation; QWidget *m_strengthWidget; InfoControlButton *m_infoControlButton; QPushButton *m_installButton; QPushButton *m_uninstallButton; QPushButton *m_reinstallButton; QPushButton *m_confirmButton; QPushButton *m_backButton; QPushButton *m_doneButton; }; #endif // SINGLEINSTALLPAGE_H deepin-deb-installer-5.0.0/translate_generation.sh000077500000000000000000000003501350761525300222570ustar00rootroot00000000000000#!/bin/bash # this file is used to auto-generate .qm file from .ts file. # author: shibowen at linuxdeepin.com ts_list=(`ls translations/*.ts`) for ts in "${ts_list[@]}" do printf "\nprocess ${ts}\n" lrelease "${ts}" done deepin-deb-installer-5.0.0/translate_ts2desktop.sh000077500000000000000000000005251350761525300222320ustar00rootroot00000000000000#!/bin/bash DESKTOP_TEMP_FILE=deepin-deb-installer.desktop.tmp DESKTOP_SOURCE_FILE=deepin-deb-installer.desktop DESKTOP_DEST_FILE=deepin-deb-installer.desktop DESKTOP_TS_DIR=translations/desktop/ /usr/bin/deepin-desktop-ts-convert ts2desktop $DESKTOP_SOURCE_FILE $DESKTOP_TS_DIR $DESKTOP_TEMP_FILE mv $DESKTOP_TEMP_FILE $DESKTOP_DEST_FILE deepin-deb-installer-5.0.0/translations/000077500000000000000000000000001350761525300202335ustar00rootroot00000000000000deepin-deb-installer-5.0.0/translations/deepin-deb-installer.ts000066400000000000000000000213521350761525300245750ustar00rootroot00000000000000 DebInstaller Dark theme Deepin Package Manager Bulk Install DebListModel Installation failed, please check your network connection Installation failed, please check updates in Control Center Installation failed, insufficient disk space Installation Failed Broken Dependencies: %1 Unmatched package architecture FileChooseWidget Drag and drop file here Select File MultipleInstallPage Collapse Display details Install Done Back PackagesListDelegate Installing Installed Failed Same version installed Other version installed: %1 SingleInstallPage Collapse Display details Install Remove Reinstall OK Back Done Version: Installed successfully Uninstalled successfully Other version installed: %1 Uninstall Failed Name: Same version installed UninstallConfirmPage Display related packages Collapse Cancel Confirm Are you sure you want to uninstall %1? All dependencies will also be removed main Deepin Package Manager Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_am_ET.ts000066400000000000000000000221731350761525300256440ustar00rootroot00000000000000 DebInstaller Dark theme Deepin Package Manager ዲፕኢን የ ጥቅል አስተዳዳሪ Bulk Install መግጠሚያ DebListModel Installation failed, please check your network connection መግጠም አልተቻለም: እባክዎን የ ኔትዎርክ ግንኙነት ይመርምሩ Installation failed, please check updates in Control Center መግጠም አልተቻለም: እባክዎን ማሻሻያውን በ መቆጣጠሪያ ማእከል ውስጥ ይመርምሩ Installation failed, insufficient disk space መግጠም አልተቻለም: በቂ ነፃ የ ዲስክ ቦታ የለም Installation Failed መግጠሙ አልተሳካም Broken Dependencies: %1 የ ተሰበሩ ጥገኞች: %1 Unmatched package architecture የ ማይመሳሰል ጥቅል ግንባታ FileChooseWidget Drag and drop file here ፋይል ይጎቱ እና እዚህ ይጣሉ Select File ፋይል ይምረጡ MultipleInstallPage Collapse ማሳነሻ Display details ዝርዝር ማሳያ Install መግጠሚያ Done Back ወደ ኋላ PackagesListDelegate Installing በ መግጠም ላይ Installed ተገጥሟል Failed ወድቋል Same version installed ተመሳሳይ እትም ተገጥሟል Other version installed: %1 ሌላ እትም ተገጥሟል: %1 SingleInstallPage Collapse ማሳነሻ Display details ዝርዝር ማሳያ Install መግጠሚያ Remove ማስወገጃ Reinstall እንደገና መግጠሚያ OK እሺ Back ወደ ኋላ Done Version: እትም: Installed successfully ተሳክቶ ተገጥሟል Uninstalled successfully ተሳክቶ ጠፍቷል Other version installed: %1 ሌላ እትም ተገጥሟል: %1 Uninstall Failed ማጥፋት አልተቻለም Name: ስም: Same version installed ተመሳሳይ እትም ተገጥሟል UninstallConfirmPage Display related packages የ ተዛመደ ጥቅል መግጠሚያ Collapse ማሳነሻ Cancel መሰረዣ Confirm ማረጋገጫ Are you sure you want to uninstall %1? All dependencies will also be removed main Deepin Package Manager ዲፕኢን የ ጥቅል አስተዳዳሪ Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ar.ts000066400000000000000000000217071350761525300252630ustar00rootroot00000000000000 DebInstaller Dark theme Deepin Package Manager مدير حزم ديبين Bulk Install تثبيت جماعي DebListModel Installation failed, please check your network connection تعذر التثبيت، يرجى التحقق من الاتصال بالشبكة Installation failed, please check updates in Control Center تعذر التثبيت، يرجى التحقق من التحديثات في مركز التحكم Installation failed, insufficient disk space تعذر التثبيت، مساحة القرص غير كافية Installation Failed تعذر التثبيت Broken Dependencies: %1 الاعتماديات المعطوبة : %1 Unmatched package architecture معمارية الحزمة غير مطابقة FileChooseWidget Drag and drop file here قم بسحب وإفلات الملف هنا Select File تحديد ملف MultipleInstallPage Collapse طي Display details عرض التفاصيل Install تثبيت Done تم Back رجوع PackagesListDelegate Installing يتم التثبيت Installed مثبت Failed فشل Same version installed الإصدار نفسه مثبت Other version installed: %1 إصدار آخر مثبت : %1 SingleInstallPage Collapse طي Display details عرض التفاصيل Install تثبيت Remove إزالة Reinstall إعادة التثبيت OK موافق Back رجوع Done تم Version: الإصدار : Installed successfully تم التثبيت بنجاح Uninstalled successfully تم إلغاء التثبيت بنجاح Other version installed: %1 إصدار آخر مثبت : %1 Uninstall Failed فشل إزالة التثبيت Name: الاسم: Same version installed الإصدار نفسه مثبت UninstallConfirmPage Display related packages عرض الحزم المتعلقة Collapse طي Cancel إلغاء Confirm تأكيد Are you sure you want to uninstall %1? All dependencies will also be removed main Deepin Package Manager مدير حزم ديبين Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ast.ts000066400000000000000000000213771350761525300254530ustar00rootroot00000000000000 DebInstaller Dark theme Deepin Package Manager Xestor Deepin de paquetes Bulk Install Instalación masiva DebListModel Installation failed, please check your network connection Falló la instalación, comprueba la to conexón d'internet Installation failed, please check updates in Control Center Falló la instalación, comprueba los anovamientos nel Centru de control Installation failed, insufficient disk space Falló la instalación, espaciu insuficiente en discu Installation Failed Falló la instalación Broken Dependencies: %1 Dependencies rotes: %1 Unmatched package architecture Arquitectura de paquete que nun concasa FileChooseWidget Drag and drop file here Arrastra y suelta'l ficheru equí Select File Esbillar ficheru MultipleInstallPage Collapse Contrayer Display details Amosar detalles Install Instalar Done Fecho Back Atrás PackagesListDelegate Installing Instalando Installed Instalóse Failed Falló Same version installed Instalada la mesma versión Other version installed: %1 Instalada otra versión: %1 SingleInstallPage Collapse Contrayer Display details Amosar detalles Install Instalar Remove Desaniciar Reinstall Reinstalar OK Aceutar Back Atrás Done Fecho Version: Versión: Installed successfully Instalóse con ésitu Uninstalled successfully Desinstalóse con ésitu Other version installed: %1 Instalóse otra versión: %1 Uninstall Failed Falló la desinstalación Name: Nome: Same version installed Instalóse la mesma versión UninstallConfirmPage Display related packages Amosar los paquetes venceyaos Collapse Contrayer Cancel Encaboxar Confirm Confirmar Are you sure you want to uninstall %1? All dependencies will also be removed main Deepin Package Manager Xestor Deepin de paquetes Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_bg.ts000066400000000000000000000227401350761525300252470ustar00rootroot00000000000000 DebInstaller Dark theme Deepin Package Manager Deepin Мениджър на пакети Bulk Install Групова инсталация DebListModel Installation failed, please check your network connection Инсталацията е неуспешна, моля, проверете вашата връзка към мрежата Installation failed, please check updates in Control Center Инсталацията е неуспешна, моля, проверете за обновление в контролния център Installation failed, insufficient disk space Инсталацията е неуспешна, няма достатъчно място на диска Installation Failed Инсталацията е неуспешна Broken Dependencies: %1 Счупени зависимости: %1 Unmatched package architecture Неподходяща архитектура на пакета FileChooseWidget Drag and drop file here Издърпайте и поставете файла тук Select File Избор на файл MultipleInstallPage Collapse Сриване Display details Показване на подробности Install Инсталиране Done Завършено Back Назад PackagesListDelegate Installing Инсталиране Installed Инсталирано Failed Неуспешно Same version installed Същата версия е инсталирана Other version installed: %1 Инсталирана е друга версия: %1 SingleInstallPage Collapse Сриване Display details Показване на подробности Install Инсталиране Remove Премахване Reinstall Преинсталиране OK ОК Back Назад Done Завършено Version: Версия: Installed successfully Инсталирането е успешно Uninstalled successfully Деинсталирането е успешно Other version installed: %1 Инсталирана е друга версия: %1 Uninstall Failed Деинсталирането е неуспешно Name: Име: Same version installed Същата версия е инсталирана UninstallConfirmPage Display related packages Покажи свързаните пакети Collapse Сриване Cancel Отказ Confirm Потвърждение Are you sure you want to uninstall %1? All dependencies will also be removed main Deepin Package Manager Deepin Инсталатор на пакети Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ca.ts000066400000000000000000000222341350761525300252400ustar00rootroot00000000000000 DebInstaller Dark theme Tema fosc Deepin Package Manager Gestor de paquets del Deepin Bulk Install Instal·lació massiva DebListModel Installation failed, please check your network connection Ha fallat la instal·lació. Si us plau, comproveu la connexió de xarxa. Installation failed, please check updates in Control Center Ha fallat la instal·lació. Si us plau, comproveu les actualitzacions al Centre de control. Installation failed, insufficient disk space Ha fallat la instal·lació. Espai de disc insuficient. Installation Failed Ha fallat la instal·lació. Broken Dependencies: %1 Dependències trencades: %1 Unmatched package architecture L'arquitectura del paquet no coincideix. FileChooseWidget Drag and drop file here Arrossegeu el fitxer i deixeu-lo anar aquí. Select File Selecciona el fitxer MultipleInstallPage Collapse Replega Display details Mostra'n els detalls Install Instal·la Done Fet Back Enrere PackagesListDelegate Installing S'instal·la Installed Instal·lat Failed Ha fallat Same version installed N'hi ha instal·lada la mateixa versió. Other version installed: %1 N'hi ha una altra versió instal·lada: %1 SingleInstallPage Collapse Replega Display details Mostra'n els detalls Install Instal·la Remove Elimina Reinstall Reinstal·la OK D'acord Back Enrere Done Fet Version: Versió: Installed successfully Instal·lació correcta Uninstalled successfully Desinstal·lació correcta Other version installed: %1 N'hi ha una altra versió instal·lada: %1 Uninstall Failed Ha fallat la instal·lació. Name: Nom: Same version installed N'hi ha instal·lada la mateixa versió. UninstallConfirmPage Display related packages Mostra els paquets que s'hi relacionen. Collapse Replega Cancel Cancel·la Confirm Confirmeu-ho Are you sure you want to uninstall %1? All dependencies will also be removed Segur que voleu desinstal·lar %1? També se n'eliminaran totes les dependències. main Deepin Package Manager Gestor de paquets del Deepin Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. El Gestor de paquets del Deepin s'usa per ajudar els usuaris a instal·lar i eliminar paquets locals. Admet la instal·lació massiva. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_cs.ts000066400000000000000000000217461350761525300252710ustar00rootroot00000000000000 DebInstaller Dark theme Tmavý vzhled Deepin Package Manager Správce balíčků Bulk Install Hromadná instalace DebListModel Installation failed, please check your network connection Instalace selhala. Zkontrolujte, prosím, internetové připojení Installation failed, please check updates in Control Center Instalace selhala. Zkontrolujte, prosím, v ovládacím středisku aktualizace Installation failed, insufficient disk space Instalace selhala. Na disku není dost místa Installation Failed Instalace selhala Broken Dependencies: %1 Rozbité závislosti: %1 Unmatched package architecture Nehodící se architektura balíčku FileChooseWidget Drag and drop file here Táhněte soubor a upusťte jej zde Select File Vybrat soubor MultipleInstallPage Collapse Složit Display details Zobrazit podrobnosti Install Instalovat Done Hotovo Back Zpět PackagesListDelegate Installing Instaluje se Installed Nainstalováno Failed Selhalo Same version installed Stejná verze již byla nainstalována Other version installed: %1 Je nainstalována jiná verze: %1 SingleInstallPage Collapse Složit Display details Zobrazit podrobnosti Install Instalovat Remove Odstranit Reinstall Nainstalovat znovu OK OK Back Zpět Done Hotovo Version: Verze: Installed successfully Nainstalováno úspěšně Uninstalled successfully Odinstalováno úspěšně Other version installed: %1 Je nainstalována jiná verze: %1 Uninstall Failed Odinstalování selhalo Name: Název: Same version installed Nainstalována ta samá verze UninstallConfirmPage Display related packages Zobrazit související balíčky Collapse Složit Cancel Zrušit Confirm Potvrdit Are you sure you want to uninstall %1? All dependencies will also be removed Jste si jistý, že chcete odinstalovat %1? Budou odstraněny i všechny závislosti main Deepin Package Manager Správce balíčků Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Správce balíčků se používá k pomoci uživatelům instalovat a odebírat místní balíčky, podporuje hromadnou instalaci. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_da.ts000066400000000000000000000216301350761525300252400ustar00rootroot00000000000000 DebInstaller Dark theme Mørkt tema Deepin Package Manager Deepin pakkehåndtering Bulk Install Masseinstallation DebListModel Installation failed, please check your network connection Installation mislykkedes, tjek venligst din netværksforbindelse Installation failed, please check updates in Control Center Installation mislykkedes, tjek venligst opdateringer i kontrolcenter Installation failed, insufficient disk space Installation mislykkedes, utilstrækkelig diskplads Installation Failed Installation mislykkedes Broken Dependencies: %1 Ødelagte afhængigheder: %1 Unmatched package architecture Ikke-matchet pakkearkitektur FileChooseWidget Drag and drop file here Træk-og-slip filer her Select File Vælg fil MultipleInstallPage Collapse Sammenfold Display details Vis detaljer Install Installer Done Færdig Back Tilbage PackagesListDelegate Installing Installerer Installed Installeret Failed Mislykkedes Same version installed Samme version installeret Other version installed: %1 Anden version installeret: %1 SingleInstallPage Collapse Sammenfold Display details Vis detaljer Install Installer Remove Fjern Reinstall Geninstaller OK OK Back Tilbage Done Færdig Version: Version: Installed successfully Installeret Uninstalled successfully Afinstalleret Other version installed: %1 Anden version installeret: %1 Uninstall Failed Afinstallation mislykkedes Name: Navn: Same version installed Samme version installeret UninstallConfirmPage Display related packages Vis relaterede pakker Collapse Sammenfold Cancel Annuller Confirm Bekræft Are you sure you want to uninstall %1? All dependencies will also be removed Er du sikker på, at du vil afinstallere %1? Alle afhængigheder vil også blive fjernet main Deepin Package Manager Deepin pakkehåndtering Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Deepin pakkehåndtering bruges til at hjælpe brugere med at installere og fjerne lokal pakke, med understøttelse af masseinstallation. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_de.ts000066400000000000000000000221011350761525300252360ustar00rootroot00000000000000 DebInstaller Dark theme Dunkles Thema Deepin Package Manager Deepin Paketverwaltung Bulk Install Installation mit Stapelverarbeitung DebListModel Installation failed, please check your network connection Installation fehlgeschlagen, bitte prüfen sie Ihre Internetverbindung Installation failed, please check updates in Control Center Installation fehlgeschlagen, bitte prüfen Sie in der Systemverwaltung auf Updates Installation failed, insufficient disk space Installation fehlgeschlagen, zu wenig Speicherplatz Installation Failed Installation fehlgeschlagen Broken Dependencies: %1 Fehlende Abhängigkeiten: %1 Unmatched package architecture Falsche Paket-Architektur FileChooseWidget Drag and drop file here Datei hier her ziehen und loslassen Select File Datei auswählen MultipleInstallPage Collapse Ausblenden Display details Details anzeigen Install Installieren Done Fertig Back Zurück PackagesListDelegate Installing Installiere Installed Installiert Failed Fehlgeschlagen Same version installed Gleiche Version bereits installiert Other version installed: %1 Andere Version bereits installiert: %1 SingleInstallPage Collapse Ausblenden Display details Details anzeigen Install Installieren Remove Entfernen Reinstall Neu installieren OK OK Back Zurück Done Fertig Version: Version: Installed successfully Erfolgreich installiert Uninstalled successfully Erfolgreich deinstalliert Other version installed: %1 Andere Version installiert: %1 Uninstall Failed Deinstallation fehlgeschlagen Name: Name: Same version installed Gleiche Version installiert UninstallConfirmPage Display related packages Dazugehörige Pakete anzeigen Collapse Ausblenden Cancel Abbrechen Confirm Bestätigen Are you sure you want to uninstall %1? All dependencies will also be removed Möchten Sie %1 wirklich deinstallieren? Alle Abhängigkeiten werden ebenfalls entfernt main Deepin Package Manager Deepin Package Manager Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Deepin Package Manager wird verwendet, um Benutzer bei der Installation und Entfernung von lokalen Paketen zu unterstützen, er unterstützt die Masseninstallation. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_en_AU.ts000066400000000000000000000204051350761525300256420ustar00rootroot00000000000000 DebInstaller Dark theme Deepin Package Manager Deepin Package Manager Bulk Install Bulk Install DebListModel Installation failed, please check your network connection Installation failed, please check your network connection Installation failed, please check updates in Control Center Installation failed, insufficient disk space Installation Failed Broken Dependencies: %1 Unmatched package architecture FileChooseWidget Drag and drop file here Select File MultipleInstallPage Collapse Display details Install Done Back PackagesListDelegate Installing Installed Failed Same version installed Other version installed: %1 SingleInstallPage Collapse Display details Install Remove Reinstall OK Back Done Version: Installed successfully Uninstalled successfully Other version installed: %1 Uninstall Failed Name: Same version installed UninstallConfirmPage Display related packages Collapse Cancel Confirm Are you sure you want to uninstall %1? All dependencies will also be removed main Deepin Package Manager Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_es.ts000066400000000000000000000217101350761525300252620ustar00rootroot00000000000000 DebInstaller Dark theme Tema oscuro Deepin Package Manager Gestor de paquetes Deepin Bulk Install Instalación en lote DebListModel Installation failed, please check your network connection Error en la instalación, comprueba tu conexión de red Installation failed, please check updates in Control Center Error en la instalación: compruebe las actualizaciones en el Centro de Control Installation failed, insufficient disk space Error de instalación, espacio insuficiente en disco Installation Failed Instalación fallida Broken Dependencies: %1 Dependencias rotas: %1 Unmatched package architecture Difiere la arquitectura del paquete FileChooseWidget Drag and drop file here Arrastra y suelta aquí Select File Seleccionar archivo MultipleInstallPage Collapse Colapso Display details Mostrar detalles Install Instalar Done Hecho Back Atrás PackagesListDelegate Installing Instalando Installed Instalado Failed Ha fallado Same version installed Misma versión instalada Other version installed: %1 Otra versión instalada: %1 SingleInstallPage Collapse Colapsar Display details Mostrar detalles Install Instalar Remove Remover Reinstall Reinstalar OK Aceptar Back Atrás Done Hecho Version: Versión: Installed successfully Instalación exitosa Uninstalled successfully Desinstalación exitosa Other version installed: %1 Otra versión instalada: %1 Uninstall Failed Desinstalación fallida Name: Nombre: Same version installed La misma versión está instalada UninstallConfirmPage Display related packages Mostrar paquetes relacionados Collapse Colapsar Cancel Cancelar Confirm Confirmar Are you sure you want to uninstall %1? All dependencies will also be removed ¿Está seguro de desinstalar %1? Todas las dependencias también se eliminarán main Deepin Package Manager Gestor de paquetes Deepin Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. El aministrador de paquetes deepin tiene como finalidad, ayudar a los usuarios a instalar y quitar paquetes deb, ademas soporta instalación en lote. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_es_419.ts000066400000000000000000000217031350761525300256610ustar00rootroot00000000000000 DebInstaller Dark theme Tema oscuro Deepin Package Manager Gestor de paquetes Deepin Bulk Install Instalación en lote DebListModel Installation failed, please check your network connection Error en la instalación, comprueba tu conexión de red Installation failed, please check updates in Control Center Error en la instalación: compruebe las actualizaciones en el Centro de Control Installation failed, insufficient disk space Error de instalación, espacio insuficiente en disco Installation Failed Instalación fallida Broken Dependencies: %1 Dependencias rotas: %1 Unmatched package architecture Difiere la arquitectura del paquete FileChooseWidget Drag and drop file here Arrastra y suelta aquí Select File Seleccionar archivo MultipleInstallPage Collapse Colapso Display details Mostrar detalles Install Instalar Done Hecho Back Volver PackagesListDelegate Installing Instalando Installed Instalado Failed Ha fallado Same version installed Misma versión instalada Other version installed: %1 Otra versión instalada: %1 SingleInstallPage Collapse Colapso Display details Mostrar detalles Install Instalar Remove Remover Reinstall Reinstalar OK Aceptar Back Volver Done Hecho Version: Versión: Installed successfully Instalación exitosa Uninstalled successfully Desinstalación exitosa Other version installed: %1 Otra versión instalada: %1 Uninstall Failed Desinstalación fallida Name: Nombre: Same version installed La misma versión está instalada UninstallConfirmPage Display related packages Mostrar paquetes relacionados Collapse Colapso Cancel Cancelar Confirm Confirmar Are you sure you want to uninstall %1? All dependencies will also be removed Esta seguro que quiere desinstalar %1? Todas sus dependencias también serán eliminadas main Deepin Package Manager Gestor de paquetes Deepin Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. El Gestor de Paquetes Deepin se usa para ayudar a los usuarios a instalar y eliminar paquetes locales, admite la instalación masiva. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_et.ts000066400000000000000000000212741350761525300252700ustar00rootroot00000000000000 DebInstaller Dark theme Deepin Package Manager Deepin pakihaldur Bulk Install Hulgi paigaldamine DebListModel Installation failed, please check your network connection Paigaldamine ebaõnnestus. Palun kontroli internetiühendust Installation failed, please check updates in Control Center Paigaldamine ebaõnnestus. Palun vaata juhtpaneelilt uuendusi. Installation failed, insufficient disk space Paigaldamine ebaõnnestus, kettal pole piisavalt vaba ruumi Installation Failed Paigaldamine ebaõnnestus Broken Dependencies: %1 Lahendamata sõltuvused: %1 Unmatched package architecture Sobimatu paki arhidektuur FileChooseWidget Drag and drop file here Lohista failid siia Select File Vali fail MultipleInstallPage Collapse Sulge Display details Näita üksikasju Install Paigalda Done Valmis Back Tagasi PackagesListDelegate Installing Paigaldamine Installed Paigaldatud Failed Ebaõnnestus Same version installed Sama versioon on juba paigaldatud Other version installed: %1 Teine versioon on juba paigaldatud: %1 SingleInstallPage Collapse Sulge Display details Näita üksikasju Install Paigalda Remove Eemalda Reinstall Paigalda uuesti OK OK Back Tagasi Done Valmis Version: Versioon: Installed successfully Paigaldatud Uninstalled successfully Eemaldatud Other version installed: %1 Teine versioon on juba paigaldatud: %1 Uninstall Failed Eemaldamine ebaõnnestus Name: Nimi: Same version installed Sama versioon on juba paigaldatud UninstallConfirmPage Display related packages Näita seotud pakke Collapse Sulge Cancel Loobu Confirm Kinnita Are you sure you want to uninstall %1? All dependencies will also be removed main Deepin Package Manager Deepin pakihaldur Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_fi.ts000066400000000000000000000216121350761525300252520ustar00rootroot00000000000000 DebInstaller Dark theme Tumma teema Deepin Package Manager Deepin paketinhallinta Bulk Install Suora-asennus DebListModel Installation failed, please check your network connection Asennus epäonnistui, tarkista verkkoyhteys Installation failed, please check updates in Control Center Asennus epäonnistui, tarkista päivitykset ohjauspaneelista Installation failed, insufficient disk space Asennus epäonnistui, levytilaa ei ollut riittävästi Installation Failed Asennus epäonnistui Broken Dependencies: %1 Rikkoutuneet riippuvuudet: %1 Unmatched package architecture Ei yhteensopiva pakettijärjestelmä FileChooseWidget Drag and drop file here Vedä ja pudota tiedosto tähän Select File Valitse tiedosto MultipleInstallPage Collapse Pudotus Display details Näytä tiedot Install Asenna Done Valmis Back Takaisin PackagesListDelegate Installing Asentaa Installed Asennettu Failed Epäonnistui Same version installed Sama versio on asennettu Other version installed: %1 Muut asennetut versiot: %1 SingleInstallPage Collapse Pudotus Display details Näytä tiedot Install Asenna Remove Poista Reinstall asenna-uudestaan OK OK Back Takaisin Done Valmis Version: Versio: Installed successfully Asennettu onnistuneesti Uninstalled successfully Asennuksen poisto onnistui Other version installed: %1 Muut asennetut versiot: %1 Uninstall Failed Poisto epäonnistui Name: Nimi: Same version installed Sama versio on asennettu UninstallConfirmPage Display related packages Näytä liittyvät paketit Collapse Pudotus Cancel Peru Confirm Vahvista Are you sure you want to uninstall %1? All dependencies will also be removed Haluatko varmasti poistaa %1? Kaikki riippuvuudet poistetaan myös main Deepin Package Manager Deepin paketinhallinta Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Deepin Package Manager -ohjelmaa käytetään auttamaan käyttäjiä asentamaan ja poistamaan paikallisia paketteja, jotka tukevat yksinkertaista asennusta. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_fr.ts000066400000000000000000000221301350761525300252570ustar00rootroot00000000000000 DebInstaller Dark theme Thème sombre Deepin Package Manager Gestionnaire de paquets Deepin Bulk Install Installation Multiple DebListModel Installation failed, please check your network connection Échec de l'installation, veuillez vérifier votre connexion réseau Installation failed, please check updates in Control Center Échec de l'installation, veuillez vérifier les mises à jour dans le Centre de contrôle Installation failed, insufficient disk space Échec de l'installation, espace disque insuffisant Installation Failed Échec de l'installation Broken Dependencies: %1 Dépendances cassées : %1 Unmatched package architecture Architecture de paquet différente FileChooseWidget Drag and drop file here Glisser-déposer les fichiers ici Select File Sélectionner un fichier MultipleInstallPage Collapse Réduire Display details Afficher les détails Install Installer Done Terminé Back Précédent PackagesListDelegate Installing Installation Installed Installé Failed Échec Same version installed Version identique installée Other version installed: %1 Autre version installée : %1 SingleInstallPage Collapse Réduire Display details Afficher les détails Install Installer Remove Supprimer Reinstall Réinstaller OK OK Back Précédent Done Terminé Version: Version : Installed successfully Installé avec succès Uninstalled successfully Désinstallé avec succès Other version installed: %1 Autre version installée : %1 Uninstall Failed Échec de la désinstallation Name: Nom : Same version installed Version identique installée UninstallConfirmPage Display related packages Afficher les paquets associés Collapse Réduire Cancel Annuler Confirm Confirmer Are you sure you want to uninstall %1? All dependencies will also be removed Êtes-vous sûr de vouloir désinstaller %1 ? Toutes les dépendances seront également supprimées. main Deepin Package Manager Gestionnaire de paquets Deepin Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Deepin Package Manager est utilisé pour aider les utilisateurs à installer et à supprimer des paquets locaux, il supporte l'installation multiple. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_gl_ES.ts000066400000000000000000000212571350761525300256520ustar00rootroot00000000000000 DebInstaller Dark theme Deepin Package Manager Xestor de paquetes Bulk Install Instalar en bloque DebListModel Installation failed, please check your network connection Fallo ao instalar, verifica a conexión de rede Installation failed, please check updates in Control Center Fallo ao instalar, verifica as actualizacións no Centro de Control Installation failed, insufficient disk space Fallo ao instalar, sen espazo abondo no disco Installation Failed Fallo ao instalar Broken Dependencies: %1 Dependencias rotas: %1 Unmatched package architecture A arquitectura do paquete non coincide FileChooseWidget Drag and drop file here Arrastrar ficheiros aquí Select File Seleccionar ficheiro MultipleInstallPage Collapse Contraer Display details Amosar detalles Install Instalar Done Feito Back Volver PackagesListDelegate Installing Instalando Installed Instalado Failed Fallo Same version installed Mesma versión instalada Other version installed: %1 Outra versión instalada: %1 SingleInstallPage Collapse Contraer Display details Amosar detalles Install Instalar Remove Eliminar Reinstall Reinstalar OK Aceptar Back Volver Done Feito Version: Versión: Installed successfully Instalado con éxito Uninstalled successfully Desinstalado con éxito Other version installed: %1 Outra versión instalada: %1 Uninstall Failed Fallo ao desinstalar Name: Nome: Same version installed Mesma versión instalada UninstallConfirmPage Display related packages Amosar paquetes relacionados Collapse Contraer Cancel Cancelar Confirm Confirmar Are you sure you want to uninstall %1? All dependencies will also be removed main Deepin Package Manager Xestor de paquetes Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_he.ts000066400000000000000000000216131350761525300252510ustar00rootroot00000000000000 DebInstaller Dark theme Deepin Package Manager מנהל החבילות של Deepin Bulk Install התקנה קבוצתית DebListModel Installation failed, please check your network connection ההתקנה נכשלה, נא לבדוק את החיבור שלך לרשת Installation failed, please check updates in Control Center ההתקנה נכשלה, נא לבדוק אם יש עדכונים במרכז הבקרה Installation failed, insufficient disk space ההתקנה נכשלה, אין מספיק מקום בכונן Installation Failed ההתקנה נכשלה Broken Dependencies: %1 תלויות פגומות: %1 Unmatched package architecture ארכיטקטורת החבילה אינה תואמת FileChooseWidget Drag and drop file here ניתן לגרור לכאן קבצים Select File בחירת קובץ MultipleInstallPage Collapse צמצום Display details הצגת פרטים Install התקנה Done Back חזרה PackagesListDelegate Installing בהתקנה Installed מותקן Failed נכשל Same version installed אותה הגרסה מותקנת Other version installed: %1 גרסה אחרת מותקנת: %1 SingleInstallPage Collapse צמצום Display details הצגת פרטים Install התקנה Remove הסרה Reinstall התקנה מחדש OK אישור Back חזרה Done Version: גרסה: Installed successfully הותקן בהצלחה Uninstalled successfully הוסר בהצלחה Other version installed: %1 גרסה אחר מותקנת: %1 Uninstall Failed ההסרה נכשלה Name: שם: Same version installed הותקנה אותה הגרסה UninstallConfirmPage Display related packages הצגת חבילות קשורות Collapse צמצום Cancel ביטול Confirm אישור Are you sure you want to uninstall %1? All dependencies will also be removed main Deepin Package Manager מנהל החבילות של Deepin Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_hi_IN.ts000066400000000000000000000203511350761525300256410ustar00rootroot00000000000000 DebInstaller Dark theme Deepin Package Manager डीपिन पैकेज प्रबंधक Bulk Install DebListModel Installation failed, please check your network connection Installation failed, please check updates in Control Center Installation failed, insufficient disk space Installation Failed Broken Dependencies: %1 Unmatched package architecture FileChooseWidget Drag and drop file here Select File MultipleInstallPage Collapse Display details Install Done Back PackagesListDelegate Installing Installed Failed Same version installed Other version installed: %1 SingleInstallPage Collapse Display details Install Remove Reinstall OK Back Done Version: Installed successfully Uninstalled successfully Other version installed: %1 Uninstall Failed Name: Same version installed UninstallConfirmPage Display related packages Collapse Cancel Confirm Are you sure you want to uninstall %1? All dependencies will also be removed main Deepin Package Manager Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_hr.ts000066400000000000000000000213331350761525300252650ustar00rootroot00000000000000 DebInstaller Dark theme Deepin Package Manager Deepin upravitelj paketima Bulk Install Skupno instaliranje DebListModel Installation failed, please check your network connection Neuspjela instalacija, molim provjerite vašu mrežnu vezu Installation failed, please check updates in Control Center Neuspjela instalacija, molim provjerite za ažuriranja u Kontrolnom centru Installation failed, insufficient disk space Neuspjela instalacija, nedovoljno slobodnog prostor na disku Installation Failed Neuspjela instalacija Broken Dependencies: %1 Slomljene međuzavisnosti: %1 Unmatched package architecture FileChooseWidget Drag and drop file here Povuci i pusti datoteku ovdje Select File Odaberi datoteku MultipleInstallPage Collapse Display details Prikaži pojedinosti Install Instaliraj Done Učinjeno Back Natrag PackagesListDelegate Installing Instaliram Installed Instalirano Failed Neuspjelo Same version installed Instalirana je ista inačica Other version installed: %1 Instalirana je druga inačica: %1 SingleInstallPage Collapse Display details Prikaži pojedinosti Install Instaliraj Remove Ukloni Reinstall Ponovno instaliraj OK U redu Back Natrag Done Učinjeno Version: Inačica: Installed successfully Uspješno instalirano Uninstalled successfully Uspješno deinstalirano Other version installed: %1 Instalirana je druga inačica: %1 Uninstall Failed Neuspjela deinstalacija Name: Ime: Same version installed Instalirana je ista inačica UninstallConfirmPage Display related packages Collapse Cancel Otkaži Confirm Potvrdi Are you sure you want to uninstall %1? All dependencies will also be removed main Deepin Package Manager Deepin upravitelj paketima Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_hu.ts000066400000000000000000000214611350761525300252720ustar00rootroot00000000000000 DebInstaller Dark theme Deepin Package Manager Deepin csomagkezelő Bulk Install Csoportos telepítés DebListModel Installation failed, please check your network connection Telepítés sikertelen, kérlek ellenőrizd a hálózati kapcsolatot Installation failed, please check updates in Control Center Telepítés sikertelen, kérlek ellenőrizd a frissítéseket a Vezérlőpultban Installation failed, insufficient disk space Telepítés sikertelen, nincs elég hely a lemezen Installation Failed Telepítés sikertelen Broken Dependencies: %1 Hibás függőségek: %1 Unmatched package architecture Nem megfelelő csomag architektúra FileChooseWidget Drag and drop file here Húzzon egy fájlt ide Select File Fájl kiválasztása MultipleInstallPage Collapse Összecsuk Display details Részletek megjelenítése Install Telepítés Done Sikerült Back Vissza PackagesListDelegate Installing Telepítés Installed Telepítve Failed Sikertelen Same version installed Ez a verzió már telepítve van Other version installed: %1 Más verzió telepítve: %1 SingleInstallPage Collapse Összecsuk Display details Részletek megjelenítése Install Telepítés Remove Eltávolítás Reinstall Újratelepítés OK OK Back Vissza Done Sikerült. Version: Verzió: Installed successfully Sikeresen telepítve Uninstalled successfully Sikertelen telepítés Other version installed: %1 Más verzió telepítve: %1 Uninstall Failed Eltávolítás sikertelen Name: Név: Same version installed Ez a verzió már telepítve van UninstallConfirmPage Display related packages Kapcsolódó csomagok megjelenítése Collapse Összecsuk Cancel Mégse Confirm Megerősítés Are you sure you want to uninstall %1? All dependencies will also be removed main Deepin Package Manager Deepin csomagkezelő Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_id.ts000066400000000000000000000211511350761525300252460ustar00rootroot00000000000000 DebInstaller Dark theme Deepin Package Manager Manajer Paket Deepin Bulk Install Instal Jumlah Besar DebListModel Installation failed, please check your network connection Instalasi gagal, mohon periksa koneksi jaringan Anda Installation failed, please check updates in Control Center Instalasi gagal, mohon periksa pembaruan dalam Pusat Kontrol Installation failed, insufficient disk space Instalasi gagal, ruang diska tidak mencukupi Installation Failed Instalasi Gagal Broken Dependencies: %1 Dependesi rusak: %1 Unmatched package architecture Paket arsitektur tidak cocok FileChooseWidget Drag and drop file here Seret dan lepas berkas di sini Select File Pilih Berkas MultipleInstallPage Collapse Jatuhkan Display details Tampilkan detail Install Instal Done Selesai Back Kembali PackagesListDelegate Installing Menginstal Installed Diinstal Failed Gagal Same version installed Versi sama diinstal Other version installed: %1 Versi lain diinstal: %1 SingleInstallPage Collapse Jatuhkan Display details Tampilkan detail Install Instal Remove Hapus Reinstall Instal ulang OK OK Back Kembali Done Selesai Version: Versi: Installed successfully Instal berhasil Uninstalled successfully Lepas berhasil Other version installed: %1 Versi lain diinstal: %1 Uninstall Failed Lepaskan gagal Name: Nama: Same version installed Versi sama diinstal UninstallConfirmPage Display related packages Tampilkan paket terhubung Collapse Jatuhkan Cancel Batal Confirm Konfirmasi Are you sure you want to uninstall %1? All dependencies will also be removed main Deepin Package Manager Manajer Paket Deepin Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_it.ts000066400000000000000000000220711350761525300252700ustar00rootroot00000000000000 DebInstaller Dark theme Tema scuro Deepin Package Manager Deepin Package Manager Bulk Install Installazione di massa DebListModel Installation failed, please check your network connection Installazione fallita, controlla la connessione ad internet Installation failed, please check updates in Control Center Installazione fallita, controlla gli aggiornamenti dal Control Center Installation failed, insufficient disk space Installazione fallita, spazio libero insufficiente Installation Failed Installazione fallita Broken Dependencies: %1 Dipendenza danneggiata: %1 Unmatched package architecture Architettura pacchetti non compatibile FileChooseWidget Drag and drop file here Trascina qui i file da installare Select File Seleziona i file manualmente MultipleInstallPage Collapse Non mostrare i dettagli Display details Visualizza dettagli Install Installa Done Fatto Back Indietro PackagesListDelegate Installing Installazione.. Installed Installato Failed Fallita Same version installed Medesima versione installata Other version installed: %1 Versione differente installata: %1 SingleInstallPage Collapse Non mostrare i dettagli Display details Visualizza i dettagli Install Installa Remove Rimuovi Reinstall Aggiorna OK OK Back Indietro Done Fatto Version: Versione: Installed successfully Installazione riuscita Uninstalled successfully Disinstallazione riuscita Other version installed: %1 Differente versione installata: %1 Uninstall Failed Disinstallazione fallita Name: Nome: Same version installed Medesima versione già installata UninstallConfirmPage Display related packages Visualizza pacchetti collegati Collapse Non mostrare i dettagli Cancel Annulla Confirm Conferma Are you sure you want to uninstall %1? All dependencies will also be removed Sicuro di voler disinstallare %1? Tutte le dipendenze saranno rimosse main Deepin Package Manager Gestore Pacchetti di Deepin Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Deepin Package Manager è utile per installare e rimuovere software in locale, supporta inoltre l'installazione massiva. Localizzazione italiana a cura di Massimo A. Carofano. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ko.ts000066400000000000000000000215421350761525300252670ustar00rootroot00000000000000 DebInstaller Dark theme 어두운 테마 Deepin Package Manager Deepin 패키지 관리자 Bulk Install 일괄 설치 DebListModel Installation failed, please check your network connection 설치 실패, 네트워크 연결을 확인하세요 Installation failed, please check updates in Control Center 설치 실패, 제어 센터에서 업데이트를 확인하세요 Installation failed, insufficient disk space 설치 실패, 디스크 공간 부족 Installation Failed 설치 실패 Broken Dependencies: %1 손상된 종속성: %1 Unmatched package architecture 최고의 패키지 아키텍처 FileChooseWidget Drag and drop file here 파일을 여기로 끌어다 놓기 Select File 파일 선택 MultipleInstallPage Collapse 접기 Display details 세부 정보 표시 Install 설치 Done 완료 Back 뒤로 PackagesListDelegate Installing 설치중 Installed 설치됨 Failed 실패됨 Same version installed 동일한 버전 설치됨 Other version installed: %1 다른 버전 설치됨: %1 SingleInstallPage Collapse 접기 Display details 세부 정보 표시 Install 설치 Remove 제거 Reinstall 재설치 OK 확인 Back 뒤로 Done 완료 Version: 버전: Installed successfully 설치 성공 Uninstalled successfully 제거 성공 Other version installed: %1 다른 버전 설치됨: %1 Uninstall Failed 제거 실패 Name: 이름: Same version installed 동일한 버전 설치됨 UninstallConfirmPage Display related packages 관련 패키지 표시 Collapse 접기 Cancel 취소 Confirm 확인 Are you sure you want to uninstall %1? All dependencies will also be removed %1을(를) 제거하시겠습니까? 모든 종속성도 제거됩니다 main Deepin Package Manager Deepin 패키지 관리자 Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Deepin 패키지 관리자는 사용자가 일괄 설치를 지원하여 로컬 패키지를 설치 및 제거하는데 사용됩니다. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_lt.ts000066400000000000000000000216571350761525300253040ustar00rootroot00000000000000 DebInstaller Dark theme Tamsi tema Deepin Package Manager Deepin paketų tvarkytuvė Bulk Install Masinis įdiegimas DebListModel Installation failed, please check your network connection Įdiegimas nepavyko, prašome patikrinti savo tinklo ryšį Installation failed, please check updates in Control Center Įdiegimas nepavyko, prašome patikrinti atnaujinimus Valdymo centre Installation failed, insufficient disk space Įdiegimas nepavyko, trūksta vietos diske Installation Failed Įdiegimas nepavyko Broken Dependencies: %1 Sugadintos priklausomybės: %1 Unmatched package architecture Neatitinkanti paketo architektūra FileChooseWidget Drag and drop file here Vilkite failą čia Select File Pasirinkti failą MultipleInstallPage Collapse Suskleisti Display details Rodyti išsamiau Install Įdiegti Done Atlikta Back Atgal PackagesListDelegate Installing Įdiegiama Installed Įdiegta Failed Nepavyko Same version installed Įdiegta ta pati versija Other version installed: %1 Įdiegta kita versija: %1 SingleInstallPage Collapse Suskleisti Display details Rodyti išsamiau Install Įdiegti Remove Šalinti Reinstall Įdiegti iš naujo OK Gerai Back Atgal Done Atlikta Version: Versija: Installed successfully Sėkmingai įdiegta Uninstalled successfully Sėkmingai pašalinta Other version installed: %1 Įdiegta kita versija: %1 Uninstall Failed Šalinimas nepavyko Name: Pavadinimas: Same version installed Įdiegta ta pati versija UninstallConfirmPage Display related packages Rodyti susijusius paketus Collapse Suskleisti Cancel Atsisakyti Confirm Patvirtinti Are you sure you want to uninstall %1? All dependencies will also be removed Ar tikrai norite pašalinti %1? Tuo pačiu bus pašalintos ir visos priklausomybės main Deepin Package Manager Deepin paketų tvarkytuvė Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Deepin paketų tvarkytuvė yra naudojama padėti naudotojams įdiegti ir šalinti vietinius paketus, ši programa palaiko masinį įdiegimą. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_mn.ts000066400000000000000000000226361350761525300252750ustar00rootroot00000000000000 DebInstaller Dark theme Deepin Package Manager Деепин Багц Зохицуулагч Bulk Install Багц суулгац DebListModel Installation failed, please check your network connection Суулгалт амжилтгүй боллоо, өөрийн сүлжээний холболтоо шалгана уу Installation failed, please check updates in Control Center Суулгалт амжилтгүй боллоо, хяналтын төвийн шинэчлэлийг шалгана уу Installation failed, insufficient disk space Суулгалт амжилтгүй боллоо, дискийн зай хангалтгүй Installation Failed Суулгалт амжилтгүй боллоо Broken Dependencies: %1 Эвдрэлтэй хамааралууд: %1 Unmatched package architecture Багцын архитектур тохирсонгүй FileChooseWidget Drag and drop file here Энд чирж байршуулна уу Select File Файл сонгох MultipleInstallPage Collapse Дэлгэх Display details Дэлгэрэнгүй мэдээлэл харуулах Install Суулгах Done Дууссан Back Буцах PackagesListDelegate Installing Суулгаж байна Installed Суулгагдсан Failed Амжилтгүй Same version installed Адил хувилбар суулгагдсан Other version installed: %1 Суулгагдсан бусад хувилбарууд %1 SingleInstallPage Collapse Дэлгэх Display details Дэлгэрэнгүй мэдээлэл харуулах Install Суулгах Remove Устгах Reinstall Дахин суулгах OK ОК Back Буцах Done Дууссан Version: Хувилбар: Installed successfully Амжилттай суулгагдлаа Uninstalled successfully Амжилттай устгагдлаа Other version installed: %1 Суулгагдсан бусад хувилбарууд: %1 Uninstall Failed Устгах ажиллагаа амжилтгүй болсон Name: Нэр: Same version installed Адил хувилбар суулгагдсан UninstallConfirmPage Display related packages Төстэй багцуудыг харуулах Collapse Дэлгэх Cancel Цуцлах Confirm Баталгаажуулах Are you sure you want to uninstall %1? All dependencies will also be removed main Deepin Package Manager Деепин Багц Зохицуулагч Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ms.ts000066400000000000000000000215101350761525300252700ustar00rootroot00000000000000 DebInstaller Dark theme Tema gelap Deepin Package Manager Pengurus Pakej Deepin Bulk Install Pasang Pukal DebListModel Installation failed, please check your network connection Pemasangan gagal, sila periksa sambungan rangkaian anda Installation failed, please check updates in Control Center Pemasangan gagal, sila periksa kemaskini dalam Pusat Kawalanrangkaian anda Installation failed, insufficient disk space Pemasangan gagal, ruang cakera tidak mencukupi Installation Failed Pemasangan Gagal Broken Dependencies: %1 Dependensi Rosak: %1 Unmatched package architecture Senibina pakej tidak sepadan FileChooseWidget Drag and drop file here Seret dan lepas fail di sini Select File Pilih Fail MultipleInstallPage Collapse Kuncup Display details Papar perincian Install Pasang Done Selesai Back Undur PackagesListDelegate Installing Memasang Installed Dipasang Failed Gagal Same version installed Versi serupa telah dipasang Other version installed: %1 Versi lain dipasang: %1 SingleInstallPage Collapse Kuncup Display details Papar perincian Install Pasang Remove Buang Reinstall Pasang Semula OK OK Back Undur Done Selesai Version: Versi: Installed successfully Berjaya dipasang Uninstalled successfully Berjaya dinyahpasang Other version installed: %1 Versi lain dipasang: %1 Uninstall Failed Nyahpasang Gagal Name: Nama: Same version installed Versi serupa telah dipasang UninstallConfirmPage Display related packages Papar pakej berkaitan Collapse Kuncup Cancel Batal Confirm Sahkan Are you sure you want to uninstall %1? All dependencies will also be removed Anda pasti mahu menyahpasang %1? Semua dependensinya juga akan dibuang main Deepin Package Manager Pengurus Pakej Deepin Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Pengurus Pakej Deepin digunakan untuk bantu pengguna memasang dan membuang perisian setempat, selain itu ia menyokong pemasangan secara pukal. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ne.ts000066400000000000000000000247341350761525300252660ustar00rootroot00000000000000 DebInstaller Dark theme डार्क थिम Deepin Package Manager डिपिन प्याकेज प्रबन्धक Bulk Install बल्क स्थापना DebListModel Installation failed, please check your network connection स्थापना असफल भयो, कृपया तपाइँको नेटवर्क जडान जाँच्नुहोस् Installation failed, please check updates in Control Center स्थापना विफल भयो, कृपया नियन्त्रण केन्द्रमा अपडेट जाँच गर्नुहोस् Installation failed, insufficient disk space स्थापना विफल भयो, अपर्याप्त डिस्क स्पेस Installation Failed स्थापना असफल भयो Broken Dependencies: %1 टूटेको निर्भरताहरू:% 1 Unmatched package architecture बेमेल प्याकेज वास्तुकला FileChooseWidget Drag and drop file here फाइल यहाँ तान्नुहोस् र ड्रप गर्नुहोस् Select File फाइल चयन गर्नुहोस् MultipleInstallPage Collapse संक्षिप्त गर्नुहोस् Display details विवरणहरू प्रदर्शन गर्नुहोस् Install स्थापना Done भयो Back पछाडि PackagesListDelegate Installing स्थापना गर्दै Installed स्थापित Failed असफल भयो Same version installed एउटै संस्करण स्थापित Other version installed: %1 अन्य संस्करण स्थापित:% 1 SingleInstallPage Collapse संक्षिप्त गर्नुहोस् Display details विवरणहरू प्रदर्शन गर्नुहोस् Install स्थापना Remove हटाउनुहोस् Reinstall पुन: स्थापना गर्नुहोस् OK ठिक छ Back पछाडि Done भयो Version: संस्करण Installed successfully सफलतापूर्वक स्थापित भयो Uninstalled successfully सफलतापूर्वक स्थापना रद्द गरियो Other version installed: %1 अन्य संस्करण स्थापित:% 1 Uninstall Failed स्थापना रद्द गरियो Name: नाम Same version installed एउटै संस्करण स्थापित UninstallConfirmPage Display related packages सम्बन्धित प्याकेजहरू प्रदर्शन गर्नुहोस् Collapse संक्षिप्त गर्नुहोस् Cancel रद्द गर्नुहोस् Confirm पक्का गर्नु Are you sure you want to uninstall %1? All dependencies will also be removed के तपाईँ% 1 लाई अनस्टल गर्न निश्चित हुनुहुन्छ? सबै निर्भरताहरू हटाइनेछ main Deepin Package Manager डिपिन प्याकेज प्रबन्धक Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. डिपिन प्याकेज प्रबन्धक, प्याकेज फाइल स्थापना र स्थापना रद्द गर्न प्रयोग हुन्छ deepin-deb-installer-5.0.0/translations/deepin-deb-installer_nl.ts000066400000000000000000000217231350761525300252700ustar00rootroot00000000000000 DebInstaller Dark theme Donker thema Deepin Package Manager Deepin Pakketbeheer Bulk Install Alles installeren DebListModel Installation failed, please check your network connection Installatie mislukt; controleer je netwerkverbinding. Installation failed, please check updates in Control Center Installatie mislukt; controleer op updates in het Configuratiecentrum. Installation failed, insufficient disk space Installatie mislukt; onvoldoende schijfruimte. Installation Failed Installatie mislukt Broken Dependencies: %1 Gebroken afhankelijkheden: %1 Unmatched package architecture Pakketarchitectuur komt niet overeen FileChooseWidget Drag and drop file here Versleep een bestand hierheen Select File Bestand selecteren MultipleInstallPage Collapse Inklappen Display details Details tonen Install Installeren Done Klaar Back Terug PackagesListDelegate Installing Installeren Installed Geïnstalleerd Failed Mislukt Same version installed Dezelfde versie geïnstalleerd Other version installed: %1 Andere versie geïnstalleerd: %1 SingleInstallPage Collapse Inklappen Display details Details tonen Install Installeren Remove Verwijderen Reinstall Opnieuw installeren OK Oké Back Terug Done Klaar Version: Versie: Installed successfully Geïnstalleerd Uninstalled successfully Verwijderd Other version installed: %1 Andere versie geïnstalleerd: %1 Uninstall Failed Opnieuw installeren mislukt Name: Naam: Same version installed Dezelfde versie geïnstalleerd UninstallConfirmPage Display related packages Gerelateerde pakketten tonen Collapse Inklappen Cancel Annuleren Confirm Bevestigen Are you sure you want to uninstall %1? All dependencies will also be removed Weet je zeker dat je %1 wilt verwijderen? Alle afhankelijkheden worden eveneens verwijderd main Deepin Package Manager Deepin Pakketbeheer Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Deepin Pakketbeheer is een applicatie die gebruikers helpt bij het installeren en verwijderen van lokale software, zowel één voor één als meerdere tegelijk. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_pa.ts000066400000000000000000000213141350761525300252530ustar00rootroot00000000000000 DebInstaller Dark theme Deepin Package Manager ਡੀਪਿਨ ਪੈਕੇਜ ਮੈਨੇਜਰ Bulk Install DebListModel Installation failed, please check your network connection Installation failed, please check updates in Control Center Installation failed, insufficient disk space Installation Failed Broken Dependencies: %1 Unmatched package architecture FileChooseWidget Drag and drop file here Select File ਫਾਇਲ ਚੁਣੋ MultipleInstallPage Collapse Display details Install ਇੰਸਟਾਲ ਕਰੋ Done ਮੁਕੰਮਲ Back ਪਿੱਛੇ PackagesListDelegate Installing ਇੰਸਟਾਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ Installed ਇੰਸਟਾਲ ਹੈ Failed ਅਸਫ਼ਲ ਹੈ Same version installed Other version installed: %1 SingleInstallPage Collapse Display details Install ਇੰਸਟਾਲ ਕਰੋ Remove ਹਟਾਓ Reinstall ਮੁੜ-ਇੰਸਟਾਲ ਕਰੋ OK ਠੀਕ ਹੈ Back ਪਿੱਛੇ Done ਮੁਕੰਮਲ Version: ਵਰਜ਼ਨ: Installed successfully ਕਾਮਯਾਬੀ ਨਾਲ ਇੰਸਟਾਲ ਕੀਤਾ Uninstalled successfully ਅਣ-ਇੰਸਟਾਲ ਕਰਨਾ ਕਾਮਯਾਬ ਰਿਹਾ Other version installed: %1 Uninstall Failed ਅਣ-ਇੰਸਟਾਲ ਕਰਨਾ ਅਸਫ਼ਲ ਹੈ Name: Same version installed ਉਹੀ ਵਰਜ਼ਨ ਇੰਸਟਾਲ ਹੈ UninstallConfirmPage Display related packages Collapse Cancel Confirm Are you sure you want to uninstall %1? All dependencies will also be removed main Deepin Package Manager Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_pl.ts000066400000000000000000000217411350761525300252720ustar00rootroot00000000000000 DebInstaller Dark theme Ciemny motyw Deepin Package Manager Zarządzanie pakietami Deepin Bulk Install Instalacja zbiorcza DebListModel Installation failed, please check your network connection Błąd instalacji, prosimy sprawdzić połączenie sieciowe Installation failed, please check updates in Control Center Błąd instalacji, prosimy sprawdzić aktualizacje w Centrum sterowania Installation failed, insufficient disk space Błąd instalacji: niewystarczająca ilość miejsca na dysku Installation Failed Błąd instalacji Broken Dependencies: %1 Niespełnione zależności: %1 Unmatched package architecture Niepasująca architektura pakietu FileChooseWidget Drag and drop file here Przeciągnij i upuść tutaj plik Select File Wybierz plik MultipleInstallPage Collapse Zwiń Display details Wyświetl szczegóły Install Zainstaluj Done Gotowe Back Wstecz PackagesListDelegate Installing Instalowanie Installed Zainstalowane Failed Błąd Same version installed Zainstalowana taka sama wersja Other version installed: %1 Zainstalowana inna wersja: %1 SingleInstallPage Collapse Zwiń Display details Wyświetl szczegóły Install Zainstaluj Remove Usuń Reinstall Przeinstaluj OK OK Back Wstecz Done Gotowe Version: Wersja: Installed successfully Pomyślnie zainstalowano Uninstalled successfully Pomyślnie odinstalowano Other version installed: %1 Zainstalowana inna wersja: %1 Uninstall Failed Błąd odinstalowania Name: Nazwa: Same version installed Zainstalowana taka sama wersja UninstallConfirmPage Display related packages Wyświetl pakiety powiązane Collapse Zwiń Cancel Anuluj Confirm Potwierdź Are you sure you want to uninstall %1? All dependencies will also be removed Czy na pewno chcesz odinstalować %1? Wszystkie zależności zostaną również usunięte main Deepin Package Manager Zarządzanie pakietami Deepin Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Deepin Package Manager służy do pomocy użytkownikom w instalowaniu i usuwaniu lokalnych pakietów, wspierając instalację zbiorczą. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_pt.ts000066400000000000000000000217771350761525300253130ustar00rootroot00000000000000 DebInstaller Dark theme Tema escuro Deepin Package Manager Deepin Package Manager Bulk Install Instalação em Volume DebListModel Installation failed, please check your network connection A instalação falhou, por favor, verifique a sua ligação à Internet Installation failed, please check updates in Control Center A instalação falhou, por favor, verifique as atualizações no Centro de Controlo Installation failed, insufficient disk space Instalação falhou, espaço insuficiente no disco Installation Failed Instalação falhou Broken Dependencies: %1 Dependências com problemas: %1 Unmatched package architecture Arquitetura do pacote não compatível FileChooseWidget Drag and drop file here Arraste e largue aqui o ficheiro Select File Selecionar Ficheiro MultipleInstallPage Collapse Colapso Display details Exibir detalhes Install Instalar Done Concluído Back Anterior PackagesListDelegate Installing A Instalar Installed Instalado Failed Falhou Same version installed A mesma versão já está instalada Other version installed: %1 Outra versão instalada: %1 SingleInstallPage Collapse Ocultar Display details Exibir detalhes Install Instalar Remove Remover Reinstall Reinstalar OK OK Back Anterior Done Concluído Version: Versão: Installed successfully Instalado com sucesso Uninstalled successfully Desinstalado com sucesso Other version installed: %1 Outra versão instalada: %1 Uninstall Failed A desinstalação falhou Name: Nome: Same version installed A mesma versão já está instalada UninstallConfirmPage Display related packages Mostrar pacotes relacionados Collapse Ocultar Cancel Cancelar Confirm Confirmar Are you sure you want to uninstall %1? All dependencies will also be removed Tem a certeza que deseja desinstalar %1? Também serão removidas todas as dependências main Deepin Package Manager Deepin Package Manager Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. O Deepin Package Manager é uma aplicação utilizada para ajudar os utilizadores a instalar e remover pacotes locais, suporta instalações em massa. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_pt_BR.ts000066400000000000000000000217351350761525300256700ustar00rootroot00000000000000 DebInstaller Dark theme Tema escuro Deepin Package Manager Deepin Gerenciador de Pacotes Bulk Install Instalação em Massa DebListModel Installation failed, please check your network connection Falha na instalação, verifique sua conexão com a internet Installation failed, please check updates in Control Center Falha na instalação, verifique se há atualizações pendentes na Central de Controle Installation failed, insufficient disk space Falha na instalação, espaço insuficiente em disco Installation Failed Falha na Instalação. Broken Dependencies: %1 Dependências Quebradas: %1 Unmatched package architecture Arquitetura de pacote incompatível FileChooseWidget Drag and drop file here Arraste e solte o arquivo aqui Select File Selecione o Arquivo MultipleInstallPage Collapse Ocultar detalhes Display details Exibir detalhes Install Instalar Done Concluído Back Voltar PackagesListDelegate Installing Instalando Installed Instalado Failed Falhou Same version installed Versão já instalada Other version installed: %1 Outra versão está instalada: %1 SingleInstallPage Collapse Ocultar detalhes Display details Exibir detalhes Install Instalar Remove Remover Reinstall Reinstalar OK OK Back Voltar Done Concluído Version: Versão: Installed successfully Instalado com sucesso Uninstalled successfully Desinstalado com sucesso Other version installed: %1 Outra versão está instalada: %1 Uninstall Failed Falha na Desinstalação Name: Nome: Same version installed Versão já instalada UninstallConfirmPage Display related packages Exibir pacotes relacionados Collapse Ocultar detalhes Cancel Cancelar Confirm Confirmar Are you sure you want to uninstall %1? All dependencies will also be removed Deseja desinstalar %1? Todas as dependências serão removidas main Deepin Package Manager Deepin Gerenciador de Pacotes Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. O Deepin Package Manager é usado para ajudar os usuários a instalar e remover pacotes locais, suportando a instalação em massa. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ru.ts000066400000000000000000000233351350761525300253060ustar00rootroot00000000000000 DebInstaller Dark theme Темная тема Deepin Package Manager Менеджер Пакетов Deepin Bulk Install Массовая Установка DebListModel Installation failed, please check your network connection Установка не удалась, проверьте ваше интернет подключение Installation failed, please check updates in Control Center Установка не удалась, пожалуйста проверьте обновления в Центре Управления Installation failed, insufficient disk space Установка не удалась, недостаточно места на диске Installation Failed Ошибка Установки Broken Dependencies: %1 Нарушены Зависимости: %1 Unmatched package architecture Архитектура пакета некорректна FileChooseWidget Drag and drop file here Перетащите файл сюда Select File Выберите Файл MultipleInstallPage Collapse Свернуть Display details Показать детали Install Установка Done Готово Back Назад PackagesListDelegate Installing Установка Installed Установлено Failed Не удалось Same version installed Эта версия уже установлена Other version installed: %1 Другая версия установлена: %1 SingleInstallPage Collapse Свернуть Display details Показать детали Install Установить Remove Удалить Reinstall Переустановить OK OK Back Назад Done Готово Version: Версия: Installed successfully Установка успешно завершена Uninstalled successfully Удаление успешно завершено Other version installed: %1 Другая версия установлена: %1 Uninstall Failed Ошибка Удаления Name: Наименование: Same version installed Эта версия уже установлена UninstallConfirmPage Display related packages Показать связанные пакеты Collapse Свернуть Cancel Отмена Confirm Подтвердить Are you sure you want to uninstall %1? All dependencies will also be removed Вы действительно хотите удалить %1? Все зависимости также будут удалены. main Deepin Package Manager Менеджер Пакетов Deepin Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Менеджер Пакетов Deepin используется, чтобы помочь пользователям устанавливать и удалять локальные пакеты, поддерживая массовую установку. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_sk.ts000066400000000000000000000220071350761525300252700ustar00rootroot00000000000000 DebInstaller Dark theme Tmavá téma Deepin Package Manager Deepin Správca balíčkov Bulk Install Hromadná inštalácia DebListModel Installation failed, please check your network connection Inštalácia zlyhala, skontrolujte pripojenie k sieti Installation failed, please check updates in Control Center Inštalácia zlyhala, skontrolujte aktualizácie v Ovládacom centre Installation failed, insufficient disk space Inštalácia zlyhala, nedostatočné miesto na disku Installation Failed Inštalácia zlyhala Broken Dependencies: %1 Rozbité závislosti: %1 Unmatched package architecture Nezabezpečená architektúra balíčkov FileChooseWidget Drag and drop file here Tu pretiahnite a pustite súbor Select File Vybrať súbor MultipleInstallPage Collapse Zbaliť Display details Zobraziť podrobnosti Install Inštalovať Done Hotovo Back Späť PackagesListDelegate Installing Inštalujem Installed Nainštalované Failed Neúspešné Same version installed Rovnaká verzia je nainštalovaná Other version installed: %1 Iná inštalovaná verzia: %1 SingleInstallPage Collapse Zbaliť Display details Zobraziť podrobnosti Install Inštalovať Remove Odstrániť Reinstall Reinštalovať OK OK Back Späť Done Hotovo Version: Verzia: Installed successfully Úspešne nainštalované Uninstalled successfully Úspešne odinštalované Other version installed: %1 Nainštalovaná iná verzia: %1 Uninstall Failed Odinštalovanie zlyhalo Name: Názov: Same version installed Rovnaká verzia je nainštalovaná UninstallConfirmPage Display related packages Zobraziť súvisiace balíčky Collapse Zbaliť Cancel Zrušiť Confirm Potvrdiť Are you sure you want to uninstall %1? All dependencies will also be removed Naozaj chcete odinštalovať %1? Všetky závislosti budú tiež odstránené main Deepin Package Manager Deepin Správca balíčkov Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Aplikácia Deepin Správca balíčkov slúži na pomoc používateľom pri inštalácii a odstraňovaní lokálnych balíčkov, podporuje hromadnú inštaláciu. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_sl.ts000066400000000000000000000213661350761525300253000ustar00rootroot00000000000000 DebInstaller Dark theme Deepin Package Manager Upravitelj paketov Deepin Bulk Install Bulk namestitev DebListModel Installation failed, please check your network connection Namestitev ni uspela, prosim preverite vašo omrežno povezavo Installation failed, please check updates in Control Center Namestitev ni uspela, prosim preverite posodobitve v Nadzornem centru Installation failed, insufficient disk space Namestitev ni uspela, ni dovolj prostora na disku Installation Failed Namestitev ni uspela Broken Dependencies: %1 Okvarjeni odvisni podatki: %1 Unmatched package architecture Neskladna paketna arhitektura FileChooseWidget Drag and drop file here Tukaj povlecite in spustite datoteko Select File Izberi datoteko MultipleInstallPage Collapse Skrij Display details Prikaži podrobnosti Install Namesti Done Opravljeno Back Nazaj PackagesListDelegate Installing Nameščam Installed Nameščeno Failed Ni uspelo Same version installed Ista različica že nameščena Other version installed: %1 Druga različica nameščena: %1 SingleInstallPage Collapse Skrij Display details Prikaži podrobnosti Install Namesti Remove Odstrani Reinstall Ponovno namesti OK V redu Back Nazaj Done Opravljeno Version: Različica: Installed successfully Uspešno nameščeno Uninstalled successfully Uspešno odstranjeno Other version installed: %1 Druga različica nameščena: %1 Uninstall Failed Odstranjevanje neuspešno Name: Ime: Same version installed Ista različica že nameščena UninstallConfirmPage Display related packages Prikaži podobne pakete Collapse Skrij Cancel Prekliči Confirm Potrdi Are you sure you want to uninstall %1? All dependencies will also be removed main Deepin Package Manager Upravitelj paketov Deepin Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_sr.ts000066400000000000000000000232511350761525300253010ustar00rootroot00000000000000 DebInstaller Dark theme Тамна тема Deepin Package Manager Дипин Управник Пакета Bulk Install Групно инсталирање DebListModel Installation failed, please check your network connection Инсталација неуспешна, молимо проверите везу са мрежом Installation failed, please check updates in Control Center Инсталација неуспешна, молимо проверите ажурирања у Контролном Центру Installation failed, insufficient disk space Инсталација неуспешна, недовољно простора на диску Installation Failed Инсталација неуспешна Broken Dependencies: %1 Незадовољене зависности: %1 Unmatched package architecture Неподударна архитектура пакета FileChooseWidget Drag and drop file here Превуци и убаци датотеку овде Select File Изабери датотеку MultipleInstallPage Collapse Скупи Display details Прикажи детаље Install Инсталирај Done Готово Back Назад PackagesListDelegate Installing Инсталирање Installed Инсталирано Failed Неуспешно Same version installed Иста верзија је инсталирана Other version installed: %1 Друга верзија је инсталирана: %1 SingleInstallPage Collapse Скупи Display details Прикажи детаље Install Инсталирај Remove Уклони Reinstall Инсталирај OK У реду Back Назад Done Готово Version: Верзија: Installed successfully Успешно инсталирано Uninstalled successfully Успешно уклоњено Other version installed: %1 Друга верзија је инсталирана: %1 Uninstall Failed Уклањање неуспешно Name: Име: Same version installed Иста верзија је инсталирана UninstallConfirmPage Display related packages Прикажи повезане пакете Collapse Скупи Cancel Откажи Confirm Потврди Are you sure you want to uninstall %1? All dependencies will also be removed Заиста желите да уклоните %1? Све зависности биће уклоњене такође main Deepin Package Manager Дипин Управник Пакета Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Дипин Управник Пакета је програм који помаже корисницима при инсталирању и уклањању локалног софтвера. Подржава групну инсталацију. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_tr.ts000066400000000000000000000216451350761525300253070ustar00rootroot00000000000000 DebInstaller Dark theme Koyu tema Deepin Package Manager Deepin Paket Yöneticisi Bulk Install Toplu Kurulum DebListModel Installation failed, please check your network connection Kurulum tamamlanamadı, lütfen ağ bağlantınızı denetleyin Installation failed, please check updates in Control Center Kurulum tamamlanamadı, lütfen Kontrol Merkezinden güncellemeleri denetleyin Installation failed, insufficient disk space Kurulum tamamlanamadı, disk alanı yetersiz Installation Failed Kurulum tamamlanamadı Broken Dependencies: %1 Kopuk Bağımlılıklar: %1 Unmatched package architecture Paket mimarisi uyumsuz FileChooseWidget Drag and drop file here Dosyayı sürükleyip buraya bırakın Select File Dosya Seç MultipleInstallPage Collapse Daralt Display details Ayrıntıları görüntüle Install Kur Done Bitti Back Geri PackagesListDelegate Installing Kuruluyor Installed Kuruldu Failed Başarısız Same version installed Aynı sürüm kurulu Other version installed: %1 Başka bir sürüm kurulmuş: %1 SingleInstallPage Collapse Daralt Display details Ayrıntıları görüntüle Install Kur Remove Kaldır Reinstall Yeniden kur OK Tamam Back Geri Done Bitti Version: Sürüm: Installed successfully Kuruldu Uninstalled successfully Kaldırıldı Other version installed: %1 Başka bir sürüm kurulmuş: %1 Uninstall Failed Kaldırılamadı Name: Ad: Same version installed Aynı sürüm kurulu UninstallConfirmPage Display related packages İlgili paketleri görüntüle Collapse Daralt Cancel İptal Confirm Onayla Are you sure you want to uninstall %1? All dependencies will also be removed %1 uygulamasını kaldırmak istediğinize emin misiniz? Tüm bağımlılıklar da kaldırılacak main Deepin Package Manager Deepin Paket Yöneticisi Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Deepin Paket Yöneticisi, kullanıcıların yerel uygulama paketlerini kurup kaldırmasını sağlayan ve toplu kurulum özelliği olan bir uygulamadır. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_uk.ts000066400000000000000000000234161350761525300252770ustar00rootroot00000000000000 DebInstaller Dark theme Темна тема Deepin Package Manager Менеджер пакунків Deepin Bulk Install Масова інсталяція DebListModel Installation failed, please check your network connection Не вдалося встановити, перевірте підключення до мережі Installation failed, please check updates in Control Center Не вдалося встановити, перевірте оновлення в Центрі керування Installation failed, insufficient disk space Помилка встановлення, недостатньо місця на диску Installation Failed Не вдалося встановити Broken Dependencies: %1 Поламані залежності: %1 Unmatched package architecture Неперевершена архітектура пакету FileChooseWidget Drag and drop file here Перетягніть файл сюди Select File Вибрати Файл MultipleInstallPage Collapse Згорнути Display details Покзати деталі Install Встановити Done Завершити Back Назад PackagesListDelegate Installing Встановлення Installed Встановлено Failed Помилка Same version installed Одна і та сама версія встановлена Other version installed: %1 Інша версія встановлена: %1 SingleInstallPage Collapse Згорнути Display details Покзати деталі Install Встановити Remove Видалити Reinstall Перевстановити OK Гаразд Back Назад Done Завершити Version: Версія: Installed successfully Встановлено успішно Uninstalled successfully Видалено успішно Other version installed: %1 Інша версія встановлена: %1 Uninstall Failed Не вдалося видалити  Name: Ім'я: Same version installed Одна і та сама версія встановлена UninstallConfirmPage Display related packages Покзати пов'язані пакети Collapse Згорнути Cancel Скасувати Confirm Підтвердити Are you sure you want to uninstall %1? All dependencies will also be removed Ви впевнені що хочете видалити %1? Всі залежності також будуть видалені main Deepin Package Manager Менеджер пакунків Deepin Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Засіб керування пакунками Deepin використовується для полегшення встановлення і вилучення локальних пакунків користувачем. Передбачено підтримку пакетного встановлення. deepin-deb-installer-5.0.0/translations/deepin-deb-installer_zh_CN.ts000066400000000000000000000213541350761525300256600ustar00rootroot00000000000000 DebInstaller Dark theme 深色主题 Deepin Package Manager 深度软件包管理器 Bulk Install 批量安装 DebListModel Installation failed, please check your network connection 安装失败,请检查您的网络连接 Installation failed, please check updates in Control Center 安装失败,请在控制中心检查更新 Installation failed, insufficient disk space 安装失败,磁盘空间不足 Installation Failed 安装失败 Broken Dependencies: %1 依赖关系不满足:%1 Unmatched package architecture 软件包架构不匹配 FileChooseWidget Drag and drop file here 拖拽软件包到此 Select File 选择文件 MultipleInstallPage Collapse 收起 Display details 显示详细信息 Install 安装 Done 完成 Back 返回 PackagesListDelegate Installing 正在安装 Installed 已安装 Failed 安装失败 Same version installed 已安装相同版本 Other version installed: %1 已安装其他版本:%1 SingleInstallPage Collapse 收起 Display details 显示详细信息 Install 安装 Remove 卸载 Reinstall 重新安装 OK 确定 Back 返回 Done 完成 Version: 版本: Installed successfully 安装成功 Uninstalled successfully 卸载成功 Other version installed: %1 已安装其他版本:%1 Uninstall Failed 卸载失败 Name: 名称: Same version installed 已安装相同版本 UninstallConfirmPage Display related packages 显示相关软件包 Collapse 收起 Cancel 取消 Confirm 确认卸载 Are you sure you want to uninstall %1? All dependencies will also be removed 您确定要卸载%1 吗? 所有依赖也会被一起移除 main Deepin Package Manager 深度软件包管理器 Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. 深度软件包管理器用于帮助用户安装和卸载本地软件包,支持批量安装。 deepin-deb-installer-5.0.0/translations/deepin-deb-installer_zh_TW.ts000066400000000000000000000213621350761525300257110ustar00rootroot00000000000000 DebInstaller Dark theme 暗色主題 Deepin Package Manager Deepin 軟體包管理器 Bulk Install 批次安裝 DebListModel Installation failed, please check your network connection 安裝失敗,請檢查網路連線 Installation failed, please check updates in Control Center 安裝失敗,請於控制中心檢查更新 Installation failed, insufficient disk space 安裝失敗,磁碟機空間不足 Installation Failed 安裝失敗 Broken Dependencies: %1 缺少依賴軟體:%1 Unmatched package architecture 軟體套件結構不符合規範 FileChooseWidget Drag and drop file here 拖曳檔案到此 Select File 選擇檔案 MultipleInstallPage Collapse 隱藏 Display details 顯示詳細資訊 Install 安裝 Done 完成 Back 返回 PackagesListDelegate Installing 正在安裝 Installed 已安裝 Failed 安裝失敗 Same version installed 已安裝相同版本 Other version installed: %1 已安裝其他版本:%1 SingleInstallPage Collapse 隱藏 Display details 顯示詳細資訊 Install 安裝 Remove 移除 Reinstall 重裝 OK 確定 Back 返回 Done 完成 Version: 版本: Installed successfully 安裝成功 Uninstalled successfully 解除安裝成功 Other version installed: %1 已安裝其他版本:%1 Uninstall Failed 解除安裝失敗 Name: 名稱: Same version installed 已安裝相同版本 UninstallConfirmPage Display related packages 顯示依賴的軟體套件 Collapse 隱藏細節 Cancel 取消 Confirm 確定 Are you sure you want to uninstall %1? All dependencies will also be removed 確定解除安裝 %1? 也會移除所有依賴 main Deepin Package Manager Deepin 軟體包管理器 Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. Deepin 軟體包管理器用來協助使用者安裝及移除本機軟體包,支援批次安裝。 deepin-deb-installer-5.0.0/translations/desktop/000077500000000000000000000000001350761525300217045ustar00rootroot00000000000000deepin-deb-installer-5.0.0/translations/desktop/desktop.ts000066400000000000000000000011521350761525300237240ustar00rootroot00000000000000 desktopDeepin Package ManagerDeepin Package Manager is used to help users install and remove local package, supports bulk install.Package Manager deepin-deb-installer-5.0.0/translations/desktop/desktop_ast.ts000066400000000000000000000012041350761525300245710ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin Package ManagerDeepin Package Manager is used to help users install and remove local package, supports bulk install.Package ManagerXestor de paquetesdeepin-deb-installer-5.0.0/translations/desktop/desktop_bg.ts000066400000000000000000000016441350761525300244020ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin Мениджър на пакетиDeepin Package Manager is used to help users install and remove local package, supports bulk install.Deepin Мениджър на пакети се използва, за да помогне на потребителите да инсталират и премахват локален пакет, поддръжка на групово инсталиране.Package ManagerМениджър на пакетиdeepin-deb-installer-5.0.0/translations/desktop/desktop_ca.ts000066400000000000000000000014161350761525300243720ustar00rootroot00000000000000desktopDeepin Package ManagerGestor de paquets del DeepinDeepin Package Manager is used to help users install and remove local package, supports bulk install.El Gestor de paquets del Deepin s'usa per ajudar els usuaris a instal·lar i eliminar paquets locals. Admet la instal·lació massiva.Package ManagerGestor de paquetsdeepin-deb-installer-5.0.0/translations/desktop/desktop_cs.ts000066400000000000000000000013751350761525300244200ustar00rootroot00000000000000desktopDeepin Package ManagerSprávce balíčkůDeepin Package Manager is used to help users install and remove local package, supports bulk install.Správce balíčků se používá k pomoci uživatelům instalovat a odebírat místní balíčky, podporuje hromadnou instalaci.Package ManagerSprávce balíčkůdeepin-deb-installer-5.0.0/translations/desktop/desktop_da.ts000066400000000000000000000014051350761525300243710ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin pakkehåndteringDeepin Package Manager is used to help users install and remove local package, supports bulk install.Deepin pakkehåndtering bruges til at hjælpe brugere med at installere og fjerne lokal pakke, med understøttelse af masseinstallation.Package ManagerPakkehåndteringdeepin-deb-installer-5.0.0/translations/desktop/desktop_de.ts000066400000000000000000000014371350761525300244020ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin PaketverwaltungDeepin Package Manager is used to help users install and remove local package, supports bulk install.Die Deepin Paketverwaltung unterstützt Benutzer beim Installieren und Entfernen von Softwarepaketen und unterstützt zudem die Installation via Stapelverarbeitung.Package ManagerPaketverwaltungdeepin-deb-installer-5.0.0/translations/desktop/desktop_en_AU.ts000066400000000000000000000013561350761525300250010ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin Package ManagerDeepin Package Manager is used to help users install and remove local package, supports bulk install.The Deepin Package Manager helps users install and remove local packages. It supports bulk package installation.Package ManagerPackage Managerdeepin-deb-installer-5.0.0/translations/desktop/desktop_es.ts000066400000000000000000000013661350761525300244220ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin Package ManagerDeepin Package Manager is used to help users install and remove local package, supports bulk install.Deepin Package Manager es usada para ayudar a los usuarios a instalar y quitar paquete local, soporta instalación en lote.Package ManagerPackage Managerdeepin-deb-installer-5.0.0/translations/desktop/desktop_es_419.ts000066400000000000000000000014121350761525300250070ustar00rootroot00000000000000desktopDeepin Package ManagerGestor de Paquetes DeepinDeepin Package Manager is used to help users install and remove local package, supports bulk install.El Gestor de Paquetes Deepin se usa para ayudar a los usuarios a instalar y eliminar paquetes locales, admite la instalación masiva.Package ManagerGestor de Paquetesdeepin-deb-installer-5.0.0/translations/desktop/desktop_et.ts000066400000000000000000000013741350761525300244220ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin pakihaldurDeepin Package Manager is used to help users install and remove local package, supports bulk install.Deepin pakihaldur on rakendus, millega kasutajad saavad arvutisse tarkvara paigaldada ja seda sealt eemaldada. Toetab ka hulgipaigaldamist.Package ManagerPakihaldurdeepin-deb-installer-5.0.0/translations/desktop/desktop_fi.ts000066400000000000000000000013461350761525300244070ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin PaketinhallintaDeepin Package Manager is used to help users install and remove local package, supports bulk install.Deepin-paketinhallintaa käytetään auttamaan käyttäjiä asentamaan ja poistamaan paikallisia paketteja.Package ManagerPaketinhallintadeepin-deb-installer-5.0.0/translations/desktop/desktop_fr.ts000066400000000000000000000014571350761525300244230ustar00rootroot00000000000000desktopDeepin Package ManagerGestionnaire de paquets DeepinDeepin Package Manager is used to help users install and remove local package, supports bulk install.Deepin Package Manager est une application pour aider les utilisateurs à gérer les paquets installés, il supporte également l'installation multiple.Package ManagerGestionnaire de paquets Deepindeepin-deb-installer-5.0.0/translations/desktop/desktop_hu.ts000066400000000000000000000011741350761525300244240ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin csomagkezelőDeepin Package Manager is used to help users install and remove local package, supports bulk install.Package ManagerCsomagkezelődeepin-deb-installer-5.0.0/translations/desktop/desktop_id.ts000066400000000000000000000013561350761525300244060ustar00rootroot00000000000000desktopDeepin Package ManagerManajer Paket DeepinDeepin Package Manager is used to help users install and remove local package, supports bulk install.Manajer Paket Deepin digunakan untuk menolong para pengguna install dan menghapus paket lokal, mendukung install massalPackage ManagerManajer Paketdeepin-deb-installer-5.0.0/translations/desktop/desktop_it.ts000066400000000000000000000014571350761525300244300ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin Package ManagerDeepin Package Manager is used to help users install and remove local package, supports bulk install.Deepin Package Manager è utile per installare e rimuovere software in locale, supporta inoltre l'installazione massiva. Localizzazione italiana a cura di Massimo A. Carofano.Package ManagerPackage Managerdeepin-deb-installer-5.0.0/translations/desktop/desktop_ko.ts000066400000000000000000000014131350761525300244150ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin 패키지 관리자Deepin Package Manager is used to help users install and remove local package, supports bulk install.Deepin 패키지 관리자는 사용자가 로컬 패키지를 설치 및 제거하고 일괄 설치를 지원하는데 사용됩니다.Package Manager패키지 관리자deepin-deb-installer-5.0.0/translations/desktop/desktop_lt.ts000066400000000000000000000014201350761525300244210ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin paketų tvarkytuvėDeepin Package Manager is used to help users install and remove local package, supports bulk install.Deepin paketų tvarkytuvė yra naudojama padėti naudotojams įdiegti ir šalinti vietinius paketus, ši programa palaiko masinį įdiegimą.Package ManagerPaketų tvarkytuvėdeepin-deb-installer-5.0.0/translations/desktop/desktop_mn.ts000066400000000000000000000015501350761525300244200ustar00rootroot00000000000000desktopDeepin Package ManagerДеепин Багц ЗохицуулагчDeepin Package Manager is used to help users install and remove local package, supports bulk install.Деепин Багц Зохицуулагч нь хэрэглэгчдэд програм суулгах устгахад туслахаас гадна бүлэг суулгалтыг дэмждэг.Package ManagerБагц Зохицуулагчdeepin-deb-installer-5.0.0/translations/desktop/desktop_ms.ts000066400000000000000000000014211350761525300244220ustar00rootroot00000000000000desktopDeepin Package ManagerPengurus Pakej DeepinDeepin Package Manager is used to help users install and remove local package, supports bulk install.Pengurus Pakej Deepin digunakan digunakan untuk bantu pengguna memasang dan membuang perisian setempat, selain itu ia menyokong pemasangan secara pukal.Package ManagerPengurus Pakejdeepin-deb-installer-5.0.0/translations/desktop/desktop_ne.ts000066400000000000000000000016221350761525300244100ustar00rootroot00000000000000desktopDeepin Package Managerडिपिन प्याकेज प्रबन्धकDeepin Package Manager is used to help users install and remove local package, supports bulk install.डिपिन प्याकेज प्रबन्धक, प्याकेज फाइल स्थापना र स्थापना रद्द गर्न प्रयोग हुन्छ Package Managerप्याकेज प्रबन्धकdeepin-deb-installer-5.0.0/translations/desktop/desktop_nl.ts000066400000000000000000000014251350761525300244200ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin PakketbeheerDeepin Package Manager is used to help users install and remove local package, supports bulk install.Deepin Pakketbeheer is een applicatie die gebruikers helpt bij het installeren en verwijderen van lokale software, zowel één voor één als meerdere tegelijk.Package ManagerPakketbeheerdeepin-deb-installer-5.0.0/translations/desktop/desktop_pa.ts000066400000000000000000000012571350761525300244120ustar00rootroot00000000000000desktopDeepin Package Managerਡੀਪਿਨ ਪੈਕੇਜ ਮੈਨੇਜਰDeepin Package Manager is used to help users install and remove local package, supports bulk install.Package Managerਪੈਕੇਜ ਮੈਨੇਜਰdeepin-deb-installer-5.0.0/translations/desktop/desktop_pl.ts000066400000000000000000000014041350761525300244170ustar00rootroot00000000000000desktopDeepin Package ManagerZarządzanie pakietami DeepinDeepin Package Manager is used to help users install and remove local package, supports bulk install.Zarządzanie pakietami Deepin pomaga użytkownikom instalować i usuwać lokalne pakiety, obsługuje instalację zbiorczą.Package ManagerZarządzanie pakietamideepin-deb-installer-5.0.0/translations/desktop/desktop_pt.ts000066400000000000000000000014231350761525300244300ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin Package ManagerDeepin Package Manager is used to help users install and remove local package, supports bulk install.O Deepin Package Manager é uma aplicação utilizada para ajudar os utilizadores a instalar e remover pacotes locais, suporta instalações em massa.Package ManagerGestor de Pacotesdeepin-deb-installer-5.0.0/translations/desktop/desktop_pt_BR.ts000066400000000000000000000014341350761525300250150ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin Gerenciador de PacotesDeepin Package Manager is used to help users install and remove local package, supports bulk install.O Gerenciador de Pacotes Deepin tem como finalidade ajudar os usuários a instalar e remover pacotes locais, suportando a instalação em massa.Package ManagerGerenciador de Pacotesdeepin-deb-installer-5.0.0/translations/desktop/desktop_ru.ts000066400000000000000000000016431350761525300244370ustar00rootroot00000000000000desktopDeepin Package ManagerМенеджер Пакетов DeepinDeepin Package Manager is used to help users install and remove local package, supports bulk install.Пакетный Менеджер Deepin используется для помощи пользователям в установке и удалении программного обеспечения, с поддержкой массовой установки.Package ManagerМенеджер Пакетовdeepin-deb-installer-5.0.0/translations/desktop/desktop_sk.ts000066400000000000000000000014441350761525300244250ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin Správca balíčkovDeepin Package Manager is used to help users install and remove local package, supports bulk install.Aplikácia Deepin Správca balíčkov slúži na pomoc používateľom pri inštalácii a odstraňovaní lokálnych balíčkov, podporuje hromadnú inštaláciu.Package ManagerSprávca balíčkovdeepin-deb-installer-5.0.0/translations/desktop/desktop_sq.ts000066400000000000000000000014321350761525300244300ustar00rootroot00000000000000desktopDeepin Package ManagerPërgjegjësi Deepin i PaketaveDeepin Package Manager is used to help users install and remove local package, supports bulk install.Përgjegjësi Deepin i Paketave përdoret për t’i ndihmuar përdoruesit të instalojnë dhe heqin paketa vendore. Mbulon instalime në masë.Package ManagerPërgjegjës Paketashdeepin-deb-installer-5.0.0/translations/desktop/desktop_sr.ts000066400000000000000000000016171350761525300244360ustar00rootroot00000000000000desktopDeepin Package ManagerДипин Управник ПакетаDeepin Package Manager is used to help users install and remove local package, supports bulk install.Дипин Управник Пакета је програм који помаже корисницима при инсталирању и уклањању локалног софтвера. Подржава групну инсталацију.Package ManagerУправник Пакетаdeepin-deb-installer-5.0.0/translations/desktop/desktop_tr.ts000066400000000000000000000014211350761525300244300ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin Paket YöneticisiDeepin Package Manager is used to help users install and remove local package, supports bulk install.Deepin Paket Yöneticisi, kullanıcıların yerel uygulamaları kurup kaldırmasını sağlayan ve toplu kurulum özelliği olan bir uygulamadır.Package ManagerPaket Yöneticisideepin-deb-installer-5.0.0/translations/desktop/desktop_uk.ts000066400000000000000000000017371350761525300244340ustar00rootroot00000000000000desktopDeepin Package ManagerКерування пакунками DeepinDeepin Package Manager is used to help users install and remove local package, supports bulk install.Засіб керування пакунками Deepin використовується для полегшення встановлення і вилучення локальних пакунків користувачем. Передбачено підтримку пакетного встановлення.Package ManagerКерування пакункамиdeepin-deb-installer-5.0.0/translations/desktop/desktop_zh_CN.ts000066400000000000000000000013401350761525300250040ustar00rootroot00000000000000desktopDeepin Package Manager深度软件包管理器Deepin Package Manager is used to help users install and remove local package, supports bulk install.深度软件包管理器用于帮助用户安装和卸载本地软件,支持批量安装。Package Manager软件包管理器deepin-deb-installer-5.0.0/translations/desktop/desktop_zh_TW.ts000066400000000000000000000013501350761525300250370ustar00rootroot00000000000000desktopDeepin Package ManagerDeepin 軟體包管理器Deepin Package Manager is used to help users install and remove local package, supports bulk install.Deepin 軟體包管理器用來幫助使用者安裝和移除本機軟體包。支援批次安裝。Package Manager軟體包管理器deepin-deb-installer-5.0.0/uninstallconfirmpage.cpp000066400000000000000000000105651350761525300224510ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #include "uninstallconfirmpage.h" #include #include UninstallConfirmPage::UninstallConfirmPage(QWidget *parent) : QWidget(parent), m_icon(new QLabel), m_tips(new QLabel), m_infoWrapperWidget(new QWidget), m_infoControl(new InfoControlButton(tr("Display related packages"), tr("Collapse"))), m_dependsInfomation(new QTextEdit), m_cancelBtn(new QPushButton), m_confirmBtn(new QPushButton) { const QIcon icon = QIcon::fromTheme("application-vnd.debian.binary-package", QIcon::fromTheme("debian-swirl")); m_icon->setFixedSize(64, 64); m_icon->setPixmap(icon.pixmap(64, 64)); m_tips->setAlignment(Qt::AlignCenter); m_tips->setStyleSheet("QLabel {" "padding: 20px 0 0 0;" "}"); m_cancelBtn->setText(tr("Cancel")); m_cancelBtn->setFixedSize(120, 36); m_confirmBtn->setText(tr("Confirm")); m_confirmBtn->setFixedSize(120, 36); m_dependsInfomation->setReadOnly(true); m_dependsInfomation->setVisible(false); m_dependsInfomation->setAcceptDrops(false); m_dependsInfomation->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_dependsInfomation->setStyleSheet("QTextEdit {" "color: #609dc9;" "border: 1px solid #eee;" "margin: 0 0 20px 0;" "}"); QHBoxLayout *btnsLayout = new QHBoxLayout; btnsLayout->addStretch(); btnsLayout->addWidget(m_cancelBtn); btnsLayout->addWidget(m_confirmBtn); btnsLayout->addStretch(); btnsLayout->setSpacing(30); btnsLayout->setMargin(0); QVBoxLayout *centerWrapperLayout = new QVBoxLayout; centerWrapperLayout->addStretch(); centerWrapperLayout->addWidget(m_icon); centerWrapperLayout->addSpacing(15); centerWrapperLayout->setAlignment(m_icon, Qt::AlignHCenter); centerWrapperLayout->addWidget(m_tips); centerWrapperLayout->addStretch(); centerWrapperLayout->setSpacing(0); centerWrapperLayout->setMargin(0); m_infoWrapperWidget->setLayout(centerWrapperLayout); QVBoxLayout *centralLayout = new QVBoxLayout; centralLayout->addWidget(m_infoWrapperWidget); centralLayout->addWidget(m_infoControl); centralLayout->setAlignment(m_infoControl, Qt::AlignHCenter); centralLayout->addSpacing(15); centralLayout->addWidget(m_dependsInfomation); centralLayout->addLayout(btnsLayout); centralLayout->setSpacing(0); centralLayout->setContentsMargins(20, 0, 20, 30); setLayout(centralLayout); connect(m_cancelBtn, &QPushButton::clicked, this, &UninstallConfirmPage::canceled); connect(m_confirmBtn, &QPushButton::clicked, this, &UninstallConfirmPage::accepted); connect(m_infoControl, &InfoControlButton::expand, this, &UninstallConfirmPage::showDetail); connect(m_infoControl, &InfoControlButton::shrink, this, &UninstallConfirmPage::hideDetail); } void UninstallConfirmPage::setPackage(const QString &name) { QString tips(tr("Are you sure you want to uninstall %1?\nAll dependencies will also be removed")); m_tips->setText(tips.arg(name)); } void UninstallConfirmPage::setRequiredList(const QStringList &requiredList) { m_infoControl->setVisible(!requiredList.isEmpty()); m_dependsInfomation->setText(requiredList.join(", ")); } void UninstallConfirmPage::showDetail() { m_infoWrapperWidget->setVisible(false); m_dependsInfomation->setVisible(true); } void UninstallConfirmPage::hideDetail() { m_infoWrapperWidget->setVisible(true); m_dependsInfomation->setVisible(false); } deepin-deb-installer-5.0.0/uninstallconfirmpage.h000066400000000000000000000030171350761525300221100ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #ifndef UNINSTALLCONFIRMPAGE_H #define UNINSTALLCONFIRMPAGE_H #include "infocontrolbutton.h" #include #include #include #include class UninstallConfirmPage : public QWidget { Q_OBJECT public: explicit UninstallConfirmPage(QWidget *parent = 0); void setPackage(const QString &name); void setRequiredList(const QStringList &requiredList); signals: void accepted() const; void canceled() const; private slots: void showDetail(); void hideDetail(); private: QLabel *m_icon; QLabel *m_tips; QWidget *m_infoWrapperWidget; InfoControlButton *m_infoControl; QTextEdit *m_dependsInfomation; QPushButton *m_cancelBtn; QPushButton *m_confirmBtn; }; #endif // UNINSTALLCONFIRMPAGE_H deepin-deb-installer-5.0.0/utils.h000066400000000000000000000011061350761525300170210ustar00rootroot00000000000000#include #include #include namespace Utils { static QPixmap renderSVG(const QString &path, const QSize &size) { QImageReader reader; QPixmap pixmap; reader.setFileName(path); if (reader.canRead()) { const qreal ratio = qApp->devicePixelRatio(); reader.setScaledSize(size * ratio); pixmap = QPixmap::fromImage(reader.read()); pixmap.setDevicePixelRatio(ratio); } else { pixmap.load(path); } return pixmap; } } deepin-deb-installer-5.0.0/widgets/000077500000000000000000000000001350761525300171605ustar00rootroot00000000000000deepin-deb-installer-5.0.0/widgets/bluebutton.cpp000066400000000000000000000027571350761525300220620ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #include "bluebutton.h" BlueButton::BlueButton(QWidget *parent) : DSuggestButton(parent) { setFixedSize(120, 36); //setStyleSheet("BlueButton {" // "color: #2ca7f8;" // "border: 1px solid #2ca7f8;" // "border-radius: 4px;" // "}" // "" // "BlueButton:hover {" // "color: white;" // "background-color: qlineargradient(x1:0 y1:0, x2:0 y2:1, stop:0 #8ccfff, stop:1 #4bb8ff);" // "}" // "" // "BlueButton:pressed {" // "background-color: qlineargradient(x1:0 y1:0, x2:0 y2:1, stop:0 #0b8cff, stop:1 #0aa1ff);" // "}"); } deepin-deb-installer-5.0.0/widgets/bluebutton.h000066400000000000000000000017751350761525300215260ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #ifndef BLUEBUTTON_H #define BLUEBUTTON_H #include #include DWIDGET_USE_NAMESPACE class BlueButton : public DSuggestButton { Q_OBJECT public: explicit BlueButton(QWidget *parent = 0); }; #endif // BLUEBUTTON_H deepin-deb-installer-5.0.0/widgets/graybutton.cpp000066400000000000000000000027711350761525300220710ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #include "graybutton.h" GrayButton::GrayButton(QWidget *parent) : DSuggestButton(parent) { setFixedSize(120, 36); //setStyleSheet("GrayButton {" // "color: #303030;" // "border: 1px solid rgba(0, 0, 0, .1);" // "border-radius: 4px;" // "}" // "" // "GrayButton:hover {" // "color: white;" // "background-color: qlineargradient(x1:0 y1:0, x2:0 y2:1, stop:0 #8ccfff, stop:1 #4bb8ff);" // "}" // "" // "GrayButton:pressed {" // "background-color: qlineargradient(x1:0 y1:0, x2:0 y2:1, stop:0 #0b8cff, stop:1 #0aa1ff);" // "}"); } deepin-deb-installer-5.0.0/widgets/graybutton.h000066400000000000000000000017751350761525300215410ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #ifndef GRAYBUTTON_H #define GRAYBUTTON_H #include #include DWIDGET_USE_NAMESPACE class GrayButton : public DSuggestButton { Q_OBJECT public: explicit GrayButton(QWidget *parent = 0); }; #endif // GRAYBUTTON_H deepin-deb-installer-5.0.0/workerprogress.cpp000066400000000000000000000022641350761525300213200ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #include "workerprogress.h" WorkerProgress::WorkerProgress(QWidget *parent) : QProgressBar(parent) { setMinimum(0); setMaximum(100); setFixedHeight(8); setFixedWidth(240); setTextVisible(false); setStyleSheet("QProgressBar {" "border: 1px solid rgba(0, 0, 0, .03);" "border-radius: 4px;" "background-color: rgba(0, 0, 0, .05);" "}"); } deepin-deb-installer-5.0.0/workerprogress.h000066400000000000000000000017371350761525300207710ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: sbw * * Maintainer: sbw * * 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 3 of the License, or * 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, see . */ #ifndef WORKERPROGRESS_H #define WORKERPROGRESS_H #include class WorkerProgress : public QProgressBar { Q_OBJECT public: explicit WorkerProgress(QWidget *parent = 0); }; #endif // WORKERPROGRESS_H