diff -Nru deepin-deb-installer-5.0.0/assets/com.deepin.pkexec.aptInstallDepend.policy deepin-deb-installer-5.7.0.17/assets/com.deepin.pkexec.aptInstallDepend.policy --- deepin-deb-installer-5.0.0/assets/com.deepin.pkexec.aptInstallDepend.policy 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/com.deepin.pkexec.aptInstallDepend.policy 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,23 @@ + + + + LinuxDeepin + https://www.deepin.com/ + + authentication + 认证 + Authentication is required to continue the configuration + 继续配置,需要授权 + + + no + no + auth_admin + + /usr/bin/deepin-deb-installer-dependsInstall + true + + + diff -Nru deepin-deb-installer-5.0.0/assets/com.deepin.pkexec.aptInstallDepend.policy.tmp deepin-deb-installer-5.7.0.17/assets/com.deepin.pkexec.aptInstallDepend.policy.tmp --- deepin-deb-installer-5.0.0/assets/com.deepin.pkexec.aptInstallDepend.policy.tmp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/com.deepin.pkexec.aptInstallDepend.policy.tmp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,23 @@ + + + + LinuxDeepin + https://www.deepin.com/ + + authentication + 认证 + Authentication is required to continue the configuration + 继续配置,需要授权 + + + no + no + auth_admin + + /usr/bin/deepin-deb-installer-dependsInstall + true + + + diff -Nru deepin-deb-installer-5.0.0/assets/deepin-deb-installer.desktop deepin-deb-installer-5.7.0.17/assets/deepin-deb-installer.desktop --- deepin-deb-installer-5.0.0/assets/deepin-deb-installer.desktop 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/deepin-deb-installer.desktop 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,131 @@ +[Desktop Entry] +Categories=System; +Comment=Package Installer helps users install and remove local packages, and supports bulk installation. +Exec=deepin-deb-installer %F +GenericName=Package Installer +Icon=deepin-deb-installer +MimeType=application/vnd.debian.binary-package;application/x-deb; +Name=Package Installer +StartupNotify=false +Terminal=false +Type=Application +X-Deepin-Vendor=deepin + +# Translations: +# Do not manually modify! +Comment[ar]=مثبت الحزم: يساعد المستخدمين على تثبيت وإزالة الحزم المحلية، ويدعم أيضاً الثبيت الجماعي للحزم. +Comment[bg]=Deepin Мениджър на пакети се използва, за да помогне на потребителите да инсталират и премахват локален пакет, поддръжка на групово инсталиране. +Comment[br]=Ar stalier pakadoù a sikour an implijaderien da staliañ ha da zilemel ar pakadoù lec'hel, hag e kemer e kont ar staliadur a-vloc'had. +Comment[ca]=L'Instal·lador de paquets ajuda els usuaris a instal·lar i eliminar paquets locals i admet la instal·lació massiva. +Comment[cs]=Instalátor balíčků slouží uživateli jako pomůcka pro instalaci a odebírání místních balíčků (tj. nepocházejících z repozitářů). Podporuje také hromadnou instalaci. +Comment[da]=Pakkeinstallationsprogram hjælpe brugere med at installere og fjerne lokale pakker, med understøttelse af masseinstallation. +Comment[de]=Das Paket-Installationsprogramm hilft Benutzern bei der Installation und Entfernung lokaler Pakete und unterstützt die Masseninstallation. +Comment[en_AU]=The Deepin Package Installer helps users install and remove local packages. It supports bulk package installation. +Comment[es]=Instalador de paquetes de Deepin ayuda a instalar y eliminar paquetes locales, y admite instalación en masa. +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]=Ohjelmiston asentaja auttaa käyttäjiä asentamaan ja poistamaan ohjelmia. +Comment[fr]=Le programme d'installation de paquets aide les utilisateurs à installer, supprimer des paquets locaux et à prend en charge l'installation en bloc. +Comment[gl_ES]=O instalador do paquete axuda aos usuarios a instalar e eliminar paquetes locais e admite a instalación masiva. +Comment[hi_IN]=पैकेज इंस्टॉलर द्वारा उपयोक्ता लोकल पैकेज इंस्टॉल व हटा सकते हैं, यह सामूहिक इंस्टॉल की सुविधा भी प्रदान करता है। +Comment[hu]=A Csomagtelepítő segít a felhasználóknak különféle csomagok telepítésében és eltávolításában, valamint támogatja a kötegelt telepítést. +Comment[id]=Manajer Paket Deepin digunakan untuk menolong para pengguna install dan menghapus paket lokal, mendukung install massal +Comment[it]=Il Gestore pacchetti è utile per installare e rimuovere software in locale, supporta inoltre l'installazione massiva. Localizzazione italiana a cura di Massimo A. Carofano. +Comment[ko]=패키지 설치 관리자는 사용자가 로컬 패키지를 설치하고, 제거할 수 있도록 지원하고 일괄 설치를 지원합니다. +Comment[lt]=Paketų diegimo programa padeda naudotojams įdiegti ir šalinti vietinius paketus bei palaiko masinį įdiegimą. +Comment[mn]=Деепин Багц Зохицуулагч нь хэрэглэгчдэд програм суулгах устгахад туслахаас гадна бүлэг суулгалтыг дэмждэг. +Comment[ms]=Pemasang pakej dapat membantu pengguna dan membuang pakej-pakej setempat, dan juga menyokong pemasangan pukal. +Comment[ne]=प्याकेज स्थापनाकर्ताले प्रयोगकर्ताहरूलाई स्थानीय प्याकेजहरू स्थापना र हटाउन मद्दत गर्दछ, र बल्क स्थापनालाई समर्थन गर्दछ। +Comment[nl]=Pakketinstallatie is een programma dat gebruikers helpt bij het installeren van lokale software. +Comment[pl]=Instalator pakietów pomaga użytkownikom instalować i usuwać pakiety lokalne oraz obsługuje instalację zbiorczą. +Comment[pt]=O Instalador de Pacotes ajuda os utilizadores a instalar e remover pacotes locais e suporta a instalação em massa. +Comment[pt_BR]=O Instalador de Pacotes ajuda os usuários a instalar e remover pacotes locais e suporta a instalação em massa. +Comment[ru]=Установщик Пакетов используется для помощи пользователям в установке и удалении программного обеспечения и поддерживает массовую установку. +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]=Instaluesi i Paketave i ndihmon përdoruesit të instalojnë dhe heqin paketa vendore, dhe mbulon instalime në masë. +Comment[sr]=Инсалатер пакета помаже корисницима да инсталирају и уклањају локалне пакете. Подржава групну инсталацију. +Comment[tr]=Paket Kurucu, kullanıcıların yerel paketleri kurmasına ve kaldırmasına yardımcı olur ve toplu kurulumu destekler. +Comment[ug]=ئورالما ئورناتقۇچ ئىشلەتكۈچىلەرنىڭ يەرلىك ئورالمىلارنى ئورنىتىشى ۋە ئۆچۈرۈشىگە ياردەم بېرىدۇ ھەمدە توپ قاچىلاشنى قوللايدۇ. +Comment[uk]=За допомогою засобу встановлення пакунків користувачі можуть встановлювати і вилучати локальні пакунки. Передбачено пакетне встановлення. +Comment[zh_CN]=软件包安装器用于帮助用户安装和卸载本地软件,支持批量安装。 +Comment[zh_HK]=軟件包安裝器用於幫助用戶安裝和卸載本地軟件,支持批量安裝。 +Comment[zh_TW]=軟體包安裝器用來幫助使用者安裝和移除本機軟體包。支援批次安裝。 +GenericName[ar]=مثبّت الحزم +GenericName[ast]=Xestor de paquetes +GenericName[bg]=Мениджър на пакети +GenericName[br]=Stalier pakadoù +GenericName[ca]=Instal·lador de paquets +GenericName[cs]=Instalátor balíčků +GenericName[da]=Pakkeinstallationsprogram +GenericName[de]=Paket-Installationsprogramm +GenericName[en_AU]=Package Installer +GenericName[es]=Instalador de paquetes +GenericName[es_419]=Gestor de Paquetes +GenericName[et]=Pakihaldur +GenericName[fi]=Ohjelmiston asentaja +GenericName[fr]=Installateur de paquets +GenericName[gl_ES]=Instalador do paquete +GenericName[hi_IN]=पैकेज इंस्टॉलर +GenericName[hu]=Csomagtelepítő +GenericName[id]=Manajer Paket +GenericName[it]=Gestore pacchetti +GenericName[ko]=패키지 관리자 +GenericName[lt]=Paketų diegimo programa +GenericName[mn]=Багц Зохицуулагч +GenericName[ms]=Pemasang Pakej +GenericName[ne]=प्याकेज स्थापनाकर्ता +GenericName[nl]=Pakketinstallatie +GenericName[pa]=ਪੈਕੇਜ ਮੈਨੇਜਰ +GenericName[pl]=Instalator pakietów +GenericName[pt]=Instalador de Pacotes +GenericName[pt_BR]=Instalador de Pacotes +GenericName[ru]=Установщик Пакетов +GenericName[sk]=Správca balíčkov +GenericName[sq]=Instalues Paketash +GenericName[sr]=Инсталатер Пакета +GenericName[tr]=Paket Kurucu +GenericName[ug]=بوغچا قاچىلىغۇچ +GenericName[uk]=Встановлювач пакунків +GenericName[zh_CN]=软件包安装器 +GenericName[zh_HK]=軟件包安裝器 +GenericName[zh_TW]=軟體包安裝器 +Name[ar]=مثبّت الحزم +Name[ast]=Xestor de paquetes +Name[bg]=Мениджър на пакети +Name[br]=Stalier pakadoù Deepin +Name[ca]=Instal·lador de paquets del Deepin +Name[cs]=Deepin instalátor balíčků +Name[da]=Pakkeinstallationsprogram +Name[de]=Paket-Installationsprogramm +Name[en_AU]=Package Installer +Name[es]=Instalador de paquetes +Name[es_419]=Gestor de Paquetes +Name[et]=Pakihaldur +Name[fi]=Deepin pakettien asentaja +Name[fr]=Programme d'installation de paquets Deepin +Name[gl_ES]=Instalador do paquete de Deepin +Name[hi_IN]=दीपिन पैकेज इंस्टॉलर +Name[hu]=Deepin Csomagtelepítő +Name[id]=Manajer Paket +Name[it]=Gestore pacchetti di Deepin +Name[ko]=Deepin 패키지 설치도구 +Name[lt]=Paketų diegimo programa +Name[mn]=Багц Зохицуулагч +Name[ms]=Pemasang Pakej +Name[ne]=प्याकेज स्थापनाकर्ता +Name[nl]=Deepin Pakketinstallatie +Name[pa]=ਪੈਕੇਜ ਮੈਨੇਜਰ +Name[pl]=Instalator pakietu Deepin +Name[pt]=Instalador de Pacotes Deepin +Name[pt_BR]=Deepin Instalador de Pacotes +Name[ru]=Установщик Пакетов +Name[sk]=Správca balíčkov +Name[sq]=Instalues Paketash Deepin +Name[sr]=Дипин Инсталатер Пакета +Name[tr]=Deepin Paket Kurucu +Name[ug]=بوغچا قاچىلىغۇچ +Name[uk]=Засіб встановлення пакунків Deepin +Name[zh_CN]=深度软件包安装器 +Name[zh_HK]=Deepin 軟件包安裝器 +Name[zh_TW]=Deepin 軟體包安裝器 + diff -Nru deepin-deb-installer-5.0.0/assets/environments.h.in deepin-deb-installer-5.7.0.17/assets/environments.h.in --- deepin-deb-installer-5.0.0/assets/environments.h.in 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/environments.h.in 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,6 @@ +#ifndef __ENVIRONMENTS_H_ +#define __ENVIRONMENTS_H_ + +#define VERSION "@VERSION@" + +#endif // __ENVIRONMENTS_H_ Binary files /tmp/tmpLFGoEq/vC2SzNlhah/deepin-deb-installer-5.0.0/assets/font/SourceHanSansCN-Medium.ttf and /tmp/tmpLFGoEq/rNgOpA4Dhf/deepin-deb-installer-5.7.0.17/assets/font/SourceHanSansCN-Medium.ttf differ Binary files /tmp/tmpLFGoEq/vC2SzNlhah/deepin-deb-installer-5.0.0/assets/font/SourceHanSansCN-Normal.ttf and /tmp/tmpLFGoEq/rNgOpA4Dhf/deepin-deb-installer-5.7.0.17/assets/font/SourceHanSansCN-Normal.ttf differ diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/deepin-deb-installer.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/deepin-deb-installer.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/deepin-deb-installer.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/deepin-deb-installer.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_active_tab_close_hover_16px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_active_tab_close_hover_16px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_active_tab_close_hover_16px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_active_tab_close_hover_16px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,25 @@ + + + + active_tab_close_hover + Created with Sketch. + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_active_tab_close_normal_16px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_active_tab_close_normal_16px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_active_tab_close_normal_16px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_active_tab_close_normal_16px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,27 @@ + + + + active_tab_close_normal + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_active_tab_close_press_16px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_active_tab_close_press_16px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_active_tab_close_press_16px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_active_tab_close_press_16px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,25 @@ + + + + active_tab_close_press + Created with Sketch. + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_arrow_down_25px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_arrow_down_25px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_arrow_down_25px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_arrow_down_25px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,17 @@ + + + + icon_packup + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_arrow_up_25px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_arrow_up_25px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_arrow_up_25px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_arrow_up_25px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,26 @@ + + + + icon_spread + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_icon_160px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_icon_160px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_icon_160px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_icon_160px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,91 @@ + + + + icon_install + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_icon_install_160px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_icon_install_160px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_icon_install_160px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_icon_install_160px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,22 @@ + + + + icon_install_dark + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_ok_16px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_ok_16px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_ok_16px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_ok_16px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,33 @@ + + + + ok + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_popwarning_32px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_popwarning_32px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_popwarning_32px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_popwarning_32px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,32 @@ + + + + warning + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_split_line_214px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_split_line_214px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_split_line_214px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_split_line_214px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,3 @@ + + + diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_warning_16px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_warning_16px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/dark/icons/di_warning_16px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/dark/icons/di_warning_16px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,33 @@ + + + + warning 2 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/deepin-deb-installer.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/deepin-deb-installer.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/deepin-deb-installer.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/deepin-deb-installer.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_active_tab_close_hover_16px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_active_tab_close_hover_16px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_active_tab_close_hover_16px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_active_tab_close_hover_16px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,25 @@ + + + + active_tab_close_hover + Created with Sketch. + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_active_tab_close_normal_16px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_active_tab_close_normal_16px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_active_tab_close_normal_16px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_active_tab_close_normal_16px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,27 @@ + + + + active_tab_close_normal + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_active_tab_close_press_16px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_active_tab_close_press_16px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_active_tab_close_press_16px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_active_tab_close_press_16px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,25 @@ + + + + active_tab_close_press + Created with Sketch. + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_arrow_down_25px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_arrow_down_25px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_arrow_down_25px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_arrow_down_25px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,24 @@ + + + + icon_packup + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_arrow_up_25px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_arrow_up_25px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_arrow_up_25px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_arrow_up_25px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,26 @@ + + + + icon_spread + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_icon_160px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_icon_160px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_icon_160px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_icon_160px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,91 @@ + + + + icon_install + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_icon_install_160px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_icon_install_160px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_icon_install_160px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_icon_install_160px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,22 @@ + + + + icon_install + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_ok_16px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_ok_16px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_ok_16px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_ok_16px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,33 @@ + + + + ok + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_popwarning_32px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_popwarning_32px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_popwarning_32px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_popwarning_32px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,32 @@ + + + + warning + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_split_line_220px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_split_line_220px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_split_line_220px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_split_line_220px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + + Line + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_warning_16px.svg deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_warning_16px.svg --- deepin-deb-installer-5.0.0/assets/icons/deepin/builtin/light/icons/di_warning_16px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/icons/deepin/builtin/light/icons/di_warning_16px.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,33 @@ + + + + warning 2 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/images/active_tab_close_hover.svg deepin-deb-installer-5.7.0.17/assets/images/active_tab_close_hover.svg --- deepin-deb-installer-5.0.0/assets/images/active_tab_close_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/images/active_tab_close_hover.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,25 @@ + + + + active_tab_close_hover + Created with Sketch. + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/images/active_tab_close_normal.svg deepin-deb-installer-5.7.0.17/assets/images/active_tab_close_normal.svg --- deepin-deb-installer-5.0.0/assets/images/active_tab_close_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/images/active_tab_close_normal.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,27 @@ + + + + active_tab_close_normal + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/images/active_tab_close_press.svg deepin-deb-installer-5.7.0.17/assets/images/active_tab_close_press.svg --- deepin-deb-installer-5.0.0/assets/images/active_tab_close_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/images/active_tab_close_press.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,25 @@ + + + + active_tab_close_press + Created with Sketch. + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/images/arrow_down_dark.svg deepin-deb-installer-5.7.0.17/assets/images/arrow_down_dark.svg --- deepin-deb-installer-5.0.0/assets/images/arrow_down_dark.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/images/arrow_down_dark.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,17 @@ + + + + icon_packup + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/images/arrow_down.svg deepin-deb-installer-5.7.0.17/assets/images/arrow_down.svg --- deepin-deb-installer-5.0.0/assets/images/arrow_down.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/images/arrow_down.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,24 @@ + + + + icon_packup + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/images/arrow_up_dark.svg deepin-deb-installer-5.7.0.17/assets/images/arrow_up_dark.svg --- deepin-deb-installer-5.0.0/assets/images/arrow_up_dark.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/images/arrow_up_dark.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,26 @@ + + + + icon_spread + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/images/arrow_up.svg deepin-deb-installer-5.7.0.17/assets/images/arrow_up.svg --- deepin-deb-installer-5.0.0/assets/images/arrow_up.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/images/arrow_up.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,26 @@ + + + + icon_spread + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/images/deepin-deb-installer.svg deepin-deb-installer-5.7.0.17/assets/images/deepin-deb-installer.svg --- deepin-deb-installer-5.0.0/assets/images/deepin-deb-installer.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/images/deepin-deb-installer.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru deepin-deb-installer-5.0.0/assets/images/icon_install_dark.svg deepin-deb-installer-5.7.0.17/assets/images/icon_install_dark.svg --- deepin-deb-installer-5.0.0/assets/images/icon_install_dark.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/images/icon_install_dark.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,22 @@ + + + + icon_install_dark + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/images/icon_install_light.svg deepin-deb-installer-5.7.0.17/assets/images/icon_install_light.svg --- deepin-deb-installer-5.0.0/assets/images/icon_install_light.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/images/icon_install_light.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,22 @@ + + + + icon_install + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/images/icon.svg deepin-deb-installer-5.7.0.17/assets/images/icon.svg --- deepin-deb-installer-5.0.0/assets/images/icon.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/images/icon.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,91 @@ + + + + icon_install + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/images/split_line_dark.svg deepin-deb-installer-5.7.0.17/assets/images/split_line_dark.svg --- deepin-deb-installer-5.0.0/assets/images/split_line_dark.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/images/split_line_dark.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,3 @@ + + + diff -Nru deepin-deb-installer-5.0.0/assets/images/split_line.svg deepin-deb-installer-5.7.0.17/assets/images/split_line.svg --- deepin-deb-installer-5.0.0/assets/images/split_line.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/images/split_line.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + + Line + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/images/warning.svg deepin-deb-installer-5.7.0.17/assets/images/warning.svg --- deepin-deb-installer-5.0.0/assets/images/warning.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/images/warning.svg 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,32 @@ + + + + warning + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/assets/resources.qrc deepin-deb-installer-5.7.0.17/assets/resources.qrc --- deepin-deb-installer-5.0.0/assets/resources.qrc 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/resources.qrc 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,30 @@ + + + font/SourceHanSansCN-Medium.ttf + font/SourceHanSansCN-Normal.ttf + icons/deepin/builtin/dark/icons/deepin-deb-installer.svg + icons/deepin/builtin/dark/icons/di_active_tab_close_hover_16px.svg + icons/deepin/builtin/dark/icons/di_active_tab_close_normal_16px.svg + icons/deepin/builtin/dark/icons/di_active_tab_close_press_16px.svg + icons/deepin/builtin/dark/icons/di_arrow_down_25px.svg + icons/deepin/builtin/dark/icons/di_arrow_up_25px.svg + icons/deepin/builtin/dark/icons/di_icon_160px.svg + icons/deepin/builtin/dark/icons/di_icon_install_160px.svg + icons/deepin/builtin/dark/icons/di_ok_16px.svg + icons/deepin/builtin/dark/icons/di_popwarning_32px.svg + icons/deepin/builtin/dark/icons/di_split_line_214px.svg + icons/deepin/builtin/dark/icons/di_warning_16px.svg + icons/deepin/builtin/light/icons/deepin-deb-installer.svg + icons/deepin/builtin/light/icons/di_active_tab_close_hover_16px.svg + icons/deepin/builtin/light/icons/di_active_tab_close_normal_16px.svg + icons/deepin/builtin/light/icons/di_active_tab_close_press_16px.svg + icons/deepin/builtin/light/icons/di_arrow_down_25px.svg + icons/deepin/builtin/light/icons/di_arrow_up_25px.svg + icons/deepin/builtin/light/icons/di_icon_160px.svg + icons/deepin/builtin/light/icons/di_icon_install_160px.svg + icons/deepin/builtin/light/icons/di_ok_16px.svg + icons/deepin/builtin/light/icons/di_popwarning_32px.svg + icons/deepin/builtin/light/icons/di_split_line_220px.svg + icons/deepin/builtin/light/icons/di_warning_16px.svg + + diff -Nru deepin-deb-installer-5.0.0/assets/translate_generation.sh deepin-deb-installer-5.7.0.17/assets/translate_generation.sh --- deepin-deb-installer-5.0.0/assets/translate_generation.sh 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/translate_generation.sh 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,11 @@ +#!/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 diff -Nru deepin-deb-installer-5.0.0/assets/translate_ts2desktop.sh deepin-deb-installer-5.7.0.17/assets/translate_ts2desktop.sh --- deepin-deb-installer-5.0.0/assets/translate_ts2desktop.sh 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/assets/translate_ts2desktop.sh 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,9 @@ +#!/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 diff -Nru deepin-deb-installer-5.0.0/CMakeLists.txt deepin-deb-installer-5.7.0.17/CMakeLists.txt --- deepin-deb-installer-5.0.0/CMakeLists.txt 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/CMakeLists.txt 2020-12-03 11:59:49.000000000 +0000 @@ -1,70 +1,11 @@ -cmake_minimum_required(VERSION 3.7) +cmake_minimum_required(VERSION 3.13) if (NOT DEFINED VERSION) - set(VERSION 1.2.2) + set(VERSION 5.3.9) 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) +project(deepin_deb_installer) +option(DMAN_RELEAE OFF "Install dman resources to system or not") +add_subdirectory(src/AptInstallDepend) +add_subdirectory(src/deb_installer) +add_subdirectory(test) diff -Nru deepin-deb-installer-5.0.0/debian/changelog deepin-deb-installer-5.7.0.17/debian/changelog --- deepin-deb-installer-5.0.0/debian/changelog 2020-03-23 06:12:25.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/debian/changelog 2021-01-08 19:50:01.000000000 +0000 @@ -1,61 +1,11 @@ -deepin-deb-installer (5.0.0-1build1) focal; urgency=medium +deepin-deb-installer (5.7.0.17-1) groovy; urgency=medium - * No-change rebuild for libgcc-s1 package name change. + *New upstream build 5.7.0.17 - -- Matthias Klose Mon, 23 Mar 2020 07:12:25 +0100 + -- Ananta Mishra Sat, 09 Jan 2021 01:35:01 +0545 -deepin-deb-installer (5.0.0-1) unstable; urgency=medium +deepin-deb-installer (5.3.9) unstable; urgency=medium - * Team upload. - * New upstream release 5.0.0. - * debian/control: Bump Standards-Version to 4.4.0. - * debian/control: Bump debhelper compat to v12. + * Initial Release. - -- Boyuan Yang Tue, 24 Sep 2019 16:45:48 -0400 - -deepin-deb-installer (1.3.0-1) unstable; urgency=medium - - * New upstream version 1.3.0 - * Standards-Version: Bump to 4.3.0 (no changes needed). - - -- Yanhao Mo Mon, 25 Feb 2019 17:41:31 +0800 - -deepin-deb-installer (1.2.9-1) unstable; urgency=medium - - * Team upload. - * New upstream version 1.2.9. - * debian/control: - + Bump Standards-Version to 4.2.1. - + Build-depend on debhelper-compat (= 11) to replace old - debian/compat file. - + R³: Use Rules-Requires-Root: no. - + Tighten up versioned build-dependency to libdtkwidget-dev to - (>= 2.0.9.10~) to fix FTBFS. - - -- Boyuan Yang Mon, 10 Dec 2018 10:43:32 -0500 - -deepin-deb-installer (1.2.5-1) unstable; urgency=medium - - * New upstream version 1.2.5 - * Bump Standards-Version to 4.1.5 (no changes needed). - * d/control: Add new uploader Yanhao Mo . - * d/rules: Drop debian/deepin-deb-installer/usr/share/dman/ relevant part - because the upstream doesn't produce that any more. - - -- Yanhao Mo Sun, 22 Jul 2018 10:14:53 +0800 - -deepin-deb-installer (1.2.4-2) unstable; urgency=medium - - * Team upload. - * Use team+pkg-deepin@tracker.debian.org in maintainer field. - * d/rules: Use "dh_missing --fail-missing". - * Apply "wrap-and-sort -abst". - * Bump Standards-Version to 4.1.4 (no changes needed). - - -- Boyuan Yang <073plan@gmail.com> Fri, 20 Apr 2018 18:30:59 +0800 - -deepin-deb-installer (1.2.4-1) unstable; urgency=medium - - * Initial release (Closes: #871975) - - -- Yangfl Thu, 15 Mar 2018 16:16:47 +0800 + -- Deepin Packages Builder Wed, 11 Oct 2017 17:38:35 +0800 diff -Nru deepin-deb-installer-5.0.0/debian/control deepin-deb-installer-5.7.0.17/debian/control --- deepin-deb-installer-5.0.0/debian/control 2019-09-24 20:45:46.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/debian/control 2021-01-08 19:49:38.000000000 +0000 @@ -1,36 +1,16 @@ Source: deepin-deb-installer Section: utils Priority: optional -Maintainer: Debian Deepin Packaging Team -Uploaders: - Yangfl , - Yanhao Mo , -Build-Depends: - cmake, - debhelper-compat (= 12), - libdtkwidget-dev (>= 2.0.9.10~), - libqapt-dev, - libqt5concurrent5, - libqt5widgets5, - pkg-config, - qttools5-dev-tools, -Rules-Requires-Root: no -Standards-Version: 4.4.0 -Homepage: https://github.com/linuxdeepin/deepin-deb-installer -Vcs-Git: https://salsa.debian.org/pkg-deepin-team/deepin-deb-installer.git -Vcs-Browser: https://salsa.debian.org/pkg-deepin-team/deepin-deb-installer +Maintainer: Deepin Packages Builder +Build-Depends: debhelper-compat (=13), pkg-config, cmake, libqt5widgets5, libqt5concurrent5, libqapt-dev, libdtkwidget-dev, qtbase5-dev, qttools5-dev-tools, qttools5-dev,libgtest-dev, qtchooser +Standards-Version: 4.5.0 +Homepage: https://www.deepin.com/ Package: deepin-deb-installer Architecture: any -Depends: - ${misc:Depends}, - ${shlibs:Depends}, -Description: Deepin Package Manager - Deepin Package Manager is a management tool for deb package, and is developed - for users to easily install customized applications that are not categorized - in Deepin Store. With an easy-to-use interface as well as functions like batch - installation, version detection and auto-completion of dependencies, you can - quickly get the software installed on deepin once you get the right deb - package. - . - This package is part of DDE (Deepin Desktop Environment). +Depends: ${shlibs:Depends}, ${misc:Depends}, libqapt3-runtime +Description: Package Installer helps users install and remove local packages. + Package Installer is an easy-to-use .deb package management tool + with a simple interface for users to quickly install customized applications + not included in App Store supporting bulk installation, version identification + and auto completion. diff -Nru deepin-deb-installer-5.0.0/debian/copyright deepin-deb-installer-5.7.0.17/debian/copyright --- deepin-deb-installer-5.0.0/debian/copyright 2018-12-10 15:41:15.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/debian/copyright 2020-12-03 11:59:49.000000000 +0000 @@ -1,20 +1,12 @@ -Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: deepin-deb-installer -Source: https://github.com/linuxdeepin/deepin-deb-installer Files: * -Copyright: 2017-2018 Deepin Technology Co., Ltd. +Copyright: 2017 Deepin Technology Co., Ltd. License: GPL-3+ - -Files: debian/* -Copyright: 2017 Deepin Packages Builder - 2018 Yangfl -License: GPL-3+ - -License: GPL-3+ - This program is free software: you can redistribute it and/or modify + 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 + 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, @@ -23,7 +15,7 @@ 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 . + 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". diff -Nru deepin-deb-installer-5.0.0/debian/deepin-deb-installer.1 deepin-deb-installer-5.7.0.17/debian/deepin-deb-installer.1 --- deepin-deb-installer-5.0.0/debian/deepin-deb-installer.1 2018-12-10 15:41:15.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/debian/deepin-deb-installer.1 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -.TH DEEPIN-DEB-INSTALLER "1" "December 2017" "Deepin" "User Commands" - -.SH NAME -deepin-deb-installer \- Deepin Package Manager - -.SH SYNOPSIS -.B deepin-deb-installer -[\fI\,options\/\fR] \fI\,file \/\fR[\fI\,file\/\fR..] - -.SH DESCRIPTION -.B Deepin Package Manager -is a management tool for deb package, and is developed -for users to easily install customized applications that are not categorized -in Deepin Store. With an easy-to-use interface as well as functions like batch -installation, version detection and auto-completion of dependencies, you can -quickly get the software installed on deepin once you get the right deb -package. - -.SH OPTIONS -.TP -\fB\-h\fR, \fB\-\-help\fR -Displays this help. -.TP -\fB\-v\fR, \fB\-\-version\fR -Displays version information. - -.SS "Arguments:" -.TP -file -Deb package path. - -.SH "SEE ALSO" -https://www.deepin.org/en/original/deepin-package-manager/ - -.SH AUTHOR -.PP -.B Deepin Package Manager -is written by Deepin Technology Co., Ltd. -.PP -This manual page was written by -.MT mmyangfl@\:gmail.com -Yangfl -.ME -for the Debian Project (but may be used by others). diff -Nru deepin-deb-installer-5.0.0/debian/manpages deepin-deb-installer-5.7.0.17/debian/manpages --- deepin-deb-installer-5.0.0/debian/manpages 2018-12-10 15:41:15.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/debian/manpages 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -debian/deepin-deb-installer.1 diff -Nru deepin-deb-installer-5.0.0/debian/postinst deepin-deb-installer-5.7.0.17/debian/postinst --- deepin-deb-installer-5.0.0/debian/postinst 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/debian/postinst 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,8 @@ +#!/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 diff -Nru deepin-deb-installer-5.0.0/debian/rules deepin-deb-installer-5.7.0.17/debian/rules --- deepin-deb-installer-5.0.0/debian/rules 2019-09-24 20:45:48.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/debian/rules 2020-12-03 11:59:49.000000000 +0000 @@ -1,22 +1,20 @@ #!/usr/bin/make -f -#export DH_VERBOSE = 1 - - -export DEB_BUILD_MAINT_OPTIONS = hardening=+all - -export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic -export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed - export QT_SELECT := 5 - +# see FEATURE AREAS in dpkg-buildflags(1) +#export DEB_BUILD_MAINT_OPTIONS = hardening=+all +# see ENVIRONMENT in dpkg-buildflags(1) +# package maintainers to append CFLAGS +#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic +# package maintainers to append LDFLAGS +#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed include /usr/share/dpkg/default.mk - +override_dh_auto_configure: + dh_auto_configure -- \ + -DCMAKE_BUILD_TYPE=Release \ + -DAPP_VERSION=$(DEB_VERSION_UPSTREAM) -DVERSION=$(DEB_VERSION_UPSTREAM) LIB_INSTALL_DIR=/usr/lib/$(DEB_HOST_MULTIARCH) %: dh $@ -override_dh_auto_configure: - dh_auto_configure -- -DVERSION=$(DEB_VERSION_UPSTREAM) - -override_dh_missing: - dh_missing --fail-missing +override_dh_shlibdeps: + dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info diff -Nru deepin-deb-installer-5.0.0/debian/source/format deepin-deb-installer-5.7.0.17/debian/source/format --- deepin-deb-installer-5.0.0/debian/source/format 2018-12-10 15:41:15.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/debian/source/format 2021-01-08 19:50:01.000000000 +0000 @@ -1 +1 @@ -3.0 (quilt) +3.0 (quilt) \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/debian/watch deepin-deb-installer-5.7.0.17/debian/watch --- deepin-deb-installer-5.0.0/debian/watch 2018-12-10 15:41:15.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/debian/watch 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -version=4 -opts="filenamemangle=s%(?:.*?)?v?(\d[\d.]*)\.tar\.gz%deepin-deb-installer-$1.tar.gz%" \ - https://github.com/linuxdeepin/deepin-deb-installer/tags \ - (?:.*?/)?(\d[\d.]*)\.tar\.gz debian uupdate diff -Nru deepin-deb-installer-5.0.0/debinstaller.cpp deepin-deb-installer-5.7.0.17/debinstaller.cpp --- deepin-deb-installer-5.0.0/debinstaller.cpp 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/debinstaller.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,320 +0,0 @@ -/* - * 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; -} diff -Nru deepin-deb-installer-5.0.0/debinstaller.h deepin-deb-installer-5.7.0.17/debinstaller.h --- deepin-deb-installer-5.0.0/debinstaller.h 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/debinstaller.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,76 +0,0 @@ -/* - * 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 diff -Nru deepin-deb-installer-5.0.0/deblistmodel.cpp deepin-deb-installer-5.7.0.17/deblistmodel.cpp --- deepin-deb-installer-5.0.0/deblistmodel.cpp 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/deblistmodel.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,475 +0,0 @@ -/* - * 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); -} diff -Nru deepin-deb-installer-5.0.0/deblistmodel.h deepin-deb-installer-5.7.0.17/deblistmodel.h --- deepin-deb-installer-5.0.0/deblistmodel.h 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/deblistmodel.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,139 +0,0 @@ -/* - * 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 diff -Nru deepin-deb-installer-5.0.0/deepin-deb-installer.applications deepin-deb-installer-5.7.0.17/deepin-deb-installer.applications --- deepin-deb-installer-5.0.0/deepin-deb-installer.applications 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/deepin-deb-installer.applications 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ - -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 - diff -Nru deepin-deb-installer-5.0.0/deepin-deb-installer.desktop deepin-deb-installer-5.7.0.17/deepin-deb-installer.desktop --- deepin-deb-installer-5.0.0/deepin-deb-installer.desktop 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/deepin-deb-installer.desktop 1970-01-01 00:00:00.000000000 +0000 @@ -1,112 +0,0 @@ -[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 軟體包管理器 - diff -Nru deepin-deb-installer-5.0.0/environments.h.in deepin-deb-installer-5.7.0.17/environments.h.in --- deepin-deb-installer-5.0.0/environments.h.in 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/environments.h.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -#ifndef __ENVIRONMENTS_H_ -#define __ENVIRONMENTS_H_ - -#define VERSION "@VERSION@" - -#endif // __ENVIRONMENTS_H_ diff -Nru deepin-deb-installer-5.0.0/filechoosewidget.cpp deepin-deb-installer-5.7.0.17/filechoosewidget.cpp --- deepin-deb-installer-5.0.0/filechoosewidget.cpp 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/filechoosewidget.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,118 +0,0 @@ -/* - * 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); -} diff -Nru deepin-deb-installer-5.0.0/filechoosewidget.h deepin-deb-installer-5.7.0.17/filechoosewidget.h --- deepin-deb-installer-5.0.0/filechoosewidget.h 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/filechoosewidget.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,48 +0,0 @@ -/* - * 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 diff -Nru deepin-deb-installer-5.0.0/.gitignore deepin-deb-installer-5.7.0.17/.gitignore --- deepin-deb-installer-5.0.0/.gitignore 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/.gitignore 2020-12-03 11:59:49.000000000 +0000 @@ -22,3 +22,12 @@ # vim tmp file *.swp +.deepin-deb-installer.desktop.swj +.deepin-deb-installer.desktop.swm +debian/.debhelper/ +debian/deepin-deb-installer.debhelper.log +debian/deepin-deb-installer.substvars +debian/deepin-deb-installer/ +debian/files +obj-x86_64-linux-gnu/ +resources/images/icon22.svg diff -Nru deepin-deb-installer-5.0.0/infocontrolbutton.cpp deepin-deb-installer-5.7.0.17/infocontrolbutton.cpp --- deepin-deb-installer-5.0.0/infocontrolbutton.cpp 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/infocontrolbutton.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,83 +0,0 @@ -/* - * 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); - } -} diff -Nru deepin-deb-installer-5.0.0/infocontrolbutton.h deepin-deb-installer-5.7.0.17/infocontrolbutton.h --- deepin-deb-installer-5.0.0/infocontrolbutton.h 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/infocontrolbutton.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,54 +0,0 @@ -/* - * 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 diff -Nru deepin-deb-installer-5.0.0/LICENSE deepin-deb-installer-5.7.0.17/LICENSE --- deepin-deb-installer-5.0.0/LICENSE 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/LICENSE 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff -Nru deepin-deb-installer-5.0.0/main.cpp deepin-deb-installer-5.7.0.17/main.cpp --- deepin-deb-installer-5.0.0/main.cpp 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/main.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ -/* - * 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(); -} diff -Nru deepin-deb-installer-5.0.0/multipleinstallpage.cpp deepin-deb-installer-5.7.0.17/multipleinstallpage.cpp --- deepin-deb-installer-5.0.0/multipleinstallpage.cpp 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/multipleinstallpage.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,164 +0,0 @@ -/* - * 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); -} diff -Nru deepin-deb-installer-5.0.0/multipleinstallpage.h deepin-deb-installer-5.7.0.17/multipleinstallpage.h --- deepin-deb-installer-5.0.0/multipleinstallpage.h 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/multipleinstallpage.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -/* - * 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 diff -Nru deepin-deb-installer-5.0.0/packagelistview.cpp deepin-deb-installer-5.7.0.17/packagelistview.cpp --- deepin-deb-installer-5.0.0/packagelistview.cpp 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/packagelistview.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/* - * 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()); -} diff -Nru deepin-deb-installer-5.0.0/packagelistview.h deepin-deb-installer-5.7.0.17/packagelistview.h --- deepin-deb-installer-5.0.0/packagelistview.h 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/packagelistview.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/* - * 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 diff -Nru deepin-deb-installer-5.0.0/packageslistdelegate.cpp deepin-deb-installer-5.7.0.17/packageslistdelegate.cpp --- deepin-deb-installer-5.0.0/packageslistdelegate.cpp 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/packageslistdelegate.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,164 +0,0 @@ -/* - * 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(); -} diff -Nru deepin-deb-installer-5.0.0/packageslistdelegate.h deepin-deb-installer-5.7.0.17/packageslistdelegate.h --- deepin-deb-installer-5.0.0/packageslistdelegate.h 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/packageslistdelegate.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -/* - * 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 diff -Nru deepin-deb-installer-5.0.0/packagesmanager.cpp deepin-deb-installer-5.7.0.17/packagesmanager.cpp --- deepin-deb-installer-5.0.0/packagesmanager.cpp 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/packagesmanager.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,812 +0,0 @@ -/* - * 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; -} diff -Nru deepin-deb-installer-5.0.0/packagesmanager.h deepin-deb-installer-5.7.0.17/packagesmanager.h --- deepin-deb-installer-5.0.0/packagesmanager.h 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/packagesmanager.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,105 +0,0 @@ -/* - * 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 diff -Nru deepin-deb-installer-5.0.0/.project.json deepin-deb-installer-5.7.0.17/.project.json --- deepin-deb-installer-5.0.0/.project.json 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/.project.json 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,6 @@ + { + "type": "homebrew", + "3rdparty": [], + "ignore": ["./translations","./debian","./.tx","./assets","*.gitignore","*.doc","*.svg","*.sh","*.zip", "*.qrc", "*.desktop", "*.policy", "COPYING", "LICENSE", ".gitignore"], + "license": ["GPLv3"] + } diff -Nru deepin-deb-installer-5.0.0/resources/images/active_tab_close_hover.svg deepin-deb-installer-5.7.0.17/resources/images/active_tab_close_hover.svg --- deepin-deb-installer-5.0.0/resources/images/active_tab_close_hover.svg 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/images/active_tab_close_hover.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ - - - - active_tab_close_hover - Created with Sketch. - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/resources/images/active_tab_close_normal.svg deepin-deb-installer-5.7.0.17/resources/images/active_tab_close_normal.svg --- deepin-deb-installer-5.0.0/resources/images/active_tab_close_normal.svg 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/images/active_tab_close_normal.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ - - - - active_tab_close_normal - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/resources/images/active_tab_close_press.svg deepin-deb-installer-5.7.0.17/resources/images/active_tab_close_press.svg --- deepin-deb-installer-5.0.0/resources/images/active_tab_close_press.svg 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/images/active_tab_close_press.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ - - - - active_tab_close_press - Created with Sketch. - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/resources/images/arrow_down.svg deepin-deb-installer-5.7.0.17/resources/images/arrow_down.svg --- deepin-deb-installer-5.0.0/resources/images/arrow_down.svg 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/images/arrow_down.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ - - - - 下箭头 - Created with Sketch. - - - - - - - \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/resources/images/arrow_up.svg deepin-deb-installer-5.7.0.17/resources/images/arrow_up.svg --- deepin-deb-installer-5.0.0/resources/images/arrow_up.svg 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/images/arrow_up.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ - - - - 上箭头 - Created with Sketch. - - - - - - - \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-128px.svg deepin-deb-installer-5.7.0.17/resources/images/deepin-deb-installer-128px.svg --- deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-128px.svg 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/images/deepin-deb-installer-128px.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ - - - - 软件包安装器-128px - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-16px.svg deepin-deb-installer-5.7.0.17/resources/images/deepin-deb-installer-16px.svg --- deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-16px.svg 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/images/deepin-deb-installer-16px.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ - - - - 软件包安装器-16px - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-24px.svg deepin-deb-installer-5.7.0.17/resources/images/deepin-deb-installer-24px.svg --- deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-24px.svg 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/images/deepin-deb-installer-24px.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ - - - - 软件包安装器-24px - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-256px.svg deepin-deb-installer-5.7.0.17/resources/images/deepin-deb-installer-256px.svg --- deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-256px.svg 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/images/deepin-deb-installer-256px.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ - - - - 软件包安装器-256px - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-32px.svg deepin-deb-installer-5.7.0.17/resources/images/deepin-deb-installer-32px.svg --- deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-32px.svg 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/images/deepin-deb-installer-32px.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ - - - - 软件包安装器-32px - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-48px.svg deepin-deb-installer-5.7.0.17/resources/images/deepin-deb-installer-48px.svg --- deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-48px.svg 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/images/deepin-deb-installer-48px.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ - - - - 软件包安装器-48px - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-64px.svg deepin-deb-installer-5.7.0.17/resources/images/deepin-deb-installer-64px.svg --- deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-64px.svg 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/images/deepin-deb-installer-64px.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,52 +0,0 @@ - - - - 软件包安装器-64px - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-96px.svg deepin-deb-installer-5.7.0.17/resources/images/deepin-deb-installer-96px.svg --- deepin-deb-installer-5.0.0/resources/images/deepin-deb-installer-96px.svg 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/images/deepin-deb-installer-96px.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ - - - - 软件包安装器-96px - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/resources/images/icon.svg deepin-deb-installer-5.7.0.17/resources/images/icon.svg --- deepin-deb-installer-5.0.0/resources/images/icon.svg 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/images/icon.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,96 +0,0 @@ - - - - 主图标 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/resources/images/split_line_dark.svg deepin-deb-installer-5.7.0.17/resources/images/split_line_dark.svg --- deepin-deb-installer-5.0.0/resources/images/split_line_dark.svg 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/images/split_line_dark.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ - - - diff -Nru deepin-deb-installer-5.0.0/resources/images/split_line.svg deepin-deb-installer-5.7.0.17/resources/images/split_line.svg --- deepin-deb-installer-5.0.0/resources/images/split_line.svg 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/images/split_line.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ - - - - split_line - Created with Sketch. - - - - - - - \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/resources/resources.qrc deepin-deb-installer-5.7.0.17/resources/resources.qrc --- deepin-deb-installer-5.0.0/resources/resources.qrc 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/resources.qrc 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ - - - 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 - - diff -Nru deepin-deb-installer-5.0.0/resources/theme/dark/dark.qss deepin-deb-installer-5.7.0.17/resources/theme/dark/dark.qss --- deepin-deb-installer-5.0.0/resources/theme/dark/dark.qss 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/theme/dark/dark.qss 1970-01-01 00:00:00.000000000 +0000 @@ -1,76 +0,0 @@ -GrayButton { - 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; -} diff -Nru deepin-deb-installer-5.0.0/resources/theme/light/light.qss deepin-deb-installer-5.7.0.17/resources/theme/light/light.qss --- deepin-deb-installer-5.0.0/resources/theme/light/light.qss 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/resources/theme/light/light.qss 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -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); -} - -#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; -} diff -Nru deepin-deb-installer-5.0.0/result.h deepin-deb-installer-5.7.0.17/result.h --- deepin-deb-installer-5.0.0/result.h 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/result.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,62 +0,0 @@ -/* - * 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 diff -Nru deepin-deb-installer-5.0.0/singleinstallpage.cpp deepin-deb-installer-5.7.0.17/singleinstallpage.cpp --- deepin-deb-installer-5.0.0/singleinstallpage.cpp 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/singleinstallpage.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,403 +0,0 @@ -/* - * 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); - } -} diff -Nru deepin-deb-installer-5.0.0/singleinstallpage.h deepin-deb-installer-5.7.0.17/singleinstallpage.h --- deepin-deb-installer-5.0.0/singleinstallpage.h 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/singleinstallpage.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,95 +0,0 @@ -/* - * 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 diff -Nru deepin-deb-installer-5.0.0/src/AptInstallDepend/CMakeLists.txt deepin-deb-installer-5.7.0.17/src/AptInstallDepend/CMakeLists.txt --- deepin-deb-installer-5.0.0/src/AptInstallDepend/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/AptInstallDepend/CMakeLists.txt 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,28 @@ +cmake_minimum_required(VERSION 3.13) + +if (NOT DEFINED VERSION) + set(VERSION 5.3.9) +endif () + +project(AptInstallDepend) +set (EXE_NAME deepin-deb-installer-dependsInstall) +set(LINK_LIBS + Qt5::Core +) +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") + +file(GLOB_RECURSE AUTH_CPP_FILES ${CMAKE_CURRENT_LIST_DIR}/*.cpp) +add_executable (${EXE_NAME} + ${AUTH_CPP_FILES} +) + +# Find the library +find_package(Qt5Core REQUIRED) +set(CMAKE_INSTALL_PREFIX /usr) +# Install files +install(TARGETS ${EXE_NAME} DESTINATION bin) +target_link_libraries(${EXE_NAME} ${LINK_LIBS} ) diff -Nru deepin-deb-installer-5.0.0/src/AptInstallDepend/installDebThread.cpp deepin-deb-installer-5.7.0.17/src/AptInstallDepend/installDebThread.cpp --- deepin-deb-installer-5.0.0/src/AptInstallDepend/installDebThread.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/AptInstallDepend/installDebThread.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,132 @@ +/* +* Copyright (C) 2019 ~ 2020 Deepin Technology Co., Ltd. +* +* Author: liupeng +* Maintainer: liupeng +* 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 "installDebThread.h" +#include + +InstallDebThread::InstallDebThread() +{ + m_proc = new QProcess; + connect(m_proc, SIGNAL(finished(int)), this, SLOT(onFinished(int))); + connect(m_proc, SIGNAL(readyReadStandardOutput()), this, SLOT(on_readoutput())); +} + +InstallDebThread::~InstallDebThread() +{ + if (m_proc != nullptr) { + delete m_proc; + m_proc = nullptr; + } +} + +void InstallDebThread::setParam(QStringList tParam) +{ + m_listParam = tParam; +} + +void InstallDebThread::getDescription() +{ + QString str = "sudo dpkg -e " + m_listParam[1] + " " + TEMPLATE_DIR; + system(str.toUtf8()); + + QFile file; + file.setFileName(TEMPLATE_PATH); + if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { + QString tmpData; + while (!file.atEnd()) { + tmpData = file.readLine().data(); + if (tmpData.size() > 13) { + if (tmpData.contains("Description: ")) { + QString str = tmpData.mid(13, tmpData.size() - 13); + str.remove(QChar('\n'), Qt::CaseInsensitive); + m_listDescribeData << str; + } + } + } + + file.close(); + } +} + +void InstallDebThread::on_readoutput() +{ + QString tmp = m_proc->readAllStandardOutput().data(); + qDebug() << tmp; + + foreach (QString str, m_listDescribeData) { + if (tmp.contains(str)) { + char c_input[20]; + while (fgets(c_input, 10, stdin)) { + QString str = c_input; + str.remove(QChar('\\'), Qt::CaseInsensitive); + str.remove(QChar('"'), Qt::CaseInsensitive); + + m_proc->write(str.toLatin1().data()); + + m_proc->waitForFinished(1500); + + break; + } + } + } +} + +void InstallDebThread::onFinished(int num) +{ + m_resultFlag = num; +} + +void InstallDebThread::run() +{ + if (m_listParam.size() > 0) { + if (m_listParam[0] == "InstallDeepinWine") { + qDebug() << "StartInstallDeepinwine"; + QStringList depends; + + for (int i = 1; i < m_listParam.size(); i++) { + depends << m_listParam[i]; + } + + system("echo 'libc6 libraries/restart-without-asking boolean true' | sudo debconf-set-selections\n"); + m_proc->start("sudo", QStringList() << "apt-get" + << "install" + << depends + << "deepin-wine-helper" + << "--fix-missing" + << "-y"); + m_proc->waitForFinished(-1); + m_proc->close(); + } else if (m_listParam[0] == "InstallConfig") { + if (m_listParam.size() <= 1) + return; + + qDebug() << "StartInstallAptConfig"; + + getDescription(); + + //m_proc->start("sudo", QStringList() << "-S" << "dpkg-preconfigure" << "-f" << "Teletype" << m_listParam[1]); + m_proc->start("sudo", QStringList() << "-S" << "dpkg" << "-i" << m_listParam[1]); + m_proc->waitForFinished(-1); + + QDir filePath(TEMPLATE_DIR); + if (filePath.exists()) { + filePath.removeRecursively(); + } + + m_proc->close(); + } + } +} diff -Nru deepin-deb-installer-5.0.0/src/AptInstallDepend/installDebThread.h deepin-deb-installer-5.7.0.17/src/AptInstallDepend/installDebThread.h --- deepin-deb-installer-5.0.0/src/AptInstallDepend/installDebThread.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/AptInstallDepend/installDebThread.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,49 @@ +/* +* Copyright (C) 2019 ~ 2020 Deepin Technology Co., Ltd. +* +* Author: liupeng +* Maintainer: liupeng +* 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 INSTALLDEBTHREAD_H +#define INSTALLDEBTHREAD_H + +//#include +#include +#include +#include +#include + +#define TEMPLATE_DIR "/tmp/DEBIAN_TMP" +#define TEMPLATE_PATH "/tmp/DEBIAN_TMP/templates" + +class InstallDebThread : public QThread +{ + Q_OBJECT +public: + InstallDebThread(); + virtual ~InstallDebThread(); + void setParam(QStringList tParam); + void getDescription(); + void run(); + int m_resultFlag = -1; + +public slots: + void onFinished(int); + void on_readoutput(); + +private: + QProcess *m_proc; + QStringList m_listParam; + QList m_listDescribeData; +}; +#endif // INSTALLDEBTHREAD_H diff -Nru deepin-deb-installer-5.0.0/src/AptInstallDepend/main.cpp deepin-deb-installer-5.7.0.17/src/AptInstallDepend/main.cpp --- deepin-deb-installer-5.0.0/src/AptInstallDepend/main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/AptInstallDepend/main.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,25 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "installDebThread.h" + +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + + QCommandLineParser parser; + parser.process(app); + const QStringList tParamList = parser.positionalArguments(); + + InstallDebThread *mThread = new InstallDebThread; + mThread->setParam(tParamList); + mThread->run(); + mThread->wait(); + return mThread->m_resultFlag; +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/CMakeLists.txt deepin-deb-installer-5.7.0.17/src/deb_installer/CMakeLists.txt --- deepin-deb-installer-5.0.0/src/deb_installer/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/CMakeLists.txt 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,152 @@ +# Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. +# +# Author: cuizhen +# +# Maintainer: cuizhen +# +# 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 . + +cmake_minimum_required(VERSION 3.7) +if (NOT DEFINED VERSION) + message(WARNING "Not defined version ,about dialog version set 5.3.9") + set(VERSION 5.3.9) +endif () + +#common resource names +set(APP_RES_DIR "${CMAKE_SOURCE_DIR}/assets") +set(APP_BIN_NAME "deepin-deb-installer") +set(APP_TRANS_SCRIPT "${APP_RES_DIR}/translate_generation.sh") +set(APP_DESKTOP "${APP_RES_DIR}/deepin-deb-installer.desktop") +set(APP_QRC "${APP_RES_DIR}/resources.qrc") + +project(${APP_BIN_NAME}) + +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") +set(CMAKE_CXX_FLAGS "-Wl,--as-need -fPIE") +set(CMAKE_EXE_LINKER_FLAGS "-pie") + +if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "sw_64") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mieee") +endif () + +#compile flags +if (CMAKE_BUILD_TYPE MATCHES Debug) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -Wextra") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra") + + # Enable Qt builtin debug mode + add_definitions("-DQT_MESSAGELOGCONTEXT") +else() + # -Wl, -O2 Enable linker optimizations + # -Wl, --gc-sections Remove unused code resulting from -fdsta-sections and + # -ffunction-sections + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2 -Wl,-O1 -Wl,--gc-sections") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2 -Wl,-O1 -Wl,--gc-sections") +endif() + +#Generate the qm file +execute_process(COMMAND bash ${APP_TRANS_SCRIPT} + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/") + +configure_file(${APP_RES_DIR}/environments.h.in environments.h @ONLY) + +add_definitions(-DUSE_POLKIT -DENABLE_INACTIVE_DISPLAY) +# Find the library + +find_package(PkgConfig REQUIRED) +find_package(Qt5Widgets REQUIRED) +find_package(Qt5Gui REQUIRED) +find_package(Qt5Core REQUIRED) +find_package(Qt5LinguistTools REQUIRED) +find_package(Qt5Concurrent REQUIRED) +find_package(DtkWidget REQUIRED) +find_package(DtkGui REQUIRED) +find_package(DtkCore REQUIRED) +find_package(Qt5DBus REQUIRED) +set(LINK_LIBS + Qt5::Core + Qt5::Widgets + Qt5::Gui + Qt5::DBus + QApt + Qt5::Concurrent + ${DtkWidget_LIBRARIES} + ${DtkCore_LIBRARIES} + ${DtkGUI_LIBRARIES} +) + +macro(SUBDIRLIST result curdir) + file(GLOB children RELATIVE ${curdir} ${curdir}/*) + set(dirlist "") + foreach(child ${children}) + if(IS_DIRECTORY ${curdir}/${child}) + LIST(APPEND dirlist ${child}) + endif() + endforeach() + set(${result} ${dirlist}) +endmacro() + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) + +SUBDIRLIST(all_src ${CMAKE_CURRENT_SOURCE_DIR}) + +#Include all app own subdirectorys +foreach(subdir ${all_src}) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}${subdir}) +endforeach() + +file(GLOB_RECURSE APP_SRCS + ${CMAKE_CURRENT_LIST_DIR}/*.cpp + ${CMAKE_CURRENT_LIST_DIR}/manager/*.cpp + ${CMAKE_CURRENT_LIST_DIR}/model/*.cpp + ${CMAKE_CURRENT_LIST_DIR}/utils/*.cpp + ${CMAKE_CURRENT_LIST_DIR}/view/pages/*.cpp + ${CMAKE_CURRENT_LIST_DIR}/view/widgets/*.cpp + ) + +include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) + +# Tell CMake to create the executable +add_executable(${PROJECT_NAME} ${APP_SRCS} ${APP_QRC}) + +target_include_directories(${APP_BIN_NAME} + PUBLIC ${DtkWidget_INCLUDE_DIRS} ${OBJECT_BINARY_DIR}) + +target_link_libraries(${APP_BIN_NAME} + Qt5::Core + Qt5::Widgets + Qt5::Gui + Qt5::DBus + QApt + Qt5::Concurrent + ${DtkWidget_LIBRARIES} + ${DtkCore_LIBRARIES} + ${DtkGUI_LIBRARIES} +) +set(CMAKE_INSTALL_PREFIX /usr) + +# Install files +install(TARGETS deepin-deb-installer DESTINATION bin) + +file(GLOB APP_QM_FILES "${CMAKE_SOURCE_DIR}/translations/*.qm") +install(FILES ${APP_QM_FILES} DESTINATION share/deepin-deb-installer/translations) +install(FILES ${APP_DESKTOP} DESTINATION share/applications) +install(FILES ${APP_CONFIG} DESTINATION share/deepin-deb-installer) +install(FILES ${CMAKE_SOURCE_DIR}/assets/com.deepin.pkexec.aptInstallDepend.policy + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/polkit-1/actions) diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/main.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/main.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/main.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,100 @@ +/* + * 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 "model/deblistmodel.h" +#include "utils/accessible.h" +#include "utils/utils.h" +#include "singleInstallerApplication.h" +#include "environments.h" +#include "utils/DebugTimeManager.h" + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +DWIDGET_USE_NAMESPACE +#ifdef DUTIL_USE_NAMESPACE +DUTIL_USE_NAMESPACE +#else +DCORE_USE_NAMESPACE +#endif + +#define RECENT_PATH QDir::homePath() + "/.local/share/recently-used.xbel" + +#define DAPPLICATION_XSTRING(s) DAPPLICATION_STRING(s) +#define DAPPLICATION_STRING(s) #s + +int main(int argc, char *argv[]) +{ + PERF_PRINT_BEGIN("POINT-01", ""); //打开应用,添加记录点 + SingleInstallerApplication app(argc, argv); + + app.setOrganizationName("deepin"); + app.setApplicationName("deepin-deb-installer"); + app.setApplicationVersion(VERSION); //qmake 转cmake 解决版本不对的问题 + app.setApplicationAcknowledgementPage("https://www.deepin.org/acknowledgments/deepin-package-manager/"); + app.setProductIcon(QIcon::fromTheme("deepin-deb-installer")); + app.setAttribute(Qt::AA_UseHighDpiPixmaps); + app.loadTranslator(); + app.setProductName(QApplication::translate("main", "Package Installer")); + app.setApplicationDisplayName(QApplication::translate("main", "Package Installer")); + app.setApplicationDescription(QApplication::translate( + "main", + "Package Installer helps users install and remove local packages, and supports bulk installation.")); + + qputenv("DTK_USE_SEMAPHORE_SINGLEINSTANCE", "1"); + + DApplicationSettings settings; + + DLogManager::registerConsoleAppender(); + DLogManager::registerFileAppender(); + + QAccessible::installFactory(accessibleFactory);//自动化测试 + + qDebug() << qApp->applicationName() << "started, version = " << qApp->applicationVersion(); + + QDBusConnection dbus = QDBusConnection::sessionBus(); + if (dbus.registerService("com.deepin.DebInstaller")) { + dbus.registerObject("/com/deepin/DebInstaller", &app, QDBusConnection::ExportScriptableSlots); + app.parseCmdLine(); + app.activateWindow(); + PERF_PRINT_END("POINT-01"); //打开应用, 添加记录点 + return app.exec(); + } else { + QCommandLineParser parser; + parser.process(app); + QList debInstallPathList; + debInstallPathList << parser.positionalArguments(); + QDBusInterface notification("com.deepin.DebInstaller", "/com/deepin/DebInstaller", "com.deepin.DebInstaller", QDBusConnection::sessionBus()); + QDBusMessage msg = notification.callWithArgumentList(QDBus::AutoDetect, "InstallerDeb", debInstallPathList); + PERF_PRINT_END("POINT-01"); //打开应用, 添加记录点 + return 0; + } +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/manager/DealDependThread.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/manager/DealDependThread.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/manager/DealDependThread.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/manager/DealDependThread.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,95 @@ +/* +* Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd +* +* Author: cuizhen +* Maintainer: cuizhen +* 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 "DealDependThread.h" +#include "model/deblistmodel.h" + +DealDependThread::DealDependThread(QObject *parent) +{ + Q_UNUSED(parent); + proc = new QProcess(this); + connect(proc, static_cast(&QProcess::finished), this, &DealDependThread::onFinished); + connect(proc, &QProcess::readyReadStandardOutput, this, &DealDependThread::on_readoutput); +} + +DealDependThread::~DealDependThread() +{ + delete proc; +} + +void DealDependThread::setDependsList(QStringList dependList, int index) +{ + m_index = index; + m_dependsList = dependList; +} + +void DealDependThread::setBrokenDepend(QString dependName) +{ + m_brokenDepend = dependName; +} +void DealDependThread::on_readoutput() +{ + QString tmp = proc->readAllStandardOutput().data(); + qDebug() << "安装依赖输出数据:" << tmp; + + if (tmp.contains("StartInstallDeepinwine")) { + emit DependResult(DebListModel::AuthConfirm, m_index, m_brokenDepend); + return; + } + + if (tmp.contains("Not authorized")) { + bDependsStatusErr = true; + emit DependResult(DebListModel::CancelAuth, m_index, m_brokenDepend); + } +} + +void DealDependThread::onFinished(int num = -1) +{ + if (bDependsStatusErr) { + bDependsStatusErr = false; + return; + } + + if (num == 0) { + if (bDependsStatusErr) { + emit DependResult(DebListModel::AnalysisErr, m_index, m_brokenDepend); + bDependsStatusErr = false; + return; + } + qDebug() << m_dependsList << "安装成功"; + emit DependResult(DebListModel::AuthDependsSuccess, m_index, m_brokenDepend); + } else { + if (bDependsStatusErr) { + emit DependResult(DebListModel::AnalysisErr, m_index, m_brokenDepend); + bDependsStatusErr = false; + return; + } + qDebug() << m_dependsList << "install error" << num; + emit DependResult(DebListModel::AuthDependsErr, m_index, m_brokenDepend); + } + emit enableCloseButton(true); +} + +void DealDependThread::run() +{ + proc->setProcessChannelMode(QProcess::MergedChannels); + msleep(100); + + emit DependResult(DebListModel::AuthBefore, m_index, m_brokenDepend); + qDebug() << "run m_dependList" << m_dependsList; + proc->start("pkexec", QStringList() << "deepin-deb-installer-dependsInstall" << "InstallDeepinWine" << m_dependsList); + emit enableCloseButton(false); +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/manager/DealDependThread.h deepin-deb-installer-5.7.0.17/src/deb_installer/manager/DealDependThread.h --- deepin-deb-installer-5.0.0/src/deb_installer/manager/DealDependThread.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/manager/DealDependThread.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,48 @@ +/* +* Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd +* +* Author: cuizhen +* Maintainer: cuizhen +* 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 DEALDEPENDTHREAD_H +#define DEALDEPENDTHREAD_H + +#include +#include +#include + +class DealDependThread : public QThread +{ + Q_OBJECT +public: + DealDependThread(QObject *parent = nullptr); + virtual ~DealDependThread(); + void setDependsList(QStringList dependList, int index); + void setBrokenDepend(QString dependName); + void run(); +signals: + void DependResult(int, int, QString); + void enableCloseButton(bool); + +public slots: + void onFinished(int); + void on_readoutput(); +private: + QProcess *proc; + int m_index = -1; + QStringList m_dependsList; + bool bDependsStatusErr = false; + QString m_brokenDepend; +}; + +#endif // DEALDEPENDTHREAD_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/manager/PackageDependsStatus.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/manager/PackageDependsStatus.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/manager/PackageDependsStatus.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/manager/PackageDependsStatus.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,80 @@ +/* +* Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd +* +* Author: cuizhen +* Maintainer: cuizhen +* 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 "PackageDependsStatus.h" +#include "model/deblistmodel.h" + +PackageDependsStatus PackageDependsStatus::ok() { return {DebListModel::DependsOk, QString()}; } + +PackageDependsStatus PackageDependsStatus::available(const QString &package) +{ + // 修复卸载p7zip导致deepin-wine-helper被卸载的问题,Available 添加packageName + return {DebListModel::DependsAvailable, package}; +} + +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::isAuthCancel() const { return status == DebListModel::DependsAuthCancel; } + +bool PackageDependsStatus::isAvailable() const { return status == DebListModel::DependsAvailable; } diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/manager/PackageDependsStatus.h deepin-deb-installer-5.7.0.17/src/deb_installer/manager/PackageDependsStatus.h --- deepin-deb-installer-5.0.0/src/deb_installer/manager/PackageDependsStatus.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/manager/PackageDependsStatus.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,72 @@ +/* +* Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd +* +* Author: cuizhen +* Maintainer: cuizhen +* 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 PACKAGEDEPENDSSTATUS_H +#define PACKAGEDEPENDSSTATUS_H +#include + +class PackageDependsStatus +{ +public: + + /** + * @brief ok 组装依赖的状态,将传入的包的依赖状态设置为ok + * @return 某个包的依赖状态为ok + */ + static PackageDependsStatus ok(); + /** + * @brief available 组装依赖的状态,将传入的包名的依赖状态设置为Available + * @param package 当前依赖包的包名。 + * @return 某个包的依赖状态为Available + */ + static PackageDependsStatus available(const QString &package); + + /** + * @brief _break 组装break依赖状态。将传入的包的依赖状态设置为break + * @param package 包的名字 + * @return 某个包的依赖状态为break + */ + static PackageDependsStatus _break(const QString &package); + + PackageDependsStatus(); + PackageDependsStatus(const int status, const QString &package); + + /** + * @brief operator = 重写=操作符 + * @param other 要赋值的依赖的状态 + * @return 赋值后的依赖的状态 + */ + PackageDependsStatus &operator=(const PackageDependsStatus &other); + + /** + * @brief max 状态的比较 + * @param other + * @return + */ + PackageDependsStatus max(const PackageDependsStatus &other); + PackageDependsStatus maxEq(const PackageDependsStatus &other); + PackageDependsStatus min(const PackageDependsStatus &other); + PackageDependsStatus minEq(const PackageDependsStatus &other); + + bool isBreak() const; + bool isAuthCancel() const; + bool isAvailable() const; + +public: + int status; + QString package; +}; +#endif // PACKAGEDEPENDSSTATUS_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/manager/packagesmanager.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/manager/packagesmanager.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/manager/packagesmanager.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/manager/packagesmanager.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,902 @@ +/* + * 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 "DealDependThread.h" +#include "PackageDependsStatus.h" + +#include "model/deblistmodel.h" +#include "utils/utils.h" +#include "utils/DebugTimeManager.h" + +#include +#include +#include +#include + +using namespace QApt; + +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 (annotation == "all") 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)) +{ + dthread = new DealDependThread(); + connect(dthread, &DealDependThread::DependResult, this, &PackagesManager::DealDependResult); + connect(dthread, &DealDependThread::enableCloseButton, this, &PackagesManager::enableCloseButton); +} + +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; + + bool architectures = !b->architectures().contains(deb.architecture()); + + return architectures; +} + +const ConflictResult PackagesManager::packageConflictStat(const int index) +{ + DebFile p(m_preparedPackages[index]); + + ConflictResult ConflictResult = isConflictSatisfy(p.architecture(), p.conflicts()); + return ConflictResult; +} + +const ConflictResult PackagesManager::isConflictSatisfy(const QString &arch, Package *package) +{ + const QString &name = package->name(); + qDebug() << "PackagesManager:" << "check conflict for package" << name << arch; + + const auto ret_installed = isInstalledConflict(name, package->version(), package->architecture()); + if (!ret_installed.is_ok()) return ret_installed; + + qDebug() << "PackagesManager:" << "check conflict for local installed package is ok."; + + const auto ret_package = isConflictSatisfy(arch, package->conflicts()); + + qDebug() << "PackagesManager:" << "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() << "PackagesManager:" << "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() << "PackagesManager:" << "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]; + + DebFile *deb = new DebFile(m_preparedPackages[index]); + + const QString packageName = deb->packageName(); + const QString packageArch = deb->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 = deb->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); + delete deb; + return ret; +} + +void PackagesManager::DealDependResult(int iAuthRes, int iIndex, QString dependName) +{ + if (iAuthRes == DebListModel::AuthDependsSuccess) { + for (int num = 0; num < m_dependInstallMark.size(); num++) { + m_packageDependsStatus[m_dependInstallMark.at(num)].status = DebListModel::DependsOk; + } + m_errorIndex.clear(); + } + if (iAuthRes == DebListModel::CancelAuth || iAuthRes == DebListModel::AnalysisErr) { + for (int num = 0; num < m_dependInstallMark.size(); num++) { + m_packageDependsStatus[m_dependInstallMark[num]].status = DebListModel::DependsAuthCancel; + } + emit enableCloseButton(true); + } + if (iAuthRes == DebListModel::AuthDependsErr) { + for (int num = 0; num < m_dependInstallMark.size(); num++) { + m_packageDependsStatus[m_dependInstallMark.at(num)].status = DebListModel::DependsBreak; + if (!m_errorIndex.contains(m_dependInstallMark[num])) + m_errorIndex.push_back(m_dependInstallMark[num]); + } + emit enableCloseButton(true); + } + emit DependResult(iAuthRes, iIndex, dependName); +} + +PackageDependsStatus PackagesManager::getPackageDependsStatus(const int index) +{ + if (m_packageDependsStatus.contains(index)) { + return m_packageDependsStatus[index]; + } + + if (isArchError(index)) { + m_packageDependsStatus[index].status = 2; // fix:24886 + return PackageDependsStatus::_break(QString()); + } + + DebFile *deb = new DebFile(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() << "PackagesManager:" << "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() << "PackagesManager:" << "depends break because conflict with local package" << deb->packageName(); + ret.package = localConflictsResult.unwrap(); + ret.status = DebListModel::DependsBreak; + } else { + QSet choose_set; + choose_set << deb->packageName(); + QStringList dependList; + bool isWineApplication = false; //判断是否是wine应用 + for (auto ditem : deb->depends()) { + for (auto dinfo : ditem) { + Package *depend = packageWithArch(dinfo.packageName(), deb->architecture()); + if (depend) { + if (depend->name() == "deepin-elf-verify") { //deepi-elf-verify 是amd64架构非i386 + dependList << depend->name(); + } else { + dependList << depend->name() + ":" + depend->architecture(); + } + if (dinfo.packageName().contains("deepin-wine")) { // 如果依赖中出现deepin-wine字段。则是wine应用 + qDebug() << deb->packageName() << "is a wine Application"; + isWineApplication = true; + } + } + } + } + ret = checkDependsPackageStatus(choose_set, deb->architecture(), deb->depends()); + qDebug() << "PackagesManager:" << "Check" << deb->packageName() << "depends:" << ret.status; + + // 删除无用冗余的日志 + //由于卸载p7zip会导致wine依赖被卸载,再次安装会造成应用闪退,因此判断的标准改为依赖不满足即调用pkexec + //fix bug: https://pms.uniontech.com/zentao/bug-view-45734.html + if (isWineApplication && ret.status != DebListModel::DependsOk) { //增加是否是wine应用的判断 + qDebug() << "PackagesManager:" << "Unsatisfied dependency: " << ret.package; + if (!m_dependInstallMark.contains(index)) { + if (!dthread->isRunning()) { + m_dependInstallMark.append(index); + qDebug() << "PackagesManager:" << "command install depends:" << dependList; + dthread->setDependsList(dependList, index); + dthread->setBrokenDepend(ret.package); + dthread->run(); + } + } + ret.status = DebListModel::DependsBreak; //只要是下载,默认当前wine应用依赖为break + } + } + } + if (ret.isBreak()) Q_ASSERT(!ret.package.isEmpty()); + + m_packageDependsStatus[index] = ret; + + if (ret.status == DebListModel::DependsAvailable) { + const auto list = packageAvailableDepends(index); + qDebug() << "PackagesManager:" << "Available depends list:" << list.size() << list; + } + delete deb; + 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); + + DebFile *deb = new DebFile(m_preparedPackages[index]); + + const QString packageName = deb->packageName(); + const QString packageArch = deb->architecture(); + Backend *b = m_backendFuture.result(); + Package *p = b->package(packageName + ":" + packageArch); +// Package *p = b->package(m_preparedPackages[index]->packageName()); + delete deb; + return p->installedVersion(); +} + +const QStringList PackagesManager::packageAvailableDepends(const int index) +{ + Q_ASSERT(m_packageDependsStatus.contains(index)); + Q_ASSERT(m_packageDependsStatus[index].isAvailable()); + + DebFile *deb = new DebFile(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 + delete deb; + 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 (Package::compareVersion(dep->installedVersion(), info.packageVersion()) < 0) { + Backend *b = m_backendFuture.result(); + Package *p = b->package(dep->name() + resolvMultiArchAnnotation(QString(), dep->architecture())); + if (p) + choosed_set << dep->name() + resolvMultiArchAnnotation(QString(), dep->architecture()); + else + choosed_set << dep->name() + " not found"; + } + + if (!isConflictSatisfy(debArch, dep->conflicts()).is_ok()) { + qDebug() << "PackagesManager:" << "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() << "PackagesManager:" << "depends error in choose candidate" << dep->name(); + continue; + } + + choosed = true; + choosed_set << choosed_name; + packageCandidateChoose(choosed_set, debArch, dep->depends()); + break; + } + + Q_ASSERT(choosed); +} + +QMap PackagesManager::specialPackage() +{ + QMap sp; + sp.insert("deepin-wine-plugin-virtual", "deepin-wine-helper"); + sp.insert("deepin-wine32", "deepin-wine"); + + return sp; +} + +const QStringList PackagesManager::packageReverseDependsList(const QString &packageName, const QString &sysArch) +{ + Package *package = packageWithArch(packageName, sysArch); + Q_ASSERT(package); + + QSet ret{packageName}; + QQueue testQueue; + + for (const auto &item : package->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; + if (p->suggestsList().contains(packageName)) continue; + // fix bug: https://pms.uniontech.com/zentao/bug-view-37220.html dde相关组件特殊处理. + //修复dde会被动卸载但是不会提示的问题 + //if (item.contains("dde")) continue; + ret << item; + + // fix bug:https://pms.uniontech.com/zentao/bug-view-37220.html + if (specialPackage().contains(item)) { + testQueue.append(specialPackage()[item]); + } + // append new reqiure list + for (const auto &r : p->requiredByList()) { + if (ret.contains(r) || testQueue.contains(r)) continue; + Package *subPackage = packageWithArch(r, sysArch); + if (!subPackage || !subPackage->isInstalled()) + continue; + if (subPackage->recommendsList().contains(item)) + continue; + if (subPackage->suggestsList().contains(item)) + continue; + testQueue.append(r); + } + } + // remove self + ret.remove(packageName); + + return ret.toList(); +} + +void PackagesManager::reset() +{ + m_errorIndex.clear(); + m_dependInstallMark.clear(); + m_preparedPackages.clear(); + m_packageInstallStatus.clear(); + m_packageDependsStatus.clear(); + m_appendedPackagesMd5.clear(); + + //reloadCache必须要加 + m_backendFuture.result()->reloadCache(); +} + +void PackagesManager::resetInstallStatus() +{ + m_packageInstallStatus.clear(); + m_packageDependsStatus.clear(); + //reloadCache必须要加 + m_backendFuture.result()->reloadCache(); +} + +void PackagesManager::resetPackageDependsStatus(const int index) +{ + if (!m_packageDependsStatus.contains(index)) return; + + if (m_packageDependsStatus.contains(index)) { + if ((m_packageDependsStatus[index].package == "deepin-wine") && m_packageDependsStatus[index].status != DebListModel::DependsOk) { + return; + } + } + // reload backend cache + //reloadCache必须要加 + m_backendFuture.result()->reloadCache(); + m_packageDependsStatus.remove(index); +} + +void PackagesManager::removePackage(const int index, QList listDependInstallMark) +{ + DebFile *deb = new DebFile(m_preparedPackages[index]); + const auto md5 = deb->md5Sum(); + delete deb; + //m_appendedPackagesMd5.remove(m_preparedMd5[index]); + m_appendedPackagesMd5.remove(md5); + m_preparedPackages.removeAt(index); + m_preparedMd5.removeAt(index); + + m_dependInstallMark.clear(); + if (listDependInstallMark.size() > 1) { + for (int i = 0; i < listDependInstallMark.size(); i++) { + if (index > listDependInstallMark[i]) { + m_dependInstallMark.append(listDependInstallMark[i]); + } else if (index != listDependInstallMark[i]) { + m_dependInstallMark.append(listDependInstallMark[i] - 1); + } + } + } + + QList t_errorIndex; + if (m_errorIndex.size() > 0) { + for (int i = 0; i < m_errorIndex.size(); i++) { + if (index > m_errorIndex[i]) { + t_errorIndex.append(m_errorIndex[i]); + } else if (index != m_errorIndex[i]) { + t_errorIndex.append(m_errorIndex[i] - 1); + } + } + } + m_errorIndex.clear(); + m_errorIndex = t_errorIndex; + + m_packageInstallStatus.clear(); + //m_packageDependsStatus.clear(); + if (m_packageDependsStatus.contains(index)) { + if (m_packageDependsStatus.size() > 1) { + QMapIterator MapIteratorpackageDependsStatus(m_packageDependsStatus); + QList listpackageDependsStatus; + int iDependIndex = 0; + while (MapIteratorpackageDependsStatus.hasNext()) { + MapIteratorpackageDependsStatus.next(); + if (index > MapIteratorpackageDependsStatus.key()) + listpackageDependsStatus.insert(iDependIndex++, MapIteratorpackageDependsStatus.value()); + else if (index != MapIteratorpackageDependsStatus.key()) { + listpackageDependsStatus.append(MapIteratorpackageDependsStatus.value()); + } + } + m_packageDependsStatus.clear(); + for (int i = 0; i < listpackageDependsStatus.size(); i++) + m_packageDependsStatus.insert(i, listpackageDependsStatus[i]); + } else { + m_packageDependsStatus.clear(); + } + } +} + +bool PackagesManager::appendPackage(QString debPackage) +{ + qDebug() << "PackagesManager:" << "append Package" << debPackage; + // 创建软链接,修复路径中存在空格时可能会安装失败的问题。 + if (debPackage.contains(" ")) { + QApt::DebFile *p = new DebFile(debPackage); + debPackage = SymbolicLink(debPackage, p->packageName()); + qDebug() << "PackagesManager:" << "There are spaces in the path, add a soft link" << debPackage; + delete p; + } + QApt::DebFile *p = new DebFile(debPackage); + + const auto md5 = p->md5Sum(); + if (m_appendedPackagesMd5.contains(md5)) return false; + + m_preparedPackages << debPackage; + m_appendedPackagesMd5 << md5; + m_preparedMd5 << md5; + + delete p; + return true; +} + +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() << "PackagesManager:" << "depends break because package" << package_name << "not available"; + return PackageDependsStatus::_break(package_name); + } + + 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() << "PackagesManager:" << "availble by upgrade package" << p->name() + ":" + p->architecture() << "from" + << installedVersion << "to" << mirror_version; + // 修复卸载p7zip导致deepin-wine-helper被卸载的问题,Available 添加packageName + return PackageDependsStatus::available(p->name()); + } + } + + qDebug() << "PackagesManager:" << "depends break by" << p->name() << p->architecture() << dependencyInfo.packageVersion(); + qDebug() << "PackagesManager:" << "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() << "PackagesManager:" << "depends break by" << p->name() << p->architecture() << dependencyInfo.packageVersion(); + qDebug() << "PackagesManager:" << "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() << "PackagesManager:" << "multiple architecture installed: " << p->name() << p->version() << p->architecture() << "but now need" + << tp->name() << tp->version() << tp->architecture(); + return PackageDependsStatus::_break(p->name() + ":" + p->architecture()); + } + } + } + // let's check conflicts + if (!isConflictSatisfy(architecture, p).is_ok()) { + qDebug() << "PackagesManager:" << "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() << "PackagesManager:" << "find a exist provider: " << ap->name(); + return PackageDependsStatus::ok(); + } + + // provider is ok, switch to provider. + if (isConflictSatisfy(architecture, ap).is_ok()) { + qDebug() << "PackagesManager:" << "switch to depends a new provider: " << ap->name(); + choosed_set << ap->name(); + return PackageDependsStatus::ok(); + } + } + + qDebug() << "PackagesManager:" << "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() << "PackagesManager:" << "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() << "PackagesManager:" << "depends break by direct depends" << p->name() << p->architecture() << r.package; + return PackageDependsStatus::_break(p->name()); + } + + qDebug() << "PackagesManager:" << "Check finshed for package" << p->name(); + + // 修复卸载p7zip导致deepin-wine-helper被卸载的问题,Available 添加packageName + return PackageDependsStatus::available(p->name()); + } +} + +Package *PackagesManager::packageWithArch(const QString &packageName, const QString &sysArch, + const QString &annotation) +{ + Backend *b = m_backendFuture.result(); + Package *p = b->package(packageName + resolvMultiArchAnnotation(annotation, sysArch)); + do { + // change: 按照当前支持的CPU架构进行打包。取消对deepin-wine的特殊处理 + if (!p) p = b->package(packageName); + if (p) break; + for (QString arch : b->architectures()) { + if (!p) p = b->package(packageName + ":" + arch); + if (p) break; + } + + } while (false); + + if (p) return p; + + qDebug() << "PackagesManager:" << "check virtual package providers for" << 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; +} + +/** + * @brief PackagesManager::SymbolicLink 创建软连接 + * @param previousName 原始路径 + * @param packageName 软件包的包名 + * @return 软链接的路径 + */ +QString PackagesManager::SymbolicLink(QString previousName, QString packageName) +{ + if (!mkTempDir()) { + qWarning() << "PackagesManager:" << "Failed to create temporary folder"; + return previousName; + } + return link(previousName, packageName); +} + +/** + * @brief PackagesManager::mkTempDir 创建软链接存放的临时目录 + * @return 创建目录的结果 + */ +bool PackagesManager::mkTempDir() +{ + QDir tempPath(m_tempLinkDir); + if (!tempPath.exists()) { + return tempPath.mkdir(m_tempLinkDir); + } else { + return true; + } +} + +/** + * @brief PackagesManager::rmTempDir 删除存放软链接的临时目录 + * @return 删除临时目录的结果 + */ +bool PackagesManager::rmTempDir() +{ + QDir tempPath(m_tempLinkDir); + if (tempPath.exists()) { + return tempPath.removeRecursively(); + } else { + return true; + } +} + +/** + * @brief PackagesManager::link 创建软链接 + * @param linkPath 原文件的路径 + * @param packageName 包的packageName + * @return 软链接之后的路径 + */ +QString PackagesManager::link(QString linkPath, QString packageName) +{ + qDebug() << "PackagesManager: Create soft link for" << packageName; + QFile linkDeb(linkPath); + + //创建软链接时,如果当前临时目录中存在同名文件,即同一个名字的应用,考虑到版本可能有变化,将后续添加进入的包重命名为{packageName}_1 + //删除后再次添加会在临时文件的后面添加_1,此问题不影响安装。如果有问题,后续再行修改。 + int count = 1; + QString tempName = packageName; + while (true) { + QFile tempLinkPath(m_tempLinkDir + tempName); + if (tempLinkPath.exists()) { + tempName = packageName + "_" + QString::number(count); + qWarning() << "PackagesManager:" << "A file with the same name exists in the current temporary directory," + "and the current file name is changed to" + << tempName; + count++; + } else { + break; + } + } + if (linkDeb.link(linkPath, m_tempLinkDir + tempName)) + return m_tempLinkDir + tempName; + else { + qWarning() << "PackagesManager:" << "Failed to create Symbolick link error."; + return linkPath; + } +} + +PackagesManager::~PackagesManager() +{ + // 删除 临时目录,会尝试四次,四次失败后退出。 + int rmTempDirCount = 0; + while (true) { + if (rmTempDir()) + break; + qWarning() << "PackagesManager:" << "Failed to delete temporary folder, Current attempts:" << rmTempDirCount << "/3"; + if (rmTempDirCount > 3) { + qWarning() << "PackagesManager:" << "Failed to delete temporary folder, Exit application"; + break; + } + rmTempDirCount++; + } + delete dthread; + PERF_PRINT_END("POINT-02"); //关闭应用 +} + diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/manager/packagesmanager.h deepin-deb-installer-5.7.0.17/src/deb_installer/manager/packagesmanager.h --- deepin-deb-installer-5.0.0/src/deb_installer/manager/packagesmanager.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/manager/packagesmanager.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,139 @@ +/* + * 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 "utils/result.h" + +#include +#include + +#include +#include +#include +#include + +typedef Result ConflictResult; + +class PackageDependsStatus; +class DebListModel; +class DealDependThread; +class PackagesManager : public QObject +{ + Q_OBJECT + + friend class DebListModel; + +public: + explicit PackagesManager(QObject *parent = nullptr); + ~PackagesManager(); + +public slots: + void DealDependResult(int iAuthRes, int iIndex, QString dependName); + +signals: + void DependResult(int, int, QString); + void enableCloseButton(bool); + +public: + bool isBackendReady(); + bool isArchError(const int idx); + +public: + int packageInstallStatus(const int index); + + const QString packageInstalledVersion(const int index); + + const ConflictResult packageConflictStat(const int index); + + const QStringList packageAvailableDepends(const int index); + PackageDependsStatus getPackageDependsStatus(const int index); + const QStringList packageReverseDependsList(const QString &packageName, const QString &sysArch); + + QString package(const int index) const { return m_preparedPackages[index]; } + QApt::Backend *backend() const { return m_backendFuture.result(); } + + bool appendPackage(QString debPackage); + + void removePackage(const int index, QList listDependInstallMark); + + void reset(); + void resetPackageDependsStatus(const int index); + +public: + QList m_errorIndex; + +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()); + + void packageCandidateChoose(QSet &choosed_set, const QString &debArch, + const QList &dependsList); + void packageCandidateChoose(QSet &choosed_set, const QString &debArch, + const QApt::DependencyItem &candidateItem); + + const ConflictResult isInstalledConflict(const QString &packageName, const QString &packageVersion, + const QString &packageArch); + const ConflictResult isConflictSatisfy(const QString &arch, QApt::Package *package); + const ConflictResult isConflictSatisfy(const QString &arch, const QList &conflicts); + + void resetInstallStatus(); + +private: + QFuture m_backendFuture; + + QList m_preparedPackages; + QList m_preparedMd5; + QSet m_appendedPackagesMd5; + + QMap m_packageInstallStatus; + QMap m_packageDependsStatus; + + int m_DealDependIndex = -1; + DealDependThread *dthread = nullptr; + QList m_dependInstallMark; + +private: + + // fix bug:https://pms.uniontech.com/zentao/bug-view-37220.html + // 卸载deepin-wine-plugin-virture 时无法卸载deepin-wine-helper. Temporary solution:Special treatment for these package + QMap specialPackage(); + +private: + //使用软连接方式解决文件路径中存在空格的问题。 + QString SymbolicLink(QString previousName, QString packageName); + QString link(QString linkPath, QString packageName); + bool mkTempDir(); + bool rmTempDir(); + +private: + const QString m_tempLinkDir = "/tmp/LinkTemp/"; +}; + +#endif // PACKAGESMANAGER_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/model/deblistmodel.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/model/deblistmodel.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/model/deblistmodel.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/model/deblistmodel.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,1364 @@ +/* + * 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 "manager/packagesmanager.h" +#include "manager/PackageDependsStatus.h" +#include "view/pages/AptConfigMessage.h" +#include "utils/utils.h" +#include "utils/DebugTimeManager.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +using namespace QApt; + +/** + * @brief isDpkgRunning 判断当前dpkg 是否在运行 + * @return + */ +bool isDpkgRunning() +{ + QProcess proc; + + // 获取当前的进程信息 + proc.start("ps", QStringList() << "-e" + << "-o" + << "comm"); + proc.waitForFinished(); + + // 获取进程信息的数据 + const QString processOutput = proc.readAllStandardOutput(); + + // 查看进程信息中是否存在dpkg 存在说明已经正在安装其他包 + if (processOutput.contains("dpkg")) return true; //更换判断的方式 + + return false; +} + +/** + * @brief netErrors + * @return the List of The Error infomations. + * 无网络安装依赖时,库返回错误为FetechError 偶尔为CommitError + * 此函数处理库返回CommitError时,网络错误的各种情况,如果错误信息中包含此列表中的信息,则判断为网络原因。 + */ +const QStringList netErrors() +{ + QStringList errorDetails; + errorDetails << "Address family for hostname not supported"; + errorDetails << "Temporary failure resolving"; + errorDetails << "Network is unreachable"; + errorDetails << "Cannot initiate the connection to"; + return errorDetails; +} + +/** + * @brief workerErrorString 根据安装失败的代码显示安装失败的原因。 + * @param errorCode 库或自定义的安装失败代码 + * @param errorInfo 库返回的或自定义的安装错误的原因 + * @return 要显示的安装失败的原因 + */ +const QString workerErrorString(const int errorCode, const QString errorInfo) +{ + // 安装配置包时,没有得到授权 + if (errorCode == ConfigAuthCancel) { + return QApplication::translate("DebListModel", + "Authentication failed"); + } + switch (errorCode) { + 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 for updates in Control Center"); + case DiskSpaceError: + return QApplication::translate("DebListModel", "Installation failed, insufficient disk space"); //存储空间不足 + // lockError 也会报空间不足的错误 + case LockError: + if (errorInfo.contains("No space left on device")) { + return QApplication::translate("DebListModel", "Installation failed, insufficient disk space"); + } + break; + // fix bug:39834 网络断开时,偶现安装deb包失败时提示语不显示 + case CommitError: + //commit Error 中会报网络错误 + for (auto error : netErrors()) { + if (errorInfo.contains(error) && errorInfo.contains("http")) + return QApplication::translate("DebListModel", "Installation failed, please check your network connection"); + } + // commitError 有时会出现空间不足的错误 + if (errorInfo.contains("No space left on device")) { + 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)) +{ + + connect(this, &DebListModel::workerFinished, this, &DebListModel::upWrongStatusRow); //安装成功后,将安装失败的包上滚 + + + // 配置包安装的进程 + m_procInstallConfig = new QProcess; + m_procInstallConfig->setProcessChannelMode(QProcess::MergedChannels); //获取子进程所有的输出数据 + m_procInstallConfig->setReadChannel(QProcess::StandardOutput); //QProcess 当前从标准输出中读取所有的数据 + + // 配置安装结束 + connect(m_procInstallConfig, static_cast(&QProcess::finished), this, &DebListModel::ConfigInstallFinish); + + // 配置安装的过程数据 + connect(m_procInstallConfig, &QProcess::readyReadStandardOutput, this, &DebListModel::ConfigReadOutput); + + // 向安装进程中写入配置信息(一般是配置的序号) + connect(AptConfigMessage::getInstance(), &AptConfigMessage::AptConfigInputStr, this, &DebListModel::ConfigInputWrite); + + //处理wine依赖安装的过程 + connect(m_packagesManager, &PackagesManager::DependResult, this, &DebListModel::DealDependResult); + + //安装wine依赖的时候不允许程序退出 + connect(m_packagesManager, &PackagesManager::enableCloseButton, this, &DebListModel::enableCloseButton); + + m_isVerifyDigital = checkSystemVersion(); +} + +/** + * @brief DebListModel::DealDependResult 根据依赖安装的进程标识,处理依赖安装的流程显示 + * @param iAuthRes 依赖安装的进度标识 + * @param iIndex 缺失依赖的包的index + * @param dependName 依赖的名称 + */ +void DebListModel::DealDependResult(int iAuthRes, int iIndex, QString dependName) +{ + switch (iAuthRes) { + case DebListModel::CancelAuth: + m_packageOperateStatus[iIndex] = Prepare; //取消授权后,缺失wine依赖的包的操作状态修改为prepare + break; + case DebListModel::AuthConfirm: //确认授权后,状态的修改由debinstaller进行处理 + break; + case DebListModel::AuthDependsSuccess: //安装成功后,状态的修改由debinstaller进行处理 + break; + case DebListModel::AuthDependsErr: //安装失败后,状态的修改由debinstaller进行处理 + break; + default: + break; + } + emit DependResult(iAuthRes, dependName); //发送信号,由debinstaller处理界面状态。 +} + +/** + * @brief DebListModel::isReady 判断当前库是否准备就绪 + * @return 库是否准备就绪 + */ +bool DebListModel::isReady() const +{ + return m_packagesManager->isBackendReady(); +} + +/** + * @brief DebListModel::preparedPackages 获取当前安装器内部的所有的包 + * @return 获取包的列表 + */ +const QList DebListModel::preparedPackages() const +{ + return m_packagesManager->m_preparedPackages; +} + +/** + * @brief DebListModel::first 获取安装器添加的第一个包 + * @return 第一个包的index + */ +QModelIndex DebListModel::first() const +{ + return index(0); +} + +/** + * @brief DebListModel::rowCount 获取model的行数 + * @param parent + * @return 当前软件包内部包的数量 + */ +int DebListModel::rowCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + + return m_packagesManager->m_preparedPackages.size(); +} + +/** + * @brief DebListModel::data 获取包的信息 + * @param index 包的index + * @param role 要获取的包的信息的类别 + * @return + */ +QVariant DebListModel::data(const QModelIndex &index, int role) const +{ + const int r = index.row(); + + const DebFile *deb = new DebFile(m_packagesManager->package(r)); + + QString packageName = deb->packageName(); //包名 + QString filePath = deb->filePath(); //包的路径 + QString version = deb->version(); //包的版本 + QString architecture = deb->architecture(); //包可用的架构 + QString shortDescription = deb->shortDescription(); //包的短描述 + delete deb; //删除该指针,以免内存泄露 + + switch (role) { + case WorkerIsPrepareRole: + return isWorkerPrepare(); //获取当前工作状态是否准备九局 + case ItemIsCurrentRole: + return m_currentIdx == index; //获取当前的index + case PackageNameRole: + return packageName; //获取当前index包的包名 + case PackagePathRole: + return filePath; //获取当前index包的路径 + case PackageVersionRole: + return version; //获取当前index包的版本 + case PackageVersionStatusRole: + return m_packagesManager->packageInstallStatus(r); //获取当前index包的安装状态 + case PackageDependsStatusRole: + return m_packagesManager->getPackageDependsStatus(r).status; //获取当前index包的依赖状态 + case PackageInstalledVersionRole: + return m_packagesManager->packageInstalledVersion(r); //获取当前index包在系统中安装的版本 + case PackageAvailableDependsListRole: + return m_packagesManager->packageAvailableDepends(r); //获取当前index包可用的依赖 + case PackageReverseDependsListRole: + return m_packagesManager->packageReverseDependsList(packageName, architecture); //获取依赖于当前index包的应用 + case PackageDescriptionRole: + return Utils::fromSpecialEncoding(shortDescription); //获取当前index包的短描述 + case PackageFailReasonRole: + return packageFailedReason(r); //获取当前index包的安装失败的原因 + case PackageOperateStatusRole: + if (m_packageOperateStatus.contains(r)) //获取当前包的操作状态 + return m_packageOperateStatus[r]; + else + return Prepare; + case Qt::SizeHintRole: //设置当前index的大小 + return QSize(0, 48); + + case Qt::AccessibleTextRole: + return packageName; + + default: + ; + } + + return QVariant(); +} + +/** + * @brief DebListModel::installPackages 开始安装 + * 安装之前状态初始化. + * 开始安装流程 + */ +void DebListModel::installPackages() +{ + Q_ASSERT_X(m_workerStatus == WorkerPrepare, Q_FUNC_INFO, "installer status error"); + if (m_workerStatus != WorkerPrepare) return; + + m_workerStatus = WorkerProcessing; //刷新包安装器的工作状态 + m_workerStatus_temp = m_workerStatus; + m_operatingIndex = 0; //初始化当前操作的index + m_operatingStatusIndex = 0; + m_InitRowStatus = false; //当前未初始化每个包的操作状态 + // start first + + initRowStatus(); //初始化包的操作状态 + installNextDeb(); //开始安装 +} + +/** + * @brief DebListModel::refreshAllDependsStatus 刷新获取所有依赖的状态 + */ +void DebListModel::refreshAllDependsStatus() +{ + // 遍历获取所有依赖的状态 + for (int i = 0; i < preparedPackages().size(); i++) { + m_packagesManager->getPackageDependsStatus(i); + } +} + +/** + * @brief DebListModel::uninstallPackage 卸载某一个包 + * @param idx 要卸载的包的index + */ +void DebListModel::uninstallPackage(const int idx) +{ + Q_ASSERT(idx == 0); + Q_ASSERT_X(m_workerStatus == WorkerPrepare, Q_FUNC_INFO, "uninstall status error"); + + m_workerStatus = WorkerProcessing; //刷新当前包安装器的工作状态 + m_workerStatus_temp = m_workerStatus; //保存工作状态 + m_operatingIndex = idx; //获取卸载的包的indx + // fix bug : 卸载失败时不提示卸载失败。 + m_operatingStatusIndex = idx; //刷新操作状态的index + + DebFile *deb = new DebFile(m_packagesManager->package(m_operatingIndex)); //获取到包 + PERF_PRINT_BEGIN("POINT-04", "packsize=" + QString::number(deb->installedSize()) + "b"); //卸载包开始 + + const QStringList rdepends = m_packagesManager->packageReverseDependsList(deb->packageName(), deb->architecture()); //检查是否有应用依赖到该包 + Backend *b = m_packagesManager->m_backendFuture.result(); + for (const auto &r : rdepends) { // 卸载所有依赖该包的应用(二者的依赖关系为depends) + if (b->package(r)) + b->markPackageForRemoval(r); + else + qDebug() << "DebListModel:" << "reverse depend" << r << "error ,please check it!"; + } + b->markPackageForRemoval(deb->packageName() + ':' + deb->architecture()); //卸载当前包 + + // uninstall + qDebug() << "DebListModel:" << "starting to remove package: " << deb->packageName() << rdepends; + + refreshOperatingPackageStatus(Operating); //刷新当前index的操作状态 + Transaction *trans = b->commitChanges(); + + // trans 进度change 链接 + connect(trans, &Transaction::progressChanged, this, &DebListModel::transactionProgressChanged); + + //详细状态信息(安装情况)展示链接 + connect(trans, &Transaction::statusDetailsChanged, this, &DebListModel::appendOutputInfo); + + // trans 运行情况(授权是否成功) + connect(trans, &Transaction::statusChanged, this, &DebListModel::onTransactionStatusChanged); + + // trans运行中出现错误 + 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指针 + + trans->run(); //开始卸载 + delete deb; +} + +/** + * @brief DebListModel::initDependsStatus 初始化index包依赖的状态 + * @param index 当前包的index + * 此处逻辑有问题 稍后修改 0927 + */ +void DebListModel::initDependsStatus(int index) +{ + const int packageCount = this->preparedPackages().size(); //获取当前包的数量 + if (index >= packageCount) //边界检查 + return; + for (int num = index; num < packageCount; num++) //初始化所有包的依赖 + this->index(num).data(DebListModel::PackageDependsStatusRole); +} + +/** + * @brief DebListModel::removePackage 从prepare列表中删除某一个包 + * @param idx 要删除的包的index + * 逻辑有问题,稍后修改 + */ +void DebListModel::removePackage(const int idx) +{ + Q_ASSERT_X(m_workerStatus == WorkerPrepare, Q_FUNC_INFO, "installer status error"); + + // 获取wine依赖不满足的包的下标 + //这个地方如果同时存在两个wine依赖不满足的包,删除之后可能会将两个包一起删除 + const int packageCount = this->preparedPackages().size(); //获取prepare列表中包的数量 + QList listdependInstallMark; //保存wine依赖的下表 + for (int num = 0; num < packageCount; num++) { + int dependsStatus = this->index(num).data(DebListModel::PackageDependsStatusRole).toInt(); //判断依赖状态 + if (dependsStatus != DependsOk) { //如果是wine依赖不满足,则标记 + QString failStr = this->index(num).data(DebListModel::PackageFailReasonRole).toString(); + if (failStr.contains("deepin-wine")) + listdependInstallMark.append(num); //将wine依赖不满足的包的下标放到标记列表中 + } + } + qDebug() << "DebListModel:" << "remove package: operate Status" << m_packageOperateStatus; + + // 去除操作状态 中的index + // 由于map 中没有序号的区别,因此,需要对idx之后的需要-1来调整 operateIndex + // 删除的时候 package的状态一定是prepare 其实可以全部删除之后再次重新添加。 + if (m_packageOperateStatus.size() > 1) { + QMapIterator MapIteratorOperateStatus(m_packageOperateStatus); //QMap指针 + QMap tmpOperateStatus; //临时列表 + while (MapIteratorOperateStatus.hasNext()) { + MapIteratorOperateStatus.next(); + // 删除operateStatus中的index + if (idx > MapIteratorOperateStatus.key()) // idx之前的下标不动 + tmpOperateStatus[MapIteratorOperateStatus.key()] = MapIteratorOperateStatus.value(); + else if (idx != MapIteratorOperateStatus.key()) { + tmpOperateStatus[MapIteratorOperateStatus.key() - 1] = MapIteratorOperateStatus.value(); //之后的下标全部-1 + } + } + m_packageOperateStatus = tmpOperateStatus; + } + qDebug() << "DebListModel:" << "operate Status after remove" << m_packageOperateStatus; + + m_packagesManager->removePackage(idx, listdependInstallMark); //在packageManager中删除标记的下标 +} + +/** + * @brief DebListModel::appendPackage 向安装器内部添加包 + * @param package 包的文件路径 + * @return 是否安装成功 + */ +bool DebListModel::appendPackage(QString package) +{ + Q_ASSERT_X(m_workerStatus == WorkerPrepare, Q_FUNC_INFO, "installer status error"); + return m_packagesManager->appendPackage(package); //添加包,并返回添加结果 +} + +/** + * @brief DebListModel::onTransactionErrorOccurred 处理trans过程中出现的错误 + */ +void DebListModel::onTransactionErrorOccurred() +{ + Q_ASSERT_X(m_workerStatus == WorkerProcessing, Q_FUNC_INFO, "installer status error"); + Transaction *trans = static_cast(sender()); + + //fix bug:39834 + //失败时刷新操作状态为failed,并记录失败原因 + refreshOperatingPackageStatus(Failed); + m_packageOperateStatus[m_operatingStatusIndex] = Failed; + + //记录失败代码与失败原因 + m_packageFailCode[m_operatingIndex] = trans->error(); + m_packageFailReason[m_operatingIndex] = trans->errorString(); + //fix bug: 点击重新后,授权码输入框弹出时反复取消输入,进度条已显示进度 + //取消安装后,Errorinfo被输出造成进度条进度不为0,现屏蔽取消授权错误。 + //授权错误不再输出到详细信息中 + if (!trans->errorString().contains("proper authorization was not provided")) + emit appendOutputInfo(trans->errorString()); + + const QApt::ErrorCode e = trans->error(); //trans错误的代码 + Q_ASSERT(e); + + qWarning() << "DebListModel:" << "Transaction Error:" << e << workerErrorString(e, trans->errorString()); + qWarning() << "DebListModel:" << "Error Infomation:" << trans->errorDetails() << trans->errorString(); + + if (trans->isCancellable()) trans->cancel(); + + //特殊处理授权错误 + if (e == AuthError) { + trans->deleteLater(); //删除 trans指针 + QTimer::singleShot(100 * 1, this, &DebListModel::checkBoxStatus); //检查授权弹窗的状态 如果弹窗仍然在只是超时,则底层窗口按钮不可用 + qDebug() << "DebListModel:" << "Authorization error"; + + // reset env + emit AuthCancel(); //发送授权被取消的信号 + emit lockForAuth(false); //取消授权锁定,设置按钮可用 + //EnableReCancelBtn在信号在checkBoxStatus已发送,修改为enableCloseButton + emit enableCloseButton(true); + m_workerStatus = WorkerPrepare; // 重置工作状态为准备态 + m_workerStatus_temp = m_workerStatus; + + PERF_PRINT_END("POINT-04"); //安装时间 + PERF_PRINT_END("POINT-05"); //授权框消失时间 + + return; + } + + // DO NOT install next, this action will finished and will be install next automatic. + trans->setProperty("exitStatus", QApt::ExitFailed); //设置trans的退出状态为 失败 + PERF_PRINT_END("POINT-04"); //安装时间 +} + +/** + * @brief DebListModel::onTransactionStatusChanged trans状态变化的槽函数 + * @param stat 变化后的Transaction状态 + */ +void DebListModel::onTransactionStatusChanged(TransactionStatus stat) +{ + switch (stat) { + case TransactionStatus::AuthenticationStatus: //等待授权 + emit lockForAuth(true); //设置底层窗口按钮不可用 + break; + case TransactionStatus::WaitingStatus: //当前操作在队列中等待操作 + emit lockForAuth(false); //设置底层窗口按钮可用 + break; + default: + ; + } + +} + +/** + * @brief DebListModel::getInstallFileSize 获取当前安装器内部准备安装的包的数量 + * @return 准备安装的包的数量 + */ +int DebListModel::getInstallFileSize() +{ + return m_packagesManager->m_preparedPackages.size(); +} + +/** + * @brief DebListModel::reset 重置状态 + * 工作状态重置为准备态 + * 当前操作的index置为0 + * 当前操作状态的index置为0 + * 清空操作状态列表 + * 清空错误代码和错误原因列表 + * 重置PackageManager + */ +void DebListModel::reset() +{ + m_workerStatus = WorkerPrepare; //工作状态重置为准备态 + m_workerStatus_temp = m_workerStatus; + m_operatingIndex = 0; //当前操作的index置为0 + m_operatingStatusIndex = 0; //当前操作状态的index置为0 + + m_packageOperateStatus.clear(); //清空操作状态列表 + m_packageFailCode.clear(); //清空错误原因列表 + m_packageFailReason.clear(); + m_packagesManager->reset(); //重置packageManager +} + +/** + * @brief DebListModel::reset_filestatus 重置包的状态 + * 重置包的操作状态 + * 重置包的错误状态 + */ +void DebListModel::reset_filestatus() +{ + m_packageOperateStatus.clear(); //重置包的操作状态 + m_packageFailReason.clear(); //重置包的错误状态 + m_packageFailCode.clear(); +} + +/** + * @brief DebListModel::bumpInstallIndex 批量安装流程控制 + * 安装流程控制: + * 安装完成后,判断后续是否还有下一个包等待安装 + * 全部安装成功后重置工作状态,发送结束信号,修改工作进度。 + */ +void DebListModel::bumpInstallIndex() +{ + Q_ASSERT_X(m_currentTransaction.isNull(), Q_FUNC_INFO, "previous transaction not finished"); + + + if (++m_operatingIndex == m_packagesManager->m_preparedPackages.size()) { + qDebug() << "congratulations, install finished !!!"; + m_workerStatus = WorkerFinished; //设置包安装器的工作状态为Finish + m_workerStatus_temp = m_workerStatus; + emit workerFinished(); //发送安装完成信号 + emit workerProgressChanged(100); //修改安装进度 + emit transactionProgressChanged(100); + PERF_PRINT_END("POINT-04"); //安装时间 + return; + } + ++ m_operatingStatusIndex; + emit onChangeOperateIndex(m_operatingIndex); //修改当前操作的下标 + // install next + qDebug() << "DebListModel:" << "install next deb package"; + PERF_PRINT_END("POINT-04"); //安装时间 + installNextDeb(); //安装下一个包 +} + +/** + * @brief DebListModel::refreshOperatingPackageStatus 刷新当前正在操作的包的状态 + * @param stat 要刷新的状态 + */ +void DebListModel::refreshOperatingPackageStatus(const DebListModel::PackageOperationStatus stat) +{ + m_packageOperateStatus[m_operatingStatusIndex] = stat; //将失败包的索引和状态修改保存,用于更新 + + const QModelIndex idx = index(m_operatingStatusIndex); + + emit dataChanged(idx, idx); //发送状态已经修改的信号 +} + +/** + * @brief DebListModel::packageFailedReason 获取包安装错误原因的详细描述 + * @param idx 安装发生错误的包的下标 + * @return 错误的详细原因 + * + * 根据 依赖安装情况,架构情况,冲突情况等初步判断包安装失败或不能安装的原因并返回 + */ +QString DebListModel::packageFailedReason(const int idx) const +{ + const auto stat = m_packagesManager->getPackageDependsStatus(idx); //获取包的依赖状态 + if (m_packagesManager->isArchError(idx)) return tr("Unmatched package architecture"); //判断是否架构冲突 + if (stat.isBreak() || stat.isAuthCancel()) { //依赖状态错误 + if (!stat.package.isEmpty()) { + if (m_packagesManager->m_errorIndex.contains(idx)) + return tr("Failed to install %1").arg(stat.package); //wine依赖安装失败 + return tr("Broken dependencies: %1").arg(stat.package); //依赖不满足 + } + + const auto conflict = m_packagesManager->packageConflictStat(idx); //获取冲突情况 + if (!conflict.is_ok()) return tr("Broken dependencies: %1").arg(conflict.unwrap()); //依赖冲突 + Q_UNREACHABLE(); + } + Q_ASSERT(m_packageOperateStatus.contains(idx)); + Q_ASSERT(m_packageOperateStatus[idx] == Failed); + if (!m_packageFailCode.contains(idx)) + qDebug() << "DebListModel:" << "failed to get reason" << m_packageFailCode.size() << idx; + Q_ASSERT(m_packageFailCode.contains(idx)); + + return workerErrorString(m_packageFailCode[idx], m_packageFailReason[idx]); //根据错误代码和错误原因返回具体的错误原因 +} + +/** + * @brief DebListModel::onTransactionFinished transaction结束的槽函数 + * + */ +void DebListModel::onTransactionFinished() +{ + Q_ASSERT_X(m_workerStatus == WorkerProcessing, Q_FUNC_INFO, "installer status error"); + Transaction *trans = static_cast(sender()); // 获取trans指针 + + // prevent next signal + disconnect(trans, &Transaction::finished, this, &DebListModel::onTransactionFinished); //不再接收trans结束的信号 + + // report new progress + //更新安装进度(批量安装进度控制) + int progressValue = static_cast(100. * (m_operatingIndex + 1) / m_packagesManager->m_preparedPackages.size()); + emit workerProgressChanged(progressValue); + + qDebug() << "DebListModel:" << "transaciont finished with exit status:" << trans->exitStatus(); + if (trans->exitStatus()) { + //安装失败 + qWarning() << trans->error() << trans->errorDetails() << trans->errorString(); + //保存错误原因和错误代码 + m_packageFailCode[m_operatingStatusIndex] = trans->error(); + m_packageFailReason[m_operatingStatusIndex] = trans->errorString(); + + //刷新操作状态 + refreshOperatingPackageStatus(Failed); + emit appendOutputInfo(trans->errorString()); + } else if (m_packageOperateStatus.contains(m_operatingStatusIndex) && + m_packageOperateStatus[m_operatingStatusIndex] != Failed) { + //安装成功 + refreshOperatingPackageStatus(Success); + + //准备安装下一个包,修改下一个包的状态为正在安装状态 + if (m_operatingStatusIndex < m_packagesManager->m_preparedPackages.size() - 1) { + m_packageOperateStatus[m_operatingStatusIndex + 1] = Waiting; + } + } + // delete trans; + trans->deleteLater(); + m_currentTransaction = nullptr; + bumpInstallIndex(); //进入安装进度控制 +} + +/** + * @brief DebListModel::onDependsInstallTransactionFinished 依赖安装结束的槽函数 + * + * 普通依赖安装结束后开始安装拖入的包 + */ +void DebListModel::onDependsInstallTransactionFinished()//依赖安装关系满足 +{ + Q_ASSERT_X(m_workerStatus == WorkerProcessing, Q_FUNC_INFO, "installer status error"); + Transaction *trans = static_cast(sender()); //获取transaction指针 + + const auto ret = trans->exitStatus(); + + if (ret) qWarning() << trans->error() << trans->errorDetails() << trans->errorString(); //transaction发生错误 + + if (ret) { + // record error + // 记录错误原因和错误代码 + m_packageFailCode[m_operatingStatusIndex] = trans->error(); + m_packageFailReason[m_operatingStatusIndex] = trans->errorString(); + 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(); //依赖安装成功,开始安装这个包 +} + +/** + * @brief DebListModel::setEndEnable 授权框消失之后,设置底层按钮可用 + */ +void DebListModel::setEndEnable() +{ + emit EnableReCancelBtn(true); +} + +/** + * @brief DebListModel::checkBoxStatus check 授权弹出窗口的弹出状态 + * 根据授权弹出窗口的弹出状态判断当前底层安装按钮是否可用 + */ +void DebListModel::checkBoxStatus() +{ + QTime initTime = QTime::currentTime(); //获取弹出的时间 + Transaction *trans = nullptr; + auto *const backend = m_packagesManager->m_backendFuture.result(); + trans = backend->commitChanges(); + + QTime stopTime = QTime::currentTime(); + int elapsed = initTime.msecsTo(stopTime); //获取commit授权被取消的时间 + if (elapsed > 20000) { //如果时间超过20ms则不断判断当前窗口是否超时 + QTimer::singleShot(100 * 1, this, &DebListModel::checkBoxStatus); + return; + } + + if (trans != nullptr) { + if (trans->isCancellable()) { //当前transaction已经被取消 + trans->cancel(); + QTimer::singleShot(100 * 1, this, &DebListModel::setEndEnable); //设置按钮可用 + } else { + QTimer::singleShot(100 * 1, this, &DebListModel::checkBoxStatus); //当前Transaction还在运行中,继续等待并判断 + } + } else { + qDebug() << "DebListModel:" << "Transaction is Nullptr"; + } +} + +/** + * @brief DebListModel::installDebs 安装当前包 + * 发送启动信号 + * 检查安装环境 + * 判断依赖是否可用 + * 下载普通依赖 + * 安装 + */ +void DebListModel::installDebs() +{ + DebFile deb(m_packagesManager->package(m_operatingIndex)) ; + PERF_PRINT_BEGIN("POINT-04", "packsize=" + QString::number(deb.installedSize()) + "b"); //安装时间 + 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"); + + //在判断dpkg启动之前就发送开始安装的信号,并在安装信息中输出 dpkg正在运行的信息。 + emit onStartInstall(); + if (isDpkgRunning()) { + qDebug() << "DebListModel:" << "dpkg running, waitting..."; + // 缩短检查的时间,每隔1S检查当前dpkg是否正在运行。 + QTimer::singleShot(1000 * 1, this, &DebListModel::installNextDeb); + emit appendOutputInfo("dpkg running, waitting..."); //发送提示,告知用户dpkg正在运行 + return; + } + + // fetch next deb + auto *const backend = m_packagesManager->m_backendFuture.result(); + + Transaction *trans = nullptr; + + // reset package depends status + m_packagesManager->resetPackageDependsStatus(m_operatingStatusIndex); + + // check available dependencies + const auto dependsStat = m_packagesManager->getPackageDependsStatus(m_operatingStatusIndex); + if (dependsStat.isBreak() || dependsStat.isAuthCancel()) { //依赖不满足或者下载wine依赖时授权被取消 + refreshOperatingPackageStatus(Failed); //刷新错误状态 + m_packageFailCode.insert(m_operatingStatusIndex, -1); //保存错误原因 + bumpInstallIndex(); //开始下一步的安装流程 + return; + } else if (dependsStat.isAvailable()) { + // 依赖可用 但是需要下载 + Q_ASSERT_X(m_packageOperateStatus[m_operatingStatusIndex], 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); + //获取到可用的依赖包并根据后端返回的结果判断依赖包的安装结果 + for (auto const &p : availableDepends) { + if (p.contains(" not found")) { //依赖安装失败 + refreshOperatingPackageStatus(Failed); //刷新当前包的状态 + m_packageFailCode.insert(m_operatingStatusIndex, DownloadDisallowedError); //记录错误代码与错误原因 + m_packageFailReason.insert(m_operatingStatusIndex, p); + emit appendOutputInfo(m_packagesManager->package(m_operatingIndex) + "\'s depend " + " " + p); //输出错误原因 + bumpInstallIndex(); //开始安装下一个包或结束安装 + return; + } + backend->markPackageForInstall(p); //开始安装依赖包 + } + + //安装 + qDebug() << "DebListModel:" << "install" << deb.packageName() << "dependencies: " << availableDepends; + + trans = backend->commitChanges(); + //依赖安装结果处理 + connect(trans, &Transaction::finished, this, &DebListModel::onDependsInstallTransactionFinished); + } else { + //开始安装当前包 + qDebug() << "DebListModel:" << "starting to install package: " << deb.packageName(); + + PERF_PRINT_BEGIN("POINT-05", "packsize=" + QString::number(deb.installedSize()) + "b"); + trans = backend->installFile(deb);//触发Qapt授权框和安装线程 + + // 进度变化和结束过程处理 + 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(); +} + +/** + * @brief DebListModel::showNoDigitalErrWindow 没有有效的数字签名时弹出对应的错误窗口 + */ +void DebListModel::showNoDigitalErrWindow() +{ + DDialog *Ddialog = new DDialog(); + //设置窗口焦点 + //fix bug:https://pms.uniontech.com/zentao/bug-view-44837.html + Ddialog->setFocusPolicy(Qt::TabFocus); + + //设置弹出窗口为模态窗口 + Ddialog->setModal(true); + + //设置窗口始终置顶 + Ddialog->setWindowFlag(Qt::WindowStaysOnTopHint); + + // 设置弹出窗口显示的信息 + Ddialog->setTitle(tr("Unable to install")); + Ddialog->setMessage(QString(tr("This package does not have a valid digital signature"))); + Ddialog->setIcon(QIcon::fromTheme("di_popwarning")); + Ddialog->addButton(QString(tr("OK")), true, DDialog::ButtonNormal); + Ddialog->show(); + QPushButton *btnOK = qobject_cast(Ddialog->getButton(0)); + + // fix bug:44837 https://pms.uniontech.com/zentao/bug-view-44837.html + btnOK->setFocusPolicy(Qt::TabFocus); + btnOK->setFocus(); + // 点击弹出窗口的关闭按钮 + connect(Ddialog, &DDialog::aboutToClose, this, [ = ] { + if (preparedPackages().size() > 1) //批量安装 + { + refreshOperatingPackageStatus(VerifyFailed); //刷新操作状态 + bumpInstallIndex(); //跳过当前包 + return; + } else if (preparedPackages().size() == 1) + { + exit(0); //单包安装 直接退出 + } + }); + + //点击弹出窗口的确定按钮 + connect(btnOK, &DPushButton::clicked, this, [ = ] { + if (preparedPackages().size() > 1) //批量安装 + { + refreshOperatingPackageStatus(VerifyFailed); //刷新操作状态 + bumpInstallIndex(); //跳过当前包 + return; + } else if (preparedPackages().size() == 1) //单包安装 + { + exit(0); //直接退出 + } + }); +} + +/** + * @brief DebListModel::checkSystemVersion 检查当前操作系统的版本,判断是否需要验证签名 + * @return 是否需要验证签名 + * + * 个人版专业版 非开模式需要验证签名 + * 服务器版 没有开发者模式,默认不验证签名 + * 社区版默认开发者模式,不验证签名。 + * 此部分修改,无法影响control依赖,服务器版与社区版需要在Control文件中去除deepin-elf-sign-tool依赖 + * 已经有更新的接口,稍后需要更新 + * PS: 2020/10/12 已经更新 + */ +bool DebListModel::checkSystemVersion() +{ + // add for judge OS Version + // 修改获取系统版本的方式 此前为 DSysInfo::deepinType() + switch (Dtk::Core::DSysInfo::uosEditionType()) { //获取系统的类型 + case Dtk::Core::DSysInfo::UosProfessional: //专业版 + case Dtk::Core::DSysInfo::UosHome: { //个人版 + QDBusInterface Installer("com.deepin.deepinid", "/com/deepin/deepinid", "com.deepin.deepinid"); + bool deviceMode = Installer.property("DeviceUnlocked").toBool(); // 判断当前是否处于开发者模式 + qDebug() << "DebListModel:" << "system editon:" << Dtk::Core::DSysInfo::uosEditionName() << "develop mode:" << deviceMode; + return deviceMode; + } + case Dtk::Core::DSysInfo::UosCommunity: //社区版 不验证签名 + case Dtk::Core::DSysInfo::UosEnterprise: //服务器版 + return true; + default: + return true; + } +} + +/** + * @brief DebListModel::checkDigitalSignature 验证开发者模式与数字签名 + * @return 是否能够安装当前包 + * 如果当前处于开发者模式或处于非开发者模式但有数字签名 则验证成功 + * 如果处于非开模式且无数字签名。则验证失败 + */ +bool DebListModel::checkDigitalSignature() +{ + if (m_isVerifyDigital){ + qInfo()<<"The developer mode is currently enabled, and the digital signature is not verified"; + return true; + } + int digitalSigntual = Utils::Digital_Verify(m_packagesManager->package(m_operatingIndex)); //非开模式,判断是否有数字签名 + switch (digitalSigntual) { + case Utils::VerifySuccess: //签名验证成功 + return true; + case Utils::DebfileInexistence: + case Utils::ExtractDebFail: + case Utils::DebVerifyFail: + case Utils::OtherError: + return false; + default: + return false; + } +} + +/** + * @brief DebListModel::installNextDeb + * 检查签名认证结果 + * 判断是否当前包是否需要配置 + */ +void DebListModel::installNextDeb() +{ + if (!checkDigitalSignature()) { //非开发者模式且数字签名验证失败 + showNoDigitalErrWindow(); //演出错误窗口 + } else { + QString sPackageName = m_packagesManager->m_preparedPackages[m_operatingIndex]; + QStringList strFilePath; + if (checkTemplate(sPackageName)) { //检查当前包是否需要配置 + rmdir(); //删除临时路径 + qDebug() << "DebListModel:" << "command install" << sPackageName; + m_procInstallConfig->start("pkexec", QStringList() << "deepin-deb-installer-dependsInstall" << "InstallConfig" << sPackageName); + } else { + qDebug() << "DebListModel:" << "normal install" << sPackageName; + installDebs(); //普通安装 + } + } +} + +/** + * @brief DebListModel::rmdir 删除临时目录 + */ +void DebListModel::rmdir() +{ + QDir filePath(tempPath); + if (filePath.exists()) { + if (filePath.removeRecursively()) { + qDebug() << "DebListModel:" << "remove temporary path success"; + } else { + qDebug() << "DebListModel:" << "remove temporary path failed"; + } + } +} + +/** + * @brief DebListModel::checkTemplate 检查template文件是否存在 + * @param debPath 包的路径 + * @return template是否存在 + * 根据template 来判断当前包是否需要配置 + */ +bool DebListModel::checkTemplate(QString debPath) +{ + rmdir(); + getDebian(debPath); + QFile templates(tempPath + "/templates"); + if (templates.exists()) { + qDebug() << "DebListModel:" << "Check that the template file exists"; + return true; + } + return false; +} +/** + * @brief DebListModel::mkdir 创建临时文件夹 + * @return 是否创建成功。 + */ +bool DebListModel::mkdir() +{ + QDir filePath(tempPath); //获取配置包的临时路径 + + if (!filePath.exists()) { //当前临时路径不存在 + return filePath.mkdir(tempPath); //删除临时路径,并返回删除结果 + } + return true; +} + +/** + * @brief DebListModel::getDebian + * @param debPath 包的路径 + * 通过dpkg获取当前包的DEBIAN文件 + */ +void DebListModel::getDebian(QString debPath) +{ + QProcess *m_pDpkg = new QProcess; + + if (!mkdir()) { //创建临时路径 + qWarning() << "check error mkdir" << tempPath << "failed"; //创建失败 + return; + } + m_pDpkg->start("dpkg", QStringList() << "-e" << debPath << tempPath); //获取DEBIAN文件,查看当前包是否需要配置 + m_pDpkg->waitForFinished(); + QString getDebianProcessErrInfo = m_pDpkg->readAllStandardError(); + if (!getDebianProcessErrInfo.isEmpty()) { + qDebug() << "DebListModel:" << "Failed to decompress the main control file" << getDebianProcessErrInfo; + } +} + +/** + * @brief DebListModel::onTransactionOutput 刷新当前包的操作状态 + */ +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); + PERF_PRINT_END("POINT-05"); //授权框时间 +} + +/** + * @brief DebListModel::uninstallFinished 卸载包结束 + */ +void DebListModel::uninstallFinished() +{ + Q_ASSERT_X(m_workerStatus == WorkerProcessing, Q_FUNC_INFO, "installer status error"); + + //增加卸载失败的情况 + //此前的做法是发出commitError的信号,现在全部在Finished中进行处理。不再特殊处理。 + Transaction *trans = static_cast(sender()); + qDebug() << "DebListModel:" << "uninstall finished with finished code:" << trans->error() << "finished details:" << trans->errorString(); + if (trans->exitStatus()) { + m_workerStatus = WorkerFinished; //刷新包安装器的工作状态 + m_workerStatus_temp = m_workerStatus; + refreshOperatingPackageStatus(Failed); //刷新当前包的操作状态 + m_packageOperateStatus[m_operatingIndex] = Failed; + } else { + m_workerStatus = WorkerFinished; //刷新包安装器的工作状态 + m_workerStatus_temp = m_workerStatus; + refreshOperatingPackageStatus(Success); //刷新当前包的卸载状态 + m_packageOperateStatus[m_operatingIndex] = Success; + } + emit workerFinished(); //发送结束信号(只有单包卸载)卸载结束就是整个流程的结束 + trans->deleteLater(); + PERF_PRINT_END("POINT-04"); //安装时间 +} + +/** + * @brief DebListModel::setCurrentIndex 修改当前操作的index、 + * @param idx + */ +void DebListModel::setCurrentIndex(const QModelIndex &idx) +{ + if (m_currentIdx == idx) return; //要修改的index与当前index 一致 + + const QModelIndex index = m_currentIdx; //保存当前的index + m_currentIdx = idx; //修改当前的index + + emit dataChanged(index, index); + emit dataChanged(m_currentIdx, m_currentIdx); //发送index修改信号 +} + +/** + * @brief DebListModel::initPrepareStatus 刷新当前所有包的状态为Prepare + */ +void DebListModel::initPrepareStatus() +{ + qDebug() << "DebListModel: " << "Reresh all package operate status to Prepare"; + for (int i = 0; i < m_packagesManager->m_preparedPackages.size(); i++) { + m_packageOperateStatus.insert(i, Prepare); //刷新当前所有包的状态为Prepare + } +} + +/** + * @brief DebListModel::initRowStatus 开始安装后,刷新所有包的状态为等待安装 + */ +void DebListModel::initRowStatus() +{ + for (int i = 0; i < m_packagesManager->m_preparedPackages.size(); i++) { + m_operatingStatusIndex = i; + refreshOperatingPackageStatus(Waiting); + } + m_operatingStatusIndex = 0; +} + +/** + * @brief DebListModel::upWrongStatusRow 将安装失败的包上滚 + * 刷新包的操作状态 + * 刷新包的MD5 + * 刷新包安装失败的原因 + * 刷新包安装的状态 + * 刷新包的依赖状态 + * + * 此部分代码可以优化,部分状态无需刷新 + */ +void DebListModel::upWrongStatusRow() +{ + if (m_packagesManager->m_preparedPackages.size() == 1) + return; + + QList listWrongIndex; + int iIndex = 0; + + //find wrong index + // 找到操作错误的包的下标 + QMapIterator iteratorpackageOperateStatus(m_packageOperateStatus); + QList listpackageOperateStatus; + while (iteratorpackageOperateStatus.hasNext()) { + iteratorpackageOperateStatus.next(); + if (iteratorpackageOperateStatus.value() == Failed || iteratorpackageOperateStatus.value() == VerifyFailed) { //安装失败或签名验证失败 + listWrongIndex.insert(iIndex, iteratorpackageOperateStatus.key()); //保存下标 + listpackageOperateStatus.insert(iIndex++, iteratorpackageOperateStatus.value()); //保存状态 + } else if (iteratorpackageOperateStatus.value() == Success) //安装成功的只保存状态 + listpackageOperateStatus.append(iteratorpackageOperateStatus.value()); + else + return; + } + + if (listWrongIndex.size() == 0) //全部安装成功 直接退出 + return; + + QList t_errorIndex; //临时变量,保存安装wine依赖错误的下标 + //change m_preparedPackages, m_packageOperateStatus sort. + QList listTempDebFile; + QList listTempPreparedMd5; + iIndex = 0; + for (int i = 0; i < m_packagesManager->m_preparedPackages.size(); i++) { + m_packageOperateStatus[i] = listpackageOperateStatus[i]; + if (listWrongIndex.contains(i)) { + t_errorIndex.push_back(iIndex); //保存错误的下标 + //保存安装失败的文件路径 + //注意 此处用的是insert 到iIndex位置,也就是说 安装失败的包会被放到前面 + listTempDebFile.insert(iIndex, m_packagesManager->m_preparedPackages[i]); + //保存安装失败的MD5的值 + //注意 此处用的是insert 到iIndex位置,也就是说 安装失败的包会被放到前面 + //此处iIndex++ 则是将index +1 开始对下一个包进行排序 + listTempPreparedMd5.insert(iIndex++, m_packagesManager->m_preparedMd5[i]); + } else { + // 所有安装成功的包会被append到后面 + listTempDebFile.append(m_packagesManager->m_preparedPackages[i]); //保存安装成功的文件路径 + listTempPreparedMd5.append(m_packagesManager->m_preparedMd5[i]); //保存安装成功的md5的值 + } + } + + //保存排序后的prepaed 和md5 + m_packagesManager->m_preparedPackages = listTempDebFile; + m_packagesManager->m_preparedMd5 = listTempPreparedMd5; + + //Reupdates the index that failed to install Deepin-Wine + if (m_packagesManager->m_errorIndex.size() > 0) { + m_packagesManager->m_errorIndex.clear(); + m_packagesManager->m_errorIndex = t_errorIndex; + } + + + //change m_packageFailCode sort. + QMap mappackageFailReason; + QMapIterator IteratorpackageFailReason(m_packageFailCode); + while (IteratorpackageFailReason.hasNext()) { + IteratorpackageFailReason.next(); + // 获取安装错误失败代码的下标和错误值 + int iIndexTemp = listWrongIndex.indexOf(IteratorpackageFailReason.key()); + mappackageFailReason[iIndexTemp] = IteratorpackageFailReason.value(); + } + m_packageFailCode.clear(); + m_packageFailCode = mappackageFailReason; + + //change m_packageInstallStatus sort. + QMapIterator MapIteratorpackageInstallStatus(m_packagesManager->m_packageInstallStatus); + QList listpackageInstallStatus; + iIndex = 0; + while (MapIteratorpackageInstallStatus.hasNext()) { + MapIteratorpackageInstallStatus.next(); + //对安装状态进行排序 + //注意 此处用的是insert 到iIndex位置,也就是说 安装失败的包会被放到前面 + if (listWrongIndex.contains(MapIteratorpackageInstallStatus.key())) + + listpackageInstallStatus.insert(iIndex++, MapIteratorpackageInstallStatus.value()); + + //所有安装成功的包会被append到后面 + else + listpackageInstallStatus.append(MapIteratorpackageInstallStatus.value()); + } + + //保存所有的安装状态 + for (int i = 0; i < listpackageInstallStatus.size(); i++) + m_packagesManager->m_packageInstallStatus[i] = listpackageInstallStatus[i]; + + //change m_packageDependsStatus sort. + //对依赖状态进行排序 + QMapIterator MapIteratorpackageDependsStatus(m_packagesManager->m_packageDependsStatus); + QList listpackageDependsStatus; + iIndex = 0; + while (MapIteratorpackageDependsStatus.hasNext()) { + MapIteratorpackageDependsStatus.next(); + // 对安装失败和安装成功的包分别排序 + if (listWrongIndex.contains(MapIteratorpackageDependsStatus.key())) + listpackageDependsStatus.insert(iIndex++, MapIteratorpackageDependsStatus.value()); + else + listpackageDependsStatus.append(MapIteratorpackageDependsStatus.value()); + } + //保存所有包的安装状态 + for (int i = 0; i < listpackageDependsStatus.size(); i++) + m_packagesManager->m_packageDependsStatus[i] = listpackageDependsStatus[i]; + + //update view + const QModelIndex idxStart = index(0); + const QModelIndex idxEnd = index(m_packageOperateStatus.size() - 1); + emit dataChanged(idxStart, idxEnd); + + //update scroll + emit onChangeOperateIndex(-1); +} + +/** + * @brief DebListModel::ConfigInstallFinish + * @param flag 安装配置包的返回结果 + * 处理命令的返回结果 + */ +void DebListModel::ConfigInstallFinish(int flag) +{ + int progressValue = static_cast(100. * (m_operatingIndex + 1) / m_packagesManager->m_preparedPackages.size()); //批量安装时对进度进行处理 + emit workerProgressChanged(progressValue); + qDebug() << "DebListModel:" << "config install result:" << flag; + if (flag == 0) { //安装成功 + if (m_packagesManager->m_packageDependsStatus[m_operatingIndex].status == DependsOk) { + refreshOperatingPackageStatus(Success); //刷新安装状态 + } + bumpInstallIndex(); //开始安装下一个 + } else { + if (m_packagesManager->m_preparedPackages.size() == 1) { //单包安装 + refreshOperatingPackageStatus(Prepare); //刷新当前包的操作状态为准备态 + m_workerStatus = WorkerPrepare; + emit AuthCancel(); //授权取消 + } else { + //批量安装 + refreshOperatingPackageStatus(Failed); //刷新当前包的状态为失败 + m_packageFailCode.insert(m_operatingIndex, flag); //保存失败原因 + m_packageFailReason.insert(m_operatingIndex, "Authentication failed"); + bumpInstallIndex(); //开始安装下一个 + } + } + AptConfigMessage::getInstance()->hide(); //隐藏配置窗口 + AptConfigMessage::getInstance()->clearTexts(); //清楚配置信息 + m_procInstallConfig->terminate(); //结束配置 + m_procInstallConfig->close(); +} + +/** + * @brief DebListModel::ConfigReadOutput + * 根据命令返回的输出数据,向界面添加数据展示 + */ +void DebListModel::ConfigReadOutput() +{ + QString tmp = m_procInstallConfig->readAllStandardOutput().data(); //获取配置读取到的信息 + + //检查命令返回的结果,如果是 没有发现命令。直接报错,安装失败 + checkInstallStatus(tmp); + + tmp.remove(QChar('"'), Qt::CaseInsensitive); + tmp.remove(QChar('\n'), Qt::CaseInsensitive); + + if (tmp.contains("StartInstallAptConfig")) { //获取到当前正在安装配置 + emit onStartInstall(); + refreshOperatingPackageStatus(Operating); //刷新当前的操作状态 + AptConfigMessage::getInstance()->show(); //显示配置窗口 + QString startFlagStr = "StartInstallAptConfig"; + int num = tmp.indexOf(startFlagStr) + startFlagStr.size(); + int iCutoutNum = tmp.size() - num; + if (iCutoutNum > 0) + AptConfigMessage::getInstance()->appendTextEdit(tmp.mid(num, iCutoutNum)); //显示配置信息 + return; + } + + QString appendInfoStr = tmp; + appendInfoStr.remove(QChar('\"'), Qt::CaseInsensitive); + appendInfoStr.remove(QChar('"'), Qt::CaseInsensitive); + appendInfoStr.replace("\\n", "\n"); + appendInfoStr.replace("\n\n", "\n"); + emit appendOutputInfo(appendInfoStr); //将信息同步显示到安装信息中 + if (tmp.contains("Not authorized")) { + AptConfigMessage::getInstance()->close(); //没有授权,关闭配置窗口 + } else { + AptConfigMessage::getInstance()->appendTextEdit(tmp); //授权成功,继续配置 + } +} + +/** + * @brief DebListModel::ConfigInputWrite + * @param str 输入的数据 + * 向命令传递输入的数据 + */ +void DebListModel::ConfigInputWrite(QString str) +{ + m_procInstallConfig->write(str.toUtf8()); //将用户输入的配置项写入到配置安装进程中。 + m_procInstallConfig->write("\n"); //写入换行,配置生效 +} + +/** + * @brief DebListModel::checkInstallStatus 根据命令返回的消息判断安装状态 + * @param str 命令返回的安装信息 + * 如果命令返回的信息是Cannot run program deepin-deb-installer-dependsInstall: No such file or directory + * 意味着当前/usr/bin下没有deepin-deb-installer-dependsInstall命令,此版本有问题,需要重新安装deepin-deb-installer-dependsInstall命令 + */ +void DebListModel::checkInstallStatus(QString str) +{ + // 判断当前的信息是否是错误提示信息 + if (str.contains("Cannot run program deepin-deb-installer-dependsInstall: No such file or directory")) { + emit appendOutputInfo(str); //输出安装错误的原因 + m_workerStatus = WorkerFinished; //刷新包安装器的工作状态 + m_workerStatus_temp = m_workerStatus; + refreshOperatingPackageStatus(Failed); //刷新当前包的操作状态 + m_packageOperateStatus[m_operatingIndex] = Failed; + m_packageFailCode.insert(m_operatingIndex, 0); //保存失败原因 + m_packageFailReason.insert(m_operatingIndex, ""); + bumpInstallIndex(); + return; + } +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/model/deblistmodel.h deepin-deb-installer-5.7.0.17/src/deb_installer/model/deblistmodel.h --- deepin-deb-installer-5.0.0/src/deb_installer/model/deblistmodel.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/model/deblistmodel.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,524 @@ +/* + * 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 + +#include +#include +#include +#include +#include +#define ConfigAuthCancel 127 + +class PackagesManager; +class DebListModel : public QAbstractListModel +{ + Q_OBJECT + +public: + explicit DebListModel(QObject *parent = nullptr); + /** + * @brief The PackageRole enum + * 包的各种数据角色 + */ + enum PackageRole { + PackageNameRole = Qt::DisplayRole, //包名 + UnusedRole = Qt::UserRole, // + WorkerIsPrepareRole, //当前工作是否处于准备状态 + ItemIsCurrentRole, //获取当前下标 + PackageVersionRole, //包的版本 + PackagePathRole, //包的路径 + PackageInstalledVersionRole, //包已经安装的版本 + PackageDescriptionRole, //包的描述 + PackageVersionStatusRole, //包的安装状态 + PackageDependsStatusRole, //包的依赖状态 + PackageAvailableDependsListRole, //包可用的依赖 + PackageFailReasonRole, //包安装失败的原因 + PackageOperateStatusRole, //包的操作状态 + PackageReverseDependsListRole, //依赖于此包的程序 + }; + + /** + * @brief The WorkerStatus enum + * 安装器的工作状态 + */ + enum WorkerStatus { + WorkerPrepare, //准备,可以进行安装或卸载 + WorkerProcessing, //正在安装 + WorkerFinished, //安装结束 + WorkerUnInstall //正在卸载 + }; + + /** + * @brief The PackageInstallStatus enum + * 包的安装状态 + */ + enum PackageInstallStatus { + NotInstalled, //当前包没有被安装 + InstalledSameVersion, //当前已经安装过相同的版本 + InstalledEarlierVersion, //当前已经安装过较早的版本 + InstalledLaterVersion, //当前已经安装过更新的版本 + }; + + /** + * @brief The PackageDependsStatus enum + * 当前包的依赖状态 + */ + enum DependsStatus { + DependsOk, //依赖满足 + DependsAvailable, //依赖可用但是需要下载 + DependsBreak, //依赖不满足 + DependsVerifyFailed, //签名验证失败 + DependsAuthCancel, //依赖授权失败(wine依赖) + }; + + /** + * @brief The PackageOperationStatus enum + * 包的当前操作状态 + */ + enum PackageOperationStatus { + Prepare, //准备安装 + Operating, //正在安装 + Success, //安装成功 + Failed, //安装失败 + Waiting, //等待安装 + VerifyFailed, //签名验证失败 + }; + + /** + * @brief The DependsAuthStatus enum + * wine 依赖安装时的状态 + */ + enum DependsAuthStatus { + AuthBefore, //鉴权框弹出之前 + AuthPop, //鉴权框弹出 + CancelAuth, //鉴权取消 + AuthConfirm, //鉴权确认后 + AuthDependsSuccess, //安装成功 + AuthDependsErr, //安装失败 + AnalysisErr, //解析错误 + }; + + /** + * @brief reset + * 重置包的工作状态、安装状态 + * 重置当前处理的下标装啊提 + * 清空安装错误的缓存 + * 重置packageManage的状态 + */ + void reset(); + + /** + * @brief reset_filestatus + * 重置包的操作状态 + * 清空安装错误原因的缓存 + */ + void reset_filestatus(); + + /** + * @brief isReady 查看后端初始化的状态 + * @return 后端是否准备就绪 + */ + bool isReady() const; + + /** + * @brief isWorkerPrepare 获取当前的工作状态是否是就绪状态 + * @return 当前是否就绪 + */ + bool isWorkerPrepare() const + { + return m_workerStatus == WorkerPrepare; + } + + /** + * @brief preparedPackages 获取当前已经添加的包的列表 + * @return 添加的包的列表 + */ + const QList preparedPackages() const; + + /** + * @brief first 获取添加的第一个包 + * @return 第一个包的index + */ + QModelIndex first() const; + + /** + * @brief rowCount 当前行的数量 + * @param parent + * @return 当前包的数量 + */ + int rowCount(const QModelIndex &parent) const override; + + /** + * @brief data 获取某一项的数据 + * @param index 下表 + * @param role 数据的角色 + * @return + */ + QVariant data(const QModelIndex &index, int role) const override; + int m_workerStatus_temp = 0; + +public: + /** + * @brief initPrepareStatus 初始化所有包的状态为Prepare + */ + void initPrepareStatus(); + + /** + * @brief initDependsStatus 获取某一个包的依赖状态 + * @param index 包的下标 + */ + void initDependsStatus(int index = 0); + +public: + /** + * @brief getInstallFileSize 获取要安装的包的数量 + * @return 包的数量 + */ + int getInstallFileSize(); + + /** + * @brief refreshAllDependsStatus 获取所有依赖的状态。 + */ + void refreshAllDependsStatus(); +signals: + // void workerStarted() const; + /** + * @brief lockForAuth 授权框弹出后 禁用按钮 授权框取消后,启用按钮 + * @param lock 启用/禁用按钮 + */ + void lockForAuth(const bool lock) const; + + /** + * @brief AuthCancel 授权取消 + */ + void AuthCancel(); + + /** + * @brief onStartInstall 开始安装 + */ + void onStartInstall(); + + /** + * @brief workerFinished 安装结束 + */ + void workerFinished() const; + + /** + * @brief transactionProgressChanged + * 某一个包的安装进度改变 + * @param progress + */ + void transactionProgressChanged(const int progress) const; + + /** + * @brief workerProgressChanged 整体的安装进度改变 + * @param progress + */ + void workerProgressChanged(const int progress) const; + + /** + * @brief packageOperationChanged 包操作状态改变 + * @param index 包的index + * @param status 修改的状态 + */ + void packageOperationChanged(const QModelIndex &index, int status) const; + + /** + * @brief packageDependsChanged 包的依赖状态改变 + * @param index 包的index + * @param status 修改后的状态 + */ + void packageDependsChanged(const QModelIndex &index, int status) const; + + /** + * @brief appendOutputInfo 安装输出信息 + * @param info 要显示的信息 + */ + void appendOutputInfo(const QString &info) const; + + /** + * @brief onChangeOperateIndex index 被修改 + * @param opIndex 修改后的index + */ + void onChangeOperateIndex(int opIndex); + + /** + * @brief EnableReCancelBtn 授权框弹出后禁用按钮,授权框取消后启用按钮 + * @param bEnable 启用/禁用按钮的标识 + */ + void EnableReCancelBtn(bool bEnable); + + /** + * @brief DependResult 依赖下载的状态 + */ + void DependResult(int, QString); + + /** + * @brief enableCloseButton 设置关闭按钮是否可用 + */ + void enableCloseButton(bool); + +public slots: + + /** + * @brief setCurrentIndex 设置当前操作的index + * @param idx 修改后的index + */ + void setCurrentIndex(const QModelIndex &idx); + + /** + * @brief installPackages 开始安装所有的包 + */ + void installPackages(); + + /** + * @brief uninstallPackage 卸载某一个包 + * @param idx 包的index + */ + void uninstallPackage(const int idx); + + /** + * @brief removePackage 删除某一个包 + * @param idx 要删除的包的index + */ + void removePackage(const int idx); + + /** + * @brief appendPackage 添加包 + * @param package 添加的包的路径 + * @return 是否添加成功(主要是判断是否重复添加) + */ + bool appendPackage(QString package); + + /** + * @brief onTransactionErrorOccurred 安装过程中出现错误 + */ + void onTransactionErrorOccurred(); + + /** + * @brief onTransactionStatusChanged 安装状态出现改变 + * @param stat + */ + void onTransactionStatusChanged(QApt::TransactionStatus stat); + + /** + * @brief DealDependResult 处理依赖安装的过程 + * @param iAuthRes 过程标识 + * @param iIndex 包的index(因为这个包的依赖不被满足) + * @param dependName 发生依赖安装失败的依赖名称 + */ + void DealDependResult(int iAuthRes, int iIndex, QString dependName); + + /** + * @brief ConfigReadOutput 处理配置包的输出并显示 + */ + void ConfigReadOutput(); + + /** + * @brief ConfigInstallFinish 配置结束 + * @param flag 配置安装的结果 + */ + void ConfigInstallFinish(int flag); + + /** + * @brief ConfigInputWrite 配置的输入数据处理 + * @param str 输入的数据(一般是输入的选项) + */ + void ConfigInputWrite(QString str); + +private slots: + + /** + * @brief upWrongStatusRow 安装完成后对安装失败的包上滚 其中包括各种状态的变更 + */ + void upWrongStatusRow(); + +private: + + /** + * @brief setEndEnable 授权框取消,按钮启用 + */ + void setEndEnable(); + + /** + * @brief checkBoxStatus 检查授权框的弹出状态,判断当前按钮是否需要被禁用 + */ + void checkBoxStatus(); + + /** + * @brief bumpInstallIndex 安装包整体的流程控制 + * 安装完成上一个之后 index 增加 + * 全部安装完成之后 发送安装完成信号 + */ + void bumpInstallIndex(); + + /** + * @brief installNextDeb + * 判断操作系统的状态,判断签名的状态 + * 检查当前包是否需要配置 + * 安装包 + */ + void installNextDeb(); + + /** + * @brief installDebs 安装单个包。 + */ + void installDebs(); + + /** + * @brief onTransactionOutput + * 修改当前包的工作状态 + */ + void onTransactionOutput(); + + /** + * @brief onTransactionFinished + * 当前包安装结束 + */ + void onTransactionFinished(); + + /** + * @brief onDependsInstallTransactionFinished + * 当前包依赖安装结束 + * 依赖安装成功,安装当前包 + * 依赖安装失败,记录失败原因,安装下一个包 + */ + void onDependsInstallTransactionFinished(); + + /** + * @brief uninstallFinished + * 卸载结束槽函数 + * 切换工作状态 + * 切换操作状态 + * 发送卸载结束信号 + */ + void uninstallFinished(); + + /** + * @brief refreshOperatingPackageStatus 刷新当前操作的包的操作状态 + * @param stat 要修改的操作状态 + */ + void refreshOperatingPackageStatus(const PackageOperationStatus stat); + + /** + * @brief packageFailedReason 获取包安装失败的原因 + * @param idx 包的下标 + * @return 包失败原因的描述 + */ + QString packageFailedReason(const int idx) const; + + /** + * @brief initRowStatus 初始化每一个项的 操作状态 + */ + void initRowStatus(); + + /** + * @brief checkSystemVersion check 当前操作系统的版本 + * @return 当前版本的操作系统是否需要验证数字签名 + * 个人版专业版需要验证数字签名,其余版本不需要 + */ + bool checkSystemVersion(); + + /** + * @brief checkDigitalSignature 检查数字签名 + * @return 检查当前包是否有数字签名 + */ + bool checkDigitalSignature(); + + /** + * @brief showNoDigitalErrWindow 弹出无数字签名的错误弹窗 + */ + void showNoDigitalErrWindow(); + + /** + * @brief checkTemplate 检查是否需要配置 + * @param debPath 包的路径 + * @return 是否需要配置 + */ + bool checkTemplate(QString debPath); + + /** + * @brief getDebian 获取包的DEBIAN文件 + * @param debPath 包的路径 + */ + void getDebian(QString debPath); + + /** + * @brief mkdir 创建临时目录 ,存放DEBIAN文件 + * @return 是否创建成功 + */ + bool mkdir(); + + /** + * @brief rmdir 删除临时目录 + * + */ + void rmdir(); + + /** + * @brief enableTitleBarFocus + * 启用TitleBar焦点切换策略 + */ + void enableTitleBarFocus(); + + /** + * @brief checkInstallStatus 根据命令返回的消息判断安装状态 + * @param str 命令返回的安装信息 + * 如果命令返回的信息是Cannot run program deepin-deb-installer-dependsInstall: No such file or directory + * 意味着当前/usr/bin下没有deepin-deb-installer-dependsInstall命令,此版本有问题,需要重新安装deepin-deb-installer-dependsInstall命令 + */ + void checkInstallStatus(QString str); + +private: + int m_workerStatus; //当前工作状态 + int m_operatingIndex; //当前正在操作的index + int m_operatingStatusIndex; //当前正在操作的状态的index + + QModelIndex m_currentIdx; //当前的index + PackagesManager *m_packagesManager; //后端类 + + QPointer m_currentTransaction; //当前正在运行的Trans + + QMap m_packageOperateStatus; //所有包的操作状态Map + QMap m_packageFailCode; //FailCode 错误代码 ,trans返回的错误代码 + QMap m_packageFailReason; //FailReason , trans返回的详细错误信息 + + bool m_InitRowStatus; //当前的操作状态是否初始化过 + bool bModifyFailedReason = false; //此变量已被废弃 + + bool QverifyResult; //此变量已被废弃 + QProcess *m_procInstallConfig; // 配置安装进程 + const QString tempPath = "/tmp/DEBIAN"; // 配置的临时目录 + + bool m_isVerifyDigital = true; // 签名验证的标志变量 +}; + +#endif // DEBLISTMODEL_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/model/packagelistview.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/model/packagelistview.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/model/packagelistview.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/model/packagelistview.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,282 @@ +/* + * 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" +#include "model/deblistmodel.h" +#include "utils/utils.h" + +#include +#include +#include + +PackagesListView::PackagesListView(QWidget *parent) + : DListView(parent) + , m_bLeftMouse(false) + , m_rightMenu(nullptr) +{ + initUI(); //初始化界面参数 + initConnections(); //初始化链接 + initRightContextMenu(); //初始化右键菜单 + initShortcuts(); //添加快捷删除键 +} + +/** + * @brief PackagesListView::initUI 初始化listView参数 + */ +void PackagesListView::initUI() +{ + //fix bug: 44726 https://pms.uniontech.com/zentao/bug-view-44726.html + QScroller::grabGesture(this, QScroller::TouchGesture); //添加触控屏触控 + + setVerticalScrollMode(ScrollPerPixel); //设置垂直滚动的模式 + setSelectionMode(QListView::SingleSelection); //只允许单选 + setAutoScroll(true); //允许自动滚动 + setMouseTracking(true); //设置鼠标跟踪 + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); //滚动条一直存在 +} + + +/** + * @brief PackagesListView::initConnections 初始化链接 + */ +void PackagesListView::initConnections() +{ + // 鼠标右键点击,根据条件判断是否需要弹出右键菜单 + connect(this, + &PackagesListView::onShowContextMenu, + this, + &PackagesListView::onListViewShowContextMenu, + Qt::ConnectionType::QueuedConnection); +} + +/** + * @brief PackagesListView::initShortcuts 添加快捷删除键 + */ +void PackagesListView::initShortcuts() +{ + QShortcut *deleteShortcut = new QShortcut(QKeySequence::Delete, this); //初始化快捷键 + deleteShortcut->setContext(Qt::ApplicationShortcut); //设置快捷键的显示提示 + connect(deleteShortcut, SIGNAL(activated()), this, SLOT(onShortcutDeleteAction())); //链接快捷键 +} + +/** + * @brief PackagesListView::scrollContentsBy 滚动相关 + * @param dx + * @param dy + * + * 此函数无实际意义。稍后废弃 + */ +void PackagesListView::scrollContentsBy(int dx, int dy) +{ + if (-1 == m_highlightIndex.row()) { //判断无意义 + QListView::scrollContentsBy(dx, dy); //还是调用了QList的滚动方法 + return; + } + QListView::scrollContentsBy(dx, dy); //就算判断是false也是调用的QList的滚动方法 +} + +/** + * @brief PackagesListView::mousePressEvent 鼠标按下事件 + * @param event + * 如果左键按下,则置标志位为true + * 解决后续右键菜单左键取消的问题 + */ +void PackagesListView::mousePressEvent(QMouseEvent *event) +{ + if (event->button() == Qt::LeftButton) { //当前检测到鼠标左键按下 + m_bLeftMouse = true; + } else { + m_bLeftMouse = false; //当前按下的不是左键 + } + DListView::mousePressEvent(event); +} + +/** + * @brief PackagesListView::mouseReleaseEvent 鼠标释放事件 + * @param event + * 判断当前model是否准备就绪 + */ +void PackagesListView::mouseReleaseEvent(QMouseEvent *event) +{ + DebListModel *debListModel = qobject_cast(this->model()); //获取debListModel + if (!debListModel->isWorkerPrepare()) { //当前model未就绪 + return; + } + + DListView::mouseReleaseEvent(event); +} + +/** + * @brief PackagesListView::setSelection 设置选中 + * @param rect + * @param command + */ +void PackagesListView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) +{ + DListView::setSelection(rect, command); //转发消息 + + QPoint clickPoint(rect.x(), rect.y()); + QModelIndex modelIndex = indexAt(clickPoint); + + m_highlightIndex = modelIndex; + m_currModelIndex = m_highlightIndex; + if (!m_bLeftMouse) { + m_bShortcutDelete = false; //不允许删除 + emit onShowContextMenu(modelIndex); //显示右键菜单 + } else { + m_bShortcutDelete = true; + } +} + +/** + * @brief PackagesListView::keyPressEvent 键盘按键按下 + * @param event + */ +void PackagesListView::keyPressEvent(QKeyEvent *event) +{ + m_bLeftMouse = true; + // 添加 右键菜单快捷键 + if ((event->modifiers() == Qt::AltModifier) && (event->key() == Qt::Key_M)) { + if (this->selectionModel()->currentIndex().row() > -1) { + m_bShortcutDelete = false; + //增加右键菜单的调出判断,当前有焦点且状态为允许右键菜单出现 + if (this->hasFocus() && m_bIsRightMenuShow) { + // 右键菜单的触发位置为当前item的位置。此前为鼠标的位置。 + m_rightMenu->exec(mapToGlobal(m_rightMenuPos)); + } + } + } + DListView::keyPressEvent(event); +} + +/** + * @brief PackagesListView::initRightContextMenu 初始化右键菜单 + */ +void PackagesListView::initRightContextMenu() +{ + if (nullptr == m_rightMenu) { //当前右键菜单未初始化 + m_rightMenu = new DMenu(this); //初始化右键菜单 + + //给右键菜单添加快捷键Delete + QAction *deleteAction = new QAction(tr("Delete"), this); + + m_rightMenu->addAction(deleteAction); //右键菜单添加action + connect(deleteAction, SIGNAL(triggered()), this, SLOT(onRightMenuDeleteAction())); //action 添加链接事件 + } +} + +/** + * @brief PackagesListView::onListViewShowContextMenu 显示右键菜单 + * @param index + */ +void PackagesListView::onListViewShowContextMenu(QModelIndex index) +{ + Q_UNUSED(index) + + m_bShortcutDelete = false; //右键菜单显示时不允许使用快捷键删除 + m_currModelIndex = index; + DMenu *rightMenu = m_rightMenu; + //修改右键菜单的调出判断,当前有焦点且状态为允许右键菜单出现 + if (m_bIsRightMenuShow) { + //在当前鼠标位置显示右键菜单 + rightMenu->exec(QCursor::pos()); + } +} + +/** + * @brief PackagesListView::onShortcutDeleteAction 快捷键删除 + */ +void PackagesListView::onShortcutDeleteAction() +{ + //fix bug: 42602 添加多个deb包到软件包安装器,选择列表中任一应用,连续多次点击delete崩溃 + if (-1 == m_currModelIndex.row() || m_rightMenu->isVisible() || this->count() == 1) { + return; + } + + //fix bug: 42602 添加多个deb包到软件包安装器,选择列表中任一应用,连续多次点击delete崩溃 + //fix bug: 44901 https://pms.uniontech.com/zentao/bug-view-44901.htm + // 只删除当前选中的项 + if (m_currModelIndex.row() < this->count() && this->selectionModel()->selectedIndexes().contains(m_currModelIndex)) + emit onRemoveItemClicked(m_currModelIndex); +} + +/** + * @brief PackagesListView::onRightMenuDeleteAction 右键菜单删除选中的项 + */ +void PackagesListView::onRightMenuDeleteAction() +{ + if (-1 == m_currModelIndex.row()) { + return; + } + + emit onRemoveItemClicked(m_currModelIndex); +} + +/** + * @brief PackagesListView::paintEvent 获取当前index + * @param event + * 定位右键菜单弹出的位置 + */ +void PackagesListView::paintEvent(QPaintEvent *event) +{ + //获取currentIndex并保存,用于右键菜单的定位。 + m_currentIndex = this->currentIndex().row(); + DListView::paintEvent(event); +} + +/** + * @brief PackagesListView::getPos + * @param rect 某一个Item的rect + * @param index Item的index.row() + * + * 获取某一个Item的rect,与index。用于保存位置参数触发右键菜单 + */ +void PackagesListView::getPos(QRect rect, int index) +{ + if (index == m_currentIndex) { //获取当前项右键菜单出现的位置 + m_rightMenuPos.setX(rect.x() + rect.width() - 162); + m_rightMenuPos.setY(rect.y() + rect.height() / 2); + } +} + +/** + * @brief PackagesListView::setRightMenuShowStatus 设置是否可以显示右键菜单 + * @param isShow + */ +void PackagesListView::setRightMenuShowStatus(bool isShow) +{ + m_bIsRightMenuShow = isShow; //设置右键菜单是否显示的标识位 +} + +/** + * @brief PackagesListView::focusInEvent 焦点FocusIn事件 + * @param event + * 当焦点切换到PackListView时,默认选中第一项。 + */ +void PackagesListView::focusInEvent(QFocusEvent *event) +{ + if (event->reason() == Qt::TabFocusReason) { //tab焦点 + if (this->count() > 0) { + m_currModelIndex = this->model()->index(0, 0); + this->setCurrentIndex(m_currModelIndex); //存在焦点时,默认选入第一项 + } + } +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/model/packagelistview.h deepin-deb-installer-5.7.0.17/src/deb_installer/model/packagelistview.h --- deepin-deb-installer-5.0.0/src/deb_installer/model/packagelistview.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/model/packagelistview.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,204 @@ +/* + * 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 +#include +#include +#include +#include + +DWIDGET_USE_NAMESPACE + +class PackagesListView : public DListView +{ + Q_OBJECT +public: + explicit PackagesListView(QWidget *parent = nullptr); + + /** + * @brief setRightMenuShowStatus 根据安装进程来设置是否显示右键菜单 + * @param isShow 是否显示右键菜单 + */ + void setRightMenuShowStatus(bool isShow); + +signals: + /** + * @brief onShowHideTopBg 信号已经被废弃 + * @param bShow + */ + void onShowHideTopBg(bool bShow); + + /** + * @brief onShowHideBottomBg 信号已经被废弃 + * @param bShow + */ + void onShowHideBottomBg(bool bShow); + + /** + * @brief onClickItemAtIndex 信号已经被废弃 + * @param index + */ + void onClickItemAtIndex(QModelIndex index); + + /** + * @brief onShowContextMenu 显示右键菜单 + * @param index 显示右键菜单的index + */ + void onShowContextMenu(QModelIndex index); + + /** + * @brief onRemoveItemClicked 删除该item + * @param index 要删除的item的index + */ + void onRemoveItemClicked(QModelIndex index); + + /** + * @brief OutOfFocus 此信号已经被废弃 + */ + void OutOfFocus(bool); + +public slots: + + /** + * @brief getPos 获取到的当前Item的位置和row + * @param rect 当前item的rect + * @param index 当前item的下标 + */ + void getPos(QRect rect, int index); //获取到的当前Item的位置和row +protected: + + /** + * @brief scrollContentsBy 无具体实际作用,可以忽略删除 + * @param dx + * @param dy + */ + void scrollContentsBy(int dx, int dy)override; + + /** + * @brief mousePressEvent 鼠标按下事件 + * 如果是左键按下,如果右键菜单出现,则取消右键菜单 + */ + void mousePressEvent(QMouseEvent *event)override; + + /** + * @brief mouseReleaseEvent 鼠标释放事件 + * @param event + */ + void mouseReleaseEvent(QMouseEvent *event)override; + + /** + * @brief setSelection 选中事件 + * @param rect + * @param command + * 选中时,允许跳出右键菜单。置标志位为true + */ + void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command)override; + + /** + * @brief keyPressEvent 键盘按下事件 + * @param event + * 添加alt+m 快捷键触发右键菜单 + */ + void keyPressEvent(QKeyEvent *event)override; + + /** + * @brief paintEvent 绘制事件 + * @param event + */ + void paintEvent(QPaintEvent *event)override; + /** + * @brief focusInEvent 焦点进入事件 + * @param event + * 当焦点切换到当前控件时,默认选中第一项。 + */ + void focusInEvent(QFocusEvent *event) override; + +private: + + /** + * @brief initUI + * 初始化 listview的各个属性参数 + */ + void initUI(); + + /** + * @brief initConnections + * 链接listView的信号和槽 + */ + void initConnections(); + + /** + * @brief initRightContextMenu + * 初始化右键菜单 + */ + void initRightContextMenu(); + + /** + * @brief initShortcuts + * 初始化快捷键 + */ + void initShortcuts(); + + /** + * @brief handleHideShowSelection 此函数已经被废弃 + * + */ + void handleHideShowSelection(); + +private slots: + + /** + * @brief onListViewShowContextMenu 弹出右键菜单 + * @param index 点击右键菜单的index的位置 + */ + void onListViewShowContextMenu(QModelIndex index); + + /** + * @brief onRightMenuDeleteAction 删除某一个包 + */ + void onRightMenuDeleteAction(); + + /** + * @brief onShortcutDeleteAction 使用快捷键删除 + */ + void onShortcutDeleteAction(); + +private: + bool m_bLeftMouse; //左键按下,取消右键菜单标识 + bool m_bShortcutDelete; //快捷删除标识 + QModelIndex m_currModelIndex; //当前选中的index + DMenu *m_rightMenu {nullptr}; //右键菜单 + QModelIndex m_highlightIndex; //当前选中的index + + QPoint m_rightMenuPos; //确定的右键菜单出现的位置 + int m_currentIndex; //当前选中的index.row + + /** + * @brief m_bIsRightMenuShow 当前是否能够调出右键菜单标识,由MultiPage工作状态决定,并传入 + */ + bool m_bIsRightMenuShow = false;//当前是否允许右键菜单显示 + +}; + +#endif // PACKAGESLISTVIEW_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/model/packageslistdelegate.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/model/packageslistdelegate.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/model/packageslistdelegate.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/model/packageslistdelegate.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,323 @@ +/* + * 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 "model/deblistmodel.h" +#include "utils/utils.h" + +#include + +#include +#include +#include +#include +#include + +DWIDGET_USE_NAMESPACE + +//delegate 直接传入 model 解决多次创建model packagemanager导致崩溃的问题 +PackagesListDelegate::PackagesListDelegate(DebListModel *m_model, QAbstractItemView *parent) + : DStyledItemDelegate(parent) + , m_parentView(parent) + , m_fileListModel(m_model)//从新new一个对象修改为获取传入的对象 +{ + qApp->installEventFilter(this); //事件筛选 + QFontInfo fontinfo = m_parentView->fontInfo(); //获取字体 + int fontsize = fontinfo.pixelSize(); + if (fontsize >= 16) { //根据字体大小设置高度 + m_itemHeight = 52; + } else { + m_itemHeight = 48; + } +} + +/** + * @brief PackagesListDelegate::refreshDebItemStatus + * @param operate_stat 操作状态 + * @param install_status_rect 安装状态的位置 + * @param painter + * @param isSelect 是否被选中 + * @param isEnable 是否可用 + */ +void PackagesListDelegate::refreshDebItemStatus(const int operate_stat, + QRect install_status_rect, + QPainter *painter, + bool isSelect, bool isEnable) const +{ + + DPalette pa = DebApplicationHelper::instance()->palette(m_parentView); + + DApplicationHelper *dAppHelper = DApplicationHelper::instance(); + DPalette palette = dAppHelper->applicationPalette(); + QPen forground; //前景色 + + QColor color; //画笔颜色 + QString showText; //要显示的文本信息(安装状态) + + DPalette::ColorGroup cg; + if (DApplication::activeWindow()) { //当前处于激活状态 + cg = DPalette::Active; //设置Palette为激活状态 + } else { + cg = DPalette::Inactive; //设置Palette为非激活状态 + } + + //根据操作的状态显示提示语 + switch (operate_stat) { + case DebListModel::Operating: //正在安装 + painter->setPen(QPen(pa.color(DPalette::TextLively))); + showText = tr("Installing"); + break; + case DebListModel::Success: //安装成功 + painter->setPen(QPen(pa.color(DPalette::LightLively))); + showText = tr("Installed"); + break; + case DebListModel::Waiting: //等待安装 + painter->setPen(QPen(pa.color(DPalette::TextLively))); + showText = tr("Waiting"); + break; + default: //安装失败 + painter->setPen(QPen(pa.color(DPalette::TextWarning))); + showText = tr("Failed"); + break; + } + + if (isSelect && isEnable) { //当前被选中 未被选中使用默认颜色 + forground.setColor(palette.color(cg, DPalette::HighlightedText)); + painter->setPen(forground); + } + painter->drawText(install_status_rect, showText, Qt::AlignVCenter | Qt::AlignRight); //在item上添加安装提示 +} + +void PackagesListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const +{ + + if (index.isValid()) {//判断传入的index是否有效 + painter->save(); + painter->setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform, true); + + const int content_x = 46; + painter->setOpacity(1); + + QPainterPath bgPath; + bgPath.addRect(option.rect); + // 将当前Item的位置参数 发送给ListView,确定右键菜单的位置。 + emit sigIndexAndRect(option.rect, index.row()); + DApplicationHelper *dAppHelper = DApplicationHelper::instance(); + DPalette palette = dAppHelper->applicationPalette(); + QBrush background; + QPen forground; + DPalette::ColorGroup cg; + if (!(option.state & DStyle::State_Enabled)) { //当前appListView not enable + cg = DPalette::Disabled; + } else { + if (!DApplication::activeWindow()) { //当前窗口未被激活 + cg = DPalette::Inactive; + } else { + cg = DPalette::Active; //当前窗口被激活 + } + } + if (option.features & QStyleOptionViewItem::Alternate) { + background = palette.color(cg, DPalette::AlternateBase); + } else { + background = palette.color(cg, DPalette::Base); + } + + //被选中时设置颜色高亮 + forground.setColor(palette.color(cg, DPalette::Text)); + if (option.state & DStyle::State_Enabled) { + if (option.state & DStyle::State_Selected) { + background = palette.color(cg, DPalette::Highlight); + forground.setColor(palette.color(cg, DPalette::HighlightedText)); + } + } + painter->setPen(forground); + painter->fillPath(bgPath, background); + + int yOffset = 6; + + //绘制分割线 + QRect lineRect; + lineRect.setX(content_x); + int itemHeight = m_itemHeight; + lineRect.setY(option.rect.y() + itemHeight - 1); + lineRect.setWidth(option.rect.width() - content_x - 10); + lineRect.setHeight(1); + + // fix bug:33728 + DStyleHelper styleHelper; + QColor fillColor = styleHelper.getColor(static_cast(&option), DPalette::Shadow); + painter->fillRect(lineRect, fillColor); + + + QRect bg_rect = option.rect; + + QIcon icon = QIcon::fromTheme("application-x-deb"); + + // draw package icon + const int x = 6; + int y = bg_rect.y() + yOffset + 1; + + icon.paint(painter, x, y, 32, 32); + + // draw package name + QRect name_rect = bg_rect; + name_rect.setX(content_x); + name_rect.setY(bg_rect.y() + yOffset); + + const QString pkg_name = index.data(DebListModel::PackageNameRole).toString(); + QString mediumFontFamily = Utils::loadFontFamilyByType(Utils::SourceHanSansMedium); + QString normalFontFamily = Utils::loadFontFamilyByType(Utils::SourceHanSansNormal); + QString defaultFontFamily = Utils::loadFontFamilyByType(Utils::DefautFont); + + QFont pkg_name_font = Utils::loadFontBySizeAndWeight(mediumFontFamily, 14, QFont::Medium); + pkg_name_font.setPixelSize(DFontSizeManager::instance()->fontPixelSize(DFontSizeManager::T6)); + + name_rect.setHeight(pkg_name_font.pixelSize() + 2); + + painter->setFont(pkg_name_font); + QFontMetrics fontMetric(pkg_name_font); + + const QString elided_pkg_name = fontMetric.elidedText(pkg_name, Qt::ElideRight, 150); + + painter->setPen(/*styleHelper.getColor(static_cast(&option), DPalette::WindowText)*/forground); + painter->drawText(name_rect, elided_pkg_name, Qt::AlignLeft | Qt::AlignVCenter); + + // draw package version + QRect version_rect = name_rect; + + const int version_y = version_rect.top(); + version_rect.setLeft(200); + version_rect.setTop(version_y - 1); + version_rect.setRight(option.rect.right() - 85); + QFontMetrics versionFontMetric(pkg_name_font); + const QString version = index.data(DebListModel::PackageVersionRole).toString(); + const QString version_str = versionFontMetric.elidedText(version, Qt::ElideRight, 195); + painter->setPen(/*styleHelper.getColor(static_cast(&option), DPalette::BrightText)*/forground); + QFont version_font = Utils::loadFontBySizeAndWeight(defaultFontFamily, 12, QFont::Light); + version_font.setPixelSize(DFontSizeManager::instance()->fontPixelSize(DFontSizeManager::T8)); + painter->setFont(version_font); + painter->drawText(version_rect, version_str, Qt::AlignLeft | Qt::AlignVCenter); + + // install status + const int operate_stat = index.data(DebListModel::PackageOperateStatusRole).toInt(); //获取包的状态 +// qDebug() << "index:::::" << index.row() << operate_stat; + if (operate_stat != DebListModel::Prepare) { + QRect install_status_rect = option.rect; + install_status_rect.setRight(option.rect.right() - 20); + install_status_rect.setTop(version_y + yOffset - 10); + + QFont stat_font = Utils::loadFontBySizeAndWeight(mediumFontFamily, 11, QFont::Medium); + stat_font.setPixelSize(DFontSizeManager::instance()->fontPixelSize(DFontSizeManager::T9)); + painter->setFont(stat_font); + //刷新添加包状态的提示 + refreshDebItemStatus(operate_stat, install_status_rect, painter, (option.state & DStyle::State_Selected), (option.state & DStyle::State_Enabled)); + } + + // draw package info + QString info_str; + + QRect info_rect = option.rect; + info_rect.setLeft(content_x); + info_rect.setTop(name_rect.bottom() + 2); + + //获取包的版本 + const int install_stat = index.data(DebListModel::PackageVersionStatusRole).toInt(); + + //获取包的依赖状态 + const int dependsStat = index.data(DebListModel::PackageDependsStatusRole).toInt(); + DPalette pa = DebApplicationHelper::instance()->palette(m_parentView); + + //未被选中,设置正常的颜色 + forground.setColor(palette.color(cg, DPalette::ToolTipText)); + + if (operate_stat == DebListModel::Failed || (dependsStat == DebListModel::DependsBreak && install_stat == DebListModel::NotInstalled) + || (dependsStat == DebListModel::DependsAuthCancel)) { + info_str = index.data(DebListModel::PackageFailReasonRole).toString(); + forground.setColor(palette.color(cg, DPalette::TextWarning)); //安装失败或依赖错误 + } else if (install_stat != DebListModel::NotInstalled) { + //获取安装版本 + if (install_stat == DebListModel::InstalledSameVersion) { //安装了相同版本 + info_str = tr("Same version installed"); + } else if (install_stat == DebListModel::InstalledLaterVersion) {//安装了更新的版本 + info_str = + tr("Later version installed: %1").arg(index.data(DebListModel::PackageInstalledVersionRole).toString()); + } else { //安装了较早的版本 + info_str = + tr("Earlier version installed: %1").arg(index.data(DebListModel::PackageInstalledVersionRole).toString()); + } + //fix bug: 43139 + forground.setColor(palette.color(cg, DPalette::TextTips)); + } else {//当前没有安装过 + //获取包的描述 + info_str = index.data(DebListModel::PackageDescriptionRole).toString(); + //fix bug: 43139 + forground.setColor(palette.color(cg, DPalette::TextTips)); + } + //当前选中 设置高亮 + if (option.state & DStyle::State_Enabled) { + if (option.state & DStyle::State_Selected) { + forground.setColor(palette.color(cg, DPalette::HighlightedText)); + } + } + painter->setPen(forground); + + QFont info_font = Utils::loadFontBySizeAndWeight(normalFontFamily, 12, QFont::ExtraLight); + info_font.setPixelSize(DFontSizeManager::instance()->fontPixelSize(DFontSizeManager::T8)); + painter->setFont(info_font); + info_str = painter->fontMetrics().elidedText(info_str, Qt::ElideRight, 306); + painter->drawText(info_rect, info_str, Qt::AlignLeft | Qt::AlignTop); //将提示绘制到item上 + + painter->restore(); + } else { + DStyledItemDelegate::paint(painter, option, index); + } +} + +/** + * @brief PackagesListDelegate::sizeHint 设置item的高度 + * @param option + * @param index + * @return + */ +QSize PackagesListDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + Q_UNUSED(index); + Q_UNUSED(option); + + QSize itemSize = QSize(0, m_itemHeight); //设置Item的高度 + return itemSize; +} + +/** + * @brief PackagesListDelegate::eventFilter 获取字体改变的事件 + * @param watched + * @param event + * @return + */ +bool PackagesListDelegate::eventFilter(QObject *watched, QEvent *event) +{ + if (event->type() == QEvent::FontChange && watched == this) { + QFontInfo fontinfo = m_parentView->fontInfo(); + emit fontinfo.pixelSize(); + } + return QObject::eventFilter(watched, event); +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/model/packageslistdelegate.h deepin-deb-installer-5.7.0.17/src/deb_installer/model/packageslistdelegate.h --- deepin-deb-installer-5.0.0/src/deb_installer/model/packageslistdelegate.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/model/packageslistdelegate.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,68 @@ +/* + * 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 +#include "packagelistview.h" +#include "deblistmodel.h" +class PackagesListDelegate : public DStyledItemDelegate +{ + Q_OBJECT + +public: + //delegate使用传入的model而非重新new一个对象 解决多次创建model packagemanager导致崩溃的问题 + explicit PackagesListDelegate(DebListModel *m_model, QAbstractItemView *parent = nullptr); + bool eventFilter(QObject *watched, QEvent *event) override; + +signals: + // 用来发送当前Item的位置参数和row。确定右键菜单的位置。 + void sigIndexAndRect(QRect rect, int index) const; + +private: + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; + QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; + + /** + * @brief refreshDebItemStatus 刷新每个item 包的状态 + * @param operate_stat 操作状态 + * @param install_status_rect 安装状态的位置 + * @param painter + * @param isSelect 是否被选中 + * @param isEnable 是否可用 + */ + void refreshDebItemStatus(const int operate_stat, + QRect install_status_rect, + QPainter *painter, + bool isSelect, bool isEnable) const; + +private: + QPixmap m_packageIcon; //包的图标 + QSettings m_qsettings; //废弃变量 + QAbstractItemView *m_parentView; + int m_itemHeight; //item的高度 + DebListModel *m_fileListModel; //传入的model + int dependsStat_temp; //依赖状态 +}; + +#endif // PACKAGESLISTDELEGATE_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/singleInstallerApplication.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/singleInstallerApplication.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/singleInstallerApplication.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/singleInstallerApplication.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,85 @@ +#include "singleInstallerApplication.h" +#include "view/pages/debinstaller.h" +#include "utils/DebugTimeManager.h" + +#include +#include + +#include + +DCORE_USE_NAMESPACE + +SingleInstallerApplication::SingleInstallerApplication(int &argc, char **argv) + : DApplication(argc, argv) + , m_qspMainWnd(nullptr) +{ + +} + +SingleInstallerApplication::~SingleInstallerApplication() +{ + PERF_PRINT_BEGIN("POINT-02", ""); //关闭应用,添加记录点 +} + +bool SingleInstallerApplication::parseCmdLine() +{ + QCommandLineParser parser; + parser.setApplicationDescription("Deepin Package Installer."); + parser.addHelpOption(); + parser.addVersionOption(); + parser.addPositionalArgument("filename", "Deb package path.", "file [file..]"); + + parser.process(*this); + + if (!m_selectedFiles.isEmpty()) { + m_selectedFiles.clear(); + } + + QStringList paraList = parser.positionalArguments(); + if (!paraList.isEmpty()) { + for (auto it : paraList) { + m_selectedFiles.append(it); + } + } + + if (paraList.size() > 0 && m_selectedFiles.size() == 0) { + return false; + } + + return true; +} + +void SingleInstallerApplication::activateWindow() +{ + qDebug() << "Active quick install window to install file:" << m_selectedFiles << m_selectedFiles.size(); + + if (nullptr == m_qspMainWnd.get()) { + m_qspMainWnd.reset(new DebInstaller()); + Dtk::Widget::moveToCenter(m_qspMainWnd.get()); + + m_qspMainWnd->show(); + } else { + m_qspMainWnd->setWindowState(Qt::WindowActive); + m_qspMainWnd->activateWindow(); // Reactive main window + m_qspMainWnd->showNormal(); //非特效模式下激活窗口 + } + + if (m_selectedFiles.size() > 0) { + qDebug() << "m_selectedFiles" << m_selectedFiles; + QMetaObject::invokeMethod(m_qspMainWnd.get(), "onPackagesSelected", Qt::QueuedConnection, Q_ARG(QStringList, m_selectedFiles)); + } +} + +void SingleInstallerApplication::InstallerDeb(const QStringList &debPathList) +{ + if (debPathList.size() > 0) { + qDebug() << "debPath List" << debPathList; + QMetaObject::invokeMethod(m_qspMainWnd.get(), "onPackagesSelected", Qt::QueuedConnection, Q_ARG(QStringList, debPathList)); + } else { + //启动栏或者桌面启动空的软件包安装器后激活原有的窗口 + if (m_qspMainWnd.get()) { //先判断当前是否已经存在一个进程。 + m_qspMainWnd.get()->activateWindow(); //特效模式下激活窗口 + m_qspMainWnd.get()->showNormal(); //无特效激活窗口 + } + } +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/singleInstallerApplication.h deepin-deb-installer-5.7.0.17/src/deb_installer/singleInstallerApplication.h --- deepin-deb-installer-5.0.0/src/deb_installer/singleInstallerApplication.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/singleInstallerApplication.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,33 @@ +#ifndef SINGLEFONTAPPLICATION_H +#define SINGLEFONTAPPLICATION_H + +#include +#include +#include + +#include + +DWIDGET_USE_NAMESPACE + +class SingleInstallerApplication : public DApplication +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "com.deepin.DebInstaller") +public: + explicit SingleInstallerApplication(int &argc, char **argv); + + ~SingleInstallerApplication(); + + void activateWindow(); + bool parseCmdLine(); + +public slots: + Q_SCRIPTABLE void InstallerDeb(const QStringList &debPathList); + +private: + QStringList m_selectedFiles; + + QScopedPointer m_qspMainWnd; // MainWindow ptr +}; + +#endif // SINGLEFONTAPPLICATION_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/utils/accessibledefine.h deepin-deb-installer-5.7.0.17/src/deb_installer/utils/accessibledefine.h --- deepin-deb-installer-5.0.0/src/deb_installer/utils/accessibledefine.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/utils/accessibledefine.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,365 @@ +#ifndef ACCESSIBLEDEFINE_H +#define ACCESSIBLEDEFINE_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SEPARATOR "_" + +inline QString getAccessibleName(QWidget *w, QAccessible::Role r, const QString &fallback) +{ + const QString lowerFallback = fallback.toLower(); + // 避免重复生成 + static QMap objnameMap; + if (!objnameMap[w].isEmpty()) + return objnameMap[w]; + + static QMap> accessibleMap; + QString oldAccessName = w->accessibleName().toLower(); + oldAccessName.replace(SEPARATOR, ""); + + // 按照类型添加固定前缀 + QMetaEnum metaEnum = QMetaEnum::fromType(); + QByteArray prefix = metaEnum.valueToKeys(r); + switch (r) { + case QAccessible::Form: + prefix = "Form"; + break; + case QAccessible::Button: + prefix = "Btn"; + break; + case QAccessible::StaticText: + prefix = "Label"; + break; + case QAccessible::EditableText: + prefix = "Editable"; + break; + case QAccessible::Slider: + prefix = "Slider"; + break; + default: + break; + } + + // 再加上标识 + QString accessibleName = QString::fromLatin1(prefix) + SEPARATOR; + accessibleName += oldAccessName.isEmpty() ? lowerFallback : oldAccessName; + // 检查名称是否唯一 + if (accessibleMap[r].contains(accessibleName)) { + // 获取编号,然后+1 + int pos = accessibleName.indexOf(SEPARATOR); + int id = accessibleName.mid(pos + 1).toInt(); + + QString newAccessibleName; + do { + // 一直找到一个不重复的名字 + newAccessibleName = accessibleName + SEPARATOR + QString::number(++id); + } while (accessibleMap[r].contains(newAccessibleName)); + + accessibleMap[r].append(newAccessibleName); + objnameMap.insert(w, newAccessibleName); + + QObject::connect(w, &QWidget::destroyed, [=](QObject *obj) { // 对象销毁后移除占用名称 + objnameMap.remove(obj); + accessibleMap[r].removeOne(newAccessibleName); + }); + return newAccessibleName; + } else { + accessibleMap[r].append(accessibleName); + objnameMap.insert(w, accessibleName); + + QObject::connect(w, &QWidget::destroyed, [=](QObject *obj) { // 对象销毁后移除占用名称 + objnameMap.remove(obj); + accessibleMap[r].removeOne(accessibleName); + }); + return accessibleName; + } +} + +// 公共的功能 +#define FUNC_CREATE(classname, accessibletype, accessdescription) \ + Accessible##classname(classname *w) \ + : QAccessibleWidget(w, accessibletype, #classname) \ + , m_w(w) \ + , m_description(accessdescription) \ + { \ + } + +#define FUNC_TEXT(classname, accessiblename) \ + QString Accessible##classname::text(QAccessible::Text t) const \ + { \ + switch (t) { \ + case QAccessible::Name: \ + return getAccessibleName(m_w, this->role(), accessiblename); \ + case QAccessible::Description: \ + return m_description; \ + default: \ + return QString(); \ + } \ + } + +// button控件特有功能 +#define FUNC_ACTIONNAMES(classname) \ + QStringList Accessible##classname::actionNames() const \ + { \ + if (!m_w->isEnabled()) \ + return QStringList(); \ + return QStringList() << pressAction() << showMenuAction(); \ + } + +#define FUNC_DOACTION(classname) \ + void Accessible##classname::doAction(const QString &actionName) \ + { \ + if (actionName == pressAction()) { \ + QPointF localPos = m_w->geometry().center(); \ + QMouseEvent event(QEvent::MouseButtonPress, localPos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); \ + qApp->sendEvent(m_w, &event); \ + } else if (actionName == showMenuAction()) { \ + QPointF localPos = m_w->geometry().center(); \ + QMouseEvent event(QEvent::MouseButtonPress, localPos, Qt::RightButton, Qt::RightButton, Qt::NoModifier); \ + qApp->sendEvent(m_w, &event); \ + } \ + } + +// Label控件特有功能 +#define FUNC_TEXT_(classname) \ + QString Accessible##classname::text(int startOffset, int endOffset) const \ + { \ + Q_UNUSED(startOffset) \ + Q_UNUSED(endOffset) \ + return m_w->text(); \ + } + +// Slider控件特有功能 +#define FUNC_CURRENTVALUE(classname) \ + QVariant Accessible##classname::currentValue() const \ + { \ + return m_w->value(); \ + } + +#define FUNC_SETCURRENTVALUE(classname) \ + void Accessible##classname::setCurrentValue(const QVariant &value) \ + { \ + return m_w->setValue(value.toInt()); \ + } + +#define FUNC_MAXMUMVALUE(classname) \ + QVariant Accessible##classname::maximumValue() const \ + { \ + return QVariant(m_w->maximum()); \ + } + +#define FUNC_FUNC_MINIMUMVALUE(classname) \ + QVariant Accessible##classname::minimumValue() const \ + { \ + return QVariant(m_w->minimum()); \ + } + +#define FUNC_FUNC_MINIMUMSTEPSIZE(classname) \ + QVariant Accessible##classname::minimumStepSize() const \ + { \ + return QVariant(m_w->singleStep()); \ + } + +#define SET_FORM_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, accessdescription) \ + class Accessible##classname : public QAccessibleWidget \ + { \ + public: \ + FUNC_CREATE(classname, QAccessible::Form, accessdescription) \ + QString text(QAccessible::Text t) const override; \ + void *interface_cast(QAccessible::InterfaceType t) override \ + { \ + switch (t) { \ + case QAccessible::ActionInterface: \ + return static_cast(this); \ + default: \ + return nullptr; \ + } \ + } \ +\ + private: \ + classname *m_w; \ + QString m_description; \ + }; \ + FUNC_TEXT(classname, accessiblename) + +#define SET_BUTTON_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, accessdescription) \ + class Accessible##classname : public QAccessibleWidget \ + { \ + public: \ + FUNC_CREATE(classname, QAccessible::Button, accessdescription) \ + QString text(QAccessible::Text t) const override; \ + void *interface_cast(QAccessible::InterfaceType t) override \ + { \ + switch (t) { \ + case QAccessible::ActionInterface: \ + return static_cast(this); \ + default: \ + return nullptr; \ + } \ + } \ + QStringList actionNames() const override; \ + void doAction(const QString &actionName) override; \ +\ + private: \ + classname *m_w; \ + QString m_description; \ + }; \ + FUNC_TEXT(classname, accessiblename) \ + FUNC_ACTIONNAMES(classname) \ + FUNC_DOACTION(classname) + +#define SET_LABEL_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, accessdescription) \ + class Accessible##classname : public QAccessibleWidget \ + , public QAccessibleTextInterface \ + { \ + public: \ + FUNC_CREATE(classname, QAccessible::StaticText, accessdescription) \ + QString text(QAccessible::Text t) const override; \ + void *interface_cast(QAccessible::InterfaceType t) override \ + { \ + switch (t) { \ + case QAccessible::ActionInterface: \ + return static_cast(this); \ + case QAccessible::TextInterface: \ + return static_cast(this); \ + default: \ + return nullptr; \ + } \ + } \ + QString text(int startOffset, int endOffset) const override; \ + void selection(int selectionIndex, int *startOffset, int *endOffset) const override {} \ + int selectionCount() const override { return 0; } \ + void addSelection(int startOffset, int endOffset) override {} \ + void removeSelection(int selectionIndex) override {} \ + void setSelection(int selectionIndex, int startOffset, int endOffset) override {} \ + int cursorPosition() const override { return 0; } \ + void setCursorPosition(int position) override {} \ + int characterCount() const override { return 0; } \ + QRect characterRect(int offset) const override { return QRect(); } \ + int offsetAtPoint(const QPoint &point) const override { return 0; } \ + void scrollToSubstring(int startIndex, int endIndex) override {} \ + QString attributes(int offset, int *startOffset, int *endOffset) const override { return QString(); } \ +\ + private: \ + classname *m_w; \ + QString m_description; \ + }; \ + FUNC_TEXT(classname, accessiblename) \ + FUNC_TEXT_(classname) + +#define SET_SLIDER_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, accessdescription) \ + class Accessible##classname : public QAccessibleWidget \ + , public QAccessibleValueInterface \ + { \ + public: \ + FUNC_CREATE(classname, QAccessible::Slider, accessdescription) \ + QString text(QAccessible::Text t) const override; \ + void *interface_cast(QAccessible::InterfaceType t) override \ + { \ + switch (t) { \ + case QAccessible::ActionInterface: \ + return static_cast(this); \ + case QAccessible::ValueInterface: \ + return static_cast(this); \ + default: \ + return nullptr; \ + } \ + } \ + QVariant currentValue() const override; \ + void setCurrentValue(const QVariant &value) override; \ + QVariant maximumValue() const override; \ + QVariant minimumValue() const override; \ + QVariant minimumStepSize() const override; \ +\ + private: \ + classname *m_w; \ + QString m_description; \ + }; \ + FUNC_TEXT(classname, accessiblename) \ + FUNC_CURRENTVALUE(classname) \ + FUNC_SETCURRENTVALUE(classname) \ + FUNC_MAXMUMVALUE(classname) \ + FUNC_FUNC_MINIMUMVALUE(classname) \ + FUNC_FUNC_MINIMUMSTEPSIZE(classname) + +#define SET_EDITABLE_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, accessdescription) \ + class Accessible##classname : public QAccessibleWidget \ + , public QAccessibleEditableTextInterface \ + , public QAccessibleTextInterface \ + { \ + public: \ + FUNC_CREATE(classname, QAccessible::EditableText, accessdescription) \ + QString text(QAccessible::Text t) const override; \ + QAccessibleInterface *child(int index) const override { return nullptr; } \ + void *interface_cast(QAccessible::InterfaceType t) override \ + { \ + switch (t) { \ + case QAccessible::ActionInterface: \ + return static_cast(this); \ + case QAccessible::TextInterface: \ + return static_cast(this); \ + case QAccessible::EditableTextInterface: \ + return static_cast(this); \ + default: \ + return nullptr; \ + } \ + } \ + QString text(int startOffset, int endOffset) const override; \ + void selection(int selectionIndex, int *startOffset, int *endOffset) const override {} \ + int selectionCount() const override { return 0; } \ + void addSelection(int startOffset, int endOffset) override {} \ + void removeSelection(int selectionIndex) override {} \ + void setSelection(int selectionIndex, int startOffset, int endOffset) override {} \ + int cursorPosition() const override { return 0; } \ + void setCursorPosition(int position) override {} \ + int characterCount() const override { return 0; } \ + QRect characterRect(int offset) const override { return QRect(); } \ + int offsetAtPoint(const QPoint &point) const override { return 0; } \ + void scrollToSubstring(int startIndex, int endIndex) override {} \ + QString attributes(int offset, int *startOffset, int *endOffset) const override { return QString(); } \ + void insertText(int offset, const QString &text) override {} \ + void deleteText(int startOffset, int endOffset) override {}; \ + void replaceText(int startOffset, int endOffset, const QString &text) override {} \ +\ + private: \ + classname *m_w; \ + QString m_description; \ + }; \ + FUNC_TEXT(classname, accessiblename) \ + FUNC_TEXT_(classname) + +#define USE_ACCESSIBLE(classnamestring, classname) \ + if (classnamestring == QLatin1String(#classname) && object && object->isWidgetType()) { \ + interface = new Accessible##classname(static_cast(object)); \ + } + +// [指定objectname]---适用同一个类,但objectname不同的情况 +#define USE_ACCESSIBLE_BY_OBJECTNAME(classnamestring, classname, objectname) \ + if (classnamestring == QLatin1String(#classname) && object && (object->objectName() == objectname) && object->isWidgetType()) { \ + interface = new Accessible##classname(static_cast(object)); \ + } + +/*******************************************简化使用*******************************************/ +#define SET_FORM_ACCESSIBLE(classname, accessiblename) SET_FORM_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") + +#define SET_BUTTON_ACCESSIBLE(classname, accessiblename) SET_BUTTON_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") + +#define SET_LABEL_ACCESSIBLE(classname, accessiblename) SET_LABEL_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") + +#define SET_SLIDER_ACCESSIBLE(classname, accessiblename) SET_SLIDER_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") + +#define SET_EDITABLE_ACCESSIBLE(classname, accessiblename) SET_EDITABLE_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") + +#define SET_PROGRESSBAR_ACCESSIBLE(classname, accessiblename) SET_PROGRESSBAR_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") +/************************************************************************************************/ + +#endif // ACCESSIBLEDEFINE_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/utils/accessible.h deepin-deb-installer-5.7.0.17/src/deb_installer/utils/accessible.h --- deepin-deb-installer-5.0.0/src/deb_installer/utils/accessible.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/utils/accessible.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,130 @@ +#ifndef ACCESSIBLE_H +#define ACCESSIBLE_H + +#include "utils/accessibledefine.h" +#include "view/pages/singleinstallpage.h" +#include "view/pages/uninstallconfirmpage.h" +#include "view/pages/multipleinstallpage.h" +#include "view/pages/AptConfigMessage.h" +#include "view/widgets/choosefilebutton.h" +#include "view/widgets/debinfolabel.h" +#include "view/pages/debinstaller.h" +#include "view/widgets/workerprogress.h" +#include "view/widgets/droundbgframe.h" +#include "view/widgets/filechoosewidget.h" +#include "view/widgets/InfoCommandLinkButton.h" +#include "view/widgets/infocontrolbutton.h" +#include "view/widgets/installprocessinfoview.h" +#include "model/packagelistview.h" +#include "model/deblistmodel.h" + + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +DWIDGET_USE_NAMESPACE +//using namespace DCC_NAMESPACE; +SET_FORM_ACCESSIBLE(SingleInstallPage, "SingleInstallPage") +SET_FORM_ACCESSIBLE(UninstallConfirmPage, "UninstallConfirmPage") +SET_FORM_ACCESSIBLE(MultipleInstallPage, "MultipleInstallPage") +SET_FORM_ACCESSIBLE(AptConfigMessage, "AptConfigMessage") +SET_FORM_ACCESSIBLE(ChooseFileButton, "ChooseFileButton") +SET_FORM_ACCESSIBLE(DebInfoLabel, "DebInfoLabel") +SET_FORM_ACCESSIBLE(DebInstaller, "DebInstaller") +SET_FORM_ACCESSIBLE(WorkerProgress, "WorkerProgress") +SET_FORM_ACCESSIBLE(DRoundBgFrame, "DRoundBgFrame") +SET_FORM_ACCESSIBLE(FileChooseWidget, "FileChooseWidget") +SET_FORM_ACCESSIBLE(InfoCommandLinkButton, "InfoCommandLinkButton") +SET_FORM_ACCESSIBLE(InfoControlButton, "InfoControlButton") +SET_FORM_ACCESSIBLE(InstallProcessInfoView, "InstallProcessInfoView") +SET_FORM_ACCESSIBLE(PackagesListView, "PackagesListView") + +// Qt控件 +SET_FORM_ACCESSIBLE(QFrame, m_w->objectName().isEmpty() ? "frame" : m_w->objectName()) +SET_FORM_ACCESSIBLE(QWidget, m_w->objectName().isEmpty() ? "widget" : m_w->objectName()) +SET_BUTTON_ACCESSIBLE(QPushButton, m_w->text().isEmpty() ? "qpushbutton" : m_w->text()) +SET_SLIDER_ACCESSIBLE(QSlider, "qslider") +SET_FORM_ACCESSIBLE(QMenu, "qmenu") +//SET_LABEL_ACCESSIBLE(QLabel, m_w->text().isEmpty() ? "qlabel" : m_w->text()) + +// Dtk控件 + +SET_FORM_ACCESSIBLE(DWidget, m_w->objectName().isEmpty() ? "widget" : m_w->objectName()) +SET_FORM_ACCESSIBLE(DBackgroundGroup, m_w->objectName().isEmpty() ? "dbackgroundgroup" : m_w->objectName()) +SET_BUTTON_ACCESSIBLE(DSwitchButton, m_w->text().isEmpty() ? "switchbutton" : m_w->text()) +SET_BUTTON_ACCESSIBLE(DFloatingButton, m_w->toolTip().isEmpty() ? "DFloatingButton" : m_w->toolTip()) +SET_FORM_ACCESSIBLE(DSearchEdit, m_w->objectName().isEmpty() ? "DSearchEdit" : m_w->objectName()) +SET_BUTTON_ACCESSIBLE(DPushButton, m_w->objectName().isEmpty() ? "DPushButton" : m_w->objectName()) +SET_BUTTON_ACCESSIBLE(DIconButton, m_w->objectName().isEmpty() ? "DIconButton" : m_w->objectName()) +SET_BUTTON_ACCESSIBLE(DCheckBox, m_w->objectName().isEmpty() ? "DCheckBox" : m_w->objectName()) +SET_BUTTON_ACCESSIBLE(DCommandLinkButton, "DCommandLinkButton") +SET_FORM_ACCESSIBLE(DTitlebar, m_w->objectName().isEmpty() ? "DTitlebar" : m_w->objectName()) +//SET_LABEL_ACCESSIBLE(DLabel, m_w->text().isEmpty() ? "DLabel" : m_w->text()) +SET_BUTTON_ACCESSIBLE(DToolButton, m_w->objectName().isEmpty() ? "DToolButton" : m_w->objectName()) +SET_FORM_ACCESSIBLE(DDialog, m_w->objectName().isEmpty() ? "DDialog" : m_w->objectName()) +SET_FORM_ACCESSIBLE(DFileDialog, m_w->objectName().isEmpty() ? "DFileDialog" : m_w->objectName()) + +QAccessibleInterface *accessibleFactory(const QString &classname, QObject *object) +{ + QAccessibleInterface *interface = nullptr; + // 应用主窗口 + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), AptConfigMessage); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), ChooseFileButton); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DebInfoLabel); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DebInstaller); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DRoundBgFrame); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), FileChooseWidget); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), InfoCommandLinkButton); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), InfoControlButton); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), InstallProcessInfoView); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), MultipleInstallPage); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), PackagesListView); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), SingleInstallPage); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), UninstallConfirmPage); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), WorkerProgress); + + + // Qt 控件 + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QFrame); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QWidget); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QPushButton); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QSlider); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QMenu); + // USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QLabel); + + // dtk 控件 + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DWidget); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DBackgroundGroup); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DSwitchButton); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DFloatingButton); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DSearchEdit); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DPushButton); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DIconButton); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DCheckBox); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DCommandLinkButton); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DTitlebar); + // USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DLabel); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DDialog); + USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DFileDialog); + + return interface; +} + +#endif // ACCESSIBLE_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/utils/DebugTimeManager.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/utils/DebugTimeManager.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/utils/DebugTimeManager.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/utils/DebugTimeManager.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,52 @@ +#include "DebugTimeManager.h" +#include +#include + +#include + +DebugTimeManager *DebugTimeManager::s_Instance = nullptr; + +DebugTimeManager::DebugTimeManager() +{ + +} + +void DebugTimeManager::clear() +{ + m_MapPoint.clear(); +} + +void DebugTimeManager::beginPointQt(const QString &point, const QString &status) +{ + PointInfo info; + info.desc = status; + info.time = QDateTime::currentMSecsSinceEpoch(); + m_MapPoint.insert(point, info); +} +void DebugTimeManager::endPointQt(const QString &point) +{ + if (m_MapPoint.find(point) != m_MapPoint.end()) { + m_MapPoint[point].time = QDateTime::currentMSecsSinceEpoch() - m_MapPoint[point].time; + qInfo() << QString("[GRABPOINT] %1 %2 time=%3ms").arg(point).arg(m_MapPoint[point].desc).arg(m_MapPoint[point].time); + } +} + +void DebugTimeManager::beginPointLinux(const QString &point, const QString &status) +{ + struct timeval tv; + gettimeofday(&tv, nullptr); + + PointInfo info; + info.desc = status; + info.time = tv.tv_sec * 1000 + tv.tv_usec / 1000; + m_MapPoint.insert(point, info); +} +void DebugTimeManager::endPointLinux(const QString &point) +{ + if (m_MapPoint.find(point) != m_MapPoint.end()) { + struct timeval tv; + gettimeofday(&tv, nullptr); + m_MapPoint[point].time = tv.tv_sec * 1000 + tv.tv_usec / 1000 - m_MapPoint[point].time; + qInfo() << QString("[GRABPOINT] %1 %2 time=%3ms").arg(point).arg(m_MapPoint[point].desc).arg(m_MapPoint[point].time); + } +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/utils/DebugTimeManager.h deepin-deb-installer-5.7.0.17/src/deb_installer/utils/DebugTimeManager.h --- deepin-deb-installer-5.0.0/src/deb_installer/utils/DebugTimeManager.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/utils/DebugTimeManager.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,102 @@ +/* +* Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. +* +* Author: Jun.Liu +* Maintainer: xxx.xx +* +* 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 DEBUGTIMEMANAGER_H +#define DEBUGTIMEMANAGER_H + +#include +#include +#include + +#define PERF_ON +#ifdef PERF_ON +#define PERF_PRINT_BEGIN(point, desc) DebugTimeManager::getInstance()->beginPointLinux(point, desc) +#define PERF_PRINT_END(point) DebugTimeManager::getInstance()->endPointLinux(point) +#else +#define PERF_PRINT_BEGIN(point,desc) +#define PERF_PRINT_END(point) +#endif + +/** + * @brief The PointInfo struct + */ +struct PointInfo { + QString desc; + qint64 time; +}; + +class DebugTimeManager +{ +public: + /** + * @brief getInstance : get signal instance + * @return : the signal instance + */ + static DebugTimeManager *getInstance() + { + if (!s_Instance) { + s_Instance = new DebugTimeManager(); + } + return s_Instance; + } + + /** + * @brief clear : clear data + */ + void clear(); + + /** + * @brief beginPointQt : 打点开始,Qt + * @param point : 所打的点的名称,固定格式,在打点文档中查看 -- POINT-XX POINT-01 + * @param status : 性能测试的状态,比如测试时文件的大小 + */ + void beginPointQt(const QString &point, const QString &status = ""); + + /** + * @brief endPointQt : 结束打点,Qt + * @param point : 需要结束的点 + */ + void endPointQt(const QString &point); + + + /** + * @brief beginPointLinux : 打点开始,Linux + * @param point : 所打的点的名称,固定格式,在打点文档中查看 -- POINT-XX POINT-01 + * @param status : 性能测试的状态,比如测试时文件的大小 + */ + void beginPointLinux(const QString &point, const QString &status = ""); + + /** + * @brief endPointLinux : 结束打点,Linux + * @param point : 需要结束的点 + */ + void endPointLinux(const QString &point); + +protected: + DebugTimeManager(); + + +private: + static DebugTimeManager *s_Instance; // m_MapPoint; // + * + * 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 diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/utils/utils.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/utils/utils.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/utils/utils.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/utils/utils.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,493 @@ +/* + * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. + * + * Author: rekols + * Maintainer: rekols + * + * 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 "utils.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +QHash Utils::m_imgCacheHash; +QHash Utils::m_fontNameCache; + +Utils::Utils(QObject *parent) + : QObject(parent) +{ +} + +Utils::~Utils() +{ +} + +QString Utils::loadFontFamilyByType(FontType fontType) +{ + QString fontFileName = ""; + switch (fontType) { + case SourceHanSansMedium: + fontFileName = ":/font/SourceHanSansCN-Medium.ttf"; + break; + case SourceHanSansNormal: + fontFileName = ":/font/SourceHanSansCN-Normal.ttf"; + break; + case DefautFont: + QFont font; + return font.family(); + } + + if (m_fontNameCache.contains(fontFileName)) { + return m_fontNameCache.value(fontFileName); + } + + QString fontFamilyName = ""; + QFile fontFile(fontFileName); + if (!fontFile.open(QIODevice::ReadOnly)) { + qDebug() << "Open font file error"; + return fontFamilyName; + } + + int loadedFontID = QFontDatabase::addApplicationFontFromData(fontFile.readAll()); + QStringList loadedFontFamilies = QFontDatabase::applicationFontFamilies(loadedFontID); + if (!loadedFontFamilies.empty()) { + fontFamilyName = loadedFontFamilies.at(0); + } + fontFile.close(); + + m_fontNameCache.insert(fontFileName, fontFamilyName); + return fontFamilyName; +} + +QFont Utils::loadFontBySizeAndWeight(QString fontFamily, int fontSize, int fontWeight) +{ + Q_UNUSED(fontSize) + + QFont font(fontFamily); + font.setWeight(fontWeight); + + return font; +} + +void Utils::bindFontBySizeAndWeight(QWidget *widget, QString fontFamily, int fontSize, int fontWeight) +{ + QFont font = loadFontBySizeAndWeight(fontFamily, fontSize, fontWeight); + widget->setFont(font); + + DFontSizeManager::SizeType sizeType = DFontSizeManager::T6; + switch (fontSize) { + case 10: { + sizeType = DFontSizeManager::T10; + } + break; + case 11: { + sizeType = DFontSizeManager::T9; + } + break; + case 12: { + sizeType = DFontSizeManager::T8; + } + break; + case 13: { + sizeType = DFontSizeManager::T7; + } + break; + case 14: { + sizeType = DFontSizeManager::T6; + } + break; + case 17: { + sizeType = DFontSizeManager::T5; + } + break; + case 20: { + sizeType = DFontSizeManager::T4; + } + break; + case 24: { + sizeType = DFontSizeManager::T3; + } + break; + case 30: { + sizeType = DFontSizeManager::T2; + } + break; + case 40: { + sizeType = DFontSizeManager::T1; + } + break; + } + + DFontSizeManager *fontManager = DFontSizeManager::instance(); + fontManager->bind(widget, sizeType, fontWeight); +} + +QString Utils::fromSpecialEncoding(const QString &inputStr) +{ + bool bFlag = inputStr.contains(QRegExp("[\\x4e00-\\x9fa5]+")); + if (bFlag) { + return inputStr; + } + + QTextCodec *codec = QTextCodec::codecForName("utf-8"); + if (codec) { + QString unicodeStr = codec->toUnicode(inputStr.toLatin1()); + return unicodeStr; + } else { + return inputStr; + } +} +bool Utils::Return_Digital_Verify(QString strfilepath, QString strfilename) +{ + QDir dir(strfilepath); + if (!dir.exists()) { + qDebug() << "文件夹不存在"; + return false; + } + dir.setFilter(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); + QFileInfoList list = dir.entryInfoList(); + int file_count = list.count(); + qDebug() << "file_count " << file_count; + if (file_count <= 0) { + qDebug() << "当前文件夹为空"; + return false; + } + QStringList string_list; + for (int i = 0; i < list.count(); i++) { + QFileInfo file_info = list.at(i); + if (file_info.fileName() == strfilename) { + qDebug() << "文件路径: " << file_info.path() << " " << "文件名: " << file_info.fileName(); + return true; + } + } + return false; +} + +Utils::VerifyResultCode Utils::Digital_Verify(QString filepath_name) +{ + QString verifyfilepath = "/usr/bin/"; + QString verifyfilename = "deepin-deb-verify"; + bool result_verify_file = Return_Digital_Verify(verifyfilepath, verifyfilename); + qDebug() << "result_verify_file" << result_verify_file; + if (result_verify_file) { + QProcess proc; + QString program = "/usr/bin/deepin-deb-verify "; + filepath_name = "\"" + filepath_name + "\""; + program = program + filepath_name; + proc.start(program); + qInfo() << "签名校验command:" << program; + proc.waitForFinished(); + const QString output = proc.readAllStandardOutput(); + const QString output1 = proc.readAllStandardError(); + qInfo() << "签名校验结果:" << output1; + for (const auto &item : output1.split('\n')) { + if (item.toLatin1() == "[INFO] signature verified!") { + return VerifySuccess; + } + if (item.toLatin1() == "cannot find signinfo in deb file") { + return DebfileInexistence; + } + if (item.toLatin1() == "extract deb_file failed!") { + return ExtractDebFail; + } + if (item.toLatin1() == "verify deb file failed!") { + return DebVerifyFail; + } + } + } + return OtherError; +} + +QString Utils::holdTextInRect(const QFont &font, QString srcText, const QSize &size) +{ + bool bContainsChinese = srcText.contains(QRegExp("[\\x4e00-\\x9fa5]+")); + + QString text; + QString tempText; + int totalHeight = size.height(); + int lineWidth = size.width() - font.pixelSize(); + + int offset = bContainsChinese ? font.pixelSize() : 0; + + QFontMetrics fm(font); + + int calcHeight = 0; + int lineHeight = fm.height(); + int lineSpace = 0; + int lineCount = (totalHeight - lineSpace) / lineHeight; + int prevLineCharIndex = 0; + for (int charIndex = 0; charIndex < srcText.size() && lineCount >= 0; ++charIndex) { + int fmWidth = fm.horizontalAdvance(tempText); + if (fmWidth > lineWidth - offset || tempText.contains("\n")) { + calcHeight += lineHeight + 3; + if (calcHeight + lineHeight > totalHeight) { + QString endString = srcText.mid(prevLineCharIndex); + const QString &endText = fm.elidedText(endString, Qt::ElideRight, size.width()); + text += endText; + + lineCount = 0; + break; + } + + if (!bContainsChinese) { + QChar currChar = tempText.at(tempText.length() - 1); + QChar nextChar = srcText.at(srcText.indexOf(tempText) + tempText.length()); + if (currChar.isLetter() && nextChar.isLetter()) { + tempText += '-'; + } + fmWidth = fm.horizontalAdvance(tempText); + if (fmWidth > size.width()) { + --charIndex; + --prevLineCharIndex; + tempText = tempText.remove(tempText.length() - 2, 1); + } + } + text += tempText; + + --lineCount; + if (lineCount > 0) { + if (!tempText.contains("\n")) + text += "\n"; + } + tempText = srcText.at(charIndex); + + prevLineCharIndex = charIndex; + } else { + tempText += srcText.at(charIndex); + } + } + + if (lineCount > 0) { + text += tempText; + } + + return text; +} + +QString Utils::holdTextInRect(const QFont &font, QString srcText, const int &width) +{ + + bool bContainsChinese = srcText.contains(QRegExp("[\\x4e00-\\x9fa5]+")); + + QString text; + QString tempText; + int lineWidth = width - 12; + + int offset = bContainsChinese ? font.pixelSize() : 0; + + QFontMetrics fm(font); + + int prevLineCharIndex = 0; + for (int charIndex = 0; charIndex < srcText.size(); ++charIndex) { + int fmWidth = fm.horizontalAdvance(tempText); + if (fmWidth > lineWidth - offset || tempText.contains("\n")) { + + if (!bContainsChinese) { + QChar currChar = tempText.at(tempText.length() - 1); + QChar nextChar = srcText.at(srcText.indexOf(tempText) + tempText.length()); + if (currChar.isLetter() && nextChar.isLetter()) { + tempText += '-'; + } + fmWidth = fm.horizontalAdvance(tempText); + if (fmWidth > lineWidth) { + --charIndex; + --prevLineCharIndex; + tempText = tempText.remove(tempText.length() - 2, 1); + if (currChar != '\n' && nextChar != '\n') { + text += tempText; + text += "\n"; + } + } + } else { + text += tempText; + text += "\n"; + } + + tempText = srcText.at(charIndex); + prevLineCharIndex = charIndex; + } else { + tempText += srcText.at(charIndex); + } + } + if (text.size() >= 1 && text[text.size() - 1] != '\n') + text += "\n"; + text += tempText; + + return text; +} + +DebApplicationHelper *DebApplicationHelper::instance() +{ + return qobject_cast(DGuiApplicationHelper::instance()); +} + +#define CAST_INT static_cast + +static QColor light_qpalette[QPalette::NColorRoles] { + QColor("#414d68"), //WindowText + QColor("#e5e5e5"), //Button + QColor("#e6e6e6"), //Light + QColor("#e5e5e5"), //Midlight + QColor("#001A2E"), //Dark -- changed origin is #e3e3e3 + QColor("#e4e4e4"), //Mid + QColor("#414d68"), //Text + Qt::black, //BrightText + QColor("#414d68"), //ButtonText + Qt::white, //Base + QColor("#f8f8f8"), //Window + QColor(0, 0, 0, CAST_INT(0.05 * 255)), //Shadow + QColor("#0081ff"), //Highlight + QColor(0, 45, 255, CAST_INT(0.5 * 255)), //HighlightedText //old Qt::white + QColor("#0082fa"), //Link + QColor("#ad4579"), //LinkVisited + QColor(0, 0, 0, CAST_INT(0.03 * 255)), //AlternateBase + Qt::white, //NoRole + QColor(255, 255, 255, CAST_INT(0.8 * 255)), //ToolTipBase + QColor("#526A7F") //ToolTipText -- changed origin is Qt::black +}; + +static QColor dark_qpalette[QPalette::NColorRoles] { + QColor("#c0c6d4"), //WindowText + QColor("#444444"), //Button + QColor("#484848"), //Light + QColor("#474747"), //Midlight + QColor("#C0C6D4"), //Dark -- changed origin is #414141 + QColor("#434343"), //Mid + QColor("#c0c6d4"), //Text + Qt::white, //BrightText + QColor("#c0c6d4"), //ButtonText + QColor(255, 255, 255, CAST_INT(0.05 * 255)), //Base --- changed origin is #282828 + QColor("#252525"), //Window + QColor(0, 0, 0, CAST_INT(0.05 * 255)), //Shadow + QColor("#095EFF"), //Highlight //old : #0081ff + QColor("#0059D2"), //HighlightedText //old: b8d3ff + QColor("#0082fa"), //Link + QColor("#ad4579"), //LinkVisited + QColor(0, 0, 0, CAST_INT(0.05 * 255)), //AlternateBase + Qt::black, //NoRole + QColor(45, 45, 45, CAST_INT(0.8 * 255)), //ToolTipBase + QColor("#6D7C88") //ToolTipText -- changed origin is #c0c6d4 +}; + +static QColor light_dpalette[DPalette::NColorTypes] { + QColor(), //NoType + QColor(0, 0, 0, CAST_INT(255 * 0.03)), //ItemBackground + QColor("#414d68"), //TextTitle + QColor("#609DC8"), //TextTips --- changed origin is #526A7F + QColor("#FF5A5A"), //TextWarning -- changed origin is #FF5736 + QColor("#7C7C7C"), //TextLively -- changed origin is #0082FA + QColor("#417505"), //LightLively -- changed origin is #25b7ff + QColor("#47790C"), //DarkLively -- changed origin is #0098ff + QColor(0, 0, 0, CAST_INT(0.03 * 255)) //FrameBorder +}; + +static QColor dark_dpalette[DPalette::NColorTypes] { + QColor(), //NoType + QColor(255, 255, 255, CAST_INT(255 * 0.05)), //ItemBackground + QColor("#c0c6d4"), //TextTitle + QColor("#6D7C88"), //TextTips + QColor("#9A2F2F"), //TextWarning -- changed origin is #FF5736 + QColor("#7C7C7C"), //TextLively -- changed origin is #0082FA + QColor("#417505"), //LightLively -- changed origin is #0056c1 + QColor("#47790C"), //DarkLively -- changed origin is #004c9c + QColor(0, 0, 0, CAST_INT(0.08 * 255)) //FrameBorder +}; + +DPalette DebApplicationHelper::standardPalette(DGuiApplicationHelper::ColorType type) const +{ + DPalette pa; + const QColor *qcolor_list, *dcolor_list; + + if (type == DarkType) { + qcolor_list = dark_qpalette; + dcolor_list = dark_dpalette; + } else { + qcolor_list = light_qpalette; + dcolor_list = light_dpalette; + } + + for (int i = 0; i < DPalette::NColorRoles; ++i) { + QPalette::ColorRole role = static_cast(i); + + QColor color = qcolor_list[i]; + pa.setColor(DPalette::Active, role, color); + generatePaletteColor(pa, role, type); + } + + for (int i = 0; i < DPalette::NColorTypes; ++i) { + DPalette::ColorType role = static_cast(i); + + QColor color = dcolor_list[i]; + pa.setColor(DPalette::Active, role, color); + generatePaletteColor(pa, role, type); + } + + return *const_cast(&pa); +} + +DPalette DebApplicationHelper::palette(const QWidget *widget, const QPalette &base) const +{ + Q_UNUSED(base) + + DPalette palette; + + do { + // 存在自定义palette时应该根据其自定义的palette获取对应色调的DPalette + const QPalette &wp = widget->palette(); + + palette = standardPalette(toColorType(wp)); + + // 关注控件palette改变的事件 + const_cast(widget)->installEventFilter(const_cast(this)); + } while (false); + + return palette; +} + +void DebApplicationHelper::setPalette(QWidget *widget, const DPalette &palette) +{ + // 记录此控件被设置过palette + widget->setProperty("_d_set_palette", true); + widget->setPalette(palette); +} + +void DebApplicationHelper::resetPalette(QWidget *widget) +{ + widget->setProperty("_d_set_palette", QVariant()); + widget->setAttribute(Qt::WA_SetPalette, false); +} + +DebApplicationHelper::DebApplicationHelper() {} + +DebApplicationHelper::~DebApplicationHelper() {} + +bool DebApplicationHelper::eventFilter(QObject *watched, QEvent *event) +{ + return DGuiApplicationHelper::eventFilter(watched, event); +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/utils/utils.h deepin-deb-installer-5.7.0.17/src/deb_installer/utils/utils.h --- deepin-deb-installer-5.0.0/src/deb_installer/utils/utils.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/utils/utils.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. + * + * Author: rekols + * + * 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 UTILS_H +#define UTILS_H + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#define dApp (static_cast(QCoreApplication::instance())) + +DWIDGET_USE_NAMESPACE + +class DebApplicationHelper : public DGuiApplicationHelper +{ + Q_OBJECT + +public: + static DebApplicationHelper *instance(); + + DPalette standardPalette(DGuiApplicationHelper::ColorType type) const; + DPalette palette(const QWidget *widget, const QPalette &base = QPalette()) const; + void setPalette(QWidget *widget, const DPalette &palette); + void resetPalette(QWidget *widget); + +private: + DebApplicationHelper(); + ~DebApplicationHelper() override; + + bool eventFilter(QObject *watched, QEvent *event) override; +}; + +class Utils : public QObject +{ + Q_OBJECT + +public: + Utils(QObject *parent = nullptr); + ~Utils(); + + enum FontType { + SourceHanSansMedium, + SourceHanSansNormal, + DefautFont + }; + + enum VerifyResultCode { + OtherError = -1, //其他错误 + VerifySuccess, //验证成功 + DebfileInexistence, //解压deb文件用的临时目录不存在 + ExtractDebFail, //提取deb包内容时出错 + DebVerifyFail //deb包验证失败 + }; + + static QHash m_imgCacheHash; + static QHash m_fontNameCache; + + static QString loadFontFamilyByType(FontType fontType);//加载字体类型 + static QFont loadFontBySizeAndWeight(QString fontFamily, int fontSize, int fontWeight);//设置字体大小等 + static void bindFontBySizeAndWeight(QWidget *widget, QString fontFamily, int fontSize, int fontWeight);//绑定字体大小等 + static QString fromSpecialEncoding(const QString &inputStr);//字体编码处理 + static QString holdTextInRect(const QFont &font, QString srcText, const QSize &size);//针对字体截断处理函数 + static QString holdTextInRect(const QFont &font, QString srcText, const int &width);//针对配置界面字体截断处理函数 + static int returnfileIsempty(QString strfilepath, QString strfilename); //返回文件是否存在 + static VerifyResultCode Digital_Verify(QString filepath_name); //验证deb数字签名 + static bool Return_Digital_Verify(QString strfilepath, QString strfilename); //返回验证工具是否存在 +}; + +#endif diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/pages/AptConfigMessage.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/AptConfigMessage.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/view/pages/AptConfigMessage.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/AptConfigMessage.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,254 @@ +#include "AptConfigMessage.h" +#include "utils/utils.h" + +#include +#include +#include + +#include +#include +#include +#include +#include + +AptConfigMessage *AptConfigMessage::aptConfig = nullptr; + +DCORE_USE_NAMESPACE +DWIDGET_USE_NAMESPACE + +AptConfigMessage::AptConfigMessage(QWidget *parent) + : DMainWindow(parent) +{ + initControl(); //初始化控件 + initAccessibleName(); //自动化测试,为控件添加AccessibleName + initUI(); //初始化UI界面 + initTitlebar(); //初始化标题栏,隐藏标题栏的各种按钮 + initTabOrder(); //初始化按钮的焦点切换顺序 + connect(m_pushbutton, &QPushButton::clicked, this, &AptConfigMessage::dealInput); //按钮按下,处理输入的内容并发送到安装程序 +} + +/** + * @brief AptConfigMessage::initTabOrder 初始化tab切换焦点的顺序。 + * 设置焦点在输入框和按钮之间循环 + */ +void AptConfigMessage::initTabOrder() +{ + QWidget::setTabOrder(m_pushbutton, m_inputEdit->lineEdit()); //设置焦点的切换顺序从按钮到输入框 + QWidget::setTabOrder(m_inputEdit->lineEdit(), m_pushbutton); //设置焦点的切换顺序从输入框到按钮 +} + +/** + * @brief AptConfigMessage::initTitlebar 初始化标题栏 + */ +void AptConfigMessage::initTitlebar() +{ + DTitlebar *tb = titlebar(); + tb->setIcon(QIcon::fromTheme("deepin-deb-installer")); //设置图标 + tb->setTitle(""); + tb->setVisible(false); + tb->setMenuVisible(false); //设置标题栏菜单按钮不可见 + tb->setAutoFillBackground(false); //填充标题栏背景 +} + +/** + * @brief AptConfigMessage::initControl 初始化各个控件 + */ +void AptConfigMessage::initControl() +{ + this->setFocusPolicy(Qt::NoFocus); //设置自身无焦点 + + // 初始化 配置信息展示框的样式 + m_textEdit = new InstallProcessInfoView(360, 196); + m_textEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + m_textEdit->setTextFontSize(12, QFont::Medium); + m_textEdit->setFixedSize(360, 196); + m_textEdit->setFocusPolicy(Qt::NoFocus); + + // 初始化输入框 + m_inputEdit = new DLineEdit(); + m_inputEdit->setFixedSize(220, 36); + + //设置输入框只接受两个数字,配置的选项在99个以内(1-99) + //兼容有些包(mysql-community-server)配置时需要输入密码,取消对输入框的限制 + // QRegExp regExp("[0-9]{1,2}"); + // m_inputEdit->setValidator(new QRegExpValidator(regExp, this)); + + // 初始化提示信息lable + m_pQuestionLabel = new DLabel(tr("Enter the number to configure: ")); + m_pQuestionLabel->setMaximumWidth(360); + m_pQuestionLabel->setFocusPolicy(Qt::NoFocus); + + //初始化提交信息按钮 + m_pushbutton = new DSuggestButton(tr("OK")); + m_pushbutton->setDefault(true); + m_pushbutton->setFixedSize(130, 36); + + //焦点在信息输入框时,按回车触发提交信息。 + connect(m_inputEdit, &DLineEdit::returnPressed, this, [ = ] { + m_pushbutton->clicked(); + }); +} + +/** + * @brief AptConfigMessage::initUI 整体布局的初始化 + * + */ +void AptConfigMessage::initUI() +{ + + setFixedSize(380, 332); //固定配置框的大小 + setTitlebarShadowEnabled(false); //设置标题栏无阴影 + + //建立最大的整体布局 + QVBoxLayout *centralLayout = new QVBoxLayout; + centralLayout->addStretch(10); //设置最小间距为10px + centralLayout->addWidget(m_textEdit); //添加配置信息展示框 + centralLayout->addWidget(m_pQuestionLabel); //添加提示信息label + centralLayout->addStretch(10); //添加弹簧最小间距为10px + + // 输入框和按钮小布局 + QHBoxLayout *pInputLayout = new QHBoxLayout; + pInputLayout->addWidget(m_inputEdit); //添加输入框 + m_inputEdit->setFocus(); //输入框默认启动时带有焦点。 + pInputLayout->addStretch(10); //添加间距 + pInputLayout->addWidget(m_pushbutton); //添加按钮 + + centralLayout->addLayout(pInputLayout); //把输入框和按钮的布局放到整体布局中 + centralLayout->addStretch(10); //增加下边距 + centralLayout->setContentsMargins(10, 0, 10, 10); //设置整体的上下左右的边距 + + + // 增加一个widget 放置上述布局,并将此widget设置为中心窗口 + QWidget *wrapWidget = new QWidget(this); + wrapWidget->setLayout(centralLayout); + wrapWidget->setFocusPolicy(Qt::NoFocus); //此widget无焦点 + setCentralWidget(wrapWidget); + + setWindowIcon(QIcon::fromTheme("deepin-deb-installer")); //给程序添加图标文件 + move(qApp->primaryScreen()->geometry().center() - geometry().center()); //移动此窗口到屏幕中间。 +} + +/** + * @brief AptConfigMessage::appendTextEdit 向配置信息展示窗口添加配置信息的数据 + * @param str 配置信息数据 + */ +void AptConfigMessage::appendTextEdit(QString str) +{ + m_inputEdit->lineEdit()->setFocus(); //保证焦点在输入框上 + qDebug() << "str" << str << "str.size" << str.size(); + if (str.isEmpty() || str == "\\n") //如果添加的数据是空的或者只有换行,则不添加 + return; + + QString text; //存放配置信息去除空格后的结果 + QString question(""); //截取当前配置时的问题 PS:已经被废弃 + text = str.replace(" ", " "); + + text.remove(QChar('\"'), Qt::CaseInsensitive); //移除多余的“"” + int num = text.indexOf("\\n"); //获取配置的第一行的最后一个字符的下标,用于判断当前是否还有信息需要展示 + //下标为-1 表明此时只有一行数据需要展示,则直接添加 + if (num == -1) { + m_textEdit->appendText(str); //添加信息 + m_textEdit->appendText("\n"); + return; + } + int size = text.size(); //获取当前信息的字符数 + while (num != -1) { + num = text.indexOf("\\n"); //获取第一行的下标 + + QString strFilter; //存放第一行的数据 + strFilter = text.mid(0, num); //截取第一行 + + // 从原始数据中删除第一行 + // num +2 是为了去掉换行,size-num-3是保证 数据的长度不超过原本text的长度 + // size-1 是本身的长度 num+2 是第一行的长度 size-1-(num +2) = size-num-3 + text = text.mid(num + 2, size - num - 3); + + if (strFilter[0] == '\t') strFilter.remove(0, 1); //如果第一行的第一个数据是tab,去掉 + m_textEdit->appendText(strFilter); //添加数据 + qDebug() << "strFilter" << strFilter; + + if (!strFilter.isEmpty()) //此时是为了保存每一行的数据,直到最后保存的是此次配置的问题 PS:已经被废弃 + question = strFilter; + if (num == -1 && text.size() > 0 && !text.contains("\n")) { //如果当前已经是最后一行。此时text的数据长度大于0且text已经不包含任何的换行则退出,说明信息获取完成。 + break; + } + } + qDebug() << "end after while"; +} + +/** + * @brief AptConfigMessage::dealInput + * 向工作线程传递输入的数据 + */ +void AptConfigMessage::dealInput() +{ + qDebug() << "m_inputEdit" << m_inputEdit->text(); + //如果当前输入框中的信息是空的 或者输入了00 则不提交,并清除信息 + //PS:dpkg 规定如果输入00 配置会结束 + if (m_inputEdit->text().isEmpty() || m_inputEdit->text() == "" || m_inputEdit->text() == "00") { + m_inputEdit->clear(); //每次提交输入信息后,输入框清除。 + return; + } + QString str = m_inputEdit->text(); //获取输入框的输入信息 + str.remove(QChar('"'), Qt::CaseInsensitive); //去除输入框中多余的“"” + emit AptConfigInputStr(str); //提交信息到配置安装程序 + m_inputEdit->clear(); //清除输入框的内容 +} + +/** + * @brief AptConfigMessage::paintEvent + * @param event + * + * 去除界面上的 最小化 最大化 关闭 菜单 按钮 + */ +void AptConfigMessage::paintEvent(QPaintEvent *event) +{ + DMainWindow::paintEvent(event); + QLayout *layout = titlebar()->layout(); + for (int i = 0; i < layout->count(); ++i) { + QWidget *widget = layout->itemAt(i)->widget(); + if (widget != nullptr && QString(widget->metaObject()->className()) == "QWidget") { + QLayout *widgetLayout = widget->layout(); + for (int j = 0; j < widgetLayout->count(); ++j) { + QWidget *topwidget = widgetLayout->itemAt(j)->widget(); + if (topwidget != nullptr && QString(topwidget->metaObject()->className()) == "QWidget") { + QLayout *wLayout = topwidget->layout(); + for (int k = 0; k < wLayout->count(); ++k) { + QWidget *bottomWidget = wLayout->itemAt(k)->widget(); + if (bottomWidget != nullptr && QString(bottomWidget->metaObject()->className()).contains("Button")) { + bottomWidget->setFocusPolicy(Qt::NoFocus); //设置标题栏所有的控件无焦点 + bottomWidget->setVisible(false); // 隐藏标题栏所有的控件。 + } + } + } + } + } + } +} + +/** + * @brief AptConfigMessage::clearTexts 清除输入框和信息框的内容 + */ +void AptConfigMessage::clearTexts() +{ + m_textEdit->clearText(); //清除信息框的内容 + m_inputEdit->clear(); //清除输入框的内容 +} + +/** + * @brief AptConfigMessage::initAccessibleName 初始化AccessibleName + */ +void AptConfigMessage::initAccessibleName() +{ + this->setObjectName("AptConfigMessage"); + this->setAccessibleName("AptConfigMessage"); + + m_textEdit->setObjectName("InstallInfoEdit"); + m_textEdit->setAccessibleName("InstallInfoEdit"); + + m_inputEdit->setObjectName("ConfigInputEdit"); + m_inputEdit->setAccessibleName("ConfigInputEdit"); + + m_pushbutton->setObjectName("ConfigConfirmButton"); + m_pushbutton->setAccessibleName("ConfigConfirmButton"); +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/pages/AptConfigMessage.h deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/AptConfigMessage.h --- deepin-deb-installer-5.0.0/src/deb_installer/view/pages/AptConfigMessage.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/AptConfigMessage.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,98 @@ +#ifndef APTCONFIGMESSAGE_H +#define APTCONFIGMESSAGE_H + +#include "view/widgets/installprocessinfoview.h" + +#include +#include +#include +#include +#include + +#include +#include + +DWIDGET_USE_NAMESPACE + +/** + * @brief The AptConfigMessage class + * 配置包安装界面 + */ +class AptConfigMessage : public DMainWindow +{ + Q_OBJECT + +public: + explicit AptConfigMessage(QWidget *parent = nullptr); + InstallProcessInfoView *m_textEdit; + + static AptConfigMessage *getInstance() + { + if (aptConfig == nullptr) { + aptConfig = new AptConfigMessage; + } + return aptConfig; + } +public: + /** + * @brief appendTextEdit 获取安装进程返回的信息 + * @param str 安装进程的详细信息 + */ + void appendTextEdit(QString str); + + /** + * @brief clearTexts 清除输入框和信息框中的内容 + */ + void clearTexts(); + +public slots: + /** + * @brief dealInput 处理筛选输入的内容 + */ + void dealInput(); + +signals: + /** + * @brief AptConfigInputStr 将输入的序号或者选项传输给命令 + */ + void AptConfigInputStr(QString); + +protected: + void paintEvent(QPaintEvent *event) override; + +private: + + DIconButton *m_picon; // 图标信息 + DLineEdit *m_inputEdit; //输入框 + DSuggestButton *m_pushbutton; //确定输入按钮 + DLabel *m_pQuestionLabel; //提示信息 + static AptConfigMessage *aptConfig; + +private: + /** + * @brief initUI 初始化UI界面的格局 + */ + void initUI(); + + /** + * @brief initTitlebar 修改标题栏,去除标题栏的各种按钮 + */ + void initTitlebar(); + + /** + * @brief initControl 初始化各种控件 + */ + void initControl(); + + /** + * @brief initTabOrder 初始化tab切换焦点的顺序 + */ + void initTabOrder(); + + /** + * @brief initAccessibleName 初始化AccessibleName + */ + void initAccessibleName(); +}; + +#endif // APTCONFIGMESSAGE_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/pages/debinstaller.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/debinstaller.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/view/pages/debinstaller.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/debinstaller.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,826 @@ +/* + * 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 "model/deblistmodel.h" +#include "view/widgets/filechoosewidget.h" +#include "view/pages/multipleinstallpage.h" +#include "view/pages/singleinstallpage.h" +#include "view/pages/uninstallconfirmpage.h" +#include "view/pages/AptConfigMessage.h" +#include "view/widgets/TitleBarFocusMonitor.h" +#include "utils/utils.h" +#include "utils/DebugTimeManager.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using QApt::DebFile; + +DCORE_USE_NAMESPACE +DWIDGET_USE_NAMESPACE + +DebInstaller::DebInstaller(QWidget *parent) + : DMainWindow(parent) + , m_fileListModel(new DebListModel(this)) + , m_fileChooseWidget(new FileChooseWidget) + , m_centralLayout(new QStackedLayout()) + , m_dragflag(-1) +{ + initUI(); + initConnections(); +} + +DebInstaller::~DebInstaller() {} + +/** + * @brief initUI + * 初始化界面 + */ +void DebInstaller::initUI() +{ + //Hide the shadow under the title bar + setTitlebarShadowEnabled(false); + + this->setObjectName("DebInstaller"); + this->setAccessibleName("DebInstaller"); + + //file choose widget settings + m_fileChooseWidget->setObjectName("FileChooseWidget"); + m_fileChooseWidget->setAccessibleName("FileChooseWidget"); + + //初始化 加载文件选择widget + m_centralLayout->addWidget(m_fileChooseWidget); + m_centralLayout->setContentsMargins(0, 0, 0, 0); + m_centralLayout->setSpacing(0); + + //设置当前主窗口 + QWidget *wrapWidget = new QWidget(this); + wrapWidget->setLayout(m_centralLayout); + +//#define SHOWBORDER +#ifdef SHOWBORDER + wrapWidget->setStyleSheet("QWidget{border:1px solid black;}"); +#endif + + //title bar settings + DTitlebar *tb = titlebar(); + tb->setIcon(QIcon::fromTheme("deepin-deb-installer")); + tb->setTitle(""); + tb->setAutoFillBackground(true); + tb->setDisableFlags(Qt::CustomizeWindowHint); + //fix bug 4329, reset focusPolicy + handleFocusPolicy(); //获取标题栏的控件按钮 + + //标题栏焦点监测线程。 + m_pMonitorFocusThread = new TitleBarFocusMonitor(m_OptionWindow); //初始化标题栏焦点检测线程 + + QString fontFamily = Utils::loadFontFamilyByType(Utils::SourceHanSansMedium); + Utils::bindFontBySizeAndWeight(tb, fontFamily, 14, QFont::Medium); + + setCentralWidget(wrapWidget); //将给定的小部件设置为主窗口的中心小部件。 + setAcceptDrops(true); //启用了drop事件 + setFixedSize(480, 380); + setWindowTitle(tr("Package Installer")); + setWindowIcon(QIcon::fromTheme("deepin-deb-installer")); //仅仅适用于windows系统 + move(qApp->primaryScreen()->geometry().center() - geometry().center()); +} + +/** + * @brief handleFocusPolicy + * 获取titleBar的控件 optionButton minButton closeButton + */ +void DebInstaller::handleFocusPolicy() +{ + //Cancel all window focus + QLayout *layout = titlebar()->layout(); + for (int i = 0; i < layout->count(); ++i) { + QWidget *widget = layout->itemAt(i)->widget(); + if (widget != nullptr && QString(widget->metaObject()->className()) == QString("QWidget")) { + QLayout *widgetLayout = widget->layout(); + for (int j = 0; j < widgetLayout->count(); ++j) { + QWidget *topWidget = widgetLayout->itemAt(j)->widget(); + if (topWidget != nullptr && QString(topWidget->metaObject()->className()) == QString("QWidget")) { + QLayout *wLayout = topWidget->layout(); + for (int k = 0; k < wLayout->count(); ++k) { + QWidget *bottomWidget = wLayout->itemAt(k)->widget(); + if (bottomWidget != nullptr && QString(bottomWidget->metaObject()->className()).contains("Button")) { + //widget->setFocusPolicy(Qt::NoFocus); + // 获取菜单栏按钮 + if ("Dtk::Widget::DWindowOptionButton" == QString(bottomWidget->metaObject()->className())) { + m_OptionWindow = bottomWidget; + } + // 获取最小化窗口按钮 + if ("Dtk::Widget::DWindowMinButton" == QString(bottomWidget->metaObject()->className())) { + m_MinWindow = bottomWidget; + } + // 获取关闭窗口按钮 + if ("Dtk::Widget::DWindowCloseButton" == QString(bottomWidget->metaObject()->className())) { + m_closeWindow = bottomWidget; + } + } + } + } + } + } + } +} + +/** + * @brief initConnections + * 初始化链接信号和槽 + */ +void DebInstaller::initConnections() +{ + //Append packages via file-choose-widget's file-choose-button + connect(m_fileChooseWidget, &FileChooseWidget::packagesSelected, this, &DebInstaller::onPackagesSelected); + + //Select the focus of the page + + //Determine the status of the current application based on the status of the authorization box. + connect(m_fileListModel, &DebListModel::lockForAuth, this, &DebInstaller::onAuthing); + + //show dpkg details + connect(m_fileListModel, &DebListModel::appendOutputInfo, this, [ = ](const QString & output) { + qDebug() << "Process:" << output.trimmed(); + }); + + //During installing/uninstalling, drag is not allowed + connect(m_fileListModel, &DebListModel::workerFinished, this, &DebInstaller::changeDragFlag); + + //When the authorization is revoked, show install/uninstall/reinstall button which hidden during authorizing + connect(m_fileListModel, &DebListModel::AuthCancel, this, &DebInstaller::showHiddenButton); + + //When starting the installation, the install button is not available + connect(m_fileListModel, &DebListModel::onStartInstall, this, &DebInstaller::onStartInstallRequested); + + //When the authorization box pops up, the install button is not available. + connect(m_fileListModel, &DebListModel::EnableReCancelBtn, this, &DebInstaller::setEnableButton); + + //When installing deepin-wine for the first time, set the button display according to the progress of the installation + connect(m_fileListModel, &DebListModel::DependResult, this, &DebInstaller::DealDependResult); + + connect(m_fileListModel, &DebListModel::enableCloseButton, this, &DebInstaller::enableCloseButton); + + //Append packages via double-clicked or right-click + connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::newProcessInstance, this, &DebInstaller::onNewAppOpen); + + //监测到安装进度,停止监测标题栏菜单键焦点。 + connect(m_fileListModel, &DebListModel::appendOutputInfo, this, &DebInstaller::stopMonitorTitleBarFocus); +} + +/** + * @brief DebInstaller::stopMonitorTitleBarFocus 停止监测标题栏焦点。 + */ +void DebInstaller::stopMonitorTitleBarFocus() +{ + if (m_pMonitorFocusThread->isRunning()) { + m_pMonitorFocusThread->stopMonitor(); + } +} + + +/** + * @brief DebInstaller::enableCloseButton 当安装、卸载开始或结束后,根据传递的值启用或禁用关闭按钮 + * @param enable 启用还是禁用关闭按钮的标识 + */ +void DebInstaller::enableCloseButton(bool enable) +{ + if (enable) { + enableCloseAndExit(); //启用关闭按钮 + } else { + disableCloseAndExit(); //禁用关闭按钮 + } +} + +/** + * @brief disableCloseAndExit + * 设置退出和关闭按钮为不可用 + */ +// closed is forbidden during install/uninstall +void DebInstaller::disableCloseAndExit() +{ + titlebar()->setDisableFlags(Qt::WindowCloseButtonHint); //设置标题栏中的关闭按钮不可用 + QMenu *titleMenu = titlebar()->menu(); + QList actions = titleMenu->actions(); + QAction *action = actions.last(); //获取标题栏菜单的关闭按钮 + action->setDisabled(true); //设置标题栏菜单中的关闭按钮不可用 + + // fix bug: 36125 During the installation process, clicking the window close button has a hover effect + titlebar()->setFocusPolicy(Qt::NoFocus); + this->setFocusPolicy(Qt::NoFocus); +} + +/** + * @brief enableCloseAndExit + * 设置退出和关闭按钮可用 + */ +// closed is allowed after install/uninstall +void DebInstaller::enableCloseAndExit() +{ + titlebar()->setDisableFlags(titlebar()->windowFlags() & ~Qt::WindowMinimizeButtonHint & ~Qt::WindowCloseButtonHint); //设置标题栏的关闭按钮可用 + + QMenu *titleMenu = titlebar()->menu(); + QList actions = titleMenu->actions(); + QAction *action = actions.last(); //获取标题栏菜单中的关闭按钮 + action->setDisabled(false); //设置标题栏菜单中的关闭按钮不可用 + + // fix bug: 36125 During the installation process, clicking the window close button has a hover effect + titlebar()->setFocusPolicy(Qt::NoFocus); + this->setFocusPolicy(Qt::NoFocus); +} + +/** + * @brief onStartInstallRequested + * 安装开始后,所有的关闭按钮都会被禁止 + * SP3新增,解决安装开始时焦点闪现的问题。 + */ +//after start installing,all close button is forbidden. +void DebInstaller::onStartInstallRequested() +{ + //开始监测标题栏菜单键的焦点 + m_pMonitorFocusThread->start(); + disableCloseAndExit(); //安装开始后,关闭按钮不可用,并开始检测标题栏菜单键的焦点 +} + +/** + * @brief onNewAppOpen + * @param pid 进程号 + * @param arguments 要安装的包的全路径的列表 + * 桌面或文管中双击或右键打开时的槽函数 + * 会把后缀为.deb的包传递到onPackageSelected中 + * packages selected via double-click or right-click + */ +void DebInstaller::onNewAppOpen(qint64 pid, const QStringList &arguments) +{ + Q_UNUSED(pid) + qDebug() << "onNewAppOpen: pid:" << pid << ", arguments:" << arguments; + + QStringList debFileList; //保存deb包的路径 + for (int i = 0; i < arguments.size(); i++) { + QString strArg = arguments.at(i); //某个deb包 + if (!strArg.contains("deb-installer")) { + if (checkSuffix(strArg)) { //检查拖入包的后缀 + debFileList << strArg; //添加到临时列表中 + } + } + } + + if (debFileList.size() > 0) { + onPackagesSelected(debFileList); //添加到安装器中 + } + + this->setWindowState(Qt::WindowActive); //激活窗口 + this->activateWindow(); +} + +/** + * @brief DebInstaller::keyPressEvent 按键事件 + * @param e + */ +void DebInstaller::keyPressEvent(QKeyEvent *e) +{ + // debug 模式下,按下Esc 会退出安装程序 + switch (e->key()) { +#ifdef QT_DEBUG + case Qt::Key_Escape: + qApp->quit(); + break; +#endif + default: + ; + } +} + +//during install, drag package into application is not allowed. +//If the dragged file which suffix isn't deb, not allowed to append +void DebInstaller::dragEnterEvent(QDragEnterEvent *e) +{ + this->activateWindow(); //拖入时,激活窗口 + if (m_fileListModel->m_workerStatus_temp == DebListModel::WorkerProcessing) { //如果当前正在安装,不允许拖入包 + this->setAcceptDrops(false); //不允许拖入 + } else { + m_fileChooseWidget->setAcceptDrops(true); //允许包被拖入 + if (m_dragflag == 0) //如果当前不允许拖入,则直接返回 + return; + + 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(); + //fix bug: https://pms.uniontech.com/zentao/bug-view-48801.html + if (checkSuffix(item.path())) return e->accept();//检查拖入包的后缀 + } + e->ignore(); + } +} + +//Accept the file which suffix is deb and append to application +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); + + //fix bug: https://pms.uniontech.com/zentao/bug-view-48801.html + if (checkSuffix(local_path))//检查拖入包的后缀 + file_list << local_path; + else if (info.isDir()) { + for (auto deb : QDir(local_path).entryInfoList(QStringList() << "*.deb", QDir::Files)) + file_list << deb.absoluteFilePath(); //获取文件的绝对路径 + } + } + this->activateWindow(); //激活窗口 + onPackagesSelected(file_list); //放到安装列表中 +} + +/** + * @brief DebInstaller::dragMoveEvent 拖入移动事件 + * @param e + */ +void DebInstaller::dragMoveEvent(QDragMoveEvent *e) +{ + e->accept(); +} + +/** + * @brief onPackagesSelected + * @param packages 安装的包的全路径的列表 + * 添加包时,对包进行处理,去除无效的包,提示已经添加过的包,并根据添加包的数量刷新界面 + * Add packages that are not in the application to the application in sequence + * After appending ,refresh page according to packages' count + */ + +void DebInstaller::onPackagesSelected(const QStringList &packages) +{ + //根据不同的包的数量开启不同的记录点 + if (packages.size() > 1) { //单包安装记录当前包的大小 + PERF_PRINT_BEGIN("POINT-06", QString::number(packages.size())); + } + this->showNormal(); //非特效模式下激活窗口 + this->activateWindow(); //特效模式下激活窗口 + int packageCountInit = m_fileListModel->preparedPackages().size(); //查看当前是否已经有包被添加 + qDebug() << "DebInstaller:" << packages.size() << "packages have been selected"; + + // 如果此时 软件包安装器不是处于准备状态且还未初始化完成,则不添加 + // 如果此时处于正在安装或者卸载状态,则不添加 + if ((!m_lastPage.isNull() && m_fileListModel->m_workerStatus_temp != DebListModel::WorkerPrepare) || + m_fileListModel->m_workerStatus_temp == DebListModel::WorkerProcessing || + m_fileListModel->m_workerStatus_temp == DebListModel::WorkerUnInstall) { + qDebug() << "DebInstaller:" << "The program state is wrong and the package is not allowed to be added to the application"; + if (packages.size() > 1) { + PERF_PRINT_END("POINT-06"); //不添加结束记录点 + } + return; + } else { + qDebug() << "DebInstaller:" << "Ready to add the package to the package installer"; + //调整参数类型,如果为相对路径,便于改动。 + //循环遍历所有的包 并添加符合要求的包 + for (auto package : packages) { + QApt::DebFile *m_pDebPackage = new QApt::DebFile(package); + // 判断当前是否为绝对路径,如果是相对路径,则将相对路径转换为绝对路径。 + if (package[0] != "/") { + QFileInfo packageAbsolutePath(package); + package = packageAbsolutePath.absoluteFilePath(); //获取绝对路径 + qInfo() << "get AbsolutePath" << packageAbsolutePath.absoluteFilePath(); + } + + bool isValid = m_pDebPackage->isValid(); //查看这个包是否损坏 + if (packages.size() == 1 && isValid) + PERF_PRINT_BEGIN("POINT-03", "packsize=" + QString::number(m_pDebPackage->installedSize()) + "b"); + delete m_pDebPackage; + if (!isValid) { + qWarning() << "DebInstaller:" << "The deb package may be broken" << package; + //add Floating Message while package invalid + DFloatingMessage *msg = new DFloatingMessage; + msg->setMessage(tr("The deb package may be broken")); + msg->setIcon(QIcon::fromTheme("di_warning")); + DMessageManager::instance()->sendMessage(this, msg); //如果损坏,提示 + continue; + } + DRecentData data; + data.appName = "Deepin Deb Installer"; + data.appExec = "deepin-deb-installer"; + DRecentManager::addItem(package, data); + // Decide how to add according to the number of packages in the application + if (!m_fileListModel->appendPackage(package)) { //判断md5sum 如果相同则说明已经添加 + qWarning() << "DebInstaller:" << "package is Exist! "; + + DFloatingMessage *msg = new DFloatingMessage; + msg->setMessage(tr("Already Added")); + msg->setIcon(QIcon::fromTheme("di_ok")); + DMessageManager::instance()->sendMessage(this, msg); //已经添加的包会提示 + if (packages.size() == 1) { //如果当前只有一个包,且已添加则直接返回,不再刷新 + PERF_PRINT_END("POINT-03");//添加单个包,但是包已经存在,添加记录点 + return; + } + } + } + //fix bug29948 服务器版 + const int packageCount = m_fileListModel->preparedPackages().size(); //获取添加后的包的数量 + // There is already one package and there will be multiple packages to be added + if (packageCount == packageCountInit) { //添加前后包的数量一致,说明此次未添加新的包,直接返回,部署爱心 + if (packages.size() == 1) { //未添加成功单个包,添加记录点 + PERF_PRINT_END("POINT-03"); + } else { + PERF_PRINT_END("POINT-06"); //未成功添加多个包,添加记录点 + } + return; + } + if (packageCount == 1 || packages.size() > 1) { //如果添加了一个包或者要添加的包的数量大于1 刷新包的数量 + refreshInstallPage(packageCount); + if (packages.size() == 1) { + PERF_PRINT_END("POINT-03"); //添加成功,添加记录点 + } else { + PERF_PRINT_END("POINT-06"); //添加多个包成功,添加记录点 + } + return; + } + // There was a package from the beginning and it was added + if (packageCountInit == 1 && packageCount > 1) { //之前已经有一个包,之后又添加了包,刷新页面 + refreshInstallPage(packageCount); + } else { + m_dragflag = 1; //之前有多个包,之后又添加了包,则直接刷新listview + MulRefreshPage(packageCount); + m_fileListModel->initDependsStatus(packageCountInit); + MulRefreshPage(packageCount); + } + } + if (packages.size() == 1) { + PERF_PRINT_END("POINT-03"); //添加单个包成功,添加记录点 + } else { + PERF_PRINT_END("POINT-06"); //批量添加成功,添加记录点 + } +} + +/** + * @brief showUninstallConfirmPage + * 卸载按钮的槽函数 + * 显示卸载界面 + */ +void DebInstaller::showUninstallConfirmPage() +{ + Q_ASSERT(m_centralLayout->count() == 2); + m_fileListModel->m_workerStatus_temp = DebListModel::WorkerUnInstall; //刷新当前安装器的工作状态 + + this->setAcceptDrops(false); //卸载页面不允许添加/拖入包 + + const QModelIndex index = m_fileListModel->first(); //只有单包才有卸载界面 + + // Set the display information of the uninstall page + UninstallConfirmPage *p = new UninstallConfirmPage(this); //初始化卸载页面 + p->setRequiredList(index.data(DebListModel::PackageReverseDependsListRole).toStringList()); //查看是否有包依赖于当前要卸载的包,病获取列表 + p->setPackage(index.data().toString()); //添加卸载提示语 + + m_Filterflag = 3; //Uninstall the page + m_UninstallPage = p; //保存卸载页面 + + m_centralLayout->addWidget(p); //添加卸载页面到主界面中 + m_centralLayout->setCurrentIndex(2); //显示卸载页面 + p->setAcceptDrops(false); //卸载页面不允许拖入包 + + connect(p, &UninstallConfirmPage::accepted, this, &DebInstaller::onUninstallAccepted); //卸载页面确认卸载 + connect(p, &UninstallConfirmPage::canceled, this, &DebInstaller::onUninstallCancel); //卸载页面取消卸载 +} + +/** + * @brief onUninstallAccepted + * 卸载界面确认卸载按钮的槽函数 + * 卸载开始时,返回singleInstallPage 并显示卸载进程。 + */ +void DebInstaller::onUninstallAccepted() +{ + // uninstall begin + m_pMonitorFocusThread->start(); // 确认卸载后开启标题栏焦点监控线程。 + SingleInstallPage *p = backToSinglePage(); // 获取单包安装界面(卸载页面其实也是单包安装页面的一种) + m_fileChooseWidget->setAcceptDrops(true); // 设置文件选择界面可以拖入包 + p->uninstallCurrentPackage(); // 显示正在卸载页面 + + //set close button disabled while uninstalling + disableCloseAndExit(); // 卸载时不允许关闭或退出 + + m_Filterflag = m_dragflag; +} + +/** + * @brief onUninstallCancel + * 卸载界面取消卸载按钮的槽函数 + * 取消卸载后返回 singleInstallPage + */ +void DebInstaller::onUninstallCancel() +{ + // Cancel uninstall + this->setAcceptDrops(true); //取消卸载,允许包被拖入 + m_fileListModel->m_workerStatus_temp = DebListModel::WorkerPrepare; //重置工作状态为准备状态 + backToSinglePage(); //返回单包安装页面 + + m_Filterflag = m_dragflag; +} + +/** + * @brief onAuthing + * @param authing 按钮是否可用的标志 + * 授权框弹出后,设置当前界面为不可用状态 + * PS: 授权超时后,界面会可以被点击,此时按钮需要被禁用 + */ +void DebInstaller::onAuthing(const bool authing) +{ + //The authorization box pops up, the setting button is not available + setEnabled(!authing); //授权框弹出时,按钮不可用 授权框被关闭后,按钮可用 +} + +/** + * @brief reset + * 重置当前工作状态、拖入状态、标题栏、页面暂存区,删除卸载页面 + * + */ +void DebInstaller::reset() +{ + //reset page status + Q_ASSERT(m_centralLayout->count() == 2); + Q_ASSERT(!m_lastPage.isNull()); + m_fileListModel->m_workerStatus_temp = 0; // 当前工作状态 + m_dragflag = -1; // 是否被允许拖入或添加 + m_Filterflag = -1; // 当前显示的页面 + titlebar()->setTitle(QString()); // 重置标题栏 + m_fileListModel->reset(); // 重置model + + // 删除所有的页面 + m_lastPage->deleteLater(); + m_UninstallPage->deleteLater(); + m_centralLayout->setCurrentIndex(0); + + //fix bug: 44801 https://pms.uniontech.com/zentao/bug-view-44801.html + this->setAcceptDrops(true); + m_fileChooseWidget->setAcceptDrops(true); + // 安装完成后,清除文件选择按钮的焦点 + // fix bug:https://pms.uniontech.com/zentao/bug-view-46525.html + m_fileChooseWidget->clearChooseFileBtnFocus(); +} + +/** + * @brief removePackage + * @param index 要删除的包的下标 + * 根据传入的下表删除某个包。 + */ +void DebInstaller::removePackage(const int index) +{ + m_fileListModel->removePackage(index); // 后端删除某个下表的包 + const int packageCount = m_fileListModel->preparedPackages().size(); // 获取删除后的包的数量 + if (packageCount == 1) { // 删除后包的数量只有一个,从批量安装页面刷新成单包安装页面 + refreshInstallPage(index); + } + if (packageCount > 1) // 删除后仍然有多个包,直接刷新批量安装界面 + MulRefreshPage(index); +} + +/** + * @brief MulRefreshPage + * @param index 某一个包的下标位置 + * + * 刷新multiInstallPage并在刷新后滚动到下标处 + */ +void DebInstaller::MulRefreshPage(int index) +{ + if (m_dragflag == 1) { + MultipleInstallPage *multiplePage = qobject_cast(m_lastPage); //获取批量安装类的指针 + multiplePage->setScrollBottom(index); + } + //刷新页面时 刷新所有依赖的状态,防止有时依赖刷新不成功导致安装闪退 + m_fileListModel->refreshAllDependsStatus(); +} + +/** + * @brief refreshInstallPage + * @param index 某一个包的下标 + * 刷新安装界面 多用于singleInstallPage 转换到 multiSinglePage + * 如果传入的下标不为-1, 则刷新时滚动到下标处 + */ +void DebInstaller::refreshInstallPage(int index) +{ + //刷新页面之前先清除掉文件选择按钮的焦点,防止在文件选择按钮有焦点的时候添加包,焦点转移到其他控件 + m_fileChooseWidget->clearChooseFileBtnFocus(); + + // 刷新文件的状态,初始化包的状态为准备状态 + m_fileListModel->reset_filestatus(); + m_fileListModel->initPrepareStatus(); + // clear widgets if needed + if (!m_lastPage.isNull()) m_lastPage->deleteLater(); //清除widgets缓存 + + 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); + + // 重置安装器拖入的状态与工作的状态 + m_dragflag = 2; + m_Filterflag = 2; + } 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); + multiplePage->setScrollBottom(index); + m_lastPage = multiplePage; + m_centralLayout->addWidget(multiplePage); + m_dragflag = 1; + m_Filterflag = 1; + //刷新页面时 刷新所有依赖的状态,防止有时依赖刷新不成功导致安装闪退 + m_fileListModel->refreshAllDependsStatus(); + } + // switch to new page. + m_centralLayout->setCurrentIndex(1); + + // 刷新之后清除标题栏菜单键的焦点,防止在多次安装成功后再次添加包时,焦点偶尔出现在标题栏菜单键上。 + m_OptionWindow->clearFocus(); +} + +/** + * @brief backToSinglePage 返回单包安装界面 + * @return SingleInstallPage* SingleInstallPage的指针 + */ +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)); //获取单包安装widget + + // 返回单包安装页面时,允许添加包 + p->setAcceptDrops(true); + m_fileChooseWidget->setAcceptDrops(true); + this->setAcceptDrops(true); + Q_ASSERT(p); + + return p; +} + +/** + * @brief changeDragFlag + * 安装卸载结束后,允许包被拖入程序,并设置关闭按钮可用 + */ +void DebInstaller::changeDragFlag() +{ + repaint(); + m_dragflag = 0; //允许包被拖入且此时程序中没有包 + + enableCloseAndExit(); +} + +/** + * @brief setEnableButton + * @param bEnable 按钮是否可用标志 + * 根据当前的安装/卸载进程来控制singleInstallPage/multiInstallPage按钮的可用性 + * 授权超时,禁用按钮 + * 授权框取消,启用按钮 + */ +void DebInstaller::setEnableButton(bool bEnable) +{ + //Set button enabled after installation canceled + if (m_dragflag == 2) {//单包安装按钮的启用与禁用 + SingleInstallPage *singlePage = qobject_cast(m_lastPage); + singlePage->setEnableButton(bEnable); + } else if (m_dragflag == 1) {//批量安装按钮的启用与禁用 + MultipleInstallPage *multiplePage = qobject_cast(m_lastPage); + multiplePage->setEnableButton(bEnable); + } + //授权取消后 停止监测标题栏菜单键的焦点。 + m_pMonitorFocusThread->stopMonitor(); +} + +/** + * @brief showHiddenButton + * 授权取消后显示被隐藏的按钮 + */ +void DebInstaller::showHiddenButton() +{ + m_fileListModel->reset_filestatus(); //授权取消,重置所有的状态,包括安装状态,依赖状态等 + if (m_dragflag == 2) {// 单包安装显示按钮 + SingleInstallPage *singlePage = qobject_cast(m_lastPage); + singlePage->afterGetAutherFalse(); + } else if (m_dragflag == 1) {//批量安装显示按钮 + MultipleInstallPage *multiplePage = qobject_cast(m_lastPage); + multiplePage->afterGetAutherFalse(); + } +} + +/** + * @brief DebInstaller::closeEvent 关闭事件 + * @param event + */ +void DebInstaller::closeEvent(QCloseEvent *event) +{ + DMainWindow::closeEvent(event); +} + +/** + * @brief DealDependResult + * @param iAuthRes + * 根据deepin-wine依赖安装的结果处理界面显示效果 + */ +void DebInstaller::DealDependResult(int iAuthRes, QString dependName) +{ + //Set the display effect according to the status of deepin-wine installation authorization. + //Before authorization, authorization confirmation, and when the authorization box pops up, it is not allowed to add packages. + //依赖下载时、授权时不允许拖入 + if (iAuthRes == DebListModel::AuthBefore || iAuthRes == DebListModel::AuthConfirm || iAuthRes == DebListModel::AuthPop) { + this->setAcceptDrops(false); + } else { + this->setAcceptDrops(true); + } + + if (iAuthRes == DebListModel::AuthDependsSuccess) { //依赖下载成功 + m_fileListModel->reset_filestatus();//清除包的状态和包的错误原因 + m_fileListModel->initPrepareStatus();//重置包的prepare状态。 + } + //Refresh the display effect of different pages + if (m_dragflag == 2) { //单包安装处理依赖下载授权情况 + SingleInstallPage *singlePage = qobject_cast(m_lastPage); + singlePage->DealDependResult(iAuthRes, dependName); + } else if (m_dragflag == 1) {//批量安装处理依赖下载授权情况 + MultipleInstallPage *multiplePage = qobject_cast(m_lastPage); + multiplePage->DealDependResult(iAuthRes, dependName); + multiplePage->setScrollBottom(-1);// 滚动到最后一行。 + } +} + +/** + * @brief DebInstaller::checkSuffix 检查文件类型是否正确 + * @param filePath 文件路径 + * @return 后缀是否正确 + */ +bool DebInstaller::checkSuffix(QString filePath) +{ + const QFileInfo info(filePath); + if (info.isFile() && info.suffix().toLower() == "deb") { //大小写不敏感的判断是否为deb后缀 + return true; + } + return false; + +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/pages/debinstaller.h deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/debinstaller.h --- deepin-deb-installer-5.0.0/src/deb_installer/view/pages/debinstaller.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/debinstaller.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,248 @@ +/* + * 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 +#include +#include + +DWIDGET_USE_NAMESPACE +class FileChooseWidget; +class DebListModel; +class SingleInstallPage; +class TitleBarFocusMonitor; + +using QApt::DebFile; + +/** + * @brief The DebInstaller class + * + * 软件包安装器的主窗口 + * 承担各安装界面的切换,包的添加,删除等功能 + * M-V-C 中的 View + */ +class DebInstaller : public Dtk::Widget::DMainWindow +{ + Q_OBJECT + +public: + DebInstaller(QWidget *parent = nullptr); + virtual ~DebInstaller() Q_DECL_OVERRIDE; + +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; //拖进事件 + void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE; //关闭事件 PS:没有实质的用处,之后删除 + +private slots: + /** + * @brief onPackagesSelected + * @param packages 安装的包的全路径的列表 + * 添加包时,对包进行处理,去除无效的包,提示已经添加过的包,并根据添加包的数量刷新界面 + */ + void onPackagesSelected(const QStringList &packages); + + /** + * @brief onNewAppOpen + * @param pid 进程号 + * @param arguments 要安装的包的全路径的列表 + * 桌面或文管中双击或右键打开时的槽函数 + * 会把后缀为.deb的包传递到onPackageSelected中 + */ + void onNewAppOpen(qint64 pid, const QStringList &arguments); + + /** + * @brief removePackage + * @param index 要删除的包的下标 + * 根据传入的下表删除某个包。 + */ + void removePackage(const int index); + + /** + * @brief showUninstallConfirmPage + * 卸载按钮的槽函数 + * 显示卸载界面 + */ + void showUninstallConfirmPage(); + + /** + * @brief onUninstallAccepted + * 卸载界面确认卸载按钮的槽函数 + * 卸载开始时,返回singleInstallPage 并显示卸载进程。 + */ + void onUninstallAccepted(); + + /** + * @brief onUninstallCancel + * 卸载界面取消卸载按钮的槽函数 + * 取消卸载后返回 singleInstallPage + */ + void onUninstallCancel(); + + /** + * @brief onStartInstallRequested + * 安装开始后,所有的关闭按钮都会被禁止 + * SP3新增,解决安装开始时焦点闪现的问题。 + */ + void onStartInstallRequested(); + + /** + * @brief setEnableButton + * @param bEnable 按钮是否可用标志 + * 根据当前的安装/卸载进程来控制singleInstallPage/multiInstallPage按钮的可用性 + */ + void setEnableButton(bool bEnable); + + /** + * @brief showHiddenButton + * 授权取消后显示被隐藏的按钮 + */ + void showHiddenButton(); + + /** + * @brief onAuthing + * @param authing 按钮是否可用的标志 + * 授权框弹出后,设置当前界面为不可用状态 + */ + void onAuthing(const bool authing); + + /** + * @brief DealDependResult + * @param iAuthRes + * 根据deepin-wine依赖安装的结果处理界面显示效果 + */ + void DealDependResult(int iAuthRes, QString dependName); + + /** + * @brief changeDragFlag + * 安装卸载结束后,允许包被拖入程序,并设置关闭按钮可用 + */ + void changeDragFlag(); + + /** + * @brief reset + * 重置当前工作状态、拖入状态、标题栏、页面暂存区,删除卸载页面 + * + */ + void reset(); + + /** + * @brief enableCloseButton + * @param enable 是否禁用关闭按钮 + * 下载依赖时,关闭按钮不可用,下载依赖成功后,依赖按钮可用 + */ + void enableCloseButton(bool enable); + + /** + * @brief stopMonitorTitleBarFocus 停止监测标题栏焦点 + */ + void stopMonitorTitleBarFocus(); + +private: + /** + * @brief initUI + * 初始化界面 + */ + void initUI(); + + /** + * @brief initConnections + * 初始化链接信号和槽 + */ + void initConnections(); + + /** + * @brief refreshInstallPage + * @param index 某一个包的下标 + * 刷新安装界面 多用于singleInstallPage 转换到 multiSinglePage + * 如果传入的下标不为-1, 则刷新时滚动到下标处 + */ + void refreshInstallPage(int index = -1); + + /** + * @brief MulRefreshPage + * @param index 某一个包的下标位置 + * + * 刷新multiInstallPage并在刷新后滚动到下标处 + */ + void MulRefreshPage(int index); + + /** + * @brief handleFocusPolicy + * 获取titleBar的控件 optionButton minButton closeButton + */ + void handleFocusPolicy(); + + //Disable/enable close button and exit in menu + /** + * @brief disableCloseAndExit + * 设置退出和关闭按钮为不可用 + */ + void disableCloseAndExit(); + /** + * @brief enableCloseAndExit + * 设置退出和关闭按钮可用 + */ + void enableCloseAndExit(); + + /** + * @brief backToSinglePage 返回单包安装界面 + * @return SingleInstallPage* SingleInstallPage的指针 + */ + SingleInstallPage *backToSinglePage(); + + /** + * @brief checkSuffix 检查文件后缀 + * @param filePath 文件路径 + * @return 文件后缀是否是.deb + */ + bool checkSuffix(QString filePath); + +private: + DebListModel *m_fileListModel; //model 类 + FileChooseWidget *m_fileChooseWidget; //文件选择的widget + QStackedLayout *m_centralLayout; //单包、批量、卸载的widget + QPointer m_lastPage; //存放上一个页面的指针 + + int m_dragflag = -1; //当前是否允许拖入的标志位 + + int m_iOptionWindowFlag = 0; //判断菜单栏是否手动弹出 + bool bTabFlag = false; //Control focus is re-identified from titlebar + bool bActiveWindowFlag = true; //Window activation id + int m_Filterflag = -1; //Determine the current page choose:-1;multiple:1;single:2;uninstall:3 + + QPointer m_UninstallPage; //Store uninstall page + QWidget *m_OptionWindow; //titlebar main menu + QWidget *m_MinWindow; //最小化窗口按钮 + QWidget *m_closeWindow; //关闭窗口按钮 + + TitleBarFocusMonitor *m_pMonitorFocusThread; //标题栏监测线程。 +}; + +#endif // DEBINSTALLER_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/pages/multipleinstallpage.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/multipleinstallpage.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/view/pages/multipleinstallpage.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/multipleinstallpage.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,585 @@ +/* + * 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 "model/deblistmodel.h" +#include "model/packagelistview.h" +#include "model/packageslistdelegate.h" +#include "view/widgets/workerprogress.h" +#include "utils/utils.h" + +#include +#include +#include +#include + +#include + +MultipleInstallPage::MultipleInstallPage(DebListModel *model, QWidget *parent) + : QWidget(parent) + , m_debListModel(model) + , m_appsListViewBgFrame(new DRoundBgFrame(this, 10, 0)) + , m_contentFrame(new QWidget(this)) + , m_processFrame(new QWidget(this)) + , m_contentLayout(new QVBoxLayout()) + , m_centralLayout(new QVBoxLayout()) + , m_appsListView(new PackagesListView(this)) + , m_installProcessInfoView(new InstallProcessInfoView(440, 190, this)) + , m_installProgress(nullptr) + , m_progressAnimation(nullptr) + , m_infoControlButton(new InfoControlButton(tr("Show details"), tr("Collapse"), this)) + , m_installButton(new DPushButton(this)) + , m_backButton(new DPushButton(this)) + , m_acceptButton(new DPushButton(this)) + + // fix bug:33999 change DButton to DCommandLinkButton for Activity color + , m_tipsLabel(new DCommandLinkButton("", this)) + , m_dSpinner(new DSpinner(this)) +{ + initControlAccessibleName(); //自动化测试 + initContentLayout(); //初始化主布局 + initUI(); //初始化控件 + initConnections(); //初始化链接 + initTabOrder(); //初始化焦点切换顺序 + //添加后默认可以调用右键删除菜单。 + m_appsListView->setRightMenuShowStatus(true);//设置批量安装右键删除菜单可用 +} + +/** + * @brief MultipleInstallPage::initControlAccessibleName 添加控件的AccessibleName + */ +void MultipleInstallPage::initControlAccessibleName() +{ + //添加contentFrame AccessibleName + m_contentFrame->setObjectName("contentFrame"); + m_contentFrame->setAccessibleName("contentFrame"); + + //添加processFrame AccessibleName + m_processFrame->setObjectName("processFrame"); + m_processFrame->setAccessibleName("processFrame"); + + //添加 m_installProcessInfoView AccessibleName + m_installProcessInfoView->setObjectName("InstallProcessInfoView"); + m_installProcessInfoView->setAccessibleName("InstallProcessInfoView"); + + //添加 infoControlButton AccessibleName + m_infoControlButton->setObjectName("InfoControlButton"); + m_infoControlButton->setAccessibleName("InfoControlButton"); + + //添加 installButton AccessibleName + m_installButton->setObjectName("MultipageInstallButton"); + m_installButton->setAccessibleName("MultipageInstallButton"); + + //添加 backButton AccessibleName + m_backButton->setObjectName("MultipageBackButton"); + m_backButton->setAccessibleName("MultipageBackButton"); + + //添加 acceptButton AccessibleName + m_acceptButton->setObjectName("MultipageAcceptButton"); + m_acceptButton->setAccessibleName("MultipageAcceptButton"); + + //添加 m_infoControlButton AccessibleName + m_infoControlButton->setObjectName("MultipageInfoControlButton"); + m_infoControlButton->setAccessibleName("MultipageInfoControlButton"); + + //添加 appListViewFrame AccessibleName + m_appsListViewBgFrame->setObjectName("AppListViewBgFrame"); + m_appsListViewBgFrame->setAccessibleName("AppListViewBgFrame"); + + //添加 tipsLabel AccessibleName + m_tipsLabel->setObjectName("TipsCommandLinkButton"); + m_tipsLabel->setAccessibleName("TipsCommandLinkButton"); +} + +/** + * @brief MultipleInstallPage::initContentLayout 初始化主布局 + */ +void MultipleInstallPage::initContentLayout() +{ + //子布局添加10px 的空格 + m_contentLayout->addSpacing(10); + //子布局设置控件间的间距为0 + m_contentLayout->setSpacing(0); + //子布局设定上下左右的编剧 + m_contentLayout->setContentsMargins(10, 0, 10, 0); + + //添加子布局到主布局中 + m_contentFrame->setLayout(m_contentLayout); + m_centralLayout->addWidget(m_contentFrame); + + //主布局添加间距 + m_centralLayout->setSpacing(0); + + //主布局设置边距 + m_centralLayout->setContentsMargins(0, 0, 0, 0); + this->setLayout(m_centralLayout); + +//#define SHOWBGCOLOR +#ifdef SHOWBGCOLOR + m_contentFrame->setStyleSheet("QFrame{background: cyan}"); +#endif +} + +/** + * @brief MultipleInstallPage::initUI 初始化各个UI控件 + * 对PackageListView 进程重绘 + * 设置appListView的背景样式 + * 设置appListView的展示效果 + * + * 初始化安装按钮、确认按钮、返回按钮 + * 设置各个按钮的显示效果 + * 设置各个按钮的字体的展示效果 + * 处理各个控件的焦点 + * 初始化安装进度控件 + * 初始化依赖安装动画控件 + * + * 各个小布局的规制 + */ +void MultipleInstallPage::initUI() +{ + this->setFocusPolicy(Qt::NoFocus); + //直接传入debListModel 修复多次创建packageManager导致崩溃的问题 + PackagesListDelegate *delegate = new PackagesListDelegate(m_debListModel, m_appsListView); + + //获取currentIndex的坐标位置,用于键盘触发右键菜单 + connect(delegate, &PackagesListDelegate::sigIndexAndRect, m_appsListView, &PackagesListView::getPos); + //fix bug:33730 + m_appsListViewBgFrame->setFixedSize(460, 186/* + 10*/ + 5); + + // listview的布局 + QVBoxLayout *appsViewLayout = new QVBoxLayout(); + appsViewLayout->setSpacing(0); + + //设置边距 + appsViewLayout->setContentsMargins(0, 0, 0, 0); + m_appsListViewBgFrame->setLayout(appsViewLayout); + + //applistview 绑定model + m_appsListView->setModel(m_debListModel); + m_appsListView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + //使用代理重绘listView + m_appsListView->setItemDelegate(delegate); + + //设置焦点策略 + m_appsListView->setFocusPolicy(Qt::TabFocus); + appsViewLayout->addSpacing(10); + appsViewLayout->addWidget(m_appsListView); + + m_installButton->setFixedSize(120, 36); //设置安装按钮的大小 + m_acceptButton->setFixedSize(120, 36); //设置确认按钮的大小 + m_backButton->setFixedSize(120, 36); //设置返回按钮的大小 + + m_installButton->setText(tr("Install")); //设置安装按钮的提示语 + m_acceptButton->setText(tr("Done")); //设置完成按钮的提示 + m_acceptButton->setVisible(false); //默认隐藏完成按钮 + m_backButton->setText(tr("Back")); //设置返回按钮的提示 + m_backButton->setVisible(false); //隐藏返回按钮 + + + QString mediumFontFamily = Utils::loadFontFamilyByType(Utils::SourceHanSansMedium); + + Utils::bindFontBySizeAndWeight(m_installButton, mediumFontFamily, 14, QFont::Medium); //调整安装按钮的字体 + Utils::bindFontBySizeAndWeight(m_acceptButton, mediumFontFamily, 14, QFont::Medium); //调整完成按钮的字体 + Utils::bindFontBySizeAndWeight(m_backButton, mediumFontFamily, 14, QFont::Medium); //调整返回按钮的字体 + + //把按钮的焦点策略整合到一起,便于解决焦点闪现的问题 + setButtonFocusPolicy(); + + //设置按钮可以被回车触发 + setButtonAutoDefault(); + + //修复依赖安装提示语会有焦点的问题。 + m_tipsLabel->setFocusPolicy(Qt::NoFocus); + m_tipsLabel->setFixedHeight(24); + QString fontFamily = Utils::loadFontFamilyByType(Utils::SourceHanSansNormal); + Utils::bindFontBySizeAndWeight(m_tipsLabel, fontFamily, 12, QFont::ExtraLight); //调整wine依赖安装提示的字体 + + m_dSpinner->setMinimumSize(20, 20); //设置wine安装依赖的安装动画的大小 + m_dSpinner->hide(); //隐藏安装动画 + + // 设置安装信息的信息展示框 + m_installProcessInfoView->setVisible(false); + m_installProcessInfoView->setAcceptDrops(false); + m_installProcessInfoView->setFixedHeight(200); //设置固定高度 + m_installProcessInfoView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + + m_infoControlButton->setVisible(false); //详细按钮展开收缩默认不可见 + + //进度布局 + QVBoxLayout *progressFrameLayout = new QVBoxLayout(); + progressFrameLayout->setSpacing(0); + progressFrameLayout->setContentsMargins(0, 0, 0, 0); //设置边距 + m_processFrame->setLayout(progressFrameLayout); + m_installProgress = new WorkerProgress(this); //进度条初始化 + m_progressAnimation = new QPropertyAnimation(m_installProgress, "value", this); //进度条动画 + progressFrameLayout->addStretch(); + progressFrameLayout->addWidget(m_installProgress); + progressFrameLayout->setAlignment(m_installProgress, Qt::AlignHCenter); //进度条居中 + + m_processFrame->setVisible(false); //进度条默认隐藏 + m_processFrame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + m_processFrame->setFixedHeight(53); //设置固定高度 + + // 按钮布局 + QVBoxLayout *btnsFrameLayout = new QVBoxLayout(); + btnsFrameLayout->setSpacing(0); + btnsFrameLayout->setContentsMargins(0, 0, 0, 0); //设置边距 + + //按钮布局为水平布局 + QHBoxLayout *btnsLayout = new QHBoxLayout(); + btnsLayout->addStretch(); //前后增加弹簧 + btnsLayout->addWidget(m_installButton); //添加安装按钮 + btnsLayout->addWidget(m_backButton); //添加返回按钮 + btnsLayout->addWidget(m_acceptButton); //添加完成按钮 + btnsLayout->setSpacing(20); //设置按钮间的间距为20px + btnsLayout->addStretch(); + btnsLayout->setContentsMargins(0, 0, 0, 30); //底部间距30 + + QWidget *btnsFrame = new QWidget(this); + btnsFrameLayout->addWidget(m_processFrame); //进度布局添加到btn布局中(二者互斥,一定不能同时出现) + btnsFrameLayout->addStretch(); + btnsFrameLayout->addLayout(btnsLayout); //添加按钮布局 + btnsFrame->setLayout(btnsFrameLayout); + + m_contentLayout->addWidget(m_appsListViewBgFrame, Qt::AlignHCenter); //主布局添加listView frame并居中 + m_contentLayout->addWidget(m_infoControlButton); //主布局添加infoControlButton + m_contentLayout->setAlignment(m_infoControlButton, Qt::AlignHCenter); //居中显示infoControlButton + m_contentLayout->addWidget(m_installProcessInfoView); //添加详细信息框 + + m_contentLayout->addStretch(); + m_contentLayout->addWidget(m_dSpinner); //添加依赖安装加载动画 + m_contentLayout->addSpacing(4); + m_contentLayout->addWidget(m_tipsLabel); //添加依赖安装提示 + + //fix bug:33999 keep tips in the middle + m_contentLayout->setAlignment(m_tipsLabel, Qt::AlignCenter); //设置提示居中 + m_tipsLabel->setVisible(false); //依赖安装提示默认不可见 + + m_contentLayout->addWidget(btnsFrame); +} +/** + * @brief MultipleInstallPage::initTabOrder 初始化tab焦点切换顺序。 + */ +void MultipleInstallPage::initTabOrder() +{ + // 修改焦点切换的顺序 + QWidget::setTabOrder(m_appsListView, m_infoControlButton); + //焦点从infoCommandLinkButton直接切换到安装或返回按钮 + QWidget::setTabOrder(m_infoControlButton->controlButton(), m_installButton); + QWidget::setTabOrder(m_infoControlButton->controlButton(), m_backButton); + //焦点从返回按钮可以直接切换到确认按钮 + QWidget::setTabOrder(m_backButton, m_acceptButton); +} + +/** + * @brief MultipleInstallPage::setButtonFocusPolicy 设置按钮的焦点策略 + * @param focusPolicy 是否启用焦点 + */ +void MultipleInstallPage::setButtonFocusPolicy() +{ + // 修改焦点控制 启用焦点设置为TabFouce + auto focus = Qt::TabFocus; + + //设置安装、返回、确认按钮的焦点策略 + m_installButton->setFocusPolicy(focus); + m_acceptButton->setFocusPolicy(focus); + m_backButton->setFocusPolicy(focus); + + //设置ControlButton的焦点策略 + m_infoControlButton->controlButton()->setFocusPolicy(focus); +} + +/** + * @brief MultipleInstallPage::setButtonAutoDefault 设置按钮可以被enter和Return键触发 + */ +void MultipleInstallPage::setButtonAutoDefault() +{ + //增加键盘enter控制按钮 + m_installButton->setAutoDefault(true); + m_acceptButton->setAutoDefault(true); + m_backButton->setAutoDefault(true); +} + +void MultipleInstallPage::initConnections() +{ + // 详细信息展开 + connect(m_infoControlButton, &InfoControlButton::expand, this, &MultipleInstallPage::showInfo); + + //详细信息收缩 + connect(m_infoControlButton, &InfoControlButton::shrink, this, &MultipleInstallPage::hideInfo); + + //开始安装 + connect(m_installButton, &DPushButton::clicked, m_debListModel, &DebListModel::installPackages); + + //开始安装后隐藏安装按钮等 + connect(m_installButton, &DPushButton::clicked, this, &MultipleInstallPage::hiddenCancelButton); + + //返回到文件选择窗口 + connect(m_backButton, &DPushButton::clicked, this, &MultipleInstallPage::back); + + //退出应用程序 + connect(m_acceptButton, &DPushButton::clicked, qApp, &QApplication::quit); + + //在listView中删除了某一个包,需要在PackageManager中同步删除 + connect(m_appsListView, &PackagesListView::onRemoveItemClicked, this, &MultipleInstallPage::onRequestRemoveItemClicked); + + //安装过程中进度发生变化 + connect(m_debListModel, &DebListModel::workerProgressChanged, this, &MultipleInstallPage::onProgressChanged); + + //安装过程中安装信息变化 + connect(m_debListModel, &DebListModel::appendOutputInfo, this, &MultipleInstallPage::onOutputAvailable); + + //开始安装时,显示安装进度条 + connect(m_debListModel, &DebListModel::onStartInstall, this, [ = ] { + m_processFrame->setVisible(true); + }); + + //一个包安装结束后 listView滚动到其在listview中的位置 + connect(m_debListModel, &DebListModel::onChangeOperateIndex, this, &MultipleInstallPage::onAutoScrollInstallList); + + //wine依赖安装结果处理 + connect(m_debListModel, &DebListModel::DependResult, this, &MultipleInstallPage::DealDependResult); +} + +/** + * @brief MultipleInstallPage::onWorkerFinshed 安装结束的界面展示效果处理 + */ +void MultipleInstallPage::onWorkerFinshed() +{ + m_currentFlag = 2; //install finish + + //安装结束显示返回和确认按钮 + m_acceptButton->setVisible(true); + m_backButton->setVisible(true); + m_processFrame->setVisible(false); //隐藏进度条 + //当前安装结束后,不允许调出右键菜单 + m_appsListView->setRightMenuShowStatus(false); //安装结束不允许删除包 +} + +/** + * @brief MultipleInstallPage::onOutputAvailable 向安装详细信息展示窗口添加安装进度信息 + * @param output 要添加的信息 + */ +void MultipleInstallPage::onOutputAvailable(const QString &output) +{ + m_installProcessInfoView->appendText(output.trimmed()); //添加信息到窗口 + + // change to install + if (!m_installButton->isVisible()) { + m_infoControlButton->setVisible(true); //如果有信息添加说明此时正在安装,进度条要显示出来 + } +} + +/** + * @brief MultipleInstallPage::onProgressChanged 安装进度变化显示处理函数 + * @param progress 安装的进度 + */ +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); //当前安装完成 + } +} + +/** + * @brief MultipleInstallPage::onAutoScrollInstallList 安装某一个包结束后,跳动到安装完成的包的位置 + * @param opIndex 安装完成的包的位置下标 + */ +void MultipleInstallPage::onAutoScrollInstallList(int opIndex) +{ + //当前安装包的下标是合法的 + if (opIndex > 1 && opIndex < m_debListModel->getInstallFileSize()) { + QModelIndex currIndex = m_debListModel->index(opIndex - 1); + m_appsListView->scrollTo(currIndex, QAbstractItemView::PositionAtTop); //跳动到下标的位置 + } else if (opIndex == -1) { //to top //下标不合法 + QModelIndex currIndex = m_debListModel->index(0); + m_appsListView->scrollTo(currIndex); //跳动到顶部 + } +} + +/** + * @brief MultipleInstallPage::onRequestRemoveItemClicked 接受到applistView删除包后告知PackageManager删除包 + * @param index + */ +void MultipleInstallPage::onRequestRemoveItemClicked(const QModelIndex &index) +{ + if (!m_debListModel->isWorkerPrepare()) return; //当前未处于准备阶段,不允许删除 + + const int r = index.row(); //要删除的包的下标转换 + + emit requestRemovePackage(r); //发送删除信号 +} + +/** + * @brief MultipleInstallPage::showInfo 显示安装信息的界面展示 + */ +void MultipleInstallPage::showInfo() +{ + m_appsListView->setFocusPolicy(Qt::NoFocus); //详细信息出现后 设置appListView不接受焦点 + m_upDown = false; //未使用 + m_contentLayout->setContentsMargins(20, 0, 20, 0); //设置上下左右边距 + m_appsListViewBgFrame->setVisible(false); //隐藏applistView + m_appsListView->setVisible(false); + m_installProcessInfoView->setVisible(true); //显示相关安装进度信息 +} + +/** + * @brief MultipleInstallPage::hideInfo 隐藏详细信息 + */ +void MultipleInstallPage::hideInfo() +{ + m_appsListView->setFocusPolicy(Qt::TabFocus); //隐藏详细信息后,设置appListView的焦点策略 + m_upDown = true; + m_contentLayout->setContentsMargins(10, 0, 10, 0); //设置边距 + m_appsListViewBgFrame->setVisible(true); //显示appListView + m_appsListView->setVisible(true); + m_installProcessInfoView->setVisible(false); //隐藏安装过程信息 +} + +/** + * @brief MultipleInstallPage::hiddenCancelButton 授权成功后隐藏按钮 + */ +void MultipleInstallPage::hiddenCancelButton() +{ + //安装开始后不允许调出右键菜单。 + //安装按钮点击后清除其焦点。解决授权框消失后标题栏菜单键被focus的问题 + m_installButton->clearFocus(); + m_appsListView->setRightMenuShowStatus(false); //安装开始时,不允许调用右键菜单 + m_backButton->setVisible(false); //隐藏返回按钮 + m_installButton->setVisible(false); //隐藏安装按钮 +} + +/** + * @brief MultipleInstallPage::setEnableButton 授权框取消/显示后,设置安装按钮可用/禁用 + * @param bEnable 按钮可用/禁用的标识 + */ +void MultipleInstallPage::setEnableButton(bool bEnable) +{ + m_installButton->setEnabled(bEnable);//设置按钮是否可用 +} + +/** + * @brief MultipleInstallPage::afterGetAutherFalse 授权失败或取消后的界面处理函数 + */ +void MultipleInstallPage::afterGetAutherFalse() +{ + m_processFrame->setVisible(false); //隐藏进度条 + m_infoControlButton->setVisible(false); //隐藏infoControlButton + m_installButton->setVisible(true); //显示安装按钮 + m_infoControlButton->shrink(); //收缩安装信息,下次出现时是收缩的 + + //授权取消或授权失败后,允许右键菜单弹出 + m_appsListView->setRightMenuShowStatus(true); +} + +/** + * @brief MultipleInstallPage::onScrollSlotFinshed 滚动item的槽函数 + */ +void MultipleInstallPage::onScrollSlotFinshed() +{ + int row = m_appsListView->count(); //获取appListView中Item的数量 + QModelIndex currIndex; + if (m_index == -1) { //如果未传入要移动到的index + if (row > 0) { + currIndex = m_debListModel->index(row - 1); //滚动到最后 + m_appsListView->scrollTo(currIndex, QAbstractItemView::EnsureVisible); + } + } else { //传入了要移动到的index + if (m_index == 0) { + currIndex = m_debListModel->index(0); //移动的位置是首项 + } else if (m_index == row) { //移动到的位置是末项 + currIndex = m_debListModel->index(m_index - 1); + } else { //移动到中间位置 + currIndex = m_debListModel->index(m_index); + } + m_appsListView->scrollTo(currIndex, QAbstractItemView::EnsureVisible); + } + m_appsListView->reset(); //reset +} + +/** + * @brief MultipleInstallPage::setScrollBottom 每次触发只移动一次 + * @param index 要移动到的位置 + */ +void MultipleInstallPage::setScrollBottom(int index) +{ + m_index = index; + QTimer::singleShot(1, this, &MultipleInstallPage::onScrollSlotFinshed); //防止添加多个时不断触发 +} + +/** + * @brief MultipleInstallPage::DealDependResult 批量处理授权结果 + * @param iAuthRes 授权的类型 + * @param dependName 需要安装的依赖的名字 + */ +void MultipleInstallPage::DealDependResult(int iAuthRes, QString dependName) +{ + qDebug() << "批量处理鉴权结果:" << iAuthRes; + switch (iAuthRes) { + case DebListModel::AuthBefore: //授权之前 + m_appsListView->setEnabled(false); //listView不可用 + m_installButton->setVisible(true); //显示安装按钮但是不可用 + m_installButton->setEnabled(false); + m_dSpinner->stop(); //安装动画不可见 + m_dSpinner->hide(); + m_tipsLabel->setVisible(false); //隐藏提示 + break; + case DebListModel::CancelAuth: //授权被取消 + m_appsListView->setEnabled(true); //appListView可用 + m_installButton->setVisible(true); //安装按钮可见并可用 + m_installButton->setEnabled(true); + break; + case DebListModel::AuthConfirm: //确认授权 + m_appsListView->setEnabled(false); //listView不可用 + m_tipsLabel->setText(tr("Installing dependencies: %1").arg(dependName)); //设置提示语 + m_tipsLabel->setVisible(true); //提示可见 + m_dSpinner->show(); //显示动画并开始动画 + m_dSpinner->start(); + m_installButton->setVisible(false); //隐藏安装按钮 + break; + case DebListModel::AuthDependsSuccess: //依赖安装成功 + case DebListModel::AuthDependsErr: //依赖安装错误 + m_appsListView->setEnabled(true); //listView可以操作 + m_installButton->setVisible(true); //显示安装按钮 + m_installButton->setEnabled(true); //安装按钮可用 + m_dSpinner->stop(); //隐藏并停止安装动画 + m_dSpinner->hide(); + m_tipsLabel->setVisible(false); //隐藏依赖安装提示 + break; + case DebListModel::AnalysisErr: //解析错误 + m_appsListView->setEnabled(true); //listView可以操作 + m_installButton->setVisible(true); //显示安装按钮 + m_installButton->setEnabled(true); //安装按钮可用 + m_dSpinner->stop(); //隐藏并停止安装动画 + m_dSpinner->hide(); + m_tipsLabel->setVisible(false); //隐藏依赖安装提示 + break; + default: + break; + } +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/pages/multipleinstallpage.h deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/multipleinstallpage.h --- deepin-deb-installer-5.0.0/src/deb_installer/view/pages/multipleinstallpage.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/multipleinstallpage.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,206 @@ +/* + * 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 "view/widgets/infocontrolbutton.h" +#include "view/widgets/droundbgframe.h" +#include "view/widgets/installprocessinfoview.h" + +#include +#include + +#include +#include +#include +#include + +class PackagesListView; +class DebListModel; +class WorkerProgress; +class MultipleInstallPage : public QWidget +{ + Q_OBJECT + +public: + explicit MultipleInstallPage(DebListModel *model, QWidget *parent = nullptr); + + /** + * @brief setEnableButton 根据授权框的弹出/取消,设置安装按钮禁用/请 + * @param bEnable 按钮启用与禁用的标识 + */ + void setEnableButton(bool bEnable); + + /** + * @brief afterGetAutherFalse 授权结束或取消后处理界面情况 + */ + void afterGetAutherFalse(); + + /** + * @brief setScrollBottom 滚动item到底部或index的位置 + * @param index 要滚到的index + */ + void setScrollBottom(int index); + + /** + * @brief DealDependResult 处理依赖处理授权的结果 + * @param iAuthRes 依赖处理的结果 + * @param dependName 依赖的名称 + */ + void DealDependResult(int iAuthRes, QString dependName); + +signals: + /** + * @brief back 返回到fileChooseWidget界面的信号 + */ + void back() const; + + /** + * @brief requestRemovePackage 删除包的信号 + * @param index 要删除的包的下标 + */ + void requestRemovePackage(const int index) const; + +private slots: + + /** + * @brief onScrollSlotFinshed 滚动item的槽函数 + */ + void onScrollSlotFinshed(); + + /** + * @brief onWorkerFinshed 批量安装结束,调整页面展示效果 + */ + void onWorkerFinshed(); + + /** + * @brief onOutputAvailable 批量安装过程中添加安装信息 + * @param output 安装过程信息 + */ + void onOutputAvailable(const QString &output); + + /** + * @brief onProgressChanged 批量安装进度变化 + * @param progress 已经增加的进度 + */ + void onProgressChanged(const int progress); + + /** + * @brief onRequestRemoveItemClicked 在批量安装的包的时候删除某个包 + * @param index 要删除的包的下标 + */ + void onRequestRemoveItemClicked(const QModelIndex &index); + + /** + * @brief showInfo 处理展示详细信息的界面展示 + */ + void showInfo(); + + /** + * @brief hideInfo 处理隐藏详细信息的界面展示 + */ + void hideInfo(); + + /** + * @brief onAutoScrollInstallList 自动滚动到当前正在安装的包 + * @param opIndex 当前正在安装的包的位置 + */ + void onAutoScrollInstallList(int opIndex); + + /** + * @brief hiddenCancelButton 安装开始后处理界面展示情况 + */ + void hiddenCancelButton(); + +private: + + /** + * @brief initUI 初始化界面布局 + */ + void initUI(); + + /** + * @brief initConnections 初始化链接 + */ + void initConnections(); + + /** + * @brief initContentLayout 初始化中心layout + */ + void initContentLayout(); + + /** + * @brief initTabOrder 初始化切换顺序 + */ + void initTabOrder(); + + /** + * @brief setButtonFocusPolicy 设置按钮的焦点策略 + * @param focusPolicy 是否启用焦点 + */ + void setButtonFocusPolicy(); + + /** + * @brief setButtonAutoDefault 设置按钮可以被enter和Return键触发 + */ + void setButtonAutoDefault(); + + /** + * @brief initControlAccessibleName 给控件添加AccessibleName + */ + void initControlAccessibleName(); + + +private: + DebListModel *m_debListModel; //listModel类 + + DRoundBgFrame *m_appsListViewBgFrame; //listView的背景frame 修改listView的背景样式 + QWidget *m_contentFrame; //applistview infoControlButton的frame + QWidget *m_processFrame; //process 的frame + QVBoxLayout *m_contentLayout; //applistview infoControlButton的布局 + QVBoxLayout *m_centralLayout; //主布局 + + PackagesListView *m_appsListView; //listView + + InstallProcessInfoView *m_installProcessInfoView; //安装进程信息显示窗口 + + WorkerProgress *m_installProgress; //进度显示 + QPropertyAnimation *m_progressAnimation; //进度动画 + + InfoControlButton *m_infoControlButton; //展开收缩控制按钮 + DPushButton *m_installButton; //安装按钮 + DPushButton *m_backButton; //返回文件选择窗口的按钮 + DPushButton *m_acceptButton; //确认按钮 + + // fix bug:33999 change DebInfoLabel to DCommandLinkButton for Activity color + DCommandLinkButton *m_tipsLabel; //依赖安装提示按钮 + DSpinner *m_dSpinner; //依赖安装动画 + + int m_index = -1; //当前添加的index + + bool m_upDown = true; //展开收缩的标识 + //install:1 finish:2 + int m_currentFlag = 1; //此变量被废弃 + int m_MouseBtnRelease = 0; //此变量被废弃 +}; + +#endif // MULTIPLEINSTALLPAGE_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/pages/singleinstallpage.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/singleinstallpage.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/view/pages/singleinstallpage.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/singleinstallpage.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,1098 @@ +/* + * 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 "model/deblistmodel.h" +#include "view/widgets/workerprogress.h" +#include "utils/utils.h" +#include "utils/DebugTimeManager.h" + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +using QApt::DebFile; +using QApt::Transaction; + +DWIDGET_USE_NAMESPACE + +SingleInstallPage::SingleInstallPage(DebListModel *model, QWidget *parent) + : QWidget(parent) + , m_operate(Install) + , m_workerStarted(false) + , m_packagesModel(model) + , m_contentFrame(new QWidget(this)) + , m_itemInfoFrame(new QWidget(this)) + , m_progressFrame(new QWidget(this)) + , m_packageIcon(new DLabel(this)) + , m_packageName(new DebInfoLabel(this)) + , m_packageVersion(new DebInfoLabel(this)) + , m_packageDescription(new DLabel(this)) + , m_tipsLabel(new DebInfoLabel(this)) + , m_progress(new WorkerProgress(this)) + , m_installProcessView(new InstallProcessInfoView(440, 190, this)) + , m_infoControlButton(new InfoControlButton(QApplication::translate("SingleInstallPage_Install", "Show details"), tr("Collapse"))) + , m_installButton(new DPushButton(this)) + , m_uninstallButton(new DPushButton(this)) + , m_reinstallButton(new DPushButton(this)) + , m_confirmButton(new DPushButton(this)) + , m_backButton(new DPushButton(this)) + , m_doneButton(new DPushButton(this)) + , m_contentLayout(new QVBoxLayout(m_contentFrame)) + , m_centralLayout(new QVBoxLayout()) + , m_pDSpinner(new DSpinner(this)) + , m_pLoadingLabel(new DCommandLinkButton("", this)) +{ + initUI(); //初始化界面 + initControlAccessibleName();// 自动化测试 +} + +/** + * @brief SingleInstallPage::initUI 初始化界面 + */ +void SingleInstallPage::initUI() +{ + QFontInfo fontinfo = this->fontInfo(); //获取字体信息 + int fontsize = fontinfo.pixelSize(); //获得字体大小 + initContentLayout(); //初始化主布局 + initPkgInfoView(fontsize); //初始化包信息布局 + initPkgInstallProcessView(fontsize); //初始化包安装过程进度显示布局 + initConnections(); //链接信号和槽 + + if (m_packagesModel->isReady()) //判断当前是否已经准备好可以安装,如果可以安装显示包的信息 + setPackageInfo(); + else //当前暂时还没有准备好,等120ms后再显示信息 + QTimer::singleShot(120, this, &SingleInstallPage::setPackageInfo); + + m_upDown = true; //当前是收缩的 +} + +/** + * @brief SingleInstallPage::initControlAccessibleName 初始化控件的AccessibleName + * 兼容自动化测试 + */ +void SingleInstallPage::initControlAccessibleName() +{ + //获取的包名 + m_packageName->setObjectName("SinglePagePackageName"); + m_packageName->setAccessibleName("SinglePagePackageName"); + + //包的图标 + m_packageIcon->setObjectName("SinglePagePackageIcon"); + m_packageIcon->setAccessibleName("SinglePagePackageIcon"); + + //获取的包的版本 + m_packageVersion->setObjectName("SinglePagePackageVersion"); + m_packageVersion->setAccessibleName("SinglePagePackageVersion"); + + //获取的包的描述 + m_packageDescription->setObjectName("SinglePagePackageDescription"); + m_packageDescription->setAccessibleName("SinglePagePackageDescription"); + + //获取的包的提示信息 + m_tipsLabel->setObjectName("SinglePagePackageStatusTips"); + m_tipsLabel->setAccessibleName("SinglePagePackageStatusTips"); + + //依赖安装的提示信息 + m_pLoadingLabel->setObjectName("SinglePagePackageLoadingTips"); + m_pLoadingLabel->setAccessibleName("SinglePagePackageLoadingTips"); +} + +/** + * @brief SingleInstallPage::initContentLayout 初始化主布局 + */ +void SingleInstallPage::initContentLayout() +{ + m_contentLayout->addSpacing(10); + m_contentLayout->setSpacing(0); //设置控件边距 + m_contentLayout->setContentsMargins(20, 0, 20, 30); //设置四周边距 + m_contentFrame->setLayout(m_contentLayout); //设置布局 + m_centralLayout->addWidget(m_contentFrame); + + m_centralLayout->setSpacing(0); + m_centralLayout->setContentsMargins(0, 0, 0, 0); //设置中心布局 + this->setLayout(m_centralLayout); + +//#define SHOWBGCOLOR +#ifdef SHOWBGCOLOR + m_contentFrame->setStyleSheet("QFrame{background: cyan}"); +#endif +} + +/** + * @brief SingleInstallPage::initInstallWineLoadingLayout 初始化依赖安装加载布局 + */ +void SingleInstallPage::initInstallWineLoadingLayout() +{ + QVBoxLayout *m_pLoadingLayout = new QVBoxLayout(); //依赖安装的布局 + + m_pDSpinner->setMinimumSize(24, 24); //设置动画的大小 + m_pDSpinner->setVisible(false); //隐藏等待动画 + m_pDSpinner->start(); + m_pLoadingLayout->addWidget(m_pDSpinner); //添加到布局中 + m_pLoadingLayout->setAlignment(m_pDSpinner, Qt::AlignHCenter);//居中显示 + + + m_pLoadingLayout->addSpacing(4); //fix bug:33999 The spinner and The Label are too close together add a distence of 4px + m_pLoadingLabel->setVisible(false); //隐藏依赖安装提示信息 + m_pLoadingLabel->setFocusPolicy(Qt::NoFocus);//修复会有焦点在依赖加载提示上的问题 + m_pLoadingLayout->setEnabled(true);//fix bug:33999 Make the DCommandLinkbutton looks like a Lable O_o + m_pLoadingLayout->addWidget(m_pLoadingLabel); //添加提示信息到布局中 + m_pLoadingLayout->setAlignment(m_pLoadingLabel, Qt::AlignHCenter);//fix bug:33999 keep the label in the middle + m_pLoadingLabel->setFixedHeight(24); //设置高度 + QString fontFamily = Utils::loadFontFamilyByType(Utils::SourceHanSansNormal); + Utils::bindFontBySizeAndWeight(m_pLoadingLabel, fontFamily, 12, QFont::ExtraLight); + + m_contentLayout->addLayout(m_pLoadingLayout); //添加到主布局中 +} + +/** + * @brief SingleInstallPage::initPkgInfoView 初始化包的信息布局 + * @param fontinfosize 字体的大小 + */ +void SingleInstallPage::initPkgInfoView(int fontinfosize) +{ + //根据系统字体的大小设置显示字体的大小 + int fontinfosizetemp = 0; + int fontinfosizetemp_version = 0; + if (fontinfosize > 18) { //字体大于18说明是大字体,使用较大的字体显示 + fontinfosizetemp = 23; + fontinfosizetemp_version = 25; + } else { + fontinfosizetemp = 20; //使用小字体显示 + fontinfosizetemp_version = 20; + } + + m_packageIcon->setText("icon"); //图标 + m_packageIcon->setFixedSize(64, 64); //设置图标的大小 + + DebInfoLabel *packageName = new DebInfoLabel(this); //包名的描述性文字 + packageName->setCustomQPalette(QPalette::WindowText); //设置包名的字体颜色 + packageName->setFixedHeight(fontinfosizetemp); //根据字体大小设置高度 + packageName->setText(tr("Name: ")); //设置具体的提示 + packageName->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); //垂直居中,水平靠左显示 + packageName->setObjectName("PackageNameTitle"); //添加ObjectName + + DebInfoLabel *packageVersion = new DebInfoLabel(this); //包版本的描述性文字 + packageVersion->setCustomQPalette(QPalette::WindowText); //设置字体颜色 + packageVersion->setFixedHeight(fontinfosizetemp_version); //根据字体大小设置高度 + packageVersion->setText(tr("Version: ")); //添加具体的提示文字 + packageVersion->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); //垂直居中,水平靠左 + packageVersion->setObjectName("PackageVersionTitle"); //添加ObjectName + + //设置包名的样式,但是后续再设置显示的内容 + m_packageName->setCustomQPalette(QPalette::WindowText); //设置字体样式 + m_packageName->setFixedHeight(fontinfosizetemp); //根据字体大小设置高度 + m_packageName->setAlignment(Qt::AlignTop | Qt::AlignLeft); //垂直靠上,水平靠左 + + m_packageVersion->setCustomQPalette(QPalette::WindowText); //设置字体样式 + m_packageVersion->setFixedHeight(fontinfosizetemp_version); //根据字体大小设置高度 + m_packageVersion->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);//垂直居中,水平靠左 + + //此处可优化 + QVBoxLayout *packageNameVLayout = new QVBoxLayout(); //包名提示的布局 + packageNameVLayout->setSpacing(0); //设置控件间距 + packageNameVLayout->setContentsMargins(0, 0, 0, 0); //设置四周边距 + packageNameVLayout->addSpacing(4); + packageNameVLayout->addWidget(packageName); //添加控件 + + QVBoxLayout *pkgNameValueLayout = new QVBoxLayout(); //实际获取到包名 + pkgNameValueLayout->setSpacing(0); //设置控件间距 + pkgNameValueLayout->setContentsMargins(0, 0, 0, 0); + pkgNameValueLayout->addSpacing(4 + 4); //增加空间 + pkgNameValueLayout->addWidget(m_packageName); //添加控件 + + QHBoxLayout *pkgNameLayout = new QHBoxLayout(); //包名的控件布局 + pkgNameLayout->setSpacing(0); + pkgNameLayout->setContentsMargins(0, 0, 0, 0); //设置边距 + pkgNameLayout->addSpacing(2); + pkgNameLayout->addLayout(packageNameVLayout); //添加包名提示的label + pkgNameLayout->addLayout(pkgNameValueLayout); //添加实际获取到的包名的label + pkgNameLayout->addStretch(); //添加弹簧 + + QHBoxLayout *pkgVersionLayout = new QHBoxLayout(); //包版本的控件布局 + pkgVersionLayout->setSpacing(0); + pkgVersionLayout->setContentsMargins(0, 0, 0, 0); //设置四周边距 + pkgVersionLayout->addSpacing(2); + pkgVersionLayout->addWidget(packageVersion); //添加包版本提示的label + pkgVersionLayout->addWidget(m_packageVersion); //添加包实际版本的label + pkgVersionLayout->addStretch(); + + QVBoxLayout *itemInfoLayout = new QVBoxLayout(); //包名和包版本的布局 + itemInfoLayout->setSpacing(0); + itemInfoLayout->setContentsMargins(0, 0, 0, 0); //设置四周边距 + itemInfoLayout->addLayout(pkgNameLayout); //添加包名布局 + itemInfoLayout->addLayout(pkgVersionLayout); //添加包版本布局 + + QHBoxLayout *itemBlockLayout = new QHBoxLayout(); //单包安装上半部分布局(包名,包版本和图标) + itemBlockLayout->setSpacing(0); + itemBlockLayout->setContentsMargins(0, 0, 0, 0); + itemBlockLayout->addSpacing(112 - 20 - 10); //与标题栏保持一定的间距 + itemBlockLayout->addWidget(m_packageIcon); //添加图标 + itemBlockLayout->addLayout(itemInfoLayout); //添加包名和版本 + + QWidget *itemInfoWidget = new QWidget(this); + itemInfoWidget->setLayout(itemBlockLayout); //保存成一个widget + + QHBoxLayout *packageDescLayout = new QHBoxLayout(); //包描述的 布局 + packageDescLayout->addStretch(); + packageDescLayout->addWidget(m_packageDescription); //添加包描述的Label + packageDescLayout->addStretch(); + packageDescLayout->setSpacing(0); + packageDescLayout->setContentsMargins(0, 0, 0, 0); + + QVBoxLayout *itemLayout = new QVBoxLayout(); //整合包信息的布局 + itemLayout->addSpacing(45); + itemLayout->addWidget(itemInfoWidget); //添加包的信息 + itemLayout->addSpacing(20); + itemLayout->addLayout(packageDescLayout); //添加包的描述 + itemLayout->addStretch(); + itemLayout->setMargin(0); + itemLayout->setSpacing(0); + + QString normalFontFamily = Utils::loadFontFamilyByType(Utils::SourceHanSansNormal); + QString mediumFontFamily = Utils::loadFontFamilyByType(Utils::SourceHanSansMedium); + + Utils::bindFontBySizeAndWeight(packageVersion, mediumFontFamily, 14, QFont::Medium); //设置版本提示label的字体大小和样式 + Utils::bindFontBySizeAndWeight(packageName, mediumFontFamily, 14, QFont::Medium); //设置包名提示Label的字体大小和样式 + Utils::bindFontBySizeAndWeight(m_packageName, normalFontFamily, 14, QFont::ExtraLight); //设置实际包名label的字体大小和样式 + Utils::bindFontBySizeAndWeight(m_packageVersion, normalFontFamily, 14, QFont::ExtraLight); //设置实际版本Label的字体大小和样式 + + m_itemInfoFrame->setLayout(itemLayout); + m_itemInfoFrame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + m_itemInfoFrame->setVisible(false); + + m_contentLayout->addWidget(m_itemInfoFrame); //添加到主窗口中 + +#ifdef SHOWBGCOLOR + packageName->setStyleSheet("{background: blue;}"); + packageVersion->setStyleSheet("{background: red;}"); + m_itemInfoFrame->setStyleSheet("QFrame{background: green;}"); + m_packageName->setStyleSheet("QLabel{background: blue;}"); + m_packageVersion->setStyleSheet("QLabel{background: yellow;}"); + m_packageDescription->setStyleSheet("QLabel{background: orange;}"); + m_packageIcon->setStyleSheet("QLabel{background: brown;}"); +#endif +} + +/** + * @brief SingleInstallPage::initTabOrder 设置tab切换焦点的顺序。 + */ +void SingleInstallPage::initTabOrder() +{ + // 调整tab切换焦点的顺序,第一个焦点是infoControlButton中的DCommandLinkButton + // fix bug: https://pms.uniontech.com/zentao/bug-view-46968.html + QWidget::setTabOrder(m_infoControlButton->controlButton(), m_installButton); //当前包首次安装 + QWidget::setTabOrder(m_infoControlButton->controlButton(), m_backButton); //安装完成或安装失败 + QWidget::setTabOrder(m_infoControlButton->controlButton(), m_uninstallButton); //当前场景为重新安装 + + QWidget::setTabOrder(m_uninstallButton, m_reinstallButton); //重新安装场景 + + QWidget::setTabOrder(m_backButton, m_doneButton); //安装完成场景 + QWidget::setTabOrder(m_backButton, m_confirmButton); //不能安装场景 + +} + +/** + * @brief SingleInstallPage::initButtonFocusPolicy 添加各个控件的焦点获取策略 + */ +void SingleInstallPage::initButtonFocusPolicy() +{ + this->setFocusPolicy(Qt::NoFocus); //主界面不接受焦点 + auto focus = Qt::TabFocus; //其余控件焦点为tabFocus + m_installButton->setFocusPolicy(focus); + m_uninstallButton->setFocusPolicy(focus); + m_reinstallButton->setFocusPolicy(focus); + m_confirmButton->setFocusPolicy(focus); + m_backButton->setFocusPolicy(focus); + m_doneButton->setFocusPolicy(focus); + m_infoControlButton->controlButton()->setFocusPolicy(focus); +} + +/** + * @brief SingleInstallPage::initButtonAutoDefault 给各个按钮添加回车触发。 + * 没有infoControlButton ,因为属于自定义控件,已经在控件内部实现。 + */ +void SingleInstallPage::initButtonAutoDefault() +{ + m_installButton->setAutoDefault(true); + m_uninstallButton->setAutoDefault(true); + m_reinstallButton->setAutoDefault(true); + m_confirmButton->setAutoDefault(true); + m_backButton->setAutoDefault(true); + m_doneButton->setAutoDefault(true); +} + +/** + * @brief SingleInstallPage::initPkgInstallProcessView 初始化安装进程控制按钮的view + * @param fontinfosize + */ +void SingleInstallPage::initPkgInstallProcessView(int fontinfosize) +{ + int fontinfosizetemp = 0; //根据当前字体的大小设置按钮的字体大小 + if (fontinfosize > 16) { + fontinfosizetemp = 21; + } else { + fontinfosizetemp = 18; + } + + // 添加Accessible Name + m_infoControlButton->setObjectName("InfoControlButton"); + m_infoControlButton->setAccessibleName("InfoControlButton"); + m_installProcessView->setObjectName("WorkerInformation"); + m_installProcessView->setAccessibleName("WorkerInformation"); + m_packageDescription->setObjectName("PackageDescription"); + m_packageDescription->setAccessibleName("PackageDescription"); + + m_tipsLabel->setFixedHeight(fontinfosizetemp); //设置提示label的高度 + m_tipsLabel->setAlignment(Qt::AlignCenter); //提示居中显示 + + m_progressFrame->setVisible(false); //默认隐藏进度条view + m_infoControlButton->setVisible(false); //infoControlButton 默认隐藏 + + m_installProcessView->setVisible(false); //默认隐藏安装进程信息 + m_installProcessView->setAcceptDrops(false); //不接受拖入的数据 + m_installProcessView->setFixedHeight(200); //设置高度 + m_installProcessView->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_installButton->setFixedSize(120, 36); + m_uninstallButton->setFixedSize(120, 36); + m_reinstallButton->setFixedSize(120, 36); + m_confirmButton->setFixedSize(120, 36); + m_backButton->setFixedSize(120, 36); + m_doneButton->setFixedSize(120, 36); + + m_contentLayout->addWidget(m_infoControlButton); + + //启用焦点切换。 + initButtonFocusPolicy(); + // 设置按钮回车触发 + initButtonAutoDefault(); + // 初始化按钮焦点切换策略。 + initTabOrder(); + + //设置描述信息的size 与位置 + m_packageDescription->setFixedHeight(65); + m_packageDescription->setFixedWidth(270); + m_packageDescription->setAlignment(Qt::AlignLeft | Qt::AlignTop); + + //各个按钮的布局 + QVBoxLayout *btnsFrameLayout = new QVBoxLayout(); + btnsFrameLayout->setSpacing(0); + btnsFrameLayout->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(20); + btnsLayout->setContentsMargins(0, 0, 0, 0); + + //进度条 布局 + QVBoxLayout *progressLayout = new QVBoxLayout(); + progressLayout->setSpacing(0); + progressLayout->setContentsMargins(0, 8, 0, 0); + progressLayout->addWidget(m_progress); + progressLayout->setAlignment(m_progress, Qt::AlignHCenter); //进度条水平居中 + m_progressFrame->setLayout(progressLayout); + m_progressFrame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + // 把所有的按钮合并成一个widget + QWidget *btnsFrame = new QWidget(this); + btnsFrame->setFixedHeight(m_installButton->maximumHeight()); + btnsFrameLayout->addWidget(m_progressFrame); + btnsFrameLayout->addStretch(); + btnsFrameLayout->addLayout(btnsLayout); + btnsFrame->setLayout(btnsFrameLayout); + + QString normalFontFamily = Utils::loadFontFamilyByType(Utils::SourceHanSansNormal); + QString mediumFontFamily = Utils::loadFontFamilyByType(Utils::SourceHanSansMedium); + + //设置各个按钮的字体大小与样式 + Utils::bindFontBySizeAndWeight(m_tipsLabel, normalFontFamily, 12, QFont::Normal); + Utils::bindFontBySizeAndWeight(m_installButton, mediumFontFamily, 14, QFont::Medium); + Utils::bindFontBySizeAndWeight(m_uninstallButton, mediumFontFamily, 14, QFont::Medium); + Utils::bindFontBySizeAndWeight(m_reinstallButton, mediumFontFamily, 14, QFont::Medium); + Utils::bindFontBySizeAndWeight(m_confirmButton, mediumFontFamily, 14, QFont::Medium); + Utils::bindFontBySizeAndWeight(m_backButton, mediumFontFamily, 14, QFont::Medium); + Utils::bindFontBySizeAndWeight(m_doneButton, mediumFontFamily, 14, QFont::Medium); + Utils::bindFontBySizeAndWeight(m_packageDescription, normalFontFamily, 12, QFont::ExtraLight); + + //将进度条布局。提示布局。按钮布局添加到主布局中 + m_contentLayout->addWidget(m_installProcessView); + m_contentLayout->addStretch(); + m_contentLayout->addWidget(m_tipsLabel); + m_contentLayout->addStretch(); + m_contentLayout->addWidget(btnsFrame); + + //添加 wine下载等待提示布局 + initInstallWineLoadingLayout(); + +#ifdef SHOWBGCOLOR + m_progressFrame->setStyleSheet("QFrame{background:blue}"); + m_tipsLabel->setStyleSheet("QLabel{background: gray}"); + btnsFrame->setStyleSheet("QFrame{background:red}"); + m_infoControlButton->setStyleSheet("QFrame{background: purple}"); + m_installButton->setStyleSheet("QPushButton{background: blue}"); + m_uninstallButton->setStyleSheet("QPushButton{background: yellow}"); + m_reinstallButton->setStyleSheet("QPushButton{background: purple}"); + m_backButton->setStyleSheet("QPushButton{background: brown}"); + m_confirmButton->setStyleSheet("QPushButton{background: pink}"); + m_doneButton->setStyleSheet("QPushButton{background: cyan}"); +#endif +} + +/** + * @brief SingleInstallPage::initConnections 初始化链接信号与槽 + */ +void SingleInstallPage::initConnections() +{ + // infoControlButton的展开与收缩 + connect(m_infoControlButton, &InfoControlButton::expand, this, &SingleInstallPage::showInfomation); + connect(m_infoControlButton, &InfoControlButton::shrink, this, &SingleInstallPage::hideInfomation); + + //各个按钮的触发事件 + connect(m_installButton, &DPushButton::clicked, this, &SingleInstallPage::install); + connect(m_reinstallButton, &DPushButton::clicked, this, &SingleInstallPage::reinstall); + connect(m_uninstallButton, &DPushButton::clicked, this, &SingleInstallPage::requestUninstallConfirm); + connect(m_backButton, &DPushButton::clicked, this, &SingleInstallPage::back); + connect(m_confirmButton, &DPushButton::clicked, qApp, &QApplication::quit); + connect(m_doneButton, &DPushButton::clicked, qApp, &QApplication::quit); + + // model 安装进程信息的展示 + connect(m_packagesModel, &DebListModel::appendOutputInfo, this, &SingleInstallPage::onOutputAvailable); + + //transaction 进度改变 进度条进度改变 + connect(m_packagesModel, &DebListModel::transactionProgressChanged, this, &SingleInstallPage::onWorkerProgressChanged); + + //依赖下载过程中进程改变,界面根据进程进行调整 + connect(m_packagesModel, &DebListModel::DependResult, this, &SingleInstallPage::DealDependResult); + + //安装结束 + connect(m_packagesModel, &DebListModel::workerFinished, this, &SingleInstallPage::onWorkerFinished); +} + +/** + * @brief SingleInstallPage::initLabelWidth 根据系统字体大小 调整label的长度 + * @param fontinfo + * @return label的长度 + */ +int SingleInstallPage::initLabelWidth(int fontinfo) +{ + int fontlabelwidth = 0; + switch (fontinfo) { + case 11: + fontlabelwidth = 260; + break; + case 12: + fontlabelwidth = 255; + break; + case 13: + fontlabelwidth = 250; + break; + case 14: + fontlabelwidth = 250; + break; + case 15: + fontlabelwidth = 240; + break; + case 16: + fontlabelwidth = 240; + break; + case 18: + fontlabelwidth = 230; + break; + case 20: + fontlabelwidth = 220; + break; + default: + fontlabelwidth = 220; + break; + } + return fontlabelwidth; +} + +/** + * @brief SingleInstallPage::reinstall 重新安装场景 + */ +void SingleInstallPage::reinstall() +{ + // 重装按钮点击后清除焦点 + // fix bug: https://pms.uniontech.com/zentao/bug-view-46813.html + m_reinstallButton->clearFocus(); + + //隐藏不需要的按钮 + m_backButton->setVisible(false); + m_installButton->setVisible(false); + m_reinstallButton->setVisible(false); + m_uninstallButton->setVisible(false); + + //安装开始 隐藏包信息提示 + m_tipsLabel->setVisible(false); + + //安装开始 显示安装进度 + m_infoControlButton->setExpandTips(QApplication::translate("SingleInstallPage_Install", "Show details")); + m_infoControlButton->setVisible(true); + m_progressFrame->setVisible(true); + + //重置包的工作状态 + m_operate = Reinstall; + + //开始安装 + m_packagesModel->installPackages(); +} + +/** + * @brief SingleInstallPage::install 安装场景 + */ +void SingleInstallPage::install() +{ + // 安装按钮点击后清除焦点 + // fix bug: https://pms.uniontech.com/zentao/bug-view-46813.html + m_installButton->clearFocus(); + + //隐藏按钮 + m_backButton->setVisible(false); + m_installButton->setVisible(false); + + // 隐藏提示 + m_tipsLabel->setVisible(false); + + //安装开始 显示安装进度 + m_infoControlButton->setExpandTips(QApplication::translate("SingleInstallPage_Install", "Show details")); + m_infoControlButton->setVisible(true); + m_progressFrame->setVisible(true); + + //重置工作状态 + m_operate = Install; + + // 开始安装 + m_packagesModel->installPackages(); +} + +/** + * @brief SingleInstallPage::uninstallCurrentPackage 卸载场景 + */ +void SingleInstallPage::uninstallCurrentPackage() +{ + // 卸载按钮点击后清除焦点 + // fix bug: https://pms.uniontech.com/zentao/bug-view-46813.html + m_uninstallButton->clearFocus(); + + //隐藏不需要的按钮 + m_tipsLabel->setVisible(false); + m_backButton->setVisible(false); + m_reinstallButton->setVisible(false); + m_uninstallButton->setVisible(false); + + //卸载开始 显示进度 + m_infoControlButton->setExpandTips(QApplication::translate("SingleInstallPage_Uninstall", "Show details")); + m_infoControlButton->setVisible(true); + m_progressFrame->setVisible(true); + + //重置工作状态 + m_operate = Uninstall; + + //开始卸载 + m_packagesModel->uninstallPackage(0); +} + +/** + * @brief SingleInstallPage::showInfomation 显示安装信息 + */ +void SingleInstallPage::showInfomation() +{ + m_upDown = false; + m_installProcessView->setVisible(true); + m_itemInfoFrame->setVisible(false); +} + +/** + * @brief SingleInstallPage::hideInfomation 隐藏安装信息 + */ +void SingleInstallPage::hideInfomation() +{ + m_upDown = true; + m_installProcessView->setVisible(false); + m_itemInfoFrame->setVisible(true); +} + +/** + * @brief SingleInstallPage::showInfo 显示进度信息 + */ +void SingleInstallPage::showInfo() +{ + //显示进度信息 + m_infoControlButton->setVisible(true); + m_progressFrame->setVisible(true); + m_progress->setValue(0); + + //清空提示 此处可优化 m_tipsLabel->setVisiable(true); + 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); +} + +/** + * @brief SingleInstallPage::onOutputAvailable 展示安装进程信息 + * @param output + */ +void SingleInstallPage::onOutputAvailable(const QString &output) +{ + // 信息展示窗口添加进程数据 + m_installProcessView->appendText(output.trimmed()); + + //如果infoControlButton 未显示,则显示 + if (!m_infoControlButton->isVisible()) + m_infoControlButton->setVisible(true); + // 如果当前要输出的信息是dpkg running,waitting... 进度不增加。 + if (m_progress->value() < 90 && !output.contains("dpkg running, waitting...")) m_progress->setValue(m_progress->value() + 10); + + //切换状态为已经开始安装 + if (!m_workerStarted) { + m_workerStarted = true; + showInfo(); + } +} + +/** + * @brief SingleInstallPage::onWorkerFinished 安装/卸载完成后的界面调整 + */ +void SingleInstallPage::onWorkerFinished() +{ + // 显示infoControlButton + m_infoControlButton->setVisible(true); + + //显示安装结果提示信息 + m_tipsLabel->setVisible(true); + + //隐藏进度条 + m_progressFrame->setVisible(false); + + //显示需要显示的按钮 + m_uninstallButton->setVisible(false); + m_reinstallButton->setVisible(false); + m_backButton->setVisible(true); + + //获取当前包的安装结果 + QModelIndex index = m_packagesModel->first(); + const int stat = index.data(DebListModel::PackageOperateStatusRole).toInt(); + + if (stat == DebListModel::Success) { //操作成功 + m_doneButton->setVisible(true); + if (m_operate == Install || m_operate == Reinstall) { // 安装成功 + qDebug() << "SingleInstallPage:" << "Installed successfully"; + m_infoControlButton->setExpandTips(QApplication::translate("SingleInstallPage_Install", "Show details")); + m_tipsLabel->setText(tr("Installed successfully"));//添加提示 + m_tipsLabel->setCustomDPalette(DPalette::DarkLively); + } else { //卸载成功 + qDebug() << "SingleInstallPage:" << "Uninstalled successfully"; + m_infoControlButton->setExpandTips(QApplication::translate("SingleInstallPage_Uninstall", "Show details")); + m_tipsLabel->setText(tr("Uninstalled successfully"));//添加提示 + m_tipsLabel->setCustomDPalette(DPalette::TextWarning); + } + } else if (stat == DebListModel::Failed) { //安装/卸载失败 + m_confirmButton->setVisible(true); + m_tipsLabel->setCustomDPalette(DPalette::TextWarning); + + if (m_operate == Install || m_operate == Reinstall) + m_tipsLabel->setText(index.data(DebListModel::PackageFailReasonRole).toString()); //添加安装失败原因的提示 + else { + m_tipsLabel->setText(tr("Uninstall Failed")); //卸载只显示卸载失败 + } + } else { + //正常情况不会进入此分支,如果进入此分支表明状态错误。 + m_confirmButton->setVisible(true); + qDebug() << "Operate Status Error. current" + << "index=" << index.row() << "stat=" << stat; + } + if (!m_upDown) + m_infoControlButton->setShrinkTips(tr("Collapse")); +} + +/** + * @brief SingleInstallPage::onWorkerProgressChanged 安装进度变化 + * @param progress + */ +void SingleInstallPage::onWorkerProgressChanged(const int progress) +{ + if (progress < m_progress->value()) { //进度不后退 + return; + } + + m_progress->setValue(progress); //进度增加 +} + +/** + * @brief SingleInstallPage::setPackageInfo 获取包的信息 + */ +void SingleInstallPage::setPackageInfo() +{ + qApp->processEvents(); //界面实时刷新 + QFontInfo fontinfosize = this->fontInfo(); //获取系统字体 + int fontlabelsize = fontinfosize.pixelSize(); + DebFile *package = new DebFile(m_packagesModel->preparedPackages().first()); //获取包的信息 + + const QIcon icon = QIcon::fromTheme("application-x-deb"); //获取icon + + QPixmap iconPix = icon.pixmap(m_packageIcon->size()); //将Icon 转化为Pixmap + + //获取包的数据 + m_itemInfoFrame->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 = Utils::fromSpecialEncoding(package->longDescription()); //获取描述信息 + m_description = description; + const QSize boundingSize = QSize(m_packageDescription->width(), 54); + m_packageDescription->setText(Utils::holdTextInRect(m_packageDescription->font(), description, boundingSize)); //保证描述信息不会被阶段 + + //set package name + packagename_description = Utils::fromSpecialEncoding(package->packageName()); + packageversion_description = Utils::fromSpecialEncoding(package->version()); + delete package; + if (fontlabelsize > 18) { //根据字体大小确定 label的大小 + const QSize package_boundingSize = QSize(initLabelWidth(fontlabelsize), 23); + m_packageName->setText(Utils::holdTextInRect(m_packageName->font(), packagename_description, package_boundingSize)); + const QSize packageversion_boundingSize = QSize(initLabelWidth(fontlabelsize) - 10, 23); + m_packageVersion->setText(Utils::holdTextInRect(m_packageVersion->font(), packageversion_description, packageversion_boundingSize)); + } else { + const QSize package_boundingSize = QSize(initLabelWidth(fontlabelsize), 20); + m_packageName->setText(Utils::holdTextInRect(m_packageName->font(), packagename_description, package_boundingSize)); + const QSize packageversion_boundingSize = QSize(initLabelWidth(fontlabelsize) - 10, 20); + m_packageVersion->setText(Utils::holdTextInRect(m_packageVersion->font(), packageversion_description, packageversion_boundingSize)); + } + + // package install status + const QModelIndex index = m_packagesModel->index(0); + //fix bug:42285 调整状态优先级, 依赖状态 > 安装状态 + //否则会导致安装不同版本的包(依赖不同)时安装依赖出现问题(包括界面混乱、无法下载依赖等) + const int dependsStat = index.data(DebListModel::PackageDependsStatusRole).toInt(); + qDebug() << "SingleInstallPage:" << "get" << m_packageName->text() << "depend status:" << dependsStat; + // 根据依赖状态调整显示效果 + if (dependsStat == DebListModel::DependsBreak || dependsStat == DebListModel::DependsAuthCancel) { + m_tipsLabel->setText(index.data(DebListModel::PackageFailReasonRole).toString()); + m_tipsLabel->setCustomDPalette(DPalette::TextWarning); + + m_installButton->setVisible(false); + m_reinstallButton->setVisible(false); + m_confirmButton->setVisible(true); + m_backButton->setVisible(true); + return; + } + + //获取版本状态 + const int installStat = index.data(DebListModel::PackageVersionStatusRole).toInt(); + qDebug() << "SingleInstallPage:" << "get" << m_packageName->text() << "install status:" << installStat; + //根据安装状态调整显示效果 + const bool installed = installStat != DebListModel::NotInstalled; + m_installButton->setVisible(!installed); + m_uninstallButton->setVisible(installed); + m_reinstallButton->setVisible(installed); + m_confirmButton->setVisible(false); + m_doneButton->setVisible(false); + + // 根据安装状态设置提示文字 + if (installed) { + if (installStat == DebListModel::InstalledSameVersion) { + m_tipsLabel->setCustomDPalette(DPalette::TextWarning); + m_tipsLabel->setText(tr("Same version installed")); + } else if (installStat == DebListModel::InstalledLaterVersion) { + m_tipsLabel->setCustomDPalette(DPalette::TextWarning); + m_tipsLabel->setText(tr("Later version installed: %1") + .arg(index.data(DebListModel::PackageInstalledVersionRole).toString())); + } else { + m_tipsLabel->setCustomDPalette(DPalette::TextWarning); + m_tipsLabel->setText(tr("Earlier version installed: %1") + .arg(index.data(DebListModel::PackageInstalledVersionRole).toString())); + } + return; + } +} + +/** + * @brief SingleInstallPage::setEnableButton 授权框弹出/取消后 ,设置按钮禁用/可用 + * @param bEnable 按钮禁用/可用的标识 + */ +void SingleInstallPage::setEnableButton(bool bEnable) +{ + // fix bug: 36120 After the uninstall authorization is canceled, hide the uninstall details and display the version status + m_tipsLabel->setVisible(true); + m_tipsLabel->setVisible(true); + + // 设置各个按钮的可用性 + m_installButton->setEnabled(bEnable); + m_reinstallButton->setEnabled(bEnable); + m_uninstallButton->setEnabled(bEnable); +} + +/** + * @brief SingleInstallPage::afterGetAutherFalse 调整授权取消后的界面展示效果 + */ +void SingleInstallPage::afterGetAutherFalse() +{ + //等待dpkg启动但是授权取消后,如果详细信息是expend状态,则shrink + m_infoControlButton->shrink(); + m_infoControlButton->setVisible(false); + m_progressFrame->setVisible(false); + + //根据安装场景显示按钮 + if (m_operate == Install) { + m_installButton->setVisible(true); + } else if (m_operate == Uninstall) { + m_reinstallButton->setVisible(true); + m_uninstallButton->setVisible(true); + } else if (m_operate == Reinstall) { + m_reinstallButton->setVisible(true); + m_uninstallButton->setVisible(true); + } +} + +/** + * @brief SingleInstallPage::paintEvent + * @param event + */ +void SingleInstallPage::paintEvent(QPaintEvent *event) +{ + QWidget::paintEvent(event); + const QSize boundingSize = QSize(m_packageDescription->width(), 54); + m_packageDescription->setText(Utils::holdTextInRect(m_packageDescription->font(), m_description, boundingSize)); + + DPalette palette = DApplicationHelper::instance()->palette(m_packageDescription); + palette.setBrush(DPalette::WindowText, palette.color(DPalette::TextTips)); + m_packageDescription->setPalette(palette); +} + +/** + * @brief SingleInstallPage::setAuthConfirm 调整授权确认后的界面显示效果 + * @param dependName + */ +void SingleInstallPage::setAuthConfirm(QString dependName) +{ + //调整按钮的显示效果 + m_installButton->setVisible(false); + m_reinstallButton->setVisible(false); + m_uninstallButton->setVisible(false); + m_confirmButton->setVisible(false); + m_backButton->setVisible(false); + + // 显示等待动画 + m_pDSpinner->setVisible(true); + m_pDSpinner->start(); + + //显示下载提示 + m_pLoadingLabel->setText(tr("Installing dependencies: %1").arg(dependName)); + m_pLoadingLabel->setVisible(true); + + //隐藏包的提示 + m_tipsLabel->setVisible(false); +} + +/** + * @brief SingleInstallPage::setAuthBefore wine下载前的界面展示效果 + */ +void SingleInstallPage::setAuthBefore() +{ + // 显示包信息提示 + m_tipsLabel->setVisible(true); + + //隐藏进度条 + m_progressFrame->setVisible(false); + + //获取依赖状态 + QModelIndex index = m_packagesModel->first(); + const int dependsStat = index.data(DebListModel::PackageDependsStatusRole).toInt(); + + //依赖不满足或依赖授权被取消 + if (dependsStat == DebListModel::DependsBreak || dependsStat == DebListModel::DependsAuthCancel) { + m_tipsLabel->setText(index.data(DebListModel::PackageFailReasonRole).toString());//修复授权取消后无提示的问题 + m_tipsLabel->setCustomDPalette(DPalette::TextWarning); + m_confirmButton->setVisible(true); + m_backButton->setVisible(true); + } else { //依赖正常 + if (m_operate == Install) { + m_installButton->setVisible(true); + } else if (m_operate == Uninstall) { + m_reinstallButton->setVisible(true); + m_uninstallButton->setVisible(true); + } else if (m_operate == Reinstall) { + m_reinstallButton->setVisible(true); + m_uninstallButton->setVisible(true); + } + m_installButton->setEnabled(false); + m_reinstallButton->setEnabled(false); + m_uninstallButton->setEnabled(false); + } + + // 依赖下载 进度显示 + m_pLoadingLabel->setVisible(false); + m_pDSpinner->stop(); + m_pDSpinner->setVisible(false); +} + +/** + * @brief SingleInstallPage::setCancelAuthOrAuthDependsErr 授权取消或安装失败的界面显示 + */ +void SingleInstallPage::setCancelAuthOrAuthDependsErr() +{ + qDebug() << "SingleInstallPage:" << "set Cancel Auth or Auth Depends Error"; + m_tipsLabel->setVisible(true); + m_progressFrame->setVisible(false); + + //获取依赖状态 + QModelIndex index = m_packagesModel->first(); + const int dependsStat = index.data(DebListModel::PackageDependsStatusRole).toInt(); + //根据依赖状态 调整界面显示 + if (dependsStat == DebListModel::DependsBreak || dependsStat == DebListModel::DependsAuthCancel) { + //依赖不满足或依赖授权取消 + m_tipsLabel->setText(index.data(DebListModel::PackageFailReasonRole).toString());//修复授权取消后无提示的问题 + m_tipsLabel->setCustomDPalette(DPalette::TextWarning); + qDebug() << "SingleInstallPage:" << "depends Break or Revoke installation authorization"; + m_confirmButton->setVisible(true); + m_backButton->setVisible(true); + m_confirmButton->setEnabled(true); + m_backButton->setEnabled(true); + m_installButton->setVisible(false); + m_reinstallButton->setVisible(false); + m_uninstallButton->setVisible(false); + } else { + //依赖安装成功 + m_tipsLabel->clear(); //依赖安装成功后,去除依赖错误的提示信息。 + m_confirmButton->setVisible(false); + m_backButton->setVisible(false); + //fix bug 42285: 在升级安装wine应用(wine->wine5),依赖安装后,界面显示错乱。 + const int installStat = index.data(DebListModel::PackageVersionStatusRole).toInt(); + if (installStat == DebListModel::NotInstalled) { //没有安装过其他版本 + m_installButton->setVisible(true); + m_installButton->setEnabled(true); + m_tipsLabel->setVisible(false); + } else {// 已经安装过其他版本 + // fix bug:https://pms.uniontech.com/zentao/bug-view-51088.html + //增加提示 依赖安装完成后的提示 + if (installStat == DebListModel::InstalledSameVersion) { + m_tipsLabel->setCustomDPalette(DPalette::TextWarning); + m_tipsLabel->setText(tr("Same version installed")); + } else if (installStat == DebListModel::InstalledLaterVersion) { + m_tipsLabel->setCustomDPalette(DPalette::TextWarning); + m_tipsLabel->setText(tr("Later version installed: %1") + .arg(index.data(DebListModel::PackageInstalledVersionRole).toString())); + } else { + m_tipsLabel->setCustomDPalette(DPalette::TextWarning); + m_tipsLabel->setText(tr("Earlier version installed: %1") + .arg(index.data(DebListModel::PackageInstalledVersionRole).toString())); + } + m_reinstallButton->setVisible(true); + m_uninstallButton->setVisible(true); + m_reinstallButton->setEnabled(true); + m_uninstallButton->setEnabled(true); + } + } + + //隐藏wine下载进度 + m_pLoadingLabel->setVisible(false); + m_pDSpinner->stop(); + m_pDSpinner->setVisible(false); +} + +/** + * @brief SingleInstallPage::DealDependResult 处理依赖下载进程的界面展示 + * @param iAuthRes wine依赖下载的进程标识 + * @param dependName 需要下载的依赖名称 + */ +void SingleInstallPage::DealDependResult(int iAuthRes, QString dependName) +{ + qDebug() << "SingleInstallPage:" << "Deal DependResult" << iAuthRes; + switch (iAuthRes) { + case DebListModel::AuthConfirm: //授权成功 + setAuthConfirm(dependName); + break; + + case DebListModel::AuthBefore: //授权之前 + setAuthBefore(); + break; + case DebListModel::AnalysisErr: //解析错误 + setCancelAuthOrAuthDependsErr(); + break; + case DebListModel::AuthDependsSuccess: //下载成功 + setCancelAuthOrAuthDependsErr(); + break; + case DebListModel::CancelAuth://授权取消和授权失败的提示语公用,修复授权取消后无提示的问题 + case DebListModel::AuthDependsErr: + setCancelAuthOrAuthDependsErr(); + m_tipsLabel->setText(tr("Failed to install %1").arg(dependName)); + m_tipsLabel->setCustomDPalette(DPalette::TextWarning); + break; + default: + break; + } +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/pages/singleinstallpage.h deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/singleinstallpage.h --- deepin-deb-installer-5.0.0/src/deb_installer/view/pages/singleinstallpage.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/singleinstallpage.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,281 @@ +/* + * 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 "view/widgets/infocontrolbutton.h" +#include "view/widgets/installprocessinfoview.h" +#include "view/widgets/debinfolabel.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +class DebListModel; +class WorkerProgress; +class SingleInstallPage : public QWidget +{ + Q_OBJECT + +public: + explicit SingleInstallPage(DebListModel *model, QWidget *parent = nullptr); + +public: + /** + * @brief afterGetAutherFalse 授权失败或者取消后的界面处理函数 + */ + void afterGetAutherFalse(); + + /** + * @brief setEnableButton 授权框弹出/取消后 ,设置按钮禁用/可用 + * @param bEnable + */ + void setEnableButton(bool bEnable); + + /** + * @brief DealDependResult 根据依赖安装的进程标识,处理依赖安装的流程显示 + * @param iAuthRes 依赖安装的集成标识 + * @param dependName 安装的依赖名称 + */ + void DealDependResult(int iAuthRes, QString dependName); + +public slots: + /** + * @brief uninstallCurrentPackage 显示卸载页面 + */ + void uninstallCurrentPackage(); + +protected: + void paintEvent(QPaintEvent *event) override; + +signals: + + /** + * @brief back 返回fileChooseWidget界面 + */ + void back() const; + + /** + * @brief requestUninstallConfirm 卸载按钮信号,显示卸载页面 + */ + void requestUninstallConfirm() const; + +private: + + /** + * @brief The Operate enum 当前进行的操作 + */ + enum Operate { + Install, //安装 + Uninstall, //卸载 + Reinstall //重新安装 + }; + +private: + + /** + * @brief initUI 初始化UI + */ + void initUI(); + + /** + * @brief initContentLayout 初始化主布局 + */ + void initContentLayout(); + + /** + * @brief initInstallWineLoadingLayout 初始化wine依赖安装加载动画布局 + */ + void initInstallWineLoadingLayout(); + + /** + * @brief initPkgInfoView 初始化 包信息视图布局 + * @param fontinfosize 字体大小 + */ + void initPkgInfoView(int fontinfosize); + + /** + * @brief initPkgInstallProcessView 初始化安装进程信息布局 + * @param fontinfosize 字体大小 + */ + void initPkgInstallProcessView(int fontinfosize); + + /** + * @brief initConnections 初始化链接信号与槽 + */ + void initConnections(); + + /** + * @brief initLabelWidth 根据字体的大小调整标签的宽度 + * @param fontinfo 字体大小 + * @return label的宽度 + */ + int initLabelWidth(int fontinfo); + + /** + * @brief initControlAccessibleName 初始化控件的AccessibleName + */ + void initControlAccessibleName(); + +private: + /** + * @brief initTabOrder 设置tab切换焦点的顺序 + */ + void initTabOrder(); + + /** + * @brief initButtonFocusPolicy 设置按钮的焦点策略 + */ + void initButtonFocusPolicy(); + + /** + * @brief initButtonAutoDefault 设置按钮的回车触发 + */ + void initButtonAutoDefault(); + +private: + /** + * @brief setPackageInfo 获取deb包的信息 + */ + void setPackageInfo(); + + /** + * @brief setAuthConfirm 依赖下载授权确认后的界面处理函数 + * @param dependName + */ + void setAuthConfirm(QString dependName); + + /** + * @brief setAuthBefore 依赖下载授权前的界面处理函数 + */ + void setAuthBefore(); + + /** + * @brief setCancelAuthOrAuthDependsErr 授权取消或依赖安装结果显示的界面处理函数 + */ + void setCancelAuthOrAuthDependsErr(); + + /** + * @brief setAuthDependsSuccess 暂未使用 + */ + void setAuthDependsSuccess(); + +private slots: + + /** + * @brief install 点击安装按钮后的界面处理,并触发安装进程 + */ + void install(); + + /** + * @brief reinstall 点击重新安装按钮后的界面处理,并触发安装进程 + */ + void reinstall(); + + /** + * @brief showInfomation 显示安装详细信息的视图 + */ + void showInfomation(); + + /** + * @brief hideInfomation 隐藏安装过程详细信息的视图 + */ + void hideInfomation(); + + /** + * @brief showInfo 显示信息的界面调整 + */ + void showInfo(); + + /** + * @brief onOutputAvailable 向安装详细信息展示窗口添加安装进度信息 + * @param output 安装过程信息 + */ + void onOutputAvailable(const QString &output); + + /** + * @brief onWorkerFinished 安装或卸载结束后的界面调整 + */ + void onWorkerFinished(); + + /** + * @brief onWorkerProgressChanged 安装进度变化槽函数 + * @param progress 实际的安装进度 + */ + void onWorkerProgressChanged(const int progress); + +private: + Operate m_operate; //当前的操作 + bool m_workerStarted; //安装是否开始 + bool m_upDown; //当前是详细信息是展开还是收缩 + + DebListModel *m_packagesModel; //model类 + + QWidget *m_contentFrame; //主布局 + QWidget *m_itemInfoFrame; //包信息框架 + QWidget *m_progressFrame; //安装进度框架 + + DLabel *m_packageIcon; //包的图标 + DebInfoLabel *m_packageName; //包名 + DebInfoLabel *m_packageVersion; //包的版本 + DLabel *m_packageDescription; //包的描述 + DebInfoLabel *m_tipsLabel; //包的状态提示label + + WorkerProgress *m_progress; //安装进度条 + InstallProcessInfoView *m_installProcessView; //安装进度的详细信息 + + InfoControlButton *m_infoControlButton; //安装信息显示/隐藏控制按钮 + DPushButton *m_installButton; //安装按钮 + DPushButton *m_uninstallButton; //卸载按钮 + DPushButton *m_reinstallButton; //重新安装按钮 + DPushButton *m_confirmButton; //确认按钮 + DPushButton *m_backButton; //返回按钮 + DPushButton *m_doneButton; //完成按钮 + +private: + QVBoxLayout *m_contentLayout; // + QVBoxLayout *m_centralLayout; //主布局 + + QString m_description; //包的描述文本 + QString packagename_description; //包名的文本 + QString packageversion_description; //包版本的文本 + + DSpinner *m_pDSpinner; //依赖安装加载动画 + + // fix bug:33999 change DebInfoLabel to DCommandLinkButton for Activity color + DCommandLinkButton *m_pLoadingLabel; //依赖安装提示信息 +}; + +#endif // SINGLEINSTALLPAGE_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/pages/uninstallconfirmpage.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/uninstallconfirmpage.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/view/pages/uninstallconfirmpage.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/uninstallconfirmpage.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,220 @@ +/* + * 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 "utils/utils.h" + +#include +#include + +UninstallConfirmPage::UninstallConfirmPage(QWidget *parent) + : QWidget(parent) + , m_icon(new DLabel(this)) + , m_tips(new DLabel(this)) + , m_infoWrapperWidget(new QWidget(this)) + , m_infoControl(new InfoControlButton(tr("Show related packages"), tr("Collapse"), this)) + , m_dependsInfomation(new InstallProcessInfoView(440, 190, this)) + , m_cancelBtn(new DPushButton(this)) + , m_confirmBtn(new DPushButton(this)) +{ + this->setAcceptDrops(false); + const QIcon icon = QIcon::fromTheme("application-x-deb"); + + //set Icon size and location + m_icon->setFixedSize(64, 64); + m_icon->setPixmap(icon.pixmap(64, 64)); + + //自动化测试 + m_icon->setObjectName("UninstallPageIcon"); + m_icon->setAccessibleName("UninstallPageIcon"); + + m_tips->setFixedHeight(120); + m_tips->setFixedWidth(440); + m_tips->setAlignment(Qt::AlignCenter); + + // cancel button settings + m_cancelBtn->setText(tr("Cancel")); + m_cancelBtn->setFixedSize(120, 36); + m_confirmBtn->setText(tr("Confirm")); + m_confirmBtn->setFixedSize(120, 36); + + // 添加确认和返回按钮的焦点策略 + m_confirmBtn->setFocusPolicy(Qt::TabFocus); + m_cancelBtn->setFocusPolicy(Qt::TabFocus); + + //添加确认和返回按钮的enter触发 + m_confirmBtn->setAutoDefault(true); + m_cancelBtn->setAutoDefault(true); + + // When uninstalling dependent packages, if there are prompts for dependent packages. + m_dependsInfomation->setVisible(false); + m_dependsInfomation->setAcceptDrops(false); + m_dependsInfomation->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + //layout of buttons + QHBoxLayout *btnsLayout = new QHBoxLayout(); + btnsLayout->setSpacing(0); + btnsLayout->setContentsMargins(0, 0, 0, 0); + btnsLayout->addStretch(); + btnsLayout->addWidget(m_cancelBtn); + btnsLayout->addSpacing(20); + btnsLayout->addWidget(m_confirmBtn); + btnsLayout->addStretch(); + + //Layout of icons and tips + QVBoxLayout *contentLayout = new QVBoxLayout(this); + contentLayout->setSpacing(0); + contentLayout->setContentsMargins(0, 0, 0, 0); + contentLayout->addStretch(); + contentLayout->addWidget(m_icon); + contentLayout->addSpacing(15); + contentLayout->setAlignment(m_icon, Qt::AlignHCenter); + contentLayout->addWidget(m_tips); + contentLayout->addStretch(); + + m_infoWrapperWidget->setLayout(contentLayout); + + //The details of the uninstall process and the layout of the dependent information. + QVBoxLayout *centralLayout = new QVBoxLayout(this); + 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); + //fix bug: https://pms.uniontech.com/zentao/bug-view-46864.html + //卸载页面上边距增加10px + centralLayout->setContentsMargins(20, 10, 20, 30); + + + //Set font and size + QString normalFontFamily = Utils::loadFontFamilyByType(Utils::SourceHanSansNormal); + QString mediumFontFamily = Utils::loadFontFamilyByType(Utils::SourceHanSansMedium); + + Utils::bindFontBySizeAndWeight(m_tips, normalFontFamily, 14, QFont::Normal); + Utils::bindFontBySizeAndWeight(m_cancelBtn, normalFontFamily, 14, QFont::Medium); + Utils::bindFontBySizeAndWeight(m_confirmBtn, normalFontFamily, 14, QFont::Medium); + m_dependsInfomation->setTextFontSize(14, QFont::Normal); + Utils::bindFontBySizeAndWeight(m_cancelBtn, normalFontFamily, 14, QFont::Medium); + Utils::bindFontBySizeAndWeight(m_confirmBtn, normalFontFamily, 14, QFont::Medium); + + setLayout(centralLayout); + + connect(m_cancelBtn, &DPushButton::clicked, this, &UninstallConfirmPage::canceled); + connect(m_confirmBtn, &DPushButton::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) +{ + //add tips + qDebug() << "name" << name; + QString tips = tr("Are you sure you want to uninstall %1?\nAll dependencies will also be removed"); + if (!m_requiredList.isEmpty()) { + tips = tr("Are you sure you want to uninstall %1?\nThe system or other applications may not work properly"); + } + const QSize boundingSize = QSize(m_tips->width(), 340); + m_tips->setText(Utils::holdTextInRect(m_tips->font(), tips.arg(name), boundingSize));//2020.0210修改中英文状态下描述输出自动换行 +} + +void UninstallConfirmPage::setRequiredList(const QStringList &requiredList) +{ + //According to the dependency status, it is determined whether there is a package that depends on the current package, and if so, it is prompted. + m_requiredList = requiredList; + if (!requiredList.isEmpty()) { + m_infoControl->setVisible(true); + } else { + m_infoControl->setVisible(false); + } + + m_dependsInfomation->setTextColor(DPalette::TextTitle); + m_dependsInfomation->appendText(requiredList.join(", ")); +} + +void UninstallConfirmPage::showDetail() +{ + // Show dependency information + m_infoWrapperWidget->setVisible(false); + m_dependsInfomation->setVisible(true); +} + +void UninstallConfirmPage::hideDetail() +{ + //Hide dependency information + m_infoWrapperWidget->setVisible(true); + m_dependsInfomation->setVisible(false); +} + + +bool UninstallConfirmPage::eventFilter(QObject *watched, QEvent *event) +{ + if (QEvent::MouseButtonRelease == event->type()) { + m_MouseBtnRelease++; + QList btnList = this->findChildren(); + if (btnList.size() > 0) { + for (int num = 0; num < btnList.size(); num++) { + if (watched == btnList.at(num)) { + this->releaseKeyboard(); + btnList.at(num)->click(); + m_MouseBtnRelease = 0; + return QObject::eventFilter(watched, event); + } + } + } + if (m_MouseBtnRelease >= btnList.size()) { + if (this->focusWidget() != nullptr) { + this->focusWidget()->clearFocus(); + } + m_MouseBtnRelease = 0; + emit OutOfFocus(false); + } + } + + if (event->type() == QEvent::KeyPress) { + QKeyEvent *key_event = static_cast < QKeyEvent *>(event); //将事件转化为键盘事件 + if (key_event->key() == Qt::Key_Tab) { + if (m_confirmBtn->hasFocus()) { + emit OutOfFocus(true); + this->releaseKeyboard(); + } + if (m_cancelBtn->hasFocus()) { + m_confirmBtn->setFocus(); + } + return true; + } else if (key_event->key() == Qt::Key_Return) { + this->releaseKeyboard(); + if (m_confirmBtn->hasFocus()) { + emit OutOfFocus(false); + m_confirmBtn->click(); + } + if (m_cancelBtn->hasFocus()) { + emit OutOfFocus(false); + m_cancelBtn->click(); + } + return true; + } else + return true; + } + + return QObject::eventFilter(watched, event); +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/pages/uninstallconfirmpage.h deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/uninstallconfirmpage.h --- deepin-deb-installer-5.0.0/src/deb_installer/view/pages/uninstallconfirmpage.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/pages/uninstallconfirmpage.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,67 @@ +/* + * 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 "view/widgets/infocontrolbutton.h" +#include "view/widgets/installprocessinfoview.h" + +#include +#include +#include + +class UninstallConfirmPage : public QWidget +{ + Q_OBJECT + +public: + explicit UninstallConfirmPage(QWidget *parent = nullptr); + + void setPackage(const QString &name); + void setRequiredList(const QStringList &requiredList); + +protected: + bool eventFilter(QObject *watched, QEvent *event) override; + +signals: + void accepted() const; + void canceled() const; + void OutOfFocus(bool) const; + +private slots: + void showDetail(); + void hideDetail(); + +private: + DLabel *m_icon; + DLabel *m_tips; + QWidget *m_infoWrapperWidget; + InfoControlButton *m_infoControl; + InstallProcessInfoView *m_dependsInfomation; + DPushButton *m_cancelBtn; + DPushButton *m_confirmBtn; + + QStringList m_requiredList; + QString m_description; + int m_MouseBtnRelease = 0; +}; +#endif // UNINSTALLCONFIRMPAGE_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/choosefilebutton.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/choosefilebutton.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/choosefilebutton.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/choosefilebutton.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,33 @@ +#include "choosefilebutton.h" +#include "utils/utils.h" + +#include + +#include + +ChooseFileButton::ChooseFileButton(QString text, QWidget *parent) + : DCommandLinkButton(text, parent) +{ + QString fontFamily = Utils::loadFontFamilyByType(Utils::SourceHanSansNormal); //设置字体 + Utils::bindFontBySizeAndWeight(this, fontFamily, 12, QFont::ExtraLight); //设置字体样式与字体大小 + + this->setFocusPolicy(Qt::TabFocus); //设置本身可以被焦点选中 + + // 添加AccessibleName + this->setObjectName("ChooseFileButton"); + this->setAccessibleName("ChooseFileButton"); +} + +/** + * @brief ChooseFileButton::keyPressEvent 添加键盘响应。 + * @param event + */ +void ChooseFileButton::keyPressEvent(QKeyEvent *event) +{ + // 当按下回车、换行、或空格时,如果当前按钮存在焦点则触发click事件 + if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Space || event->key() == Qt::Key_Enter) { + if (this->hasFocus()) { + this->clicked(); + } + } +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/choosefilebutton.h deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/choosefilebutton.h --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/choosefilebutton.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/choosefilebutton.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,26 @@ +#ifndef CHOOSEFILEBUTTON_H +#define CHOOSEFILEBUTTON_H + +#include +#include + +DWIDGET_USE_NAMESPACE + +/** + * @brief The ChooseFileButton class + * 文件选择对话框中的文件选择按钮 + * 一开始使用的控件为DPushButton ,后UI与测试提出按钮需要跟随活动色变化。后修改为DCommandLinkButton. + */ +class ChooseFileButton : public DCommandLinkButton +{ + Q_OBJECT +public: + //fix bug:33999 change DButton to DCommandLinkButton for Activity color + explicit ChooseFileButton(QString text, QWidget *parent = nullptr); + + // QWidget interface +protected: + void keyPressEvent(QKeyEvent *event) override; +}; + +#endif // CHOOSEFILEBUTTON_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/coloredprogressbar.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/coloredprogressbar.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/coloredprogressbar.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/coloredprogressbar.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. + * + * Author: Chris Xiong + * + * Maintainer: Chris Xiong + * + * 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 "coloredprogressbar.h" + +#include + +#include +#include +#include +#include +#include + +class ColoredProgressBarPrivate : DTK_CORE_NAMESPACE::DObjectPrivate +{ + D_DECLARE_PUBLIC(ColoredProgressBar) + ColoredProgressBarPrivate(ColoredProgressBar *q); +private: + QMap threshmap; +}; + + +ColoredProgressBarPrivate::ColoredProgressBarPrivate(ColoredProgressBar *q) + : DObjectPrivate(q) +{ +} + +/*! + * \class ColoredProgressBar + * \brief ColoredProgressBar is the same as QProgressBar, except it can change its appearance depending on the value displayed. + */ + +ColoredProgressBar::ColoredProgressBar(QWidget *parent) + : QProgressBar(parent) + , DObject(*new ColoredProgressBarPrivate(this)) +{ + themeChanged(); + QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, + this, &ColoredProgressBar::themeChanged); +} + +void ColoredProgressBar::themeChanged() +{ + D_D(ColoredProgressBar); + + DGuiApplicationHelper::ColorType themeType = DGuiApplicationHelper::instance()->themeType(); + m_themeType = themeType; + if (themeType == DGuiApplicationHelper::LightType) { + d->threshmap.clear(); + } else if (themeType == DGuiApplicationHelper::DarkType) { + DPalette pa = DebApplicationHelper::instance()->palette(this); + + QColor colorStart = pa.color(QPalette::Highlight); + QColor colorEnd = pa.color(QPalette::HighlightedText); + + d->threshmap.insert(0, QBrush(colorStart)); + d->threshmap.insert(1, QBrush(colorEnd)); + } else { + d->threshmap.clear(); + } +} + +/*! + * \brief ColoredProgressBar::addThreshold adds a new threshold value and specifies the brush to use once that value is reached. + * If a threshold of the same value already exists, it will be overwritten. + * \param threshold Minimum value for this brush to be used. + * \param brush The brush to use when the currently displayed value is no less than \threshold and less than the next threshold value. + */ +void ColoredProgressBar::addThreshold(int threshold, QBrush brush) +{ + D_D(ColoredProgressBar); + d->threshmap[threshold] = brush; +} + +/*! + * \brief ColoredProgressBar::removeThreshold removes a threshold. + * \param threshold The threshold value to remove. + */ +void ColoredProgressBar::removeThreshold(int threshold) +{ + D_D(ColoredProgressBar); + if (d->threshmap.contains(threshold)) { + d->threshmap.remove(threshold); + } +} + +/*! + * \brief ColoredProgressBar::threadsholds gets all threshold values. + * \return A list of threshold values. + */ +QList ColoredProgressBar::thresholds() const +{ + D_D(const ColoredProgressBar); + return d->threshmap.keys(); +} + +void ColoredProgressBar::paintEvent(QPaintEvent *event) +{ + DGuiApplicationHelper::ColorType themeType = DGuiApplicationHelper::instance()->themeType(); + if (themeType == DGuiApplicationHelper::LightType) { + QProgressBar::paintEvent(event); + } else if (themeType == DGuiApplicationHelper::DarkType) { + + D_D(ColoredProgressBar); + QStylePainter painter(this); + QStyleOptionProgressBar styopt; + initStyleOption(&styopt); + + if (d->threshmap.upperBound(value()) != d->threshmap.begin()) { + styopt.palette.setBrush(QPalette::ColorRole::Highlight, (--d->threshmap.upperBound(value())).value()); + } + + painter.setRenderHint(QPainter::Antialiasing); + painter.setPen(Qt::NoPen); + painter.drawRect(styopt.rect); + + painter.drawControl(QStyle::ControlElement::CE_ProgressBarGroove, styopt); + painter.drawControl(QStyle::ControlElement::CE_ProgressBarContents, styopt); + + if (styopt.textVisible && styopt.orientation == Qt::Horizontal) { + painter.drawControl(QStyle::ControlElement::CE_ProgressBarLabel, styopt); + } + } else { + QProgressBar::paintEvent(event); + } +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/coloredprogressbar.h deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/coloredprogressbar.h --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/coloredprogressbar.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/coloredprogressbar.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. + * + * Author: Chris Xiong + * + * Maintainer: Chris Xiong + * + * 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 . + */ +#pragma once +#include "dtkwidget_global.h" +#include "utils/utils.h" + +#include + +#include + +DCORE_USE_NAMESPACE +DWIDGET_USE_NAMESPACE + +class ColoredProgressBarPrivate; +class ColoredProgressBar : public QProgressBar, public DObject +{ + Q_OBJECT +public: + explicit ColoredProgressBar(QWidget *parent = nullptr); + void addThreshold(int threshold, QBrush brush); + void removeThreshold(int threshold); + QList thresholds() const; + +protected: + void paintEvent(QPaintEvent *) override; + +private: + DGuiApplicationHelper::ColorType m_themeType; + D_DECLARE_PRIVATE(ColoredProgressBar) + +private slots: + void themeChanged(); +}; diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/debinfolabel.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/debinfolabel.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/debinfolabel.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/debinfolabel.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,115 @@ +#include "debinfolabel.h" +#include "utils/utils.h" + +#include +#include + +DebInfoLabel::DebInfoLabel(QWidget *parent, Qt::WindowFlags f) + : DLabel(parent, f) + , m_colorRole(QPalette::NoRole) + , m_colorType(DPalette::NoType) + , m_bUserColorType(false) +{ + // 设置AccessibleName + this->setAccessibleName("DebInfoLabel"); + this->setObjectName("DebInfoLabel"); +} + +/** + * @brief DebInfoLabel::setCustomQPalette + * @param colorRole 字体调色板的颜色 + * 设置自定的Qt风格 字体颜色,根据传入的颜色角色来对DLabel进行设置 + * 目前使用到此类型的有 singleInstallPage的packgeName packageVersion 以及他们提示的label + */ +void DebInfoLabel::setCustomQPalette(QPalette::ColorRole colorRole) +{ + m_colorRole = colorRole; //获取当前使用QPalette的字体颜色角色 + m_bUserColorType = false; //当前使用的不是DPalette + + // 判断传入的QPalette是否是WindowText 如果是则设置当前Label的Palette的画刷为DApplicationHelper画刷,颜色为WindowText + // 否则设置当前的Label的Palette的画刷为DebApplicationHelperr画刷,颜色为传入的颜色 + if (m_colorRole == QPalette::WindowText) { + DPalette palette = DApplicationHelper::instance()->palette(this); + palette.setBrush(QPalette::Text, palette.color(QPalette::WindowText)); + this->setPalette(palette); + } else { + DPalette palette = DebApplicationHelper::instance()->palette(this); + palette.setBrush(DPalette::Text, palette.color(m_colorRole)); + this->setPalette(palette); + } +} + +/** + * @brief DebInfoLabel::setCustomDPalette + * @param colorType 字体调色板的颜色 + * 设置自定的Deepin字体风格,根据传入的颜色角色来对DLabel进行设置 + * 目前使用到此类型的有 singleInstallPage的m_tipsLabel(单包安装时状态[依赖状态][安装状态][卸载状态][版本状态]提示) + */ +void DebInfoLabel::setCustomDPalette(DPalette::ColorType colorType) +{ + m_colorType = colorType; //获取当前使用DPalette的字体颜色类型 + m_bUserColorType = true; //当前使用的是DPalette + m_bMultiIns = false; //当前使用的不是默认颜色 + + //设置当前的Label的Palette的画刷为DebApplicationHelperr画刷,颜色为传入的颜色 + DPalette palette = DebApplicationHelper::instance()->palette(this); + palette.setBrush(DPalette::WindowText, palette.color(m_colorType)); + this->setPalette(palette); +} + +/** + * @brief DebInfoLabel::setCustomDPalette + * 设置当前DLabel 为默认的风格 + * 目前没有控件在使用 + */ +void DebInfoLabel::setCustomDPalette() +{ + m_bMultiIns = true; //当前使用的是默认的颜色 + m_bUserColorType = true; //当前是用的是DPalette + + //设置当前的Label的Palette的画刷为DApplicationHelper画刷,颜色为默认的颜色 + DPalette palette = DApplicationHelper::instance()->palette(this); + palette.setBrush(DPalette::WindowText, QColor(00, 130, 252)); + this->setPalette(palette); +} + +/** + * @brief DebInfoLabel::paintEvent + * @param event + * 根据调色板设置进行重绘 + */ +void DebInfoLabel::paintEvent(QPaintEvent *event) +{ + QWidget tmpWidget; + + if (m_bUserColorType) { + // 当前使用的是DPalette + if (m_bMultiIns) { + // 当前使用的是默认颜色 + DPalette palette = DebApplicationHelper::instance()->palette(&tmpWidget); + QPainter painter(this); + painter.setPen(QColor(00, 130, 252)); + painter.drawText(contentsRect(), static_cast(alignment()), text()); + QWidget::paintEvent(event); + } else { + // 当前使用的是自定义颜色 + DPalette palette = DebApplicationHelper::instance()->palette(&tmpWidget); + QPainter painter(this); + painter.setPen(QColor(palette.color(m_colorType))); + painter.drawText(contentsRect(), static_cast(alignment()), text()); + QWidget::paintEvent(event); + } + } else { + // 当前使用的是QPalette + if (m_colorRole == QPalette::WindowText) { + DLabel::paintEvent(event); + } else { + DPalette palette = DebApplicationHelper::instance()->palette(&tmpWidget); + QPainter painter(this); + painter.setPen(QColor(palette.color(m_colorRole))); + painter.drawText(contentsRect(), static_cast(alignment()), text()); + QWidget::paintEvent(event); + } + } + +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/debinfolabel.h deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/debinfolabel.h --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/debinfolabel.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/debinfolabel.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,50 @@ +#ifndef DEBINFOLABEL_H +#define DEBINFOLABEL_H + +#include + +DWIDGET_USE_NAMESPACE + +/** + * @brief The DebInfoLabel class + * singleInstallPage 中 package name、 package version 与 tipsLabel 的控件 + * 基于DLabel 对不同情况下的Dlabel进行界面上的风格样式修改,保证界面上风格的统一 + * + */ +class DebInfoLabel : public DLabel +{ + Q_OBJECT +public: + explicit DebInfoLabel(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); + + /** + * @brief setCustomQPalette 设置自适应的QPalette + * @param colorRole 字体颜色角色 + * 目前使用到此类型的有 singleInstallPage的packgeName packageVersion 以及他们提示的label + */ + void setCustomQPalette(QPalette::ColorRole colorRole); + + /** + * @brief setCustomDPalette 设置自适应的DPalette + * @param colorType 字体颜色的类型 + * 目前使用到此类型的有 singleInstallPage的m_tipsLabel(单包安装时状态[依赖状态][安装状态][版本状态]提示) + */ + void setCustomDPalette(DPalette::ColorType colorType); + + /** + * @brief setCustomDPalette 设置默认的DPalette + * 目前没有函数使用到此类型 + */ + void setCustomDPalette(); + + void paintEvent(QPaintEvent *event) override; + +private: + QPalette::ColorRole m_colorRole; //当前label的字体颜色角色(QPalette) + DPalette::ColorType m_colorType; //当前Label的字体颜色类型(DPalette) + + bool m_bUserColorType; //是否是使用的DPalette + bool m_bMultiIns = false; //是否是使用的自定义DPalette风格 +}; + +#endif // DEBINFOLABEL_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/droundbgframe.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/droundbgframe.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/droundbgframe.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/droundbgframe.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,42 @@ +#include "droundbgframe.h" +#include "utils/utils.h" + +#include +#include + +#include +#include +#include + +DRoundBgFrame::DRoundBgFrame(QWidget *parent, int bgOffsetTop, int bgOffsetBottom) + : QWidget(parent) + , m_bgOffsetTop(bgOffsetTop) + , m_bgOffsetBottom(bgOffsetBottom) +{ + // 添加accessibleName + this->setObjectName("DRoundBgFrame"); + this->setAccessibleName("DRoundBgFrame"); +} + +/** + * @brief DRoundBgFrame::paintEvent 重绘 + * @param event + */ +void DRoundBgFrame::paintEvent(QPaintEvent *event) +{ + Q_UNUSED(event) + + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing, true); //设置边缘抗锯齿 + DPalette pa = DebApplicationHelper::instance()->palette(this); + + QPainterPath path; + QRectF rect = this->rect(); + rect.setX(0); //设置x位置 + rect.setY(m_bgOffsetTop); //设置y位置 + rect.setWidth(rect.width()); //设置宽度 + rect.setHeight(rect.height() - m_bgOffsetBottom); //设置高度 + + path.addRoundedRect(rect, 8, 8); + painter.fillPath(path, QBrush(pa.color(DPalette::Base))); //填充颜色 +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/droundbgframe.h deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/droundbgframe.h --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/droundbgframe.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/droundbgframe.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,24 @@ +#ifndef DROUNDBGFRAME_H +#define DROUNDBGFRAME_H + +#include + +DWIDGET_USE_NAMESPACE + +class DRoundBgFrame : public QWidget +{ +public: + DRoundBgFrame(QWidget* parent = nullptr, int bgOffsetTop = 0, int bgOffsetBottom = 0); + + void paintEvent(QPaintEvent *) override; + +public slots: + void onShowHideTopBg(bool bShow); + void onShowHideBottomBg(bool bShow); + +private: + int m_bgOffsetTop; + int m_bgOffsetBottom; +}; + +#endif // DROUNDBGFRAME_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/filechoosewidget.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/filechoosewidget.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/filechoosewidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/filechoosewidget.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,203 @@ +/* + * 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 "view/widgets/choosefilebutton.h" +#include "utils/utils.h" +#include "utils/DebugTimeManager.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +FileChooseWidget::FileChooseWidget(QWidget *parent) + : QWidget(parent) + , m_settings("deepin", "deepin-deb-install") +{ + setFocusPolicy(Qt::NoFocus); + setAcceptDrops(true); + DPalette palette; + + // fileChooseWidget的图标 + m_iconImage = new DLabel(this); + //添加AccessibleName + m_iconImage->setObjectName("iconImage"); + m_iconImage->setAccessibleName("iconImage"); + m_iconImage->setFixedSize(160, 160); + +#ifdef SHOWBORDER + iconImage->setStyleSheet("QLabel{border:1px solid black;}"); +#endif + + // 拖入提示语 + m_dndTips = new DLabel(this); + m_dndTips->setFixedHeight(30); + m_dndTips->setAlignment(Qt::AlignTop); + m_dndTips->setText(tr("Drag deb packages here")); + + //添加AccessibleName + m_dndTips->setObjectName("DNDTips"); + + //修改字体颜色 + palette = DApplicationHelper::instance()->palette(m_dndTips); + palette.setBrush(DPalette::WindowText, palette.color(DPalette::TextTips)); + m_dndTips->setPalette(palette); + + //修改字体大小与字体类型 + QString fontFamily = Utils::loadFontFamilyByType(Utils::SourceHanSansNormal); + Utils::bindFontBySizeAndWeight(m_dndTips, fontFamily, 12, QFont::ExtraLight); + +#ifdef SHOWBORDER + dndTips->setStyleSheet("QLabel{border:1px solid black;}"); +#endif + + //分割线 + split_line = new DLabel(this); + + //添加AccessibleName + split_line->setObjectName("SplitLine"); + split_line->setAccessibleName("SplitLine"); + + //显示的大图标 + QIcon icon_install = QIcon::fromTheme("di_icon_install"); + m_iconImage->setPixmap(icon_install.pixmap(QSize(160, 160))); + + //显示的分割线 + QIcon icon_split_line = QIcon::fromTheme("di_split_line"); + split_line->setPixmap(icon_split_line.pixmap(QSize(220, 3))); + split_line->setFixedHeight(3); + + //fix bug:33999 change DButton to DCommandLinkButton for Activity color +// m_chooseFileBtn = new ChooseFileButton(this); + m_chooseFileBtn = new ChooseFileButton("", this); + m_chooseFileBtn->setFixedHeight(28); + + //添加AccessibleName + m_chooseFileBtn->setObjectName("FileChooseButton"); + m_chooseFileBtn->setAccessibleName("FileChooseButton"); + m_chooseFileBtn->setText(tr("Select File")); +#ifdef SHOWBORDER + m_chooseFileBtn->setStyleSheet("QPushButton{border:1px solid black;}"); +#endif + + //大图标的布局 + QVBoxLayout *centralLayout = new QVBoxLayout(this); + centralLayout->addSpacing(32); + centralLayout->addWidget(m_iconImage); + //设置图标居中 + centralLayout->setAlignment(m_iconImage, Qt::AlignHCenter); + + //图标下是提示 + centralLayout->addSpacing(8); + centralLayout->addWidget(m_dndTips); + + //提示居中显示 + centralLayout->setAlignment(m_dndTips, Qt::AlignHCenter); + + //分割线 + centralLayout->addWidget(split_line); + centralLayout->setAlignment(split_line, Qt::AlignHCenter); + + centralLayout->addSpacing(11); + + //文件选择按钮 + centralLayout->addWidget(m_chooseFileBtn); + + //文件选择按钮居中显示 + centralLayout->setAlignment(m_chooseFileBtn, Qt::AlignHCenter); + centralLayout->addStretch(); + + centralLayout->setSpacing(0); + centralLayout->setContentsMargins(0, 0, 0, 0); + + setLayout(centralLayout); + + //文件选择后,将数据传到chooseFiles信号中 + connect(m_chooseFileBtn, &ChooseFileButton::clicked, this, &FileChooseWidget::chooseFiles); + + //主题变换时,修改图标的颜色 + QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, + this, &FileChooseWidget::themeChanged); +} +/** + * @brief FileChooseWidget::chooseFiles + * 选择文件 + */ +void FileChooseWidget::chooseFiles() +{ + QString historyDir = m_settings.value("history_dir").toString(); //获取保存的文件路径 + + if (historyDir.isEmpty()) { + historyDir = QDir::homePath(); + } + + // fix bug: https://pms.uniontech.com/zentao/bug-view-50992.html + // 为DFileDialog指定父对象 + DFileDialog dialog(this); //获取文件 + 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); //发送信号 +} + +/** + * @brief FileChooseWidget::themeChanged 根据主题更新图标 + */ +void FileChooseWidget::themeChanged() +{ + //更新icon + QIcon icon_install = QIcon::fromTheme("di_icon_install"); + m_iconImage->setPixmap(icon_install.pixmap(QSize(160, 160))); + + //更新 分割线 + QIcon icon_split_line = QIcon::fromTheme("di_split_line"); + split_line->setPixmap(icon_split_line.pixmap(QSize(220, 3))); +} + +/** + * @brief FileChooseWidget::clearChooseFileBtnFocus 在返回文件选择界面的时候清除文件选择按钮的焦点 + * fix bug: https://pms.uniontech.com/zentao/bug-view-46525.html + */ +void FileChooseWidget::clearChooseFileBtnFocus() +{ + m_chooseFileBtn->clearFocus(); //清除文件选择按钮的焦点 +} + diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/filechoosewidget.h deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/filechoosewidget.h --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/filechoosewidget.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/filechoosewidget.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,72 @@ +/* + * 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 +#include + +class ChooseFileButton; + +DWIDGET_USE_NAMESPACE + +class FileChooseWidget : public QWidget +{ + Q_OBJECT + +public: + explicit FileChooseWidget(QWidget *parent = nullptr); + + /** + * @brief clearChooseFileBtnFocus 清除文件选择按钮的焦点。 + */ + void clearChooseFileBtnFocus(); + +signals: + /** + * @brief packagesSelected 选择文件信号 + * @param files 通过文件选择窗口选择的文件 + */ + void packagesSelected(const QStringList files) const; + +private slots: + /** + * @brief chooseFiles 打开文件选择窗口,选择文件后将文件保存 + */ + void chooseFiles(); + /** + * @brief themeChanged 更换主题时,修改UI + */ + void themeChanged(); +private: + ChooseFileButton *m_chooseFileBtn {nullptr}; //文件选择按钮 + QSettings m_settings; //保存上次打开的文件路径 + DLabel *split_line {nullptr}; //分割线 + DLabel *m_dndTips {nullptr}; //拖入提示语 + DLabel *m_iconImage {nullptr}; //图标 + int m_MouseBtnRelease = 0; //此变量已废弃 +}; + +#endif // FILECHOOSEWIDGET_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/InfoCommandLinkButton.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/InfoCommandLinkButton.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/InfoCommandLinkButton.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/InfoCommandLinkButton.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,44 @@ +/* +* Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd +* +* Author: cuizhen +* Maintainer: cuizhen +* 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 "InfoCommandLinkButton.h" +#include "utils/utils.h" + +#include + +InfoCommandLinkButton::InfoCommandLinkButton(QString text, QWidget *parent) + : DCommandLinkButton(text, parent) +{ + QString fontFamily = Utils::loadFontFamilyByType(Utils::SourceHanSansNormal); + Utils::bindFontBySizeAndWeight(this, fontFamily, 12, QFont::ExtraLight); //设置字体大小 + + this->setFocusPolicy(Qt::TabFocus); //获取焦点 + +} + +/** + * @brief ChooseFileButton::keyPressEvent 添加键盘响应。 + * @param event + */ +void InfoCommandLinkButton::keyPressEvent(QKeyEvent *event) +{ + //添加回车,换行,空格键盘事件的响应 + if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Space || event->key() == Qt::Key_Enter) { + if (this->hasFocus()) { //只有有焦点时才响应 + this->clicked(); + } + } +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/InfoCommandLinkButton.h deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/InfoCommandLinkButton.h --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/InfoCommandLinkButton.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/InfoCommandLinkButton.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,34 @@ +/* +* Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd +* +* Author: cuizhen +* Maintainer: cuizhen +* 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 INFOCOMMANDLINKBUTTON_H +#define INFOCOMMANDLINKBUTTON_H +#include + +#include + +DWIDGET_USE_NAMESPACE + +class InfoCommandLinkButton : public DCommandLinkButton +{ +public: + explicit InfoCommandLinkButton(QString text, QWidget *parent = nullptr); + // QWidget interface +protected: + void keyPressEvent(QKeyEvent *event) override; +}; + +#endif // INFOCOMMANDLINKBUTTON_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/infocontrolbutton.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/infocontrolbutton.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/infocontrolbutton.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/infocontrolbutton.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,205 @@ +/* + * 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 "InfoCommandLinkButton.h" +#include "utils/utils.h" + +#include +#include + +#include +#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 DLabel(this)) + , m_tipsText(new InfoCommandLinkButton("", this)) +{ + // 添加AccessibleName + m_arrowIcon->setObjectName("arrowIcon"); + m_arrowIcon->setAccessibleName("arrowIcon"); + + //只有DCommandLinkButton 需要焦点。 + this->setFocusPolicy(Qt::NoFocus); + this->m_tipsText->setFocusPolicy(Qt::TabFocus); + + //设置自身自适应大小 + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + m_arrowIcon->setAlignment(Qt::AlignCenter); + + //设置展开收缩的图标 + QIcon arrow_up = QIcon::fromTheme("di_arrow_up"); + m_arrowIcon->setPixmap(arrow_up.pixmap(QSize(25, 8))); + + //设置图标的高度 + m_arrowIcon->setFixedHeight(13); + + //默认设置展开。所以设置展开的提示语 + m_tipsText->setText(expandTips); + QFontInfo fontinfo = m_tipsText->fontInfo(); + + //设置提示语的高度 + m_tipsText->setFixedHeight(28); + + //设置提示的字体颜色与字体大小 + QString normalFontFamily = Utils::loadFontFamilyByType(Utils::SourceHanSansNormal); + Utils::bindFontBySizeAndWeight(m_tipsText, normalFontFamily, 12, QFont::ExtraLight); + + //将控件设置布局 + centralLayout = new QVBoxLayout(this); + centralLayout->setSpacing(5); + + // 设置上下左右边界 + centralLayout->setContentsMargins(0, 0, 0, 0); + + //添加控件到布局中 + centralLayout->addWidget(m_arrowIcon); + centralLayout->addWidget(m_tipsText); + + // keep the tips in the middle + centralLayout->setAlignment(m_tipsText, Qt::AlignCenter); + + setLayout(centralLayout); + + //适应主题变化 + QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, + this, &InfoControlButton::themeChanged); + + // add clicked connection fot expand or shrink + connect(m_tipsText, &DCommandLinkButton::clicked, this, &InfoControlButton::onMouseRelease); + + +//#define SHOWBGCOLOR +#ifdef SHOWBGCOLOR + m_tipsText->setStyleSheet("QLabel{background: cyan;}"); + m_arrowIcon->setStyleSheet("QLabel{background: red;}"); +#endif +} + +/** + * @brief InfoControlButton::controlButton + * @return 当前使用的CommandLinkButton + */ +QAbstractButton *InfoControlButton::controlButton() +{ + return m_tipsText; +} + +/** + * @brief InfoControlButton::mouseReleaseEvent 添加鼠标点击事件 + * @param e + */ +void InfoControlButton::mouseReleaseEvent(QMouseEvent *e) +{ + QWidget::mouseReleaseEvent(e); + + onMouseRelease(); //鼠标事件的响应 +} + +/** + * @brief InfoControlButton::keyPressEvent 添加键盘事件响应 + * @param event + */ +void InfoControlButton::keyPressEvent(QKeyEvent *event) +{ + //添加回车键,空格键,换行键来触发展开或收缩 + if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Space || event->key() == Qt::Key_Enter) { + if (this->hasFocus()) { + m_tipsText->clicked(); + } + } +} +/** + * @brief InfoControlButton::onMouseRelease + * 鼠标点击事件 + */ +void InfoControlButton::onMouseRelease() +{ + if (m_expand) { //当前已经展开 + emit shrink(); //发送收缩信号 + } else { + emit expand(); //发送展开信号 + } + + m_expand = !m_expand; //修改标志 + centralLayout->removeWidget(m_arrowIcon); + centralLayout->removeWidget(m_tipsText); + if (!m_expand) { //当前是收缩状态 + centralLayout->setSpacing(5); + centralLayout->addWidget(m_arrowIcon); //添加图片 + centralLayout->addWidget(m_tipsText); //添加提示 + //fix bug: 33999 keep tips in the middle when install details hidden + centralLayout->setAlignment(m_tipsText, Qt::AlignCenter); + QIcon arrow_up = QIcon::fromTheme("di_arrow_up"); //设置图标为展开的图标 + m_arrowIcon->setPixmap(arrow_up.pixmap(QSize(25, 8))); + m_tipsText->setText(m_expandTips); //设置提示为展开的提示 + } else { //当前是展开状态 + centralLayout->setSpacing(0); + centralLayout->addWidget(m_tipsText); //添加提示 + //fix bug: 33999 keep tips in the middle when details show + centralLayout->setAlignment(m_tipsText, Qt::AlignCenter); + centralLayout->addWidget(m_arrowIcon); //添加图标 + QIcon arrow_up = QIcon::fromTheme("di_arrow_down"); //设置图标为收缩的图标 + m_arrowIcon->setPixmap(arrow_up.pixmap(QSize(25, 8))); + m_tipsText->setText(m_shrinkTips); //设置提示为收缩的提示 + } +} + +/** + * @brief InfoControlButton::setExpandTips 接收外部展开的提示语 + * @param text 要修改的提示语 + */ +void InfoControlButton::setExpandTips(const QString text) +{ + m_expandTips = text; //保存提示语 + m_tipsText->setText(m_expandTips); //设置提示语 +} + +/** + * @brief InfoControlButton::setShrinkTips 接收外部收缩的提示语 + * @param text 要修改的提示语 + */ +void InfoControlButton::setShrinkTips(const QString text) +{ + m_shrinkTips = text; //保存提示语 + m_tipsText->setText(m_shrinkTips); //设置提示语 +} + +/** + * @brief InfoControlButton::themeChanged 主题变化的调整 + */ +void InfoControlButton::themeChanged() +{ + if (m_expand) { //当前是展开状态 + QIcon arrow_down = QIcon::fromTheme("di_arrow_down"); //重新获取收缩的提示 + m_arrowIcon->setPixmap(arrow_down.pixmap(QSize(25, 8))); + } else { //当前是收缩状态 + QIcon arrow_up = QIcon::fromTheme("di_arrow_up"); //重新设置展开的提示 + m_arrowIcon->setPixmap(arrow_up.pixmap(QSize(25, 8))); + } +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/infocontrolbutton.h deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/infocontrolbutton.h --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/infocontrolbutton.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/infocontrolbutton.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,109 @@ +/* + * 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 +#include + +DWIDGET_USE_NAMESPACE +#define THEME_DARK 2//"dark" +#define THEME_LIGHT 1//"light" + +class InfoCommandLinkButton; +class InfoControlButton : public QWidget +{ + Q_OBJECT + +public: + explicit InfoControlButton(const QString &expandTips, const QString &shrinkTips, QWidget *parent = nullptr); + + /** + * @brief setShrinkTips 设置收缩的提示语 + * @param text 提示语 + */ + void setShrinkTips(const QString text); + + /** + * @brief setExpandTips 设置展开的提示语 + * @param text 提示语 + */ + void setExpandTips(const QString text); + +public: + /** + * @brief linkButton 返回当前使用的CommandLinkButton + * @return 当前使用的CommandLinkButton + */ + QAbstractButton *controlButton(); + +signals: + /** + * @brief expand 展开的信号 + */ + void expand(); + + /** + * @brief shrink 收缩的信号 + */ + void shrink(); + +protected: + + /** + * @brief mouseReleaseEvent 重写鼠标事件 + */ + void mouseReleaseEvent(QMouseEvent *) override; + + /** + * @brief keyPressEvent 重写按键事件 增加对回车、换行、空格的兼容 + * @param event + */ + void keyPressEvent(QKeyEvent *event) override; + +private slots: + + /** + * @brief onMouseRelease 鼠标事件的具体实现 + */ + void onMouseRelease(); + + /** + * @brief themeChanged 主题变化后,图标等的变化 + */ + void themeChanged(); + +private: + bool m_expand; // 当前是需要扩展还是收缩的标志位 + QString m_expandTips; // 展开的提示语 + QString m_shrinkTips; // 收缩的提示语 + + DLabel *m_arrowIcon; // 展开或收缩的图标 + QVBoxLayout *centralLayout; // 布局 + + //fix bug:33999 change DButton to DCommandLinkButton for Activity color + InfoCommandLinkButton *m_tipsText; // +}; + +#endif // INFOCONTROLBUTTON_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/installprocessinfoview.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/installprocessinfoview.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/installprocessinfoview.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/installprocessinfoview.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,155 @@ +/* +* Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd +* +* Author: cuizhen +* Maintainer: cuizhen +* 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 "installprocessinfoview.h" +#include "droundbgframe.h" +#include "utils/utils.h" +#include "ShowInstallInfoTextEdit.h" + +#include +#include + +#include + +InstallProcessInfoView::InstallProcessInfoView(int w, int h, QWidget *parent) + : QWidget(parent) + , m_editor(new ShowInstallInfoTextEdit(this)) //修改为自写控件 +{ + initUI(w, h); + + //fix bug: 44726 https://pms.uniontech.com/zentao/bug-view-44726.html + //使用自写控件实现滑动,废弃 +// QScroller::grabGesture(m_editor, QScroller::TouchGesture); + + //数据更新后,直接跳转到最后一行 + connect(m_editor, &QTextEdit::textChanged, this, [ = ] { + m_editor->moveCursor(QTextCursor::End); + }); + //设置TextEdit和InfoView为无焦点 + //fix bug:https://pms.uniontech.com/zentao/bug-view-48235.html + this->setFocusPolicy(Qt::NoFocus); + m_editor->setFocusPolicy(Qt::NoFocus); +} + +/** + * @brief InstallProcessInfoView::initUI 初始化ProcessInfo的大小 + * @param w 控件的宽度 + * @param h 控件的高度 + * 此处在SP3之后修改,增加宽度高度参数 + * 为适应配置框的大小与安装器installProcessInfo的大小 + */ +void InstallProcessInfoView::initUI(int w, int h) +{ + //设置控件背景色 + DRoundBgFrame *bgFrame = new DRoundBgFrame(this); + bgFrame->setFixedSize(w, h); + + //edit的布局 + QVBoxLayout *editLayout = new QVBoxLayout(this); + editLayout->setSpacing(0); + editLayout->setContentsMargins(5, 1, 0, 5); //设置上下左右边距 + bgFrame->setLayout(editLayout); + + editLayout->addWidget(m_editor); + + // 设置控件的字体类型和字体大小 + QString textFont = Utils::loadFontFamilyByType(Utils::DefautFont); + Utils::bindFontBySizeAndWeight(m_editor, textFont, 11, QFont::Light); + + // 设置字体颜色 + DPalette pa = DebApplicationHelper::instance()->palette(m_editor); + m_colorType = DPalette::TextTips; + pa.setColor(DPalette::Text, pa.color(m_colorType)); + m_editor->setPalette(pa); + + //设置只读,不允许对其进行修改 + m_editor->setReadOnly(true); + m_editor->setFrameShape(QFrame::NoFrame); //设置frame类型为noframe + m_editor->viewport()->setBackgroundRole(QPalette::Background); //设置内容的背景色 + m_editor->viewport()->setAutoFillBackground(false); + + QTextCursor textCursor = m_editor->textCursor(); //获取游标 + QTextBlockFormat textBlockFormat; + //设置行高 + textBlockFormat.setLineHeight(20, QTextBlockFormat::FixedHeight); + //设置行间距 + textBlockFormat.setBottomMargin(1); + textCursor.setBlockFormat(textBlockFormat); + m_editor->setTextCursor(textCursor); +} + +/** + * @brief InstallProcessInfoView::setTextFontSize 设置字体大小 + * @param fontSize 字体大小 PS:此参数无实际意义 + * @param fontWeight 字体大小 + */ +void InstallProcessInfoView::setTextFontSize(int fontSize, int fontWeight) +{ + QString textFont = Utils::loadFontFamilyByType(Utils::DefautFont); + Utils::bindFontBySizeAndWeight(m_editor, textFont, fontSize, fontWeight); +} + +/** + * @brief InstallProcessInfoView::setTextColor 设置字体颜色 + * @param ct 字体颜色 + */ +void InstallProcessInfoView::setTextColor(DPalette::ColorType ct) +{ + m_colorType = ct; //保存传入的颜色类型 + DPalette pa = DebApplicationHelper::instance()->palette(m_editor); + pa.setColor(DPalette::Text, pa.color(m_colorType)); //editor设置传入的颜色类型 + m_editor->setPalette(pa); +} + +/** + * @brief InstallProcessInfoView::appendText 向editor添加要显示的数据 + * @param text 要显示的数据 + */ +void InstallProcessInfoView::appendText(QString text) +{ + m_editor->append(text); +} + +InstallProcessInfoView::~InstallProcessInfoView() +{ +} + +void InstallProcessInfoView::paintEvent(QPaintEvent *event) +{ + QWidget::paintEvent(event); + + DPalette pa = DebApplicationHelper::instance()->palette(this); + + // 获取当前的主题 + DGuiApplicationHelper::ColorType themeType = DGuiApplicationHelper::instance()->themeType(); + + if (themeType == DGuiApplicationHelper::LightType) { //当前是浅色主题 + pa.setColor(DPalette::Text, QColor(96, 157, 200)); + m_editor->setPalette(pa); + } else if (themeType == DGuiApplicationHelper::DarkType) {// 当前是深色主题 + pa.setColor(DPalette::Text, QColor(109, 124, 136)); + m_editor->setPalette(pa); + } else { //默认使用浅色主题 + pa.setColor(DPalette::Text, QColor(96, 157, 200)); + m_editor->setPalette(pa); + } +} + +void InstallProcessInfoView::clearText() +{ + m_editor->clear(); +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/installprocessinfoview.h deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/installprocessinfoview.h --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/installprocessinfoview.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/installprocessinfoview.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,78 @@ +/* +* Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd +* +* Author: cuizhen +* Maintainer: cuizhen +* 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 INSTALLPROCESSINFOVIEW_H +#define INSTALLPROCESSINFOVIEW_H + +#include +#include +#include +#include + +DGUI_USE_NAMESPACE + +class ShowInstallInfoTextEdit; + +class InstallProcessInfoView : public QWidget +{ + Q_OBJECT +public: + explicit InstallProcessInfoView(int w, int h, QWidget *parent = nullptr); + virtual ~InstallProcessInfoView() override; + + /** + * @brief appendTextx 向installProcessInfo中添加数据 + * @param text 要添加的数据 + */ + void appendText(QString text); + + /** + * @brief setTextFontSize 设置字体大小 + * @param fontSize 字体大小 PS: 此参数无用 + * @param fontWeight 字体大小 + */ + void setTextFontSize(int fontSize, int fontWeight); + + /** + * @brief setTextColor 设置文字颜色类型 + * @param ct 颜色类型 + */ + void setTextColor(DPalette::ColorType ct); + + /** + * @brief clearText 清空目前installProcessInfo中的数据 + */ + void clearText(); + +protected: + void paintEvent(QPaintEvent *event) override; + +private: + /** + * @brief initUI 初始化ProcessInfo的大小 + * @param w 控件的宽度 + * @param h 控件的高度 + * 此处在SP3之后修改,增加宽度高度参数 + * 为适应配置框的大小与安装器installProcessInfo的大小 + */ + void initUI(int w, int h); + + ShowInstallInfoTextEdit *m_editor; //展示框 修改为自写控件 + DPalette::ColorType m_colorType; //显示的字体的颜色类型 +}; + +#endif // INSTALLPROCESSINFOVIEW_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/ShowInstallInfoTextEdit.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/ShowInstallInfoTextEdit.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/ShowInstallInfoTextEdit.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/ShowInstallInfoTextEdit.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,271 @@ +/* +* Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd +* +* Author: cuizhen +* Maintainer: cuizhen +* 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 "ShowInstallInfoTextEdit.h" + +#include +#include +#include +#include +#include + +ShowInstallInfoTextEdit::ShowInstallInfoTextEdit(QWidget *parent): + QTextEdit(parent) +{ + setAttribute(Qt::WA_AcceptTouchEvents); + grabGesture(Qt::TapGesture); //获取触控点击事件 + grabGesture(Qt::TapAndHoldGesture); //获取触控点击长按事件 + + //滑动鼠标时选中的效果 + connect(this, &ShowInstallInfoTextEdit::selectionChanged, this, &ShowInstallInfoTextEdit::onSelectionArea); +} + +/** + * @brief ShowInstallInfoTextEdit::onSelectionArea 选中文字 + */ +void ShowInstallInfoTextEdit::onSelectionArea() +{ + if (m_gestureAction != GA_null) { + QTextCursor cursor = textCursor(); + if (cursor.selectedText() != "") { + cursor.clearSelection(); + setTextCursor(cursor); + } + } +} + +/** + * @brief ShowInstallInfoTextEdit::event 事件处理 + * @param event + * @return + */ +bool ShowInstallInfoTextEdit::event(QEvent *event) +{ + if (event->type() == QEvent::Gesture) + gestureEvent(static_cast(event)); + return QTextEdit::event(event); +} + +/** + * @brief ShowInstallInfoTextEdit::gestureEvent 手势事件的处理 + * @param event + * @return + */ +bool ShowInstallInfoTextEdit::gestureEvent(QGestureEvent *event) +{ + if (QGesture *tap = event->gesture(Qt::TapGesture)) + tapGestureTriggered(static_cast(tap)); + if (QGesture *tapAndHold = event->gesture(Qt::TapAndHoldGesture)) + tapAndHoldGestureTriggered(static_cast(tapAndHold)); + return true; +} + +/** + * @brief ShowInstallInfoTextEdit::tapGestureTriggered 单指点击事件的处理 + * @param tap + */ +void ShowInstallInfoTextEdit::tapGestureTriggered(QTapGesture *tap) +{ + this->clearFocus(); + //单指点击函数 + switch (tap->state()) { //根据点击的状态进行不同的操作 + case Qt::GestureStarted: { //开始点击,记录时间。时间不同 进行不同的操作 + m_gestureAction = GA_tap; + m_tapBeginTime = QDateTime::currentDateTime().toMSecsSinceEpoch(); + break; + } + case Qt::GestureUpdated: { + m_gestureAction = GA_slide; //触控滑动 + break; + } + case Qt::GestureCanceled: { + //根据时间长短区分轻触滑动 + qint64 timeSpace = QDateTime::currentDateTime().toMSecsSinceEpoch() - m_tapBeginTime; + if (timeSpace < TAP_MOVE_DELAY || m_slideContinue) { //普通滑动 + m_slideContinue = false; + m_gestureAction = GA_slide; + } else { //选中滑动 + m_gestureAction = GA_null; + } + break; + } + case Qt::GestureFinished: { + m_gestureAction = GA_null; + break; + } + default: { + Q_ASSERT(false); + break; + } + } +} + +/** + * @brief ShowInstallInfoTextEdit::tapAndHoldGestureTriggered 单指长按事件 + * @param tapAndHold + */ +void ShowInstallInfoTextEdit::tapAndHoldGestureTriggered(QTapAndHoldGesture *tapAndHold) +{ + //单指长按 + switch (tapAndHold->state()) { + case Qt::GestureStarted: + m_gestureAction = GA_hold; + break; + case Qt::GestureUpdated: + Q_ASSERT(false); + break; + case Qt::GestureCanceled: + Q_ASSERT(false); + break; + case Qt::GestureFinished: + m_gestureAction = GA_null; + break; + default: + Q_ASSERT(false); + break; + } +} + +/** + * @brief ShowInstallInfoTextEdit::slideGesture 滑动事件的处理 + * @param diff + */ +void ShowInstallInfoTextEdit::slideGesture(qreal diff) +{ + static qreal delta = 0.0; + int step = static_cast(diff + delta); + delta = diff + delta - step; + verticalScrollBar()->setValue(verticalScrollBar()->value() + step); //移动滚动条 +} + +/** + * @brief ShowInstallInfoTextEdit::mouseReleaseEvent 鼠标释放事件 + * @param e + */ +void ShowInstallInfoTextEdit::mouseReleaseEvent(QMouseEvent *e) +{ + change = 0.0; + duration = 0.0; + //add for single refers to the sliding + if (e->type() == QEvent::MouseButtonRelease && e->source() == Qt::MouseEventSynthesizedByQt) { + + if (m_gestureAction == GA_slide) { + //滑动结束,开始惯性滑动 + tween.start(0, 0, change, duration, std::bind(&ShowInstallInfoTextEdit::slideGesture, this, std::placeholders::_1)); + } + m_gestureAction = GA_null; + } + + int i = m_end - m_start; + if (Qt::MouseEventSynthesizedByQt == e->source() + && (i > 10 && this->verticalScrollBar()->value() != 0)) { + e->accept(); + return; + } + return QTextEdit::mouseReleaseEvent(e); +} + +/** + * @brief ShowInstallInfoTextEdit::mouseMoveEvent 鼠标移动事件 + * @param e + */ +void ShowInstallInfoTextEdit::mouseMoveEvent(QMouseEvent *e) +{ + if (Qt::MouseEventSynthesizedByQt == e->source()) { + m_end = e->y(); + } + + //单指滑动 + if (e->type() == QEvent::MouseMove && e->source() == Qt::MouseEventSynthesizedByQt) { + const ulong diffTime = e->timestamp() - m_lastMouseTime; + const int diffpos = e->pos().y() - m_lastMousepos; + m_lastMouseTime = e->timestamp(); + m_lastMousepos = e->pos().y(); + + if (m_gestureAction == GA_slide) { + QFont font = this->font(); + + /*开根号时数值越大衰减比例越大*/ + qreal direction = diffpos < 0 ? 1.0 : -1.0; + slideGesture(-direction * sqrt(abs(diffpos)) / font.pointSize()); + + /*预算惯性滑动时间*/ + m_stepSpeed = static_cast(diffpos) / static_cast(diffTime + 0.000001); + duration = sqrt(abs(m_stepSpeed)) * 1000; + + /*预算惯性滑动距离,4.0为调优数值*/ + m_stepSpeed /= sqrt(font.pointSize() * 4.0); + change = m_stepSpeed * sqrt(abs(m_stepSpeed)) * 100; + + // fix bug: https://pms.uniontech.com/zentao/bug-view-55665.html + // 如果放到外面会屏蔽掉选中 + return; //此时屏蔽其他触控效果 + + } + } + QTextEdit::mouseMoveEvent(e); +} + +/** + * @brief FlashTween::FlashTween 惯性滑动 + */ +FlashTween::FlashTween() +{ + m_timer = new QTimer(this); + connect(m_timer, &QTimer::timeout, this, &FlashTween::__run); +} + +/** + * @brief FlashTween::start 开始滑动 + * @param t + * @param b + * @param c + * @param d + * @param f + */ +void FlashTween::start(qreal t, qreal b, qreal c, qreal d, FunSlideInertial f) +{ + if (c == 0.0 || d == 0.0) return; + m_currentTime = t; + m_beginValue = b; + m_changeValue = c; + m_durationTime = d; + + m_lastValue = 0; + m_fSlideGesture = f; + m_direction = m_changeValue > 0 ? 1 : -1; + + m_timer->stop(); + m_timer->start(CELL_TIME); +} + +/** + * @brief FlashTween::__run 触发滑动 + */ +void FlashTween::__run() +{ + qreal tempValue = m_lastValue; + m_lastValue = FlashTween::sinusoidalEaseOut(m_currentTime, m_beginValue, abs(m_changeValue), m_durationTime); + m_fSlideGesture(m_direction * (m_lastValue - tempValue)); + + if (m_currentTime < m_durationTime) { + m_currentTime += CELL_TIME; + } else { + m_timer->stop(); + } +} + diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/ShowInstallInfoTextEdit.h deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/ShowInstallInfoTextEdit.h --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/ShowInstallInfoTextEdit.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/ShowInstallInfoTextEdit.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,221 @@ +/* +* Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd +* +* Author: cuizhen +* Maintainer: cuizhen +* 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 SHOWINSTALLINFOTEXTEDIT_H +#define SHOWINSTALLINFOTEXTEDIT_H +#include +#include +#include +#include +#include + +#define CELL_TIME 15 +#define TAP_MOVE_DELAY 300 +// Tween算法(模拟惯性) +typedef std::function FunSlideInertial; +class FlashTween : public QObject +{ + Q_OBJECT +public: + FlashTween(); + ~FlashTween() {} + +public: + void start(qreal t, qreal b, qreal c, qreal d, FunSlideInertial fSlideGesture); + void stop() {m_timer->stop();} + bool active() {return m_timer->isActive();} + +private slots: + void __run(); + +private: + QTimer *m_timer = nullptr; + FunSlideInertial m_fSlideGesture = nullptr; + + //纵向单指惯性滑动 + qreal m_currentTime = 0; + qreal m_beginValue = 0; + qreal m_changeValue = 0; + qreal m_durationTime = 0; + qreal m_direction = 1; + qreal m_lastValue = 0; + + +private: + /** + 链接:https://www.cnblogs.com/cloudgamer/archive/2009/01/06/Tween.html + 效果说明 + Linear:无缓动效果; + Quadratic:二次方的缓动(t^2); + Cubic:三次方的缓动(t^3); + Quartic:四次方的缓动(t^4); + Quintic:五次方的缓动(t^5); + Sinusoidal:正弦曲线的缓动(sin(t)); + Exponential:指数曲线的缓动(2^t); + Circular:圆形曲线的缓动(sqrt(1-t^2)); + Elastic:指数衰减的正弦曲线缓动; + Back:超过范围的三次方缓动((s+1)*t^3 - s*t^2); + Bounce:指数衰减的反弹缓动。 + 每个效果都分三个缓动方式(方法),分别是: + easeIn:从0开始加速的缓动; + easeOut:减速到0的缓动; + easeInOut:前半段从0开始加速,后半段减速到0的缓动。 + 其中Linear是无缓动效果,没有以上效果。 + 四个参数分别是: + t: current time(当前时间); + b: beginning value(初始值); + c: change in value(变化量); + d: duration(持续时间)。 + */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsequence-point" + static qreal quadraticEaseOut(qreal t, qreal b, qreal c, qreal d) + { + return -c * (t /= d) * (t - 2) + b; + } + + static qreal cubicEaseOut(qreal t, qreal b, qreal c, qreal d) + { + return c * ((t = t / d - 1) * t * t + 1) + b; + } + + static qreal quarticEaseOut(qreal t, qreal b, qreal c, qreal d) + { + return -c * ((t = t / d - 1) * t * t * t - 1) + b; + } + + static qreal quinticEaseOut(qreal t, qreal b, qreal c, qreal d) + { + return c * ((t = t / d - 1) * t * t * t * t + 1) + b; + } + + static qreal sinusoidalEaseOut(qreal t, qreal b, qreal c, qreal d) + { + return c * sin(t / d * (3.14 / 2)) + b; + } + + static qreal circularEaseOut(qreal t, qreal b, qreal c, qreal d) + { + return c * sqrt(1 - (t = t / d - 1) * t) + b; + } + + static qreal bounceEaseOut(qreal t, qreal b, qreal c, qreal d) + { + if ((t /= d) < (1 / 2.75)) { + return c * (7.5625 * t * t) + b; + } else if (t < (2 / 2.75)) { + return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b; + } else if (t < (2.5 / 2.75)) { + return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b; + } else { + return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b; + } + } +#pragma GCC diagnostic pop +}; + + +/** + * @brief The ShowInstallInfoTextEdit class + * QTextEdit控件 修改部分触控事件 + */ +class ShowInstallInfoTextEdit : public QTextEdit +{ + Q_OBJECT +public: + explicit ShowInstallInfoTextEdit(QWidget *parent = nullptr); + + // QObject interface +public: + bool event(QEvent *event) override; + + // QWidget interface +protected: + void mouseReleaseEvent(QMouseEvent *event) override; + + // QWidget interface +protected: + void mouseMoveEvent(QMouseEvent *event) override; + +private: + /** + * @brief gestureEvent 手势事件 + * @param event + * @return + */ + bool gestureEvent(QGestureEvent *event); + + /** + * @brief tapGestureTriggered 单击手势事件 + */ + void tapGestureTriggered(QTapGesture *); + + /** + * @brief tapAndHoldGestureTriggered 单指长按事件 + */ + void tapAndHoldGestureTriggered(QTapAndHoldGesture *); + + + /** + * @brief slideGesture 单指滑动手势(通过原生触摸屏事件进行抽象模拟) + * @param diff + * add for single refers to the sliding + */ + void slideGesture(qreal diff); + + /** + * @brief onSelectionArea 滑动选中事件 + */ + void onSelectionArea(); + +private: + //触摸屏手势动作 + enum GestureAction { + GA_null, //无动作 + GA_tap, //点击 + GA_slide, //滑动 + GA_hold, //长按 + }; + + GestureAction m_gestureAction = GA_null; //手势动作 默认误动作 + + qint64 m_tapBeginTime = 0; //开始点击的时间 + + bool m_slideContinue {false}; //是否持续滑动 + + //add for single refers to the sliding + FlashTween tween; //滑动惯性 + + qreal change = {0.0}; //滑动变化量 + qreal duration = {0.0}; //滑动方向 + + //鼠标事件的位置 + int m_start = 0; //开始时鼠标的位置 + int m_end = 0; //结束时鼠标的位置 + qreal m_stepSpeed = 0; //移动的速度 + + int m_lastMousepos; //上次移动后鼠标的位置 + + ulong m_lastMouseTime; //上次移动鼠标的时间 + + int m_nSelectEndLine; //< 选择结束时后鼠标所在行 + int m_nSelectStart; //< 选择开始时的鼠标位置 + int m_nSelectEnd; //< 选择结束时的鼠标位置 + +}; + +#endif // SHOWINSTALLINFOTEXTEDIT_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/TitleBarFocusMonitor.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/TitleBarFocusMonitor.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/TitleBarFocusMonitor.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/TitleBarFocusMonitor.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,46 @@ +/* +* Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd +* +* Author: cuizhen +* Maintainer: cuizhen +* 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 "TitleBarFocusMonitor.h" + +TitleBarFocusMonitor::TitleBarFocusMonitor(QWidget *widget) +{ + m_pOptionWidget = widget; +} + +/** + * @brief TitleBarFocusMonitor::run 监测标题栏菜单键Focus 解决标题栏焦点闪现的问题 + */ +void TitleBarFocusMonitor::run() +{ + m_monitoring = true; + qDebug() << "TitleBarFocusMonitor:" << "Monitor option Widget"; + while (m_monitoring) { + if (m_pOptionWidget->hasFocus()) { + m_pOptionWidget->clearFocus(); + qDebug() << "TitleBarFocusMonitor:" << "clear Focus"; + } + } + qDebug() << "TitleBarFocusMonitor:" "stop monitor titlebar focus"; +} + +/** + * @brief TitleBarFocusMonitor::stopMonitor 停止监测焦点。 + */ +void TitleBarFocusMonitor::stopMonitor() +{ + m_monitoring = false; +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/TitleBarFocusMonitor.h deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/TitleBarFocusMonitor.h --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/TitleBarFocusMonitor.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/TitleBarFocusMonitor.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,51 @@ +/* +* Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd +* +* Author: cuizhen +* Maintainer: cuizhen +* 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 TITLEBARFOCUSMONITOR_H +#define TITLEBARFOCUSMONITOR_H + +#include +#include +#include + +/** + * @brief The TitleBarFocusMonitor class + * 监测焦点闪现问题 + * fix bug: https://pms.uniontech.com/zentao/bug-view-46813.html + * 传入的参数是 Titlebar中的菜单键。 + */ +class TitleBarFocusMonitor : public QThread +{ + Q_OBJECT +public: + TitleBarFocusMonitor(QWidget *widget); + /** + * @brief run 线程执行函数 + * 不断清除标题栏菜单键上的焦点,直到开始安装。 + */ + void run(); + + /** + * @brief stopMonitor 停止监测线程。调用此函数后,线程会停止不再监测标题栏菜单键 + */ + void stopMonitor(); + +private: + QWidget *m_pOptionWidget; //传入的标题栏菜单控件 + bool m_monitoring = true; //线程停止的操控标识 +}; + +#endif // TITLEBARFOCUSMONITOR_H diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/workerprogress.cpp deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/workerprogress.cpp --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/workerprogress.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/workerprogress.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,35 @@ +/* + * 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) + : DProgressBar(parent) +{ + // fix bug: https://pms.uniontech.com/zentao/bug-view-54140.html + // 进度条在为设置初始值时,值为-1 安装进度条前面一段显示为方头 + setValue(0); //设置初始进度为0 + setMinimum(0); + setMaximum(100); + setFixedHeight(8); + setFixedWidth(240); + setTextVisible(false); +} diff -Nru deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/workerprogress.h deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/workerprogress.h --- deepin-deb-installer-5.0.0/src/deb_installer/view/widgets/workerprogress.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/src/deb_installer/view/widgets/workerprogress.h 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,39 @@ +/* + * 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 "coloredprogressbar.h" + +#include +#include + +DWIDGET_USE_NAMESPACE + +class WorkerProgress : public DProgressBar { + Q_OBJECT + +public: + explicit WorkerProgress(QWidget *parent = nullptr); +}; + +#endif // WORKERPROGRESS_H diff -Nru deepin-deb-installer-5.0.0/test/CMakeLists.txt deepin-deb-installer-5.7.0.17/test/CMakeLists.txt --- deepin-deb-installer-5.0.0/test/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/test/CMakeLists.txt 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,149 @@ + +cmake_minimum_required(VERSION 3.7) +if (NOT DEFINED VERSION) + message(WARNING "Not defined version ,about dialog version set 5.3.9") + set(VERSION 5.3.9) +endif () + +find_package(GTest REQUIRED) +include_directories(${GTEST_INCLUDE_DIRS}) +#common resource names +set(APP_RES_DIR "${CMAKE_SOURCE_DIR}/assets") +set(APP_BIN_NAME_TEST "deepin-deb-installer-test") +set(APP_TRANS_SCRIPT "${APP_RES_DIR}/translate_generation.sh") +set(APP_DESKTOP "${APP_RES_DIR}/deepin-deb-installer.desktop") +set(APP_QRC "${APP_RES_DIR}/resources.qrc") + +project(${APP_BIN_NAME_TEST}) + + +ADD_COMPILE_OPTIONS(-fno-access-control) +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") +set(CMAKE_CXX_FLAGS "-Wl,--as-need -fPIE") +set(CMAKE_EXE_LINKER_FLAGS "-pie") +set(CMAKE_CXX_FLAGS "-g -fprofile-arcs -ftest-coverage") + +if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "sw_64") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mieee") +endif () + +#compile flags +if (CMAKE_BUILD_TYPE MATCHES Debug) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -Wextra") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra") + + # Enable Qt builtin debug mode + add_definitions("-DQT_MESSAGELOGCONTEXT") +else() + # -Wl, -O2 Enable linker optimizations + # -Wl, --gc-sections Remove unused code resulting from -fdsta-sections and + # -ffunction-sections + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2 -Wl,-O1 -Wl,--gc-sections") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2 -Wl,-O1 -Wl,--gc-sections") +endif() + + + +#Generate the qm file +execute_process(COMMAND bash ${APP_TRANS_SCRIPT} + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/") + +configure_file(${APP_RES_DIR}/environments.h.in environments.h @ONLY) + +add_definitions(-DUSE_POLKIT -DENABLE_INACTIVE_DISPLAY) +# Find the library + +find_package(PkgConfig REQUIRED) +find_package(Qt5Widgets REQUIRED) +find_package(Qt5Gui REQUIRED) +find_package(Qt5Core REQUIRED) +find_package(Qt5LinguistTools REQUIRED) +find_package(Qt5Concurrent REQUIRED) +find_package(DtkWidget REQUIRED) +find_package(DtkGui REQUIRED) +find_package(DtkCore REQUIRED) +find_package(Qt5DBus REQUIRED) +set(LINK_LIBS + Qt5::Core + Qt5::Widgets + Qt5::Gui + Qt5::DBus + QApt + Qt5::Concurrent + ${DtkWidget_LIBRARIES} + ${DtkCore_LIBRARIES} + ${DtkGUI_LIBRARIES} +) + +macro(SUBDIRLIST result curdir) + file(GLOB children RELATIVE ${curdir} ${curdir}/*) + set(dirlist "") + foreach(child ${children}) + if(IS_DIRECTORY ${curdir}/${child}) + LIST(APPEND dirlist ${child}) + endif() + endforeach() + set(${result} ${dirlist}) +endmacro() + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../src/deb_installer/) + +SUBDIRLIST(all_src ${CMAKE_CURRENT_SOURCE_DIR}/../src/deb_installer/) + +#Include all app own subdirectorys +foreach(subdir ${all_src}) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}${subdir}) +endforeach() + +file(GLOB_RECURSE APP_SRCS + ${CMAKE_CURRENT_LIST_DIR}/../src/deb_installer/singleInstallerApplication.cpp + ${CMAKE_CURRENT_LIST_DIR}/../src/deb_installer/manager/*.cpp + ${CMAKE_CURRENT_LIST_DIR}/../src/deb_installer/model/*.cpp + ${CMAKE_CURRENT_LIST_DIR}/../src/deb_installer/utils/*.cpp + ${CMAKE_CURRENT_LIST_DIR}/../src/deb_installer/view/pages/*.cpp + ${CMAKE_CURRENT_LIST_DIR}/../src/deb_installer/view/widgets/*.cpp + ) +FILE(GLOB allTestSource + src/*.cpp +) +include_directories(src) +include_directories( ${CMAKE_CURRENT_LIST_DIR}/../src/deb_installer/) +include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) + +# Tell CMake to create the executable +add_executable(${APP_BIN_NAME_TEST} ${APP_SRCS} ${APP_QRC} ${TEST_ACCESSIBLE_HEADERS_FILES} ${allTestSource} ) + +target_include_directories(${APP_BIN_NAME_TEST} + PUBLIC ${DtkWidget_INCLUDE_DIRS} ${OBJECT_BINARY_DIR}) + + +target_link_libraries(${APP_BIN_NAME_TEST} + Qt5::Core + Qt5::Widgets + Qt5::Gui + Qt5::DBus + QApt + Qt5::Concurrent + ${DtkWidget_LIBRARIES} + ${DtkCore_LIBRARIES} + ${DtkGUI_LIBRARIES} + ${GTEST_LIBRARIES} + ${GTEST_MAIN_LIBRARIES} + pthread +) +set(CMAKE_INSTALL_PREFIX /usr) + +## Install files +install(TARGETS deepin-deb-installer DESTINATION bin) + +file(GLOB APP_QM_FILES "${CMAKE_SOURCE_DIR}/translations/*.qm") +install(FILES ${APP_QM_FILES} DESTINATION share/deepin-deb-installer/translations) +install(FILES ${APP_DESKTOP} DESTINATION share/applications) +install(FILES ${APP_CONFIG} DESTINATION share/deepin-deb-installer) +install(FILES ${CMAKE_SOURCE_DIR}/assets/com.deepin.pkexec.aptInstallDepend.policy + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/polkit-1/actions) diff -Nru deepin-deb-installer-5.0.0/test/src/test_main.cpp deepin-deb-installer-5.7.0.17/test/src/test_main.cpp --- deepin-deb-installer-5.0.0/test/src/test_main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/test/src/test_main.cpp 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,35 @@ +/* +* Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. +* +* Author: tenghuan +* +* Maintainer: tenghuan +* +* 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 +using namespace std; + +#include +#include "gtest/gtest.h" +#include +// gtest的入口函数 +int main(int argc, char **argv) { + qputenv("QT_QPA_PLATFORM","offscreen"); + QApplication a(argc,argv); + ::testing::InitGoogleTest(&argc, argv); + auto c= RUN_ALL_TESTS(); + //Q_UNUSED(c); + return c; +} diff -Nru deepin-deb-installer-5.0.0/test/test-prj-running.sh deepin-deb-installer-5.7.0.17/test/test-prj-running.sh --- deepin-deb-installer-5.0.0/test/test-prj-running.sh 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/test/test-prj-running.sh 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,21 @@ + +#!/bin/bash +workdir=../../build-deepin-deb-installer-unknown-Debug/test #编译路径 +executable=deepin-deb-installer-test #可执行程序的文件名 +build_dir=$workdir +cd $build_dir +result_coverage_dir=coverage +result_report_dir=`pwd`/report/report.xml +#下面是覆盖率目录操作,一种正向操作,一种逆向操作 +extract_info="*/application/*" #针对当前目录进行覆盖率操作 +./$executable --gtest_output=xml:$result_report_dir + +lcov --directory `pwd` --capture --output-file coverage.info +# #3.过滤一些我们不感兴趣的文件的覆盖率信息 +lcov --remove coverage.info '*/deepin-deb-installer-test_autogen/*' '*/deepin-deb-installer-test_autogen/*' '*/usr/include/*' '*/dbuslogin1manager*' '*/tests/*' '*/googletest/*' '*/3rdparty/*' '*/test/*' '*/accessible.h' '*/accessibledefine.h' -o coverage.info +genhtml -o $result_coverage_dir coverage.info +nohup x-www-browser `pwd`/$result_coverage_dir/index.html & +nohup x-www-browser $result_report_dir & + +lcov -d `pwd` –z +exit 0 diff -Nru deepin-deb-installer-5.0.0/translate_generation.sh deepin-deb-installer-5.7.0.17/translate_generation.sh --- deepin-deb-installer-5.0.0/translate_generation.sh 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translate_generation.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -#!/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 diff -Nru deepin-deb-installer-5.0.0/translate_ts2desktop.sh deepin-deb-installer-5.7.0.17/translate_ts2desktop.sh --- deepin-deb-installer-5.0.0/translate_ts2desktop.sh 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translate_ts2desktop.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -#!/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 diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_am_ET.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_am_ET.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_am_ET.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_am_ET.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,38 @@ - + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + እሺ + + DebInstaller - - Dark theme - + + Package Installer + - - Deepin Package Manager - ዲፕኢን የ ጥቅል አስተዳዳሪ + + The deb package may be broken + - + + Already Added + + + + Bulk Install መግጠሚያ @@ -20,33 +40,61 @@ DebListModel - + + Installation failed, please check your network connection መግጠም አልተቻለም: እባክዎን የ ኔትዎርክ ግንኙነት ይመርምሩ - - Installation failed, please check updates in Control Center - መግጠም አልተቻለም: እባክዎን ማሻሻያውን በ መቆጣጠሪያ ማእከል ውስጥ ይመርምሩ + + Installation failed, please check for updates in Control Center + - + + + Installation failed, insufficient disk space መግጠም አልተቻለም: በቂ ነፃ የ ዲስክ ቦታ የለም - + Installation Failed መግጠሙ አልተሳካም - - - Broken Dependencies: %1 - የ ተሰበሩ ጥገኞች: %1 + + Failed to install %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + እሺ + + + + + Broken dependencies: %1 + - + + Authentication failed + + + + Unmatched package architecture የ ማይመሳሰል ጥቅል ግንባታ @@ -54,12 +102,12 @@ FileChooseWidget - - Drag and drop file here - ፋይል ይጎቱ እና እዚህ ይጣሉ + + Drag deb packages here + - + Select File ፋይል ይምረጡ @@ -67,177 +115,245 @@ MultipleInstallPage - + Collapse ማሳነሻ - - Display details - ዝርዝር ማሳያ + + Show details + - + Install መግጠሚያ - + Done - + - + Back ወደ ኋላ + + + Installing dependencies: %1 + + PackagesListDelegate - + Installing በ መግጠም ላይ - + Installed ተገጥሟል - + Failed ወድቋል - + + Waiting + + + + Same version installed ተመሳሳይ እትም ተገጥሟል - - Other version installed: %1 - ሌላ እትም ተገጥሟል: %1 + + Later version installed: %1 + + + + + Earlier version installed: %1 + - SingleInstallPage + PackagesListView + + + Delete + + + + + QApplication - + Collapse ማሳነሻ + + + SingleInstallPage - - Display details - ዝርዝር ማሳያ + + Collapse + ማሳነሻ - + Install መግጠሚያ - + Remove ማስወገጃ - + Reinstall እንደገና መግጠሚያ - + OK እሺ - + Back ወደ ኋላ - + Done - + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + - + Version: እትም: - + Installed successfully ተሳክቶ ተገጥሟል - + Uninstalled successfully ተሳክቶ ጠፍቷል - - Other version installed: %1 - ሌላ እትም ተገጥሟል: %1 - - - + + Uninstall Failed ማጥፋት አልተቻለም - + Name: ስም: - + Same version installed ተመሳሳይ እትም ተገጥሟል - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - የ ተዛመደ ጥቅል መግጠሚያ + + + + Show details + + + + SingleInstallPage_Uninstall - + + + Show details + + + + + UninstallConfirmPage + + Collapse ማሳነሻ - + + Show related packages + + + + Cancel መሰረዣ - + Confirm ማረጋገጫ - + Are you sure you want to uninstall %1? All dependencies will also be removed - + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + main - - Deepin Package Manager - ዲፕኢን የ ጥቅል አስተዳዳሪ + + + Package Installer + - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - + + Package Installer helps users install and remove local packages, and supports bulk installation. + - \ No newline at end of file + diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ar.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_ar.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ar.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_ar.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + + + + + OK + حسناً + + + DebInstaller - - Dark theme + + Package Installer + مثبّت الحزم + + + + The deb package may be broken - - Deepin Package Manager - مدير حزم ديبين + + Already Added + تم إضافته مسبقاً - + Bulk Install تثبيت جماعي @@ -20,33 +38,61 @@ DebListModel - + + Installation failed, please check your network connection تعذر التثبيت، يرجى التحقق من الاتصال بالشبكة - - Installation failed, please check updates in Control Center + + Installation failed, please check for updates in Control Center تعذر التثبيت، يرجى التحقق من التحديثات في مركز التحكم - + + + Installation failed, insufficient disk space تعذر التثبيت، مساحة القرص غير كافية - + Installation Failed تعذر التثبيت - - - Broken Dependencies: %1 + + Failed to install %1 + + + + + Unable to install + غير قادر على التثبيت + + + + This package does not have a valid digital signature + + + + + OK + حسناً + + + + + Broken dependencies: %1 الاعتماديات المعطوبة : %1 - + + Authentication failed + + + + Unmatched package architecture معمارية الحزمة غير مطابقة @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - قم بسحب وإفلات الملف هنا + + Drag deb packages here + اسحب حزم deb وأسقطها هنا - + Select File تحديد ملف @@ -67,177 +113,246 @@ MultipleInstallPage - + Collapse طي - - Display details - عرض التفاصيل + + Show details + إظهار التفاصيل - + Install تثبيت - + Done تم - + Back رجوع + + + Installing dependencies: %1 + + PackagesListDelegate - + Installing يتم التثبيت - + Installed مثبت - + Failed فشل - + + Waiting + جاي الإنتظار + + + Same version installed الإصدار نفسه مثبت - - Other version installed: %1 - إصدار آخر مثبت : %1 + + Later version installed: %1 + + + + + Earlier version installed: %1 + - SingleInstallPage + PackagesListView + + + Delete + حذف + + + + QApplication - + Collapse طي + + + SingleInstallPage - - Display details - عرض التفاصيل + + Collapse + طي - + Install تثبيت - + Remove إزالة - + Reinstall إعادة التثبيت - + OK - موافق + حسناً - + Back رجوع - + Done تم - + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + Version: الإصدار : - + Installed successfully تم التثبيت بنجاح - + Uninstalled successfully تم إلغاء التثبيت بنجاح - - Other version installed: %1 - إصدار آخر مثبت : %1 - - - + + Uninstall Failed فشل إزالة التثبيت - + Name: الاسم: - + Same version installed الإصدار نفسه مثبت - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - عرض الحزم المتعلقة + + + + Show details + إظهار التفاصيل + + + SingleInstallPage_Uninstall + + + + Show details + إظهار التفاصيل + + + + UninstallConfirmPage - + Collapse طي - + + Show related packages + عرض الحزم المرتبطة + + + Cancel إلغاء - + Confirm تأكيد - + Are you sure you want to uninstall %1? All dependencies will also be removed - + هل أنت متأكد من إزالة %1؟ +ستزال جميع الملحقات معه + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + هل أنت متأكد من إزالة تثبيت %1؟ ربما لا يعمل النظام والتطبيقات الأخرى بشكل جيد main - - Deepin Package Manager - مدير حزم ديبين + + + Package Installer + مثبّت الحزم - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - + + Package Installer helps users install and remove local packages, and supports bulk installation. + مثبت الحزم: يساعد المستخدمين على تثبيت وإزالة الحزم المحلية، ويدعم أيضاً الثبيت الجماعي للحزم. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ast.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_ast.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ast.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_ast.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,38 @@ - + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + Aceutar + + DebInstaller - - Dark theme - + + Package Installer + + + + + The deb package may be broken + - - Deepin Package Manager - Xestor Deepin de paquetes + + Already Added + - + Bulk Install Instalación masiva @@ -20,33 +40,61 @@ 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, please check for updates in Control Center + - + + + 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 + + Failed to install %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + - + + OK + Aceutar + + + + + Broken dependencies: %1 + + + + + Authentication failed + + + + Unmatched package architecture Arquitectura de paquete que nun concasa @@ -54,12 +102,12 @@ FileChooseWidget - - Drag and drop file here - Arrastra y suelta'l ficheru equí + + Drag deb packages here + - + Select File Esbillar ficheru @@ -67,177 +115,245 @@ MultipleInstallPage - + Collapse Contrayer - - Display details - Amosar detalles + + Show details + - + Install Instalar - + Done Fecho - + Back Atrás + + + Installing dependencies: %1 + + PackagesListDelegate - + Installing Instalando - + Installed Instalóse - + Failed Falló - + + Waiting + + + + Same version installed Instalada la mesma versión - - Other version installed: %1 - Instalada otra versión: %1 + + Later version installed: %1 + + + + + Earlier version installed: %1 + Instalóse una versión anterior: %1 - SingleInstallPage + PackagesListView - + + Delete + + + + + QApplication + + Collapse Contrayer + + + SingleInstallPage - - Display details - Amosar detalles + + Collapse + Contrayer - + Install Instalar - + Remove Desaniciar - + Reinstall Reinstalar - + OK Aceutar - + Back Atrás - + Done Fecho - + + Later version installed: %1 + + + + + Earlier version installed: %1 + Instalóse una versión anterior: %1 + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + 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 + Instalada la mesma versión - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - Amosar los paquetes venceyaos + + + + Show details + + + + SingleInstallPage_Uninstall - + + + Show details + + + + + UninstallConfirmPage + + Collapse Contrayer - + + Show related packages + + + + Cancel Encaboxar - + Confirm Confirmar - + Are you sure you want to uninstall %1? All dependencies will also be removed - + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + main - - Deepin Package Manager - Xestor Deepin de paquetes + + + Package Installer + - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - + + Package Installer helps users install and remove local packages, and supports bulk installation. + - \ No newline at end of file + diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_bg.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_bg.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_bg.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_bg.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,38 @@ - + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + ОК + + DebInstaller - - Dark theme - + + Package Installer + - - Deepin Package Manager - Deepin Мениджър на пакети + + The deb package may be broken + - + + Already Added + + + + Bulk Install Групова инсталация @@ -20,33 +40,61 @@ DebListModel - + + Installation failed, please check your network connection Инсталацията е неуспешна, моля, проверете вашата връзка към мрежата - - Installation failed, please check updates in Control Center - Инсталацията е неуспешна, моля, проверете за обновление в контролния център + + Installation failed, please check for updates in Control Center + - + + + Installation failed, insufficient disk space Инсталацията е неуспешна, няма достатъчно място на диска - + Installation Failed Инсталацията е неуспешна - - - Broken Dependencies: %1 - Счупени зависимости: %1 + + Failed to install %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + ОК + + + + + Broken dependencies: %1 + - + + Authentication failed + + + + Unmatched package architecture Неподходяща архитектура на пакета @@ -54,12 +102,12 @@ FileChooseWidget - - Drag and drop file here - Издърпайте и поставете файла тук + + Drag deb packages here + - + Select File Избор на файл @@ -67,177 +115,246 @@ MultipleInstallPage - + Collapse Сриване - - Display details - Показване на подробности + + Show details + - + Install Инсталиране - + Done Завършено - + Back Назад + + + Installing dependencies: %1 + + PackagesListDelegate - + Installing Инсталиране - + Installed Инсталирано - + Failed Неуспешно - + + Waiting + + + + Same version installed Същата версия е инсталирана - - Other version installed: %1 - Инсталирана е друга версия: %1 + + Later version installed: %1 + + + + + Earlier version installed: %1 + - SingleInstallPage + PackagesListView + + + Delete + + + + + QApplication - + Collapse Сриване + + + SingleInstallPage - - Display details - Показване на подробности + + Collapse + Сриване - + Install Инсталиране - + Remove Премахване - + Reinstall Преинсталиране - + OK ОК - + Back Назад - + Done Завършено - + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + Version: Версия: - + Installed successfully Инсталирането е успешно - + Uninstalled successfully Деинсталирането е успешно - - Other version installed: %1 - Инсталирана е друга версия: %1 - - - + + Uninstall Failed Деинсталирането е неуспешно - + Name: Име: - + Same version installed Същата версия е инсталирана - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - Покажи свързаните пакети + + + + Show details + + + + SingleInstallPage_Uninstall - + + + Show details + + + + + UninstallConfirmPage + + Collapse Сриване - + + Show related packages + + + + Cancel Отказ - + Confirm Потвърждение - + Are you sure you want to uninstall %1? All dependencies will also be removed - + Сигурен ли сте, че искате да деинсталирате %1? +Всички зависимости също ще бъдат премахнати + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + main - - Deepin Package Manager - Deepin Инсталатор на пакети + + + Package Installer + - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - + + Package Installer helps users install and remove local packages, and supports bulk installation. + - \ No newline at end of file + diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_br.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_br.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_br.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_br.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,359 @@ + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + Mat eo + + + + DebInstaller + + + Package Installer + Stalier pakadoù + + + + The deb package may be broken + + + + + Already Added + Ouzhpennet endeo + + + + Bulk Install + Lies-staliañ + + + + DebListModel + + + + Installation failed, please check your network connection + Staliadur c'hwitet, gwirit ho kevreadenn ouzh ar genrouedad eta + + + + Installation failed, please check for updates in Control Center + Staliadur c'hwitet, sellit hag-eñ n'eus hizivadur ebet er Greizenn Verañ + + + + + + Installation failed, insufficient disk space + Staliadur c'hwitet, n'eus ket trawalc'h a blas war an disk + + + + Installation Failed + Staliadur c'hwitet + + + + Failed to install %1 + + + + + Unable to install + N'heller ket distaliañ + + + + This package does not have a valid digital signature + N'eus ket ur sinadur niverel dereat gant ar pakad-mañ + + + + OK + Mat eo + + + + + Broken dependencies: %1 + Dalc'hoù torret: %1 + + + + Authentication failed + + + + + Unmatched package architecture + Arkitektouriezh ar pakadoù disheñvel + + + + FileChooseWidget + + + Drag deb packages here + Rinklit ho pakadoù deb amañ + + + + Select File + Diuzañ ur restr + + + + MultipleInstallPage + + + Collapse + Bihanaat + + + + Show details + Diskouez ar munudoù + + + + Install + Staliañ + + + + Done + Echuet + + + + Back + Kent + + + + Installing dependencies: %1 + O staliañ an dalc'hioù: %1 + + + + PackagesListDelegate + + + Installing + O staliañ + + + + Installed + Staliet + + + + Failed + C'hwitadenn + + + + Waiting + O c'hortoz + + + + Same version installed + Hevelep stumm staliet + + + + Later version installed: %1 + Stumm war-lerc'h staliet: %1 + + + + Earlier version installed: %1 + Stumm kent staliet: %1 + + + + PackagesListView + + + Delete + Dilemel + + + + QApplication + + + Collapse + Bihanaat + + + + SingleInstallPage + + + Collapse + Bihanaat + + + + Install + Staliañ + + + + Remove + Dilemel + + + + Reinstall + Adstaliañ + + + + OK + Mat eo + + + + Back + Kent + + + + Done + Echuet + + + + Later version installed: %1 + Stumm war-lerc'h staliet: %1 + + + + Earlier version installed: %1 + Stumm kent staliet: %1 + + + + Installing dependencies: %1 + O staliañ an dalc'hioù: %1 + + + + Failed to install %1 + + + + + Version: + Stumm: + + + + Installed successfully + Staliet gant berzh + + + + Uninstalled successfully + Distaliet gant berzh + + + + + Uninstall Failed + Distaliañ c'hwitet + + + + Name: + Anv: + + + + Same version installed + Hevelep stumm staliet + + + + SingleInstallPage_Install + + + + + Show details + Diskouez ar munudoù + + + + SingleInstallPage_Uninstall + + + + Show details + Diskouez ar munudoù + + + + UninstallConfirmPage + + + Collapse + Bihanaat + + + + Show related packages + Diskouez ar pakadoù kevelet + + + + Cancel + Nullañ + + + + Confirm + Kadarnat + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + Ha sur oc'h da gaout c'hoant da zilemel %1? +An holl dalc'hioù a vo dilamet ivez + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Ha c'hoant ho peus da zilemel %1? +Ar sistem pe aplikasionoù all a vo diaes dezho mont en-dro mat + + + + main + + + + Package Installer + Stalier pakadoù + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Ar stalier pakadoù a sikour an implijaderien da staliañ ha da zilemel ar pakadoù lec'hel, hag e kemer e kont ar staliadur a-vloc'had. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ca.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_ca.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ca.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_ca.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + Escriviu el número per a la configuració: + + + + OK + D'acord + + + DebInstaller - - Dark theme - Tema fosc + + Package Installer + Instal·lador de paquets - - Deepin Package Manager - Gestor de paquets del Deepin + + The deb package may be broken + El paquet deb potser està trencat. - + + Already Added + Ja s'ha afegit + + + Bulk Install Instal·lació massiva @@ -20,33 +38,61 @@ 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, please check for updates in Control Center + La instal·lació ha fallat, comproveu si hi ha 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 + + Failed to install %1 + Ha fallat instal·lar %1 + + + + Unable to install + No es pot instal·lar + + + + This package does not have a valid digital signature + Aquest paquet no té una signatura digital vàlida. + + + + OK + D'acord + + + + + Broken dependencies: %1 Dependències trencades: %1 - + + Authentication failed + Ha fallat l'autenticació. + + + Unmatched package architecture L'arquitectura del paquet no coincideix. @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Arrossegeu el fitxer i deixeu-lo anar aquí. + + Drag deb packages here + Arrossegueu paquets deb aquí. - + Select File Selecciona el fitxer @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse Replega - - Display details + + Show details Mostra'n els detalls - + Install Instal·la - + Done Fet - + Back Enrere + + + Installing dependencies: %1 + S'instal·len dependències: %1 + PackagesListDelegate - + Installing S'instal·la - + Installed Instal·lat - + Failed Ha fallat - + + Waiting + S'espera + + + Same version installed N'hi ha instal·lada la mateixa versió. - - Other version installed: %1 - N'hi ha una altra versió instal·lada: %1 + + Later version installed: %1 + Darrera versió instal·lada: %1 + + + + Earlier version installed: %1 + Versió instal·lada abans: %1 - SingleInstallPage + PackagesListView + + + Delete + Elimina + + + + QApplication - + Collapse Replega + + + SingleInstallPage - - Display details - Mostra'n els detalls + + Collapse + Replega - + Install Instal·la - + Remove Elimina - + Reinstall Reinstal·la - + OK D'acord - + Back Enrere - + Done Fet - + + Later version installed: %1 + Darrera versió instal·lada: %1 + + + + Earlier version installed: %1 + Versió instal·lada abans: %1 + + + + Installing dependencies: %1 + S'instal·len dependències: %1 + + + + Failed to install %1 + Ha fallat instal·lar %1 + + + 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 + SingleInstallPage_Install - - Display related packages - Mostra els paquets que s'hi relacionen. + + + + Show details + Mostra'n els detalls + + + SingleInstallPage_Uninstall - + + + Show details + Mostra'n els detalls + + + + UninstallConfirmPage + + Collapse Replega - + + Show related packages + Mostra els paquets que s'hi relacionen. + + + 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. + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Segur que voleu desinstal·lar %1? +Pot ser que el sistema o altres aplicacions no funcionin correctament. + main - - Deepin Package Manager - Gestor de paquets del Deepin + + + Package Installer + Instal·lador de paquets - - 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. + + Package Installer helps users install and remove local packages, and supports bulk installation. + L'Instal·lador de paquets ajuda els usuaris a instal·lar i eliminar paquets locals i admet la instal·lació massiva. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_cs.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_cs.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_cs.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_cs.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + Zadejte číslo pro nastavení: + + + + OK + OK + + + DebInstaller - - Dark theme - Tmavý vzhled + + Package Installer + Instalátor balíčků - - Deepin Package Manager - Správce balíčků + + The deb package may be broken + Tento deb balíček může být poškozený - + + Already Added + Už přidáno + + + Bulk Install Hromadná instalace @@ -20,33 +38,61 @@ DebListModel - + + Installation failed, please check your network connection - Instalace selhala. Zkontrolujte, prosím, internetové připojení + Instalace se nezdařila. Zkontrolujte připojení k síti - - Installation failed, please check updates in Control Center - Instalace selhala. Zkontrolujte, prosím, v ovládacím středisku aktualizace + + Installation failed, please check for updates in Control Center + Instalace se nezdařila. Jděte do Ovládacích panelů a proveďte kontrolu aktualizací - + + + Installation failed, insufficient disk space - Instalace selhala. Na disku není dost místa + Instalace se nezdařila, protože na disku není dost místa - + Installation Failed - Instalace selhala + Instalace se nezdařila + + + + Failed to install %1 + Nepodařilo se nainstalovat %1 + + + + Unable to install + Nelze nainstalovat - - - Broken Dependencies: %1 - Rozbité závislosti: %1 + + This package does not have a valid digital signature + Tento balíček nemá platný digitální podpis - + + OK + OK + + + + + Broken dependencies: %1 + Nejsou k dispozici další balíčky, na kterých závisí: %1 + + + + Authentication failed + Ověření se nezdařilo + + + Unmatched package architecture Nehodící se architektura balíčku @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Táhněte soubor a upusťte jej zde + + Drag deb packages here + Sem přetáhněte DEB balíčky - + Select File Vybrat soubor @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse - Složit + Sbalit - - Display details + + Show details Zobrazit podrobnosti - + Install - Instalovat + Nainstalovat - + Done Hotovo - + Back Zpět + + + Installing dependencies: %1 + Instalují se součásti, na kterých závisí: %1 + PackagesListDelegate - + Installing Instaluje se - + Installed Nainstalováno - + Failed - Selhalo + Nezdařilo se + + + + Waiting + Čeká se - + Same version installed - Stejná verze již byla nainstalována + Stejná verze už je nainstalovaná + + + + Later version installed: %1 + Později nainstalovaná verze: %1 - - Other version installed: %1 - Je nainstalována jiná verze: %1 + + Earlier version installed: %1 + Dříve nainstalovaná verze: %1 - SingleInstallPage + PackagesListView + + + Delete + Smazat + + + + QApplication - + Collapse - Složit + Sbalit + + + SingleInstallPage - - Display details - Zobrazit podrobnosti + + Collapse + Sbalit - + Install - Instalovat + Nainstalovat - + Remove - Odstranit + Odebrat - + Reinstall - Nainstalovat znovu + Přeinstalovat - + OK OK - + Back Zpět - + Done Hotovo - + + Later version installed: %1 + Později nainstalovaná verze: %1 + + + + Earlier version installed: %1 + Dříve nainstalovaná verze: %1 + + + + Installing dependencies: %1 + Instalují se součásti, na kterých závisí: %1 + + + + Failed to install %1 + Nepodařilo se nainstalovat %1 + + + Version: Verze: - + Installed successfully - Nainstalováno úspěšně + Úspěšně nainstalováno - + Uninstalled successfully - Odinstalováno úspěšně - - - - Other version installed: %1 - Je nainstalována jiná verze: %1 + Úspěšně odinstalováno - + + Uninstall Failed - Odinstalování selhalo + Odinstalace se nezdařila - + Name: Název: - + Same version installed - Nainstalována ta samá verze + Stejná verze už je nainstalovaná - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - Zobrazit související balíčky + + + + Show details + Zobrazit podrobnosti + + + + SingleInstallPage_Uninstall + + + + Show details + Zobrazit podrobnosti + + + UninstallConfirmPage - + Collapse - Složit + Sbalit + + + + Show related packages + Zobrazit související balíčky - + 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 + Opravdu chcete %1? odinstalovat? +Budou odstraněny také všechny další balíčky, na kterých záviselo a které už nejsou jinak potřeba + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Opravdu chcete %1 odinstalovat? +Systém nebo ostatní aplikace by tím nemusely fungovat tak, jak mají main - - Deepin Package Manager - Správce balíčků + + + Package Installer + Instalátor 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. + + Package Installer helps users install and remove local packages, and supports bulk installation. + Instalátor balíčků slouží uživateli jako pomůcka pro instalaci a odebírání místních balíčků (tj. nepocházejících z repozitářů). Podporuje také hromadnou instalaci. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_da.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_da.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_da.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_da.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + + + + + OK + OK + + + DebInstaller - - Dark theme - Mørkt tema + + Package Installer + Pakkeinstallationsprogram - - Deepin Package Manager - Deepin pakkehåndtering + + The deb package may be broken + - + + Already Added + Allerede tilføjet + + + Bulk Install Masseinstallation @@ -20,33 +38,61 @@ 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, please check for updates in Control Center + Installation mislykkedes, tjek venligst efter opdateringer i kontrolcenter - + + + Installation failed, insufficient disk space Installation mislykkedes, utilstrækkelig diskplads - + Installation Failed Installation mislykkedes - - - Broken Dependencies: %1 + + Failed to install %1 + + + + + Unable to install + Kan ikke installere + + + + This package does not have a valid digital signature + + + + + OK + OK + + + + + Broken dependencies: %1 Ødelagte afhængigheder: %1 - + + Authentication failed + + + + Unmatched package architecture Ikke-matchet pakkearkitektur @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Træk-og-slip filer her + + Drag deb packages here + Træk deb-pakker her - + Select File Vælg fil @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse Sammenfold - - Display details + + Show details Vis detaljer - + Install Installer - + Done Færdig - + Back Tilbage + + + Installing dependencies: %1 + + PackagesListDelegate - + Installing Installerer - + Installed Installeret - + Failed Mislykkedes - + + Waiting + Venter + + + Same version installed Samme version installeret - - Other version installed: %1 - Anden version installeret: %1 + + Later version installed: %1 + + + + + Earlier version installed: %1 + Tidligere version installeret: %1 - SingleInstallPage + PackagesListView + + + Delete + Slet + + + + QApplication - + Collapse Sammenfold + + + SingleInstallPage - - Display details - Vis detaljer + + Collapse + Sammenfold - + Install Installer - + Remove Fjern - + Reinstall Geninstaller - + OK OK - + Back Tilbage - + Done Færdig - + + Later version installed: %1 + + + + + Earlier version installed: %1 + Tidligere version installeret: %1 + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + 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 + SingleInstallPage_Install - - Display related packages - Vis relaterede pakker + + + + Show details + Vis detaljer + + + + SingleInstallPage_Uninstall + + + + Show details + Vis detaljer + + + UninstallConfirmPage - + Collapse Sammenfold - + + Show related packages + Vis relaterede pakker + + + 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 + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Er du sikker på, at du vil afinstallere %1? +Systemet og andre programmer virker måske ikke korrekt + main - - Deepin Package Manager - Deepin pakkehåndtering + + + Package Installer + Pakkeinstallationsprogram - - 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. + + Package Installer helps users install and remove local packages, and supports bulk installation. + Pakkeinstallationsprogram hjælpe brugere med at installere og fjerne lokale pakker, med understøttelse af masseinstallation. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_de.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_de.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_de.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_de.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,65 +1,111 @@ + AptConfigMessage + + + Enter the number to configure: + + + + + OK + OK + + + DebInstaller - - Dark theme - Dunkles Thema + + Package Installer + Paket-Installationsprogramm - - Deepin Package Manager - Deepin Paketverwaltung + + The deb package may be broken + - + + Already Added + Bereits hinzugefügt + + + Bulk Install - Installation mit Stapelverarbeitung + Masseninstallation 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 failed, please check for 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 + + Failed to install %1 + + + + + Unable to install + Installation nicht möglich + + + + This package does not have a valid digital signature + Dieses Paket verfügt nicht über eine gültige digitale Signatur + + + + OK + OK + + + + + Broken dependencies: %1 Fehlende Abhängigkeiten: %1 - + + Authentication failed + + + + Unmatched package architecture - Falsche Paket-Architektur + Unpassende Paket-Architektur FileChooseWidget - - Drag and drop file here - Datei hier her ziehen und loslassen + + Drag deb packages here + deb-Pakete hierher ziehen - + Select File Datei auswählen @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse - Ausblenden + Einklappen - - Display details + + Show details Details anzeigen - + Install Installieren - + Done Fertig - + Back Zurück + + + Installing dependencies: %1 + Abhängigkeiten werden installiert: %1 + PackagesListDelegate - + Installing - Installiere + Wird installiert - + Installed Installiert - + Failed Fehlgeschlagen - + + Waiting + Warte + + + Same version installed - Gleiche Version bereits installiert + Gleiche Version installiert + + + + Later version installed: %1 + Neuere Version installiert: %1 - - Other version installed: %1 - Andere Version bereits installiert: %1 + + Earlier version installed: %1 + Ältere Version installiert: %1 - SingleInstallPage + PackagesListView + + + Delete + Löschen + + + + QApplication - + Collapse - Ausblenden + Einklappen + + + SingleInstallPage - - Display details - Details anzeigen + + Collapse + Einklappen - + Install Installieren - + Remove Entfernen - + Reinstall Neu installieren - + OK OK - + Back Zurück - + Done Fertig - + + Later version installed: %1 + Neuere Version installiert: %1 + + + + Earlier version installed: %1 + Ältere Version installiert: %1 + + + + Installing dependencies: %1 + Abhängigkeiten werden installiert: %1 + + + + Failed to install %1 + + + + 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 + SingleInstallPage_Install + + + + + Show details + Details anzeigen + + + + SingleInstallPage_Uninstall - - Display related packages - Dazugehörige Pakete anzeigen + + + Show details + Details anzeigen + + + UninstallConfirmPage - + Collapse - Ausblenden + Einklappen + + + + Show related packages + Zugehörige Pakete anzeigen - + 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 + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Sind Sie sicher, dass Sie %1 deinstallieren möchten? +Das System oder andere Anwendungen funktionieren dann möglicherweise nicht richtig + main - - Deepin Package Manager - Deepin Package Manager + + + Package Installer + Paket-Installationsprogramm - - 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. + + Package Installer helps users install and remove local packages, and supports bulk installation. + Das Paket-Installationsprogramm hilft Benutzern bei der Installation und Entfernung lokaler Pakete und unterstützt die Masseninstallation. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_en_AU.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_en_AU.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_en_AU.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_en_AU.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,38 @@ - + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + DebInstaller - - Dark theme - + + Package Installer + - - Deepin Package Manager - Deepin Package Manager + + The deb package may be broken + - + + Already Added + + + + Bulk Install Bulk Install @@ -20,224 +40,320 @@ 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, please check for updates in Control Center + - + + + Installation failed, insufficient disk space - + - + Installation Failed - + + + + + Failed to install %1 + - - - Broken Dependencies: %1 - + + Unable to install + - + + This package does not have a valid digital signature + + + + + OK + + + + + + Broken dependencies: %1 + + + + + Authentication failed + + + + Unmatched package architecture - + FileChooseWidget - - Drag and drop file here - + + Drag deb packages here + - + Select File - + MultipleInstallPage - + Collapse - + - - Display details - + + Show details + - + Install - + - + Done - + - + Back - + + + + + Installing dependencies: %1 + PackagesListDelegate - + Installing - + - + Installed - + - + Failed - + - + + Waiting + + + + Same version installed - + + + + + Later version installed: %1 + - - Other version installed: %1 - + + Earlier version installed: %1 + - SingleInstallPage + PackagesListView + + + Delete + + + + + QApplication - + Collapse - + + + + SingleInstallPage - - Display details - + + Collapse + - + Install - + - + Remove - + - + Reinstall - + - + OK - + - + Back - + - + Done - + + + + + Later version installed: %1 + - + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + Version: - + - + Installed successfully - + - + Uninstalled successfully - + - - Other version installed: %1 - - - - + + Uninstall Failed - + - + Name: - + - + Same version installed - + - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - + + + + Show details + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage - + Collapse - + + + + + Show related packages + - + Cancel - + - + Confirm - + - + Are you sure you want to uninstall %1? All dependencies will also be removed - + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + main - - Deepin Package Manager - + + + Package Installer + - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - + + Package Installer helps users install and remove local packages, and supports bulk installation. + - \ No newline at end of file + diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_en_US.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_en_US.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_en_US.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_en_US.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,359 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Uninstall Failed + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + main + + + + Package Installer + + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + + + + diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_es_419.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_es_419.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_es_419.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_es_419.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,243 +0,0 @@ - - - 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. - - - \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_es.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_es.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_es.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_es.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,52 +1,98 @@ + AptConfigMessage + + + Enter the number to configure: + Ingrese el número para configurar: + + + + OK + Aceptar + + + DebInstaller - - Dark theme - Tema oscuro + + Package Installer + Instalador de paquetes - - Deepin Package Manager - Gestor de paquetes Deepin + + The deb package may be broken + El paquete deb puede estar roto - + + Already Added + Ya agregado + + + Bulk Install - Instalación en lote + Instalación en masa DebListModel - + + Installation failed, please check your network connection - Error en la instalación, comprueba tu conexión de red + La instalación falló, compruebe su 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, please check for updates in Control Center + La instalación falló: compruebe las actualizaciones en el centro de control - + + + Installation failed, insufficient disk space - Error de instalación, espacio insuficiente en disco + La instalación falló, espacio insuficiente en disco - + Installation Failed - Instalación fallida + La instalación falló + + + + Failed to install %1 + La instalación de %1 falló + + + + Unable to install + Incapaz de instalar + + + + This package does not have a valid digital signature + Este paquete no tiene una firma digital válida + + + + OK + Aceptar - - - Broken Dependencies: %1 + + + Broken dependencies: %1 Dependencias rotas: %1 - + + Authentication failed + Autenticación fallida + + + Unmatched package architecture Difiere la arquitectura del paquete @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Arrastra y suelta aquí + + Drag deb packages here + Arrastre los paquetes deb aquí - + Select File Seleccionar archivo @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse - Colapso + Colapsar - - Display details + + Show details Mostrar detalles - + Install Instalar - + Done - Hecho + Finalizar - + Back Atrás + + + Installing dependencies: %1 + Instalando dependencias: %1 + PackagesListDelegate - + Installing Instalando - + Installed Instalado - + Failed Ha fallado - + + Waiting + Esperando + + + Same version installed - Misma versión instalada + La misma versión está instalada + + + + Later version installed: %1 + Una versión más nueva está instalada: %1 - - Other version installed: %1 - Otra versión instalada: %1 + + Earlier version installed: %1 + Una versión anterior está instalada: %1 - SingleInstallPage + PackagesListView + + + Delete + Borrar + + + + QApplication - + Collapse Colapsar + + + SingleInstallPage - - Display details - Mostrar detalles + + Collapse + Colapsar - + Install Instalar - + Remove - Remover + Quitar - + Reinstall Reinstalar - + OK Aceptar - + Back Atrás - + Done - Hecho + Finalizar + + + + Later version installed: %1 + Una versión más nueva está instalada: %1 - + + Earlier version installed: %1 + Una versión anterior está instalada: %1 + + + + Installing dependencies: %1 + Instalando dependencias: %1 + + + + Failed to install %1 + La instalación de %1 falló + + + 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 + La desinstalación falló - + Name: Nombre: - + Same version installed La misma versión está instalada - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - Mostrar paquetes relacionados + + + + Show details + Mostrar detalles + + + SingleInstallPage_Uninstall - + + + Show details + Mostrar detalles + + + + UninstallConfirmPage + + Collapse Colapsar - + + Show related packages + Mostrar paquetes relacionados + + + 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 + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + ¿Está seguro de que quiere desinstalar %1? +El sistema u otras aplicaciones tal vez no funcionen correctamente + main - - Deepin Package Manager - Gestor de paquetes Deepin + + + Package Installer + Instalador de paquetes - - 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. + + Package Installer helps users install and remove local packages, and supports bulk installation. + Instalador de paquetes de Deepin ayuda a instalar y eliminar paquetes locales, y admite instalación en masa. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_et.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_et.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_et.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_et.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,38 @@ - + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + OK + + DebInstaller - - Dark theme - + + Package Installer + - - Deepin Package Manager - Deepin pakihaldur + + The deb package may be broken + - + + Already Added + + + + Bulk Install Hulgi paigaldamine @@ -20,33 +40,61 @@ 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, please check for updates in Control Center + - + + + 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 + + Failed to install %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + OK + + + + + Broken dependencies: %1 + - + + Authentication failed + + + + Unmatched package architecture Sobimatu paki arhidektuur @@ -54,12 +102,12 @@ FileChooseWidget - - Drag and drop file here - Lohista failid siia + + Drag deb packages here + - + Select File Vali fail @@ -67,177 +115,245 @@ MultipleInstallPage - + Collapse Sulge - - Display details - Näita üksikasju + + Show details + - + Install Paigalda - + Done Valmis - + Back Tagasi + + + Installing dependencies: %1 + + PackagesListDelegate - + Installing Paigaldamine - + Installed Paigaldatud - + Failed Ebaõnnestus - + + Waiting + + + + Same version installed Sama versioon on juba paigaldatud - - Other version installed: %1 - Teine versioon on juba paigaldatud: %1 + + Later version installed: %1 + + + + + Earlier version installed: %1 + - SingleInstallPage + PackagesListView + + + Delete + + + + + QApplication - + Collapse Sulge + + + SingleInstallPage - - Display details - Näita üksikasju + + Collapse + Sulge - + Install Paigalda - + Remove Eemalda - + Reinstall Paigalda uuesti - + OK OK - + Back Tagasi - + Done Valmis - + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + 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 + SingleInstallPage_Install - - Display related packages - Näita seotud pakke + + + + Show details + + + + SingleInstallPage_Uninstall - + + + Show details + + + + + UninstallConfirmPage + + Collapse Sulge - + + Show related packages + + + + Cancel Loobu - + Confirm Kinnita - + Are you sure you want to uninstall %1? All dependencies will also be removed - + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + main - - Deepin Package Manager - Deepin pakihaldur + + + Package Installer + - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - + + Package Installer helps users install and remove local packages, and supports bulk installation. + - \ No newline at end of file + diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_fi.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_fi.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_fi.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_fi.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + Anna määritettävä numero: + + + + OK + OK + + + DebInstaller - - Dark theme - Tumma teema + + Package Installer + Asentaja - - Deepin Package Manager - Deepin paketinhallinta + + The deb package may be broken + Deb-paketti voi olla rikki - + + Already Added + Jo lisätty + + + Bulk Install Suora-asennus @@ -20,33 +38,61 @@ DebListModel - + + Installation failed, please check your network connection Asennus epäonnistui, tarkista verkkoyhteys - - Installation failed, please check updates in Control Center + + Installation failed, please check for 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 + + Failed to install %1 + Kohteen %1 asentaminen epäonnistui + + + + Unable to install + Ei voi asentaa + + + + This package does not have a valid digital signature + Tällä paketilla ei ole kelvollista digitaalista allekirjoitusta + + + + OK + OK + + + + + Broken dependencies: %1 Rikkoutuneet riippuvuudet: %1 - + + Authentication failed + Todennus epäonnistui + + + Unmatched package architecture Ei yhteensopiva pakettijärjestelmä @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Vedä ja pudota tiedosto tähän + + Drag deb packages here + Vedä deb-paketteja tänne - + Select File Valitse tiedosto @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse Pudotus - - Display details + + Show details Näytä tiedot - + Install Asenna - + Done Valmis - + Back Takaisin + + + Installing dependencies: %1 + Riippuvuuksien asentaminen: %1 + PackagesListDelegate - + Installing Asentaa - + Installed Asennettu - + Failed Epäonnistui - + + Waiting + Odotetaan + + + Same version installed Sama versio on asennettu - - Other version installed: %1 - Muut asennetut versiot: %1 + + Later version installed: %1 + Uudempi versio asennettu: %1 + + + + Earlier version installed: %1 + Aiempi versio asennettu: %1 - SingleInstallPage + PackagesListView + + + Delete + Poista + + + + QApplication - + Collapse Pudotus + + + SingleInstallPage - - Display details - Näytä tiedot + + Collapse + Pudotus - + Install Asenna - + Remove Poista - + Reinstall - asenna-uudestaan + Uudelleen - + OK OK - + Back Takaisin - + Done Valmis - + + Later version installed: %1 + Uudempi versio asennettu: %1 + + + + Earlier version installed: %1 + Aiempi versio asennettu: %1 + + + + Installing dependencies: %1 + Riippuvuuksien asentaminen: %1 + + + + Failed to install %1 + Kohteen %1 asentaminen epäonnistui + + + 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 + SingleInstallPage_Install - - Display related packages - Näytä liittyvät paketit + + + + Show details + Näytä tiedot + + + SingleInstallPage_Uninstall - + + + Show details + Näytä tiedot + + + + UninstallConfirmPage + + Collapse Pudotus - + + Show related packages + Näytä liittyvät paketit + + + 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 + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Haluatko varmasti poistaa %1? +Järjestelmä tai muut sovellukset eivät välttämättä toimi oikein + main - - Deepin Package Manager - Deepin paketinhallinta + + + Package Installer + Asentaja - - 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. + + Package Installer helps users install and remove local packages, and supports bulk installation. + Asentaja auttaa käyttäjiä asentamaan ja poistamaan ohjelmia. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_fr.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_fr.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_fr.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_fr.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + Entrer le numéro à configurer: + + + + OK + OK + + + DebInstaller - - Dark theme - Thème sombre + + Package Installer + Installateur de paquets - - Deepin Package Manager - Gestionnaire de paquets Deepin + + The deb package may be broken + Le paquet deb est peut-être cassé - + + Already Added + Déjà ajouté + + + Bulk Install Installation Multiple @@ -20,33 +38,61 @@ 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, please check for updates in Control Center + L'installation a échoué, 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 + + Failed to install %1 + Échec de l'installation de %1 + + + + Unable to install + Impossible d'installer + + + + This package does not have a valid digital signature + Ce paquet n'a pas de signature numérique valide + + + + OK + OK + + + + + Broken dependencies: %1 + Dépendances cassée: %1 + + + + Authentication failed + Authentification échouée - + Unmatched package architecture Architecture de paquet différente @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Glisser-déposer les fichiers ici + + Drag deb packages here + Faites glisser les paquets deb ici - + Select File Sélectionner un fichier @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse Réduire - - Display details + + Show details Afficher les détails - + Install Installer - + Done Terminé - + Back Précédent + + + Installing dependencies: %1 + Installation des dépendances: %1 + PackagesListDelegate - + Installing Installation - + Installed Installé - + Failed Échec - + + Waiting + En attente + + + Same version installed Version identique installée - - Other version installed: %1 - Autre version installée : %1 + + Later version installed: %1 + Version ultérieure installée: %1 + + + + Earlier version installed: %1 + Version antérieure installée: %1 - SingleInstallPage + PackagesListView + + + Delete + Supprimer + + + + QApplication - + Collapse Réduire + + + SingleInstallPage - - Display details - Afficher les détails + + Collapse + Réduire - + Install Installer - + Remove Supprimer - + Reinstall Réinstaller - + OK OK - + Back Précédent - + Done Terminé - + + Later version installed: %1 + Version ultérieure installée: %1 + + + + Earlier version installed: %1 + Version antérieure installée: %1 + + + + Installing dependencies: %1 + Installation des dépendances: %1 + + + + Failed to install %1 + Échec de l'installation de %1 + + + Version: - 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 : + Nom: - + Same version installed Version identique installée - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - Afficher les paquets associés + + + + Show details + Afficher les détails + + + + SingleInstallPage_Uninstall + + + + Show details + Afficher les détails + + + UninstallConfirmPage - + Collapse Réduire - + + Show related packages + Afficher les paquets associés + + + 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. + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Voulez-vous vraiment désinstaller %1? +Le système ou d'autres applications peuvent ne pas fonctionner correctement + main - - Deepin Package Manager - Gestionnaire de paquets Deepin + + + Package Installer + Installateur de paquets - - 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. + + Package Installer helps users install and remove local packages, and supports bulk installation. + L'installateur de paquets aide les utilisateurs à installer et à supprimer des paquets locaux, prend aussi en charge l'installation multiple. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_gl_ES.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_gl_ES.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_gl_ES.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_gl_ES.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + + + + + OK + Aceptar + + + DebInstaller - - Dark theme + + Package Installer + Instalador do paquete + + + + The deb package may be broken - - Deepin Package Manager - Xestor de paquetes + + Already Added + Xa se engadiu - + Bulk Install Instalar en bloque @@ -20,33 +38,61 @@ 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, please check for updates in Control Center + Fallo ao instalar, comprobe se hai 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 + + Failed to install %1 + Erro ao instalar %1 + + + + Unable to install + Activar a instalación + + + + This package does not have a valid digital signature + Este paquete non ten unha sinatura dixital válida + + + + OK + Aceptar - + + + Broken dependencies: %1 + Dependencias que non funcionan: %1 + + + + Authentication failed + + + + Unmatched package architecture A arquitectura do paquete non coincide @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Arrastrar ficheiros aquí + + Drag deb packages here + Arrastre paquetes deb aquí - + Select File Seleccionar ficheiro @@ -67,177 +113,247 @@ MultipleInstallPage - + Collapse - Contraer + Colapsou - - Display details + + Show details Amosar detalles - + Install Instalar - + Done Feito - + Back Volver + + + Installing dependencies: %1 + Instalando dependencias; %1 + PackagesListDelegate - + Installing Instalando - + Installed Instalado - + Failed Fallo - + + Waiting + Agardando + + + Same version installed Mesma versión instalada - - Other version installed: %1 - Outra versión instalada: %1 + + Later version installed: %1 + Versión máis recente instalada: %1 + + + + Earlier version installed: %1 + Versión máis recente instalada: %1 - SingleInstallPage + PackagesListView + + + Delete + Eliminar + + + + QApplication - + Collapse - Contraer + Colapsou + + + SingleInstallPage - - Display details - Amosar detalles + + Collapse + Colapsou - + Install Instalar - + Remove Eliminar - + Reinstall Reinstalar - + OK Aceptar - + Back Volver - + Done Feito - + + Later version installed: %1 + Versión máis recente instalada: %1 + + + + Earlier version installed: %1 + Versión máis recente instalada: %1 + + + + Installing dependencies: %1 + Instalando dependencias; %1 + + + + Failed to install %1 + Erro ao instalar %1 + + + 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 + SingleInstallPage_Install - - Display related packages - Amosar paquetes relacionados + + + + Show details + Amosar detalles + + + SingleInstallPage_Uninstall - + + + Show details + Amosar detalles + + + + UninstallConfirmPage + + Collapse - Contraer + Colapsou + + + + Show related packages + Amosar paquetes semellantes - + Cancel Cancelar - + Confirm Confirmar - + Are you sure you want to uninstall %1? All dependencies will also be removed - + Está seguro de que desexa desinstalar% 1? +Tamén se eliminarán todas as dependencias + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Está seguro de que desexa desinstalar% 1? +O sistema ou outros aplicativos poden non funcionar correctamente main - - Deepin Package Manager - Xestor de paquetes + + + Package Installer + Instalador do paquete - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - + + Package Installer helps users install and remove local packages, and supports bulk installation. + O instalador do paquete axuda aos usuarios a instalar e eliminar paquetes locais e admite a instalación masiva. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_he.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_he.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_he.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_he.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,38 @@ - + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + אישור + + DebInstaller - - Dark theme - + + Package Installer + + + + + The deb package may be broken + - - Deepin Package Manager - מנהל החבילות של Deepin + + Already Added + - + Bulk Install התקנה קבוצתית @@ -20,33 +40,61 @@ DebListModel - + + Installation failed, please check your network connection ההתקנה נכשלה, נא לבדוק את החיבור שלך לרשת - - Installation failed, please check updates in Control Center - ההתקנה נכשלה, נא לבדוק אם יש עדכונים במרכז הבקרה + + Installation failed, please check for updates in Control Center + - + + + Installation failed, insufficient disk space ההתקנה נכשלה, אין מספיק מקום בכונן - + Installation Failed ההתקנה נכשלה - - - Broken Dependencies: %1 - תלויות פגומות: %1 + + Failed to install %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + - + + OK + אישור + + + + + Broken dependencies: %1 + + + + + Authentication failed + + + + Unmatched package architecture ארכיטקטורת החבילה אינה תואמת @@ -54,12 +102,12 @@ FileChooseWidget - - Drag and drop file here - ניתן לגרור לכאן קבצים + + Drag deb packages here + - + Select File בחירת קובץ @@ -67,177 +115,245 @@ MultipleInstallPage - + Collapse צמצום - - Display details - הצגת פרטים + + Show details + - + Install התקנה - + Done - + - + Back חזרה + + + Installing dependencies: %1 + + PackagesListDelegate - + Installing בהתקנה - + Installed מותקן - + Failed נכשל - + + Waiting + + + + Same version installed אותה הגרסה מותקנת - - Other version installed: %1 - גרסה אחרת מותקנת: %1 + + Later version installed: %1 + + + + + Earlier version installed: %1 + הותקנה גרסה מוקדמת יותר: %1 - SingleInstallPage + PackagesListView - + + Delete + + + + + QApplication + + Collapse צמצום + + + SingleInstallPage - - Display details - הצגת פרטים + + Collapse + צמצום - + Install התקנה - + Remove הסרה - + Reinstall התקנה מחדש - + OK אישור - + Back חזרה - + Done - + + + + + Later version installed: %1 + - + + Earlier version installed: %1 + הותקנה גרסה מוקדמת יותר: %1 + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + Version: גרסה: - + Installed successfully הותקן בהצלחה - + Uninstalled successfully הוסר בהצלחה - - Other version installed: %1 - גרסה אחר מותקנת: %1 - - - + + Uninstall Failed ההסרה נכשלה - + Name: שם: - + Same version installed - הותקנה אותה הגרסה + אותה הגרסה מותקנת - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - הצגת חבילות קשורות + + + + Show details + + + + SingleInstallPage_Uninstall - + + + Show details + + + + + UninstallConfirmPage + + Collapse צמצום - + + Show related packages + + + + Cancel ביטול - + Confirm אישור - + Are you sure you want to uninstall %1? All dependencies will also be removed - + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + main - - Deepin Package Manager - מנהל החבילות של Deepin + + + Package Installer + - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - + + Package Installer helps users install and remove local packages, and supports bulk installation. + - \ No newline at end of file + diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_hi_IN.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_hi_IN.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_hi_IN.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_hi_IN.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,243 +1,359 @@ + AptConfigMessage + + + Enter the number to configure: + विन्यास हेतु अंक दर्ज करें : + + + + OK + ठीक है + + + DebInstaller - - Dark theme - + + Package Installer + पैकेज इंस्टॉलर - - Deepin Package Manager - डीपिन पैकेज प्रबंधक + + The deb package may be broken + संभवतः DEB पैकेज विकृत है - + + Already Added + पहले से ही शामिल + + + Bulk Install - + सामूहिक इंस्टॉल DebListModel - + + Installation failed, please check your network connection - + इंस्टॉल विफल रहा, कृपया अपना नेटवर्क कनेक्शन जाँचें - - Installation failed, please check updates in Control Center - + + Installation failed, please check for updates in Control Center + इंस्टॉल विफल रहा, कृपया अपडेट हेतु नियंत्रण केंद्र जाँचें - + + + Installation failed, insufficient disk space - + इंस्टॉल विफल रहा, अपर्याप्त डिस्क स्पेस - + Installation Failed - + इंस्टॉल विफल रहा + + + + Failed to install %1 + %1 इंस्टॉल विफल - - - Broken Dependencies: %1 - + + Unable to install + इंस्टॉल करने में अक्षम - + + This package does not have a valid digital signature + इस पैकेज का डिजिटल हस्ताक्षर अमान्य है + + + + OK + ठीक है + + + + + Broken dependencies: %1 + खंडित आश्रित पैकेज : %1 + + + + Authentication failed + प्रमाणीकरण विफल + + + Unmatched package architecture - + पैकेज संरचना मेल नहीं खाती FileChooseWidget - - Drag and drop file here - + + Drag deb packages here + माउस द्वारा DEB पैकेज ड्रैग कर यहाँ लायें - + Select File - + फ़ाइल चुनें MultipleInstallPage - + Collapse - + संक्षिप्त करें - - Display details - + + Show details + विवरण दिखाएँ - + Install - + इंस्टॉल करें - + Done - + पूर्ण हुआ - + Back - + वापस + + + + Installing dependencies: %1 + आश्रित पैकेज इंस्टॉल हो रहे हैं : %1 PackagesListDelegate - + Installing - + इंस्टॉल हो रहा है - + Installed - + इंस्टॉल हो गया - + Failed - + विफल रहा - + + Waiting + प्रतीक्षा में + + + Same version installed - + समान संस्करण पहले से इंस्टॉल है + + + + Later version installed: %1 + नवीन संस्करण इंस्टॉल है : %1 - - Other version installed: %1 - + + Earlier version installed: %1 + पूर्व संस्करण इंस्टॉल है : %1 - SingleInstallPage + PackagesListView + + + Delete + हटाएँ + + + + QApplication - + Collapse - + संक्षिप्त करें + + + SingleInstallPage - - Display details - + + Collapse + संक्षिप्त करें - + Install - + इंस्टॉल करें - + Remove - + हटाएँ - + Reinstall - + पुनः इंस्टॉल करें - + OK - + ठीक है - + Back - + वापस - + Done - + पूर्ण हुआ + + + + Later version installed: %1 + नवीन संस्करण इंस्टॉल है : %1 - + + Earlier version installed: %1 + पूर्व संस्करण इंस्टॉल है : %1 + + + + Installing dependencies: %1 + आश्रित पैकेज इंस्टॉल हो रहे हैं : %1 + + + + Failed to install %1 + %1 इंस्टॉल विफल + + + Version: - + संस्करण : - + Installed successfully - + इंस्टॉल सफल रहा - + Uninstalled successfully - + इंस्टॉल हटाना सफल रहा - - Other version installed: %1 - - - - + + Uninstall Failed - + इंस्टॉल हटाना विफल रहा - + Name: - + नाम : - + Same version installed - + समान संस्करण पहले से इंस्टॉल है - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - + + + + Show details + विवरण दिखाएँ + + + SingleInstallPage_Uninstall + + + + Show details + विवरण दिखाएँ + + + + UninstallConfirmPage - + Collapse - + संक्षिप्त करें + + + + Show related packages + संबंधित पैकेज दिखाएँ - + Cancel - + रद्द करें - + Confirm - + पुष्टि करें - + Are you sure you want to uninstall %1? All dependencies will also be removed - + क्या आप %1 को हटाना चाहते हैं? +सभी आश्रित पैकेज भी हटा दिए जायेंगे। + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + क्या आप %1 को हटाना चाहते हैं? +संभवतः सिस्टम व अन्य अनुप्रयोग सुचारु रूप से कार्य न कर पाएँ। main - - Deepin Package Manager - + + + Package Installer + पैकेज इंस्टॉलर - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - + + Package Installer helps users install and remove local packages, and supports bulk installation. + पैकेज इंस्टॉलर द्वारा उपयोक्ता लोकल पैकेज इंस्टॉल व हटा सकते हैं, यह सामूहिक इंस्टॉल की सुविधा भी प्रदान करता है। \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_hr.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_hr.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_hr.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_hr.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + + + + + OK + U redu + + + DebInstaller - - Dark theme + + Package Installer - - Deepin Package Manager - Deepin upravitelj paketima + + The deb package may be broken + + + + + Already Added + Već je dodan - + Bulk Install Skupno instaliranje @@ -20,46 +38,74 @@ 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 + + Installation failed, please check for 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 + + Failed to install %1 + Nespjela instalacija %1 + + + + Unable to install + Nije moguće instalirati + + + + This package does not have a valid digital signature + Ovaj paket nema ispravan digitalni potpis + + + + OK + U redu + + + + + Broken dependencies: %1 Slomljene međuzavisnosti: %1 - + + Authentication failed + Neuspjela ovjera + + + Unmatched package architecture - + Nepodudaranje arhitekture paketa FileChooseWidget - - Drag and drop file here - Povuci i pusti datoteku ovdje + + Drag deb packages here + Povuci deb datoteke ovdje - + Select File Odaberi datoteku @@ -67,176 +113,246 @@ MultipleInstallPage - + Collapse - - Display details - Prikaži pojedinosti + + Show details + Pokaži pojedinosti - + Install Instaliraj - + Done Učinjeno - + Back Natrag + + + Installing dependencies: %1 + Instaliram međuzavisnosti: %1 + PackagesListDelegate - + Installing Instaliram - + Installed Instalirano - + Failed Neuspjelo - + + Waiting + Čekam + + + Same version installed Instalirana je ista inačica - - Other version installed: %1 - Instalirana je druga inačica: %1 + + Later version installed: %1 + Instalirana je kasnija inačica: %1 + + + + Earlier version installed: %1 + Instalirana je ranija inačica: %1 - SingleInstallPage + PackagesListView + + + Delete + Izbriši + + + + QApplication - + Collapse + + + SingleInstallPage - - Display details - Prikaži pojedinosti + + Collapse + - + Install Instaliraj - + Remove Ukloni - + Reinstall Ponovno instaliraj - + OK U redu - + Back Natrag - + Done Učinjeno - + + Later version installed: %1 + Instalirana je kasnija inačica: %1 + + + + Earlier version installed: %1 + Instalirana je ranija inačica: %1 + + + + Installing dependencies: %1 + Instaliram međuzavisnosti: %1 + + + + Failed to install %1 + Nespjela instalacija %1 + + + 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 + SingleInstallPage_Install + + + + + Show details + Pokaži pojedinosti + + + + SingleInstallPage_Uninstall + + + + Show details + Pokaži pojedinosti + + + UninstallConfirmPage - - Display related packages + + Collapse - - Collapse + + Show related packages - + Cancel Otkaži - + Confirm Potvrdi - + Are you sure you want to uninstall %1? All dependencies will also be removed - + Jeste li sigurni da želite deinstalirati %1? +Sve zavisnosti će biti uklonjene + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Jeste li sigurni da želite deinstalirati %1? +Sustav ili ostale aplikacije možda neće ispravno raditi main - - Deepin Package Manager - Deepin upravitelj paketima + + + Package Installer + - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. + + Package Installer helps users install and remove local packages, and supports bulk installation. diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_hu.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_hu.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_hu.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_hu.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + Írja be a számot a konfiguráláshoz: + + + + OK + OK + + + DebInstaller - - Dark theme - + + Package Installer + Csomagtelepítő - - Deepin Package Manager - Deepin csomagkezelő + + The deb package may be broken + A deb csomag vélhetően sérült - + + Already Added + Már hozzáadva + + + Bulk Install Csoportos telepítés @@ -20,33 +38,61 @@ DebListModel - + + Installation failed, please check your network connection - Telepítés sikertelen, kérlek ellenőrizd a hálózati kapcsolatot + A telepítés sikertelen, kérjük ellenőrizze 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, please check for updates in Control Center + A telepítés sikertelen, kérjük ellenőrizze a frissítéseket a Vezérlőközpontban - + + + Installation failed, insufficient disk space - Telepítés sikertelen, nincs elég hely a lemezen + A telepítés sikertelen, nincs elég hely a lemezen - + Installation Failed - Telepítés sikertelen + A telepítés sikertelen + + + + Failed to install %1 + A %1 telepítése sikertelen + + + + Unable to install + A telepítés nem lehetséges + + + + This package does not have a valid digital signature + Ennek a csomagnak nincs érvényes digitális aláírása - - - Broken Dependencies: %1 + + OK + OK + + + + + Broken dependencies: %1 Hibás függőségek: %1 - + + Authentication failed + A hitelesítés sikertelen + + + Unmatched package architecture Nem megfelelő csomag architektúra @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Húzzon egy fájlt ide + + Drag deb packages here + Húzzon ide deb csomagokat - + Select File Fájl kiválasztása @@ -67,177 +113,247 @@ MultipleInstallPage - + Collapse - Összecsuk + Összecsukás - - Display details - Részletek megjelenítése + + Show details + Részletek mutatása - + Install Telepítés - + Done - Sikerült + Kész - + Back Vissza + + + Installing dependencies: %1 + Telepítési függőségek: %1 + PackagesListDelegate - + Installing Telepítés - + Installed Telepítve - + Failed Sikertelen - + + Waiting + Várakozás + + + Same version installed Ez a verzió már telepítve van - - Other version installed: %1 - Más verzió telepítve: %1 + + Later version installed: %1 + Újabb verzió telepítve: %1 + + + + Earlier version installed: %1 + Korábbi verzió telepítve: %1 - SingleInstallPage + PackagesListView + + + Delete + Törlés + + + + QApplication - + Collapse - Összecsuk + Összecsukás + + + SingleInstallPage - - Display details - Részletek megjelenítése + + Collapse + Összecsukás - + Install Telepítés - + Remove Eltávolítás - + Reinstall Újratelepítés - + OK OK - + Back Vissza - + Done - Sikerült. + Kész + + + + Later version installed: %1 + Újabb verzió telepítve: %1 - + + Earlier version installed: %1 + Korábbi verzió telepítve: %1 + + + + Installing dependencies: %1 + Telepítési függőségek: %1 + + + + Failed to install %1 + A %1 telepítése sikertelen + + + Version: Verzió: - + Installed successfully Sikeresen telepítve - + Uninstalled successfully - Sikertelen telepítés - - - - Other version installed: %1 - Más verzió telepítve: %1 + Sikeresen eltávolítva - + + Uninstall Failed - Eltávolítás sikertelen + Az eltávolítás sikertelen - + Name: Név: - + Same version installed Ez a verzió már telepítve van - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - Kapcsolódó csomagok megjelenítése + + + + Show details + Részletek mutatása + + + SingleInstallPage_Uninstall - + + + Show details + Részletek mutatása + + + + UninstallConfirmPage + + Collapse - Összecsuk + Összecsukás + + + + Show related packages + Kapcsolódó csomagok megjelenítése - + Cancel - Mégse + Mégsem - + Confirm Megerősítés - + Are you sure you want to uninstall %1? All dependencies will also be removed - + Biztosan el kívánja távolítani %1-t? +Minden csomagfüggősége szintén eltávolításra kerül + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Biztosan el kívánja távolítani %1-t? +A rendszer, illetve más alkalmazások esetleg nem megfelelően fognak működni main - - Deepin Package Manager - Deepin csomagkezelő + + + Package Installer + Csomagtelepítő - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - + + Package Installer helps users install and remove local packages, and supports bulk installation. + A Csomagtelepítő segít a felhasználóknak különféle csomagok telepítésében és eltávolításában, valamint támogatja a kötegelt telepítést. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_id.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_id.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_id.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_id.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,38 @@ - + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + OK + + DebInstaller - - Dark theme - + + Package Installer + - - Deepin Package Manager - Manajer Paket Deepin + + The deb package may be broken + - + + Already Added + + + + Bulk Install Instal Jumlah Besar @@ -20,33 +40,61 @@ 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, please check for updates in Control Center + - + + + Installation failed, insufficient disk space Instalasi gagal, ruang diska tidak mencukupi - + Installation Failed Instalasi Gagal - - - Broken Dependencies: %1 - Dependesi rusak: %1 + + Failed to install %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + OK + + + + + Broken dependencies: %1 + - + + Authentication failed + + + + Unmatched package architecture Paket arsitektur tidak cocok @@ -54,12 +102,12 @@ FileChooseWidget - - Drag and drop file here - Seret dan lepas berkas di sini + + Drag deb packages here + - + Select File Pilih Berkas @@ -67,177 +115,245 @@ MultipleInstallPage - + Collapse Jatuhkan - - Display details - Tampilkan detail + + Show details + - + Install Instal - + Done Selesai - + Back Kembali + + + Installing dependencies: %1 + + PackagesListDelegate - + Installing Menginstal - + Installed Diinstal - + Failed Gagal - + + Waiting + + + + Same version installed Versi sama diinstal - - Other version installed: %1 - Versi lain diinstal: %1 + + Later version installed: %1 + + + + + Earlier version installed: %1 + - SingleInstallPage + PackagesListView + + + Delete + + + + + QApplication - + Collapse Jatuhkan + + + SingleInstallPage - - Display details - Tampilkan detail + + Collapse + Jatuhkan - + Install Instal - + Remove Hapus - + Reinstall Instal ulang - + OK OK - + Back Kembali - + Done Selesai - + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + 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 + SingleInstallPage_Install - - Display related packages - Tampilkan paket terhubung + + + + Show details + + + + SingleInstallPage_Uninstall - + + + Show details + + + + + UninstallConfirmPage + + Collapse Jatuhkan - + + Show related packages + + + + Cancel Batal - + Confirm Konfirmasi - + Are you sure you want to uninstall %1? All dependencies will also be removed - + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + main - - Deepin Package Manager - Manajer Paket Deepin + + + Package Installer + - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - + + Package Installer helps users install and remove local packages, and supports bulk installation. + - \ No newline at end of file + diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_it.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_it.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_it.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_it.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + Inserisci il numero da configurare: + + + + OK + OK + + + DebInstaller - - Dark theme - Tema scuro + + Package Installer + Gestore pacchetti - - Deepin Package Manager - Deepin Package Manager + + The deb package may be broken + Il pacchetto Deb potrebbe essere corrotto - + + Already Added + Già aggiunto + + + Bulk Install Installazione di massa @@ -20,33 +38,61 @@ DebListModel - + + Installation failed, please check your network connection Installazione fallita, controlla la connessione ad internet - - Installation failed, please check updates in Control Center + + Installation failed, please check for 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 + + Failed to install %1 + Installazione fallita per %1 + + + + Unable to install + Impossibile installare - + + This package does not have a valid digital signature + Questo pacchetto non ha una firma digitale valida + + + + OK + OK + + + + + Broken dependencies: %1 + Dipendenze danneggiate: %1 + + + + Authentication failed + Autenticazione fallita + + + Unmatched package architecture Architettura pacchetti non compatibile @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Trascina qui i file da installare + + Drag deb packages here + Trascina i pacchetti Deb qui - + Select File Seleziona i file manualmente @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse - Non mostrare i dettagli + Collassa - - Display details - Visualizza dettagli + + Show details + Mostra dettagli - + Install Installa - + Done Fatto - + Back Indietro + + + Installing dependencies: %1 + Installazione dipendenze: %1 + PackagesListDelegate - + Installing Installazione.. - + Installed Installato - + Failed Fallita - + + Waiting + Attendere + + + Same version installed Medesima versione installata - - Other version installed: %1 - Versione differente installata: %1 + + Later version installed: %1 + Versione successiva già installata: %1 + + + + Earlier version installed: %1 + Versione precedente installata: %1 - SingleInstallPage + PackagesListView + + + Delete + Elimina + + + + QApplication - + Collapse - Non mostrare i dettagli + Collassa + + + SingleInstallPage - - Display details - Visualizza i dettagli + + Collapse + Collassa - + Install Installa - + Remove Rimuovi - + Reinstall Aggiorna - + OK OK - + Back Indietro - + Done Fatto - + + Later version installed: %1 + Versione successiva già installata: %1 + + + + Earlier version installed: %1 + Versione precedente installata: %1 + + + + Installing dependencies: %1 + Installazione dipendenze: %1 + + + + Failed to install %1 + Installazione fallita per %1 + + + 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 + Medesima versione installata - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - Visualizza pacchetti collegati + + + + Show details + Mostra dettagli + + + SingleInstallPage_Uninstall - + + + Show details + Mostra dettagli + + + + UninstallConfirmPage + + Collapse - Non mostrare i dettagli + Collassa + + + + Show related packages + Mostra pacchetti collegati - + 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 + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Sicuro di voler disinstallare %1? +Il sistema o eventuali App potrebbero non funzionare correttamente + main - - Deepin Package Manager - Gestore Pacchetti di Deepin + + + Package Installer + Gestore pacchetti - - 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. + + Package Installer helps users install and remove local packages, and supports bulk installation. + Il Gestore pacchetti è utile per installare e rimuovere software in locale, supporta inoltre l'installazione massiva. Localizzazione italiana a cura di Massimo A. Carofano. diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ko.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_ko.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ko.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_ko.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + + + + + OK + 확인 + + + DebInstaller - - Dark theme - 어두운 테마 + + Package Installer + 패키지 관리자 - - Deepin Package Manager - Deepin 패키지 관리자 + + The deb package may be broken + - + + Already Added + 이미 추가됨 + + + Bulk Install 일괄 설치 @@ -20,33 +38,61 @@ DebListModel - + + Installation failed, please check your network connection - 설치 실패, 네트워크 연결을 확인하세요 + 설치 실패. 네트워크 연결을 확인하십시오 - - Installation failed, please check updates in Control Center - 설치 실패, 제어 센터에서 업데이트를 확인하세요 + + Installation failed, please check for updates in Control Center + 설치 실패. 제어 센터에서 업데이트를 확인하십시오 - + + + Installation failed, insufficient disk space 설치 실패, 디스크 공간 부족 - + Installation Failed 설치 실패 - - - Broken Dependencies: %1 - 손상된 종속성: %1 + + Failed to install %1 + + + + + Unable to install + 설치할 수 없음 + + + + This package does not have a valid digital signature + 이 패키지에는 유효한 디지털 서명이 없습니다. + + + + OK + 확인 + + + + + Broken dependencies: %1 + 깨진 종속성: %1 - + + Authentication failed + + + + Unmatched package architecture 최고의 패키지 아키텍처 @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - 파일을 여기로 끌어다 놓기 + + Drag deb packages here + deb 패키지를 여기로 끌어다 놓으십시오 - + Select File 파일 선택 @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse - 접기 + 축소 - - Display details - 세부 정보 표시 + + Show details + 상세 정보 표시 - + Install 설치 - + Done 완료 - + Back 뒤로 + + + Installing dependencies: %1 + 종속성 설치 중: %1 + PackagesListDelegate - + Installing 설치중 - + Installed 설치됨 - + Failed - 실패됨 + 실패함 - + + Waiting + 기다리는 중 + + + Same version installed 동일한 버전 설치됨 - - Other version installed: %1 - 다른 버전 설치됨: %1 + + Later version installed: %1 + 이후 버전 설치: %1 + + + + Earlier version installed: %1 + 이전 버전 설치: %1 - SingleInstallPage + PackagesListView - + + Delete + 삭제 + + + + QApplication + + Collapse - 접기 + 축소 + + + SingleInstallPage - - Display details - 세부 정보 표시 + + Collapse + 축소 - + Install 설치 - + Remove 제거 - + Reinstall 재설치 - + OK 확인 - + Back 뒤로 - + Done 완료 - + + Later version installed: %1 + 이후 버전 설치: %1 + + + + Earlier version installed: %1 + 이전 버전 설치: %1 + + + + Installing dependencies: %1 + 종속성 설치 중: %1 + + + + Failed to install %1 + + + + Version: 버전: - + Installed successfully 설치 성공 - + Uninstalled successfully 제거 성공 - - Other version installed: %1 - 다른 버전 설치됨: %1 - - - + + Uninstall Failed 제거 실패 - + Name: 이름: - + Same version installed 동일한 버전 설치됨 - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - 관련 패키지 표시 + + + + Show details + 상세 정보 표시 + + + + SingleInstallPage_Uninstall + + + + Show details + 상세 정보 표시 + + + UninstallConfirmPage - + Collapse - 접기 + 축소 - + + Show related packages + 관련 패키지 표시 + + + Cancel 취소 - + Confirm 확인 - + Are you sure you want to uninstall %1? All dependencies will also be removed %1을(를) 제거하시겠습니까? 모든 종속성도 제거됩니다 + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + %1을(를) 제거하시겠습니까? +시스템 또는 다른 응용 프로그램이 제대로 작동하지 않을 수 있습니다. + main - - Deepin Package Manager - Deepin 패키지 관리자 + + + Package Installer + 패키지 관리자 - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - Deepin 패키지 관리자는 사용자가 일괄 설치를 지원하여 로컬 패키지를 설치 및 제거하는데 사용됩니다. + + Package Installer helps users install and remove local packages, and supports bulk installation. + 패키지 설치 관리자는 사용자가 로컬 패키지를 설치하고, 제거할 수 있도록 지원하고 일괄 설치를 지원합니다. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_lt.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_lt.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_lt.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_lt.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + + + + + OK + Gerai + + + DebInstaller - - Dark theme - Tamsi tema + + Package Installer + Paketų diegimo programa - - Deepin Package Manager - Deepin paketų tvarkytuvė + + The deb package may be broken + - + + Already Added + Jau pridėta + + + Bulk Install Masinis įdiegimas @@ -20,33 +38,61 @@ 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, please check for updates in Control Center + Įdiegimas nepavyko, patikrinkite Valdymo centre ar nėra atnaujinimų - + + + Installation failed, insufficient disk space Įdiegimas nepavyko, trūksta vietos diske - + Installation Failed Įdiegimas nepavyko - - - Broken Dependencies: %1 + + Failed to install %1 + + + + + Unable to install + Nepavyko įdiegti + + + + This package does not have a valid digital signature + + + + + OK + Gerai + + + + + Broken dependencies: %1 Sugadintos priklausomybės: %1 - + + Authentication failed + + + + Unmatched package architecture Neatitinkanti paketo architektūra @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Vilkite failą čia + + Drag deb packages here + Vilkite čia deb paketus - + Select File Pasirinkti failą @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse Suskleisti - - Display details + + Show details Rodyti išsamiau - + Install Įdiegti - + Done Atlikta - + Back Atgal + + + Installing dependencies: %1 + + PackagesListDelegate - + Installing Įdiegiama - + Installed Įdiegta - + Failed Nepavyko - + + Waiting + Laukiama + + + Same version installed Įdiegta ta pati versija - - Other version installed: %1 - Įdiegta kita versija: %1 + + Later version installed: %1 + + + + + Earlier version installed: %1 + - SingleInstallPage + PackagesListView + + + Delete + Ištrinti + + + + QApplication - + Collapse Suskleisti + + + SingleInstallPage - - Display details - Rodyti išsamiau + + Collapse + Suskleisti - + Install Įdiegti - + Remove Šalinti - + Reinstall Įdiegti iš naujo - + OK Gerai - + Back Atgal - + Done Atlikta - + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + 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 + SingleInstallPage_Install - - Display related packages - Rodyti susijusius paketus + + + + Show details + Rodyti išsamiau + + + + SingleInstallPage_Uninstall + + + + Show details + Rodyti išsamiau + + + UninstallConfirmPage - + Collapse Suskleisti - + + Show related packages + Rodyti susijusius paketus + + + 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 + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Ar tikrai norite pašalinti %1? +Sistema arba kitos programos gali tinkamai neveikti + main - - Deepin Package Manager - Deepin paketų tvarkytuvė + + + Package Installer + Paketų diegimo programa - - 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ą. + + Package Installer helps users install and remove local packages, and supports bulk installation. + Paketų diegimo programa padeda naudotojams įdiegti ir šalinti vietinius paketus bei palaiko masinį įdiegimą. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_mn.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_mn.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_mn.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_mn.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,38 @@ - + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + ОК + + DebInstaller - - Dark theme - + + Package Installer + - - Deepin Package Manager - Деепин Багц Зохицуулагч + + The deb package may be broken + - + + Already Added + + + + Bulk Install Багц суулгац @@ -20,33 +40,61 @@ DebListModel - + + Installation failed, please check your network connection Суулгалт амжилтгүй боллоо, өөрийн сүлжээний холболтоо шалгана уу - - Installation failed, please check updates in Control Center - Суулгалт амжилтгүй боллоо, хяналтын төвийн шинэчлэлийг шалгана уу + + Installation failed, please check for updates in Control Center + - + + + Installation failed, insufficient disk space Суулгалт амжилтгүй боллоо, дискийн зай хангалтгүй - + Installation Failed Суулгалт амжилтгүй боллоо - - - Broken Dependencies: %1 - Эвдрэлтэй хамааралууд: %1 + + Failed to install %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + ОК + + + + + Broken dependencies: %1 + - + + Authentication failed + + + + Unmatched package architecture Багцын архитектур тохирсонгүй @@ -54,12 +102,12 @@ FileChooseWidget - - Drag and drop file here - Энд чирж байршуулна уу + + Drag deb packages here + - + Select File Файл сонгох @@ -67,177 +115,245 @@ MultipleInstallPage - + Collapse Дэлгэх - - Display details - Дэлгэрэнгүй мэдээлэл харуулах + + Show details + - + Install Суулгах - + Done Дууссан - + Back Буцах + + + Installing dependencies: %1 + + PackagesListDelegate - + Installing Суулгаж байна - + Installed Суулгагдсан - + Failed Амжилтгүй - + + Waiting + + + + Same version installed Адил хувилбар суулгагдсан - - Other version installed: %1 - Суулгагдсан бусад хувилбарууд %1 + + Later version installed: %1 + + + + + Earlier version installed: %1 + - SingleInstallPage + PackagesListView + + + Delete + + + + + QApplication - + Collapse Дэлгэх + + + SingleInstallPage - - Display details - Дэлгэрэнгүй мэдээлэл харуулах + + Collapse + Дэлгэх - + Install Суулгах - + Remove Устгах - + Reinstall Дахин суулгах - + OK ОК - + Back Буцах - + Done Дууссан - + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + Version: Хувилбар: - + Installed successfully Амжилттай суулгагдлаа - + Uninstalled successfully Амжилттай устгагдлаа - - Other version installed: %1 - Суулгагдсан бусад хувилбарууд: %1 - - - + + Uninstall Failed Устгах ажиллагаа амжилтгүй болсон - + Name: Нэр: - + Same version installed Адил хувилбар суулгагдсан - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - Төстэй багцуудыг харуулах + + + + Show details + + + + SingleInstallPage_Uninstall - + + + Show details + + + + + UninstallConfirmPage + + Collapse Дэлгэх - + + Show related packages + + + + Cancel Цуцлах - + Confirm Баталгаажуулах - + Are you sure you want to uninstall %1? All dependencies will also be removed - + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + main - - Deepin Package Manager - Деепин Багц Зохицуулагч + + + Package Installer + - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - + + Package Installer helps users install and remove local packages, and supports bulk installation. + - \ No newline at end of file + diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ms.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_ms.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ms.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_ms.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + + + + + OK + OK + + + DebInstaller - - Dark theme - Tema gelap + + Package Installer + Pemasang Pakej - - Deepin Package Manager - Pengurus Pakej Deepin + + The deb package may be broken + - + + Already Added + Sudah Ditambah + + + Bulk Install Pasang Pukal @@ -20,33 +38,61 @@ 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, please check for updates in Control Center + Pemasangan gagal, sila periksa kemas kini dalam Pusat Kawalan - + + + Installation failed, insufficient disk space Pemasangan gagal, ruang cakera tidak mencukupi - + Installation Failed Pemasangan Gagal - - - Broken Dependencies: %1 - Dependensi Rosak: %1 + + Failed to install %1 + + + + + Unable to install + Tidak boleh memasang - + + This package does not have a valid digital signature + + + + + OK + OK + + + + + Broken dependencies: %1 + Dependensi rosak: %1 + + + + Authentication failed + + + + Unmatched package architecture Senibina pakej tidak sepadan @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Seret dan lepas fail di sini + + Drag deb packages here + Seret pakej-pakej deb di sini - + Select File Pilih Fail @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse Kuncup - - Display details - Papar perincian + + Show details + Tunjuk perincian - + Install Pasang - + Done Selesai - + Back Undur + + + Installing dependencies: %1 + + PackagesListDelegate - + Installing Memasang - + Installed Dipasang - + Failed Gagal - + + Waiting + Menunggu + + + Same version installed Versi serupa telah dipasang - - Other version installed: %1 - Versi lain dipasang: %1 + + Later version installed: %1 + + + + + Earlier version installed: %1 + - SingleInstallPage + PackagesListView + + + Delete + Padam + + + + QApplication - + Collapse Kuncup + + + SingleInstallPage - - Display details - Papar perincian + + Collapse + Kuncup - + Install Pasang - + Remove Buang - + Reinstall Pasang Semula - + OK OK - + Back Undur - + Done Selesai - + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + 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 + SingleInstallPage_Install - - Display related packages - Papar pakej berkaitan + + + + Show details + Tunjuk perincian + + + SingleInstallPage_Uninstall - + + + Show details + Tunjuk perincian + + + + UninstallConfirmPage + + Collapse Kuncup - + + Show related packages + Tunjuk pakej-pakej berkaitan + + + 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 + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Anda pasti mahu menyahpasang %1? +Sistem atau lain-lain aplikasi mungkin tidak berfungsi dengan baik + main - - Deepin Package Manager - Pengurus Pakej Deepin + + + Package Installer + Pemasang Pakej - - 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. + + Package Installer helps users install and remove local packages, and supports bulk installation. + Pemasang pakej dapat membantu pengguna dan membuang pakej-pakej setempat, dan juga menyokong pemasangan pukal. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ne.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_ne.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ne.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_ne.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + + + + + OK + ठिक छ + + + DebInstaller - - Dark theme - डार्क थिम + + Package Installer + प्याकेज स्थापनाकर्ता - - Deepin Package Manager - डिपिन प्याकेज प्रबन्धक + + The deb package may be broken + - + + Already Added + पहिले नै थपिएको + + + Bulk Install बल्क स्थापना @@ -20,33 +38,61 @@ DebListModel - + + Installation failed, please check your network connection स्थापना असफल भयो, कृपया तपाइँको नेटवर्क जडान जाँच्नुहोस् - - Installation failed, please check updates in Control Center - स्थापना विफल भयो, कृपया नियन्त्रण केन्द्रमा अपडेट जाँच गर्नुहोस् + + Installation failed, please check for updates in Control Center + स्थापना असफल भयो, कृपया नियन्त्रण केन्द्रमा अद्यावधिकहरू जाँच गर्नुहोस् - + + + Installation failed, insufficient disk space स्थापना विफल भयो, अपर्याप्त डिस्क स्पेस - + Installation Failed स्थापना असफल भयो - - - Broken Dependencies: %1 - टूटेको निर्भरताहरू:% 1 + + Failed to install %1 + + + + + Unable to install + स्थापना गर्न असमर्थ - + + This package does not have a valid digital signature + + + + + OK + ठिक छ + + + + + Broken dependencies: %1 + टुक्रिएको निर्भरता:% 1 + + + + Authentication failed + + + + Unmatched package architecture बेमेल प्याकेज वास्तुकला @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - फाइल यहाँ तान्नुहोस् र ड्रप गर्नुहोस् + + Drag deb packages here + यहाँ डेब प्याकेजहरू तान्नुहोस् - + Select File फाइल चयन गर्नुहोस् @@ -67,177 +113,246 @@ MultipleInstallPage - + Collapse संक्षिप्त गर्नुहोस् - - Display details - विवरणहरू प्रदर्शन गर्नुहोस् + + Show details + विवरण देखाऊ - + Install स्थापना - + Done भयो - + Back पछाडि + + + Installing dependencies: %1 + + PackagesListDelegate - + Installing स्थापना गर्दै - + Installed स्थापित - + Failed असफल भयो - + + Waiting + पर्खँदै + + + Same version installed एउटै संस्करण स्थापित - - Other version installed: %1 - अन्य संस्करण स्थापित:% 1 + + Later version installed: %1 + + + + + Earlier version installed: %1 + - SingleInstallPage + PackagesListView + + + Delete + हटाउनुहोस् + + + + QApplication - + Collapse संक्षिप्त गर्नुहोस् + + + SingleInstallPage - - Display details - विवरणहरू प्रदर्शन गर्नुहोस् + + Collapse + संक्षिप्त गर्नुहोस् - + Install स्थापना - + Remove हटाउनुहोस् - + Reinstall पुन: स्थापना गर्नुहोस् - + OK ठिक छ - + Back पछाडि - + Done भयो - + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + Version: संस्करण - + Installed successfully सफलतापूर्वक स्थापित भयो - + Uninstalled successfully सफलतापूर्वक स्थापना रद्द गरियो - - Other version installed: %1 - अन्य संस्करण स्थापित:% 1 - - - + + Uninstall Failed स्थापना रद्द गरियो - + Name: नाम - + Same version installed एउटै संस्करण स्थापित - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - सम्बन्धित प्याकेजहरू प्रदर्शन गर्नुहोस् + + + + Show details + विवरण देखाऊ + + + SingleInstallPage_Uninstall - + + + Show details + विवरण देखाऊ + + + + UninstallConfirmPage + + Collapse संक्षिप्त गर्नुहोस् - + + Show related packages + सम्बन्धित प्याकेजहरू देखाउनुहोस् + + + Cancel रद्द गर्नुहोस् - + Confirm पक्का गर्नु - + Are you sure you want to uninstall %1? All dependencies will also be removed के तपाईँ% 1 लाई अनस्टल गर्न निश्चित हुनुहुन्छ? सबै निर्भरताहरू हटाइनेछ + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + के तपाईं पक्का% 1 स्थापना हटाउन चाहनुहुन्छ? +प्रणाली वा अन्य अनुप्रयोगहरू ठीकसँग काम नगर्न सक्छ + main - - Deepin Package Manager - डिपिन प्याकेज प्रबन्धक + + + Package Installer + प्याकेज स्थापनाकर्ता - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - डिपिन प्याकेज प्रबन्धक, प्याकेज फाइल स्थापना र स्थापना रद्द गर्न प्रयोग हुन्छ + + Package Installer helps users install and remove local packages, and supports bulk installation. + प्याकेज स्थापनाकर्ताले प्रयोगकर्ताहरूलाई स्थानीय प्याकेजहरू स्थापना र हटाउन मद्दत गर्दछ, र बल्क स्थापनालाई समर्थन गर्दछ। \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_nl.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_nl.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_nl.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_nl.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + Voer het nummer in om in te stellen: + + + + OK + Oké + + + DebInstaller - - Dark theme - Donker thema + + Package Installer + Pakketinstallatie - - Deepin Package Manager - Deepin Pakketbeheer + + The deb package may be broken + Het deb-pakket is mogelijk beschadigd - + + Already Added + Reeds toegevoegd + + + Bulk Install Alles installeren @@ -20,33 +38,61 @@ DebListModel - + + Installation failed, please check your network connection - Installatie mislukt; controleer je netwerkverbinding. + Installatie mislukt: controleer je internetverbinding. - - Installation failed, please check updates in Control Center - Installatie mislukt; controleer op updates in het Configuratiecentrum. + + Installation failed, please check for updates in Control Center + Installatie mislukt: controleer op updates in het instellingencentrum. - + + + Installation failed, insufficient disk space - Installatie mislukt; onvoldoende schijfruimte. + Installatie mislukt: onvoldoende schijfruimte. - + Installation Failed Installatie mislukt - - - Broken Dependencies: %1 - Gebroken afhankelijkheden: %1 + + Failed to install %1 + %1 kan niet worden geïnstalleerd + + + + Unable to install + Installeren niet mogelijk + + + + This package does not have a valid digital signature + Dit pakket bevat geen geldige ondertekening + + + + OK + Oké + + + + + Broken dependencies: %1 + Niet-voldane afhankelijkheden: %1 + + + + Authentication failed + Authenticatie mislukt - + Unmatched package architecture Pakketarchitectuur komt niet overeen @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Versleep een bestand hierheen + + Drag deb packages here + Sleep deb-bestanden hierheen - + Select File Bestand selecteren @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse Inklappen - - Display details - Details tonen + + Show details + Informatie tonen - + Install Installeren - + Done Klaar - + Back Terug + + + Installing dependencies: %1 + Bezig met installeren van afhankelijkheden: %1 + PackagesListDelegate - + Installing - Installeren + Bezig met installeren - + Installed Geïnstalleerd - + Failed Mislukt - + + Waiting + Bezig met wachten + + + Same version installed - Dezelfde versie geïnstalleerd + Dezelfde versie is geïnstalleerd + + + + Later version installed: %1 + Nieuwere versie geïnstalleerd: %1 - - Other version installed: %1 - Andere versie geïnstalleerd: %1 + + Earlier version installed: %1 + Oudere versie geïnstalleerd: %1 - SingleInstallPage + PackagesListView + + + Delete + Verwijderen + + + + QApplication - + Collapse Inklappen + + + SingleInstallPage - - Display details - Details tonen + + Collapse + Inklappen - + Install Installeren - + Remove Verwijderen - + Reinstall Opnieuw installeren - + OK Oké - + Back Terug - + Done Klaar - + + Later version installed: %1 + Nieuwere versie geïnstalleerd: %1 + + + + Earlier version installed: %1 + Oudere versie geïnstalleerd: %1 + + + + Installing dependencies: %1 + Bezig met installeren van afhankelijkheden: %1 + + + + Failed to install %1 + %1 kan niet worden geïnstalleerd + + + Version: Versie: - + Installed successfully - Geïnstalleerd + Installatie voltooid - + 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 + Dezelfde versie is geïnstalleerd - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - Gerelateerde pakketten tonen + + + + Show details + Informatie tonen + + + SingleInstallPage_Uninstall + + + + Show details + Informatie tonen + + + + UninstallConfirmPage - + Collapse Inklappen - + + Show related packages + Gerelateerde pakketten tonen + + + Cancel Annuleren - + Confirm - Bevestigen + Verwijderen - + 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 +Alle afhankelijkheden worden eveneens verwijderd. + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Weet je zeker dat je %1 wilt verwijderen? +Het systeem of andere programma's werken dan mogelijk niet goed meer. main - - Deepin Package Manager - Deepin Pakketbeheer + + + Package Installer + Pakketinstallatie - - 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. + + Package Installer helps users install and remove local packages, and supports bulk installation. + Pakketinstallatie is een programma dat gebruikers helpt bij het installeren van lokale software. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_pa.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_pa.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_pa.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_pa.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,65 +1,113 @@ - + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + ਠੀਕ ਹੈ + + DebInstaller - - Dark theme - + + Package Installer + - - Deepin Package Manager - ਡੀਪਿਨ ਪੈਕੇਜ ਮੈਨੇਜਰ + + The deb package may be broken + - + + Already Added + + + + Bulk Install - + DebListModel - + + Installation failed, please check your network connection - + - - Installation failed, please check updates in Control Center - + + Installation failed, please check for updates in Control Center + - + + + Installation failed, insufficient disk space - + - + Installation Failed - + + + + + Failed to install %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + - - - Broken Dependencies: %1 - + + OK + ਠੀਕ ਹੈ + + + + + Broken dependencies: %1 + - + + Authentication failed + + + + Unmatched package architecture - + FileChooseWidget - - Drag and drop file here - + + Drag deb packages here + - + Select File ਫਾਇਲ ਚੁਣੋ @@ -67,177 +115,245 @@ MultipleInstallPage - + Collapse - + - - Display details - + + Show details + - + Install ਇੰਸਟਾਲ ਕਰੋ - + Done ਮੁਕੰਮਲ - + Back ਪਿੱਛੇ + + + Installing dependencies: %1 + + PackagesListDelegate - + Installing ਇੰਸਟਾਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ - + Installed ਇੰਸਟਾਲ ਹੈ - + Failed ਅਸਫ਼ਲ ਹੈ - + + Waiting + + + + Same version installed - + ਉਹੀ ਵਰਜ਼ਨ ਇੰਸਟਾਲ ਹੈ - - Other version installed: %1 - + + Later version installed: %1 + + + + + Earlier version installed: %1 + - SingleInstallPage + PackagesListView + + + Delete + + + + + QApplication - + Collapse - + + + + SingleInstallPage - - Display details - + + Collapse + - + Install ਇੰਸਟਾਲ ਕਰੋ - + Remove ਹਟਾਓ - + Reinstall ਮੁੜ-ਇੰਸਟਾਲ ਕਰੋ - + OK ਠੀਕ ਹੈ - + Back ਪਿੱਛੇ - + Done ਮੁਕੰਮਲ - + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + Version: ਵਰਜ਼ਨ: - + Installed successfully ਕਾਮਯਾਬੀ ਨਾਲ ਇੰਸਟਾਲ ਕੀਤਾ - + Uninstalled successfully ਅਣ-ਇੰਸਟਾਲ ਕਰਨਾ ਕਾਮਯਾਬ ਰਿਹਾ - - Other version installed: %1 - - - - + + Uninstall Failed ਅਣ-ਇੰਸਟਾਲ ਕਰਨਾ ਅਸਫ਼ਲ ਹੈ - + Name: - + - + Same version installed ਉਹੀ ਵਰਜ਼ਨ ਇੰਸਟਾਲ ਹੈ - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - + + + + Show details + + + + SingleInstallPage_Uninstall - + + + Show details + + + + + UninstallConfirmPage + + Collapse - + + + + + Show related packages + - + Cancel - + - + Confirm - + - + Are you sure you want to uninstall %1? All dependencies will also be removed - + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + main - - Deepin Package Manager - + + + Package Installer + - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - + + Package Installer helps users install and remove local packages, and supports bulk installation. + - \ No newline at end of file + diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_pl.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_pl.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_pl.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_pl.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + Wprowadź numer do skonfigurowania: + + + + OK + OK + + + DebInstaller - - Dark theme - Ciemny motyw + + Package Installer + Instalator pakietów - - Deepin Package Manager - Zarządzanie pakietami Deepin + + The deb package may be broken + Pakiet deb może być uszkodzony - + + Already Added + Już dodane + + + Bulk Install Instalacja zbiorcza @@ -20,33 +38,61 @@ 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, please check for updates in Control Center + Instalacja nie powiodła się, sprawdź dostępność aktualizacji w Control Center - + + + 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 + + Failed to install %1 + Nie udało się zainstalować %1 + + + + Unable to install + Nie można zainstalować - + + This package does not have a valid digital signature + Ten pakiet nie ma prawidłowego podpisu cyfrowego + + + + OK + OK + + + + + Broken dependencies: %1 + Zerwane zależności: %1 + + + + Authentication failed + Uwierzytelnianie nie powiodło się + + + Unmatched package architecture Niepasująca architektura pakietu @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Przeciągnij i upuść tutaj plik + + Drag deb packages here + Przeciągnij pakiety deb tutaj - + Select File Wybierz plik @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse Zwiń - - Display details - Wyświetl szczegóły + + Show details + Pokaż szczegóły - + Install Zainstaluj - + Done Gotowe - + Back Wstecz + + + Installing dependencies: %1 + Instalowanie zależności: %1 + PackagesListDelegate - + Installing Instalowanie - + Installed Zainstalowane - + Failed Błąd - + + Waiting + Oczekiwanie + + + Same version installed Zainstalowana taka sama wersja - - Other version installed: %1 - Zainstalowana inna wersja: %1 + + Later version installed: %1 + Zainstalowana nowsza wersja: %1 + + + + Earlier version installed: %1 + Zainstalowana wcześniejsza wersja: %1 - SingleInstallPage + PackagesListView + + + Delete + Usuń + + + + QApplication - + Collapse Zwiń + + + SingleInstallPage - - Display details - Wyświetl szczegóły + + Collapse + Zwiń - + Install Zainstaluj - + Remove Usuń - + Reinstall Przeinstaluj - + OK OK - + Back Wstecz - + Done Gotowe - + + Later version installed: %1 + Zainstalowana nowsza wersja: %1 + + + + Earlier version installed: %1 + Zainstalowana wcześniejsza wersja: %1 + + + + Installing dependencies: %1 + Instalowanie zależności: %1 + + + + Failed to install %1 + Nie udało się zainstalować %1 + + + 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 + SingleInstallPage_Install - - Display related packages - Wyświetl pakiety powiązane + + + + Show details + Pokaż szczegóły + + + SingleInstallPage_Uninstall - + + + Show details + Pokaż szczegóły + + + + UninstallConfirmPage + + Collapse Zwiń - + + Show related packages + Pokaż powiązane pakiety + + + 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 + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Czy na pewno chcesz odinstalować% 1? +System lub inne aplikacje mogą nie działać poprawnie + main - - Deepin Package Manager - Zarządzanie pakietami Deepin + + + Package Installer + Instalator pakietów - - 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ą. + + Package Installer helps users install and remove local packages, and supports bulk installation. + Instalator pakietów pomaga użytkownikom instalować i usuwać pakiety lokalne oraz obsługuje instalację zbiorczą. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_pt_BR.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_pt_BR.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_pt_BR.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_pt_BR.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + Insira o número para configurar: + + + + OK + Ok + + + DebInstaller - - Dark theme - Tema escuro + + Package Installer + Instalador de Pacotes + + + + The deb package may be broken + O pacote .deb pode estar quebrado - - Deepin Package Manager - Deepin Gerenciador de Pacotes + + Already Added + Já Adicionado - + Bulk Install Instalação em Massa @@ -20,46 +38,74 @@ DebListModel - + + Installation failed, please check your network connection - Falha na instalação, verifique sua conexão com a internet + Erro na Instalação! Verifique sua conexão - - Installation failed, please check updates in Control Center - Falha na instalação, verifique se há atualizações pendentes na Central de Controle + + Installation failed, please check for updates in Control Center + Erro na instalação. Verifique se há atualizações no Centro de Controle. - + + + Installation failed, insufficient disk space - Falha na instalação, espaço insuficiente em disco + Erro na Instalação! Espaço insuficiente no disco - + Installation Failed - Falha na Instalação. + Erro na Instalação. + + + + Failed to install %1 + Falha ao instalar %1 + + + + Unable to install + Não foi possível instalar + + + + This package does not have a valid digital signature + Este pacote não possui uma assinatura digital válida - - - Broken Dependencies: %1 - Dependências Quebradas: %1 + + OK + Ok - + + + Broken dependencies: %1 + Dependências quebradas: %1 + + + + Authentication failed + A autenticação falhou + + + Unmatched package architecture - Arquitetura de pacote incompatível + Arquitetura do pacote incompatível FileChooseWidget - - Drag and drop file here - Arraste e solte o arquivo aqui + + Drag deb packages here + Arraste os pacotes .deb aqui - + Select File Selecione o Arquivo @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse - Ocultar detalhes + Recolher - - Display details + + Show details Exibir detalhes - + Install Instalar - + Done Concluído - + Back Voltar + + + Installing dependencies: %1 + Instalando dependências: %1 + PackagesListDelegate - + Installing Instalando - + Installed Instalado - + Failed Falhou - + + Waiting + Esperando + + + Same version installed Versão já instalada - - Other version installed: %1 - Outra versão está instalada: %1 + + Later version installed: %1 + Última versão instalada: %1 + + + + Earlier version installed: %1 + Versão anterior instalada: %1 - SingleInstallPage + PackagesListView + + + Delete + Excluir + + + + QApplication - + Collapse - Ocultar detalhes + Recolher + + + SingleInstallPage - - Display details - Exibir detalhes + + Collapse + Recolher - + Install Instalar - + Remove Remover - + Reinstall Reinstalar - + OK - OK + Ok - + Back Voltar - + Done Concluído - + + Later version installed: %1 + Última versão instalada: %1 + + + + Earlier version installed: %1 + Versão anterior instalada: %1 + + + + Installing dependencies: %1 + Instalando dependências: %1 + + + + Failed to install %1 + Falha ao instalar %1 + + + Version: Versão: - + Installed successfully - Instalado com sucesso + Instalado - + Uninstalled successfully - Desinstalado com sucesso - - - - Other version installed: %1 - Outra versão está instalada: %1 + Desinstalado - + + Uninstall Failed - Falha na Desinstalação + Falha na desinstalação - + Name: Nome: - + Same version installed Versão já instalada - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - Exibir pacotes relacionados + + + + Show details + Exibir detalhes + + + SingleInstallPage_Uninstall - + + + Show details + Exibir detalhes + + + + UninstallConfirmPage + + Collapse - Ocultar detalhes + Recolher + + + + Show related packages + Exibir os pacotes relacionados - + Cancel Cancelar - + Confirm Confirmar - + Are you sure you want to uninstall %1? All dependencies will also be removed - Deseja desinstalar %1? + Desinstalar %1? Todas as dependências serão removidas + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Desinstalar %1? +O sistema ou outros aplicativos podem não funcionar corretamente + main - - Deepin Package Manager - Deepin Gerenciador de Pacotes + + + Package Installer + Instalador 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. + + Package Installer helps users install and remove local packages, and supports bulk installation. + O Instalador de Pacotes ajuda os usuários a instalar e remover pacotes locais e suporta a instalação em massa. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_pt.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_pt.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_pt.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_pt.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,52 +1,98 @@ + AptConfigMessage + + + Enter the number to configure: + Introduza o número a configurar: + + + + OK + Aceitar + + + DebInstaller - - Dark theme - Tema escuro + + Package Installer + Instalador de Pacotes + + + + The deb package may be broken + O pacote deb pode estar corrompido - - Deepin Package Manager - Deepin Package Manager + + Already Added + Já adicionado - + Bulk Install - Instalação em Volume + Instalação em massa DebListModel - + + Installation failed, please check your network connection - A instalação falhou, por favor, verifique a sua ligação à Internet + Falha na instalação, 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, please check for updates in Control Center + Falha na instalação, verifique se há atualizações no Centro de Controlo - + + + Installation failed, insufficient disk space - Instalação falhou, espaço insuficiente no disco + Falha na instalação, espaço em disco insuficiente - + Installation Failed - Instalação falhou + Falha na instalação + + + + Failed to install %1 + Falha ao instalar %1 + + + + Unable to install + Incapaz de instalar + + + + This package does not have a valid digital signature + Este pacote não tem uma assinatura digital válida + + + + OK + Aceitar - - - Broken Dependencies: %1 + + + Broken dependencies: %1 Dependências com problemas: %1 - + + Authentication failed + Falha na autenticação + + + Unmatched package architecture Arquitetura do pacote não compatível @@ -54,191 +100,260 @@ FileChooseWidget - - Drag and drop file here - Arraste e largue aqui o ficheiro + + Drag deb packages here + Arraste os pacotes deb para aqui - + Select File - Selecionar Ficheiro + Selecionar ficheiro MultipleInstallPage - + Collapse - Colapso + Ocultar - - Display details - Exibir detalhes + + Show details + Mostrar detalhes - + Install Instalar - + Done Concluído - + Back Anterior + + + Installing dependencies: %1 + A instalar dependências: %1 + PackagesListDelegate - + Installing A Instalar - + Installed Instalado - + Failed Falhou - + + Waiting + Aguardar + + + Same version installed A mesma versão já está instalada - - Other version installed: %1 - Outra versão instalada: %1 + + Later version installed: %1 + Versão posterior instalada: %1 + + + + Earlier version installed: %1 + Versão anterior instalada: %1 - SingleInstallPage + PackagesListView + + + Delete + Eliminar + + + + QApplication - + Collapse Ocultar + + + SingleInstallPage - - Display details - Exibir detalhes + + Collapse + Ocultar - + Install Instalar - + Remove Remover - + Reinstall Reinstalar - + OK - OK + Aceitar - + Back Anterior - + Done Concluído - + + Later version installed: %1 + Versão posterior instalada: %1 + + + + Earlier version installed: %1 + Versão anterior instalada: %1 + + + + Installing dependencies: %1 + A instalar dependências: %1 + + + + Failed to install %1 + Falha ao instalar %1 + + + 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 + Falha na desinstalação - + Name: Nome: - + Same version installed A mesma versão já está instalada - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - Mostrar pacotes relacionados + + + + Show details + Mostrar detalhes + + + + SingleInstallPage_Uninstall + + + + Show details + Mostrar detalhes + + + UninstallConfirmPage - + Collapse Ocultar - + + Show related packages + Mostrar pacotes relacionados + + + 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 + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Tem a certeza que deseja desinstalar %1? +O sistema ou outras aplicações podem não funcionar corretamente + main - - Deepin Package Manager - Deepin Package Manager + + + Package Installer + Instalador de Pacotes - - 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. + + Package Installer helps users install and remove local packages, and supports bulk installation. + O Instalador de Pacotes ajuda os utilizadores a instalar e remover pacotes locais e suporta a instalação em massa. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ru.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_ru.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ru.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_ru.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + Введите номер чтобы сконфигурировать + + + + OK + OK + + + DebInstaller - - Dark theme - Темная тема + + Package Installer + Установщик Пакетов - - Deepin Package Manager - Менеджер Пакетов Deepin + + The deb package may be broken + Пакет deb может быть поврежден - + + Already Added + Уже добавлен + + + Bulk Install Массовая Установка @@ -20,33 +38,61 @@ DebListModel - + + Installation failed, please check your network connection - Установка не удалась, проверьте ваше интернет подключение + Установка не удалась, проверьте ваше интернет соединение - - Installation failed, please check updates in Control Center - Установка не удалась, пожалуйста проверьте обновления в Центре Управления + + Installation failed, please check for updates in Control Center + Установка не удалась, проверьте обновления в Центре Управления - + + + Installation failed, insufficient disk space Установка не удалась, недостаточно места на диске - + Installation Failed - Ошибка Установки + Установка не удалась + + + + Failed to install %1 + Не удалось установить %1 + + + + Unable to install + Невозможно установить + + + + This package does not have a valid digital signature + Пакет не имеет действующей цифровой подписи + + + + OK + OK - - - Broken Dependencies: %1 + + + Broken dependencies: %1 Нарушены Зависимости: %1 - + + Authentication failed + Аутентификация не удалась + + + Unmatched package architecture Архитектура пакета некорректна @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Перетащите файл сюда + + Drag deb packages here + Перетащите пакеты deb сюда - + Select File Выберите Файл @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse Свернуть - - Display details - Показать детали + + Show details + Показать подробности - + Install - Установка + Установить - + Done Готово - + Back Назад + + + Installing dependencies: %1 + Установка зависимостей: %1 + PackagesListDelegate - + Installing Установка - + Installed Установлено - + Failed Не удалось - + + Waiting + Ожидание + + + Same version installed Эта версия уже установлена - - Other version installed: %1 - Другая версия установлена: %1 + + Later version installed: %1 + Более поздняя версия уже установлена: %1 + + + + Earlier version installed: %1 + Установлена более ранняя версия: %1 - SingleInstallPage + PackagesListView - + + Delete + Удалить + + + + QApplication + + Collapse Свернуть + + + SingleInstallPage - - Display details - Показать детали + + Collapse + Свернуть - + Install Установить - + Remove Удалить - + Reinstall Переустановить - + OK OK - + Back Назад - + Done Готово - + + Later version installed: %1 + Более поздняя версия уже установлена: %1 + + + + Earlier version installed: %1 + Установлена более ранняя версия: %1 + + + + Installing dependencies: %1 + Установка зависимостей: %1 + + + + Failed to install %1 + Не удалось установить %1 + + + Version: Версия: - + Installed successfully Установка успешно завершена - + Uninstalled successfully Удаление успешно завершено - - Other version installed: %1 - Другая версия установлена: %1 - - - + + Uninstall Failed Ошибка Удаления - + Name: Наименование: - + Same version installed Эта версия уже установлена - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - Показать связанные пакеты + + + + Show details + Показать подробности + + + + SingleInstallPage_Uninstall + + + + Show details + Показать подробности + + + UninstallConfirmPage - + Collapse Свернуть - + + Show related packages + Показать связанные пакеты + + + Cancel Отмена - + Confirm Подтвердить - + Are you sure you want to uninstall %1? All dependencies will also be removed Вы действительно хотите удалить %1? Все зависимости также будут удалены. + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Вы действительно хотите удалить %1? +Это может привести к неправильной работе системы и других приложений. + main - - Deepin Package Manager - Менеджер Пакетов Deepin + + + Package Installer + Установщик Пакетов - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - Менеджер Пакетов Deepin используется, чтобы помочь пользователям устанавливать и удалять локальные пакеты, поддерживая массовую установку. + + Package Installer helps users install and remove local packages, and supports bulk installation. + Установщик Пакетов используется для установки и удаления программного обеспечения и поддерживает массовую установку приложений. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_sk.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_sk.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_sk.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_sk.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,38 @@ - + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + OK + + DebInstaller - - Dark theme - Tmavá téma + + Package Installer + - - Deepin Package Manager - Deepin Správca balíčkov + + The deb package may be broken + - + + Already Added + + + + Bulk Install Hromadná inštalácia @@ -20,33 +40,61 @@ 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, please check for updates in Control Center + - + + + 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 + + Failed to install %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + OK + + + + + Broken dependencies: %1 + - + + Authentication failed + + + + Unmatched package architecture Nezabezpečená architektúra balíčkov @@ -54,12 +102,12 @@ FileChooseWidget - - Drag and drop file here - Tu pretiahnite a pustite súbor + + Drag deb packages here + - + Select File Vybrať súbor @@ -67,178 +115,246 @@ MultipleInstallPage - + Collapse Zbaliť - - Display details - Zobraziť podrobnosti + + Show details + - + Install Inštalovať - + Done Hotovo - + Back Späť + + + Installing dependencies: %1 + + PackagesListDelegate - + Installing Inštalujem - + Installed Nainštalované - + Failed Neúspešné - + + Waiting + + + + Same version installed Rovnaká verzia je nainštalovaná - - Other version installed: %1 - Iná inštalovaná verzia: %1 + + Later version installed: %1 + + + + + Earlier version installed: %1 + Nainštalovaná skoršia verzia: %1 - SingleInstallPage + PackagesListView + + + Delete + + + + + QApplication - + Collapse Zbaliť + + + SingleInstallPage - - Display details - Zobraziť podrobnosti + + Collapse + Zbaliť - + Install Inštalovať - + Remove Odstrániť - + Reinstall Reinštalovať - + OK OK - + Back Späť - + Done Hotovo - + + Later version installed: %1 + + + + + Earlier version installed: %1 + Nainštalovaná skoršia verzia: %1 + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + 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 + SingleInstallPage_Install - - Display related packages - Zobraziť súvisiace balíčky + + + + Show details + + + + SingleInstallPage_Uninstall - + + + Show details + + + + + UninstallConfirmPage + + Collapse Zbaliť - + + Show related packages + + + + 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é + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + main - - Deepin Package Manager - Deepin Správca balíčkov + + + Package Installer + - - 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. + + Package Installer helps users install and remove local packages, and supports bulk installation. + - \ No newline at end of file + diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_sl.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_sl.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_sl.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_sl.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,38 @@ - + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + V redu + + DebInstaller - - Dark theme - + + Package Installer + - - Deepin Package Manager - Upravitelj paketov Deepin + + The deb package may be broken + - + + Already Added + + + + Bulk Install Bulk namestitev @@ -20,33 +40,61 @@ 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, please check for updates in Control Center + - + + + 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 + + Failed to install %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + V redu + + + + + Broken dependencies: %1 + - + + Authentication failed + + + + Unmatched package architecture Neskladna paketna arhitektura @@ -54,12 +102,12 @@ FileChooseWidget - - Drag and drop file here - Tukaj povlecite in spustite datoteko + + Drag deb packages here + - + Select File Izberi datoteko @@ -67,177 +115,245 @@ MultipleInstallPage - + Collapse Skrij - - Display details - Prikaži podrobnosti + + Show details + - + Install Namesti - + Done Opravljeno - + Back Nazaj + + + Installing dependencies: %1 + + PackagesListDelegate - + Installing Nameščam - + Installed Nameščeno - + Failed Ni uspelo - + + Waiting + + + + Same version installed Ista različica že nameščena - - Other version installed: %1 - Druga različica nameščena: %1 + + Later version installed: %1 + + + + + Earlier version installed: %1 + - SingleInstallPage + PackagesListView + + + Delete + + + + + QApplication - + Collapse Skrij + + + SingleInstallPage - - Display details - Prikaži podrobnosti + + Collapse + Skrij - + Install Namesti - + Remove Odstrani - + Reinstall Ponovno namesti - + OK V redu - + Back Nazaj - + Done Opravljeno - + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + 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 + SingleInstallPage_Install - - Display related packages - Prikaži podobne pakete + + + + Show details + + + + SingleInstallPage_Uninstall - + + + Show details + + + + + UninstallConfirmPage + + Collapse Skrij - + + Show related packages + + + + Cancel Prekliči - + Confirm Potrdi - + Are you sure you want to uninstall %1? All dependencies will also be removed - + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + main - - Deepin Package Manager - Upravitelj paketov Deepin + + + Package Installer + - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - + + Package Installer helps users install and remove local packages, and supports bulk installation. + - \ No newline at end of file + diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_sq.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_sq.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_sq.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_sq.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,359 @@ + + + AptConfigMessage + + + Enter the number to configure: + Jepni numrin për formësim: + + + + OK + OK + + + + DebInstaller + + + Package Installer + Instalues Paketash + + + + The deb package may be broken + Paketa deb mund të jetë e dëmtuar + + + + Already Added + E shtuar Tashmë + + + + Bulk Install + Instalim Në Masë + + + + DebListModel + + + + Installation failed, please check your network connection + Instalimi dështoi, ju lutemi, kontrolloni lidhjen tuaj në rrjet + + + + Installation failed, please check for updates in Control Center + Instalimi dështoi, ju lutemi, kontrolloni te Qendër Kontrolli për përditësime + + + + + + Installation failed, insufficient disk space + Instalimi dështoi, hapësirë disku e pamjaftueshme + + + + Installation Failed + Instalimi Dështoi + + + + Failed to install %1 + S’u arrit të instalohej %1 + + + + Unable to install + S’arrihet të instalohet + + + + This package does not have a valid digital signature + Kjo paketë s’ka një nënshkrim dixhital të vlefshëm + + + + OK + OK + + + + + Broken dependencies: %1 + Varësi të papërmbushura: %1 + + + + Authentication failed + Mirëfilltësimi dështoi + + + + Unmatched package architecture + Arkitekturë paketash e papërputhshme + + + + FileChooseWidget + + + Drag deb packages here + Tërhiqini këtu paketa deb + + + + Select File + Përzgjidhni Kartelë + + + + MultipleInstallPage + + + Collapse + Tkurre + + + + Show details + Shfaq hollësi + + + + Install + Instaloje + + + + Done + U bë + + + + Back + Mbrapsht + + + + Installing dependencies: %1 + Po instalohen varësi: %1 + + + + PackagesListDelegate + + + Installing + Po instalohet + + + + Installed + E instaluar + + + + Failed + Dështoi + + + + Waiting + Po pritet + + + + Same version installed + Version i njëjtë i instaluar + + + + Later version installed: %1 + Version më i vonshëm i instaluar: %1 + + + + Earlier version installed: %1 + Version më i hershëm i instaluar: %1 + + + + PackagesListView + + + Delete + Fshije + + + + QApplication + + + Collapse + Tkurre + + + + SingleInstallPage + + + Collapse + Tkurre + + + + Install + Instaloje + + + + Remove + Hiqe + + + + Reinstall + Riinstaloje + + + + OK + OK + + + + Back + Mbrapsht + + + + Done + U bë + + + + Later version installed: %1 + Version më i vonshëm i instaluar: %1 + + + + Earlier version installed: %1 + Version më i hershëm i instaluar: %1 + + + + Installing dependencies: %1 + Po instalohen varësi: %1 + + + + Failed to install %1 + S’u arrit të instalohej %1 + + + + Version: + Version: + + + + Installed successfully + U instalua me sukses + + + + Uninstalled successfully + U çinstalua me sukses + + + + + Uninstall Failed + Çinstalimi Dështoi + + + + Name: + Emër: + + + + Same version installed + Version i njëjtë i instaluar + + + + SingleInstallPage_Install + + + + + Show details + Shfaq hollësi + + + + SingleInstallPage_Uninstall + + + + Show details + Shfaq hollësi + + + + UninstallConfirmPage + + + Collapse + Tkurre + + + + Show related packages + Shfaq paketa të afërta + + + + Cancel + Anuloje + + + + Confirm + Ripohojeni + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + Jeni i sigurt se doni të çinstalohet %1? +Do të hiqen krejt varësitë + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Jeni i sigurt se doni të çinstalohet %1? +Sistemi ose aplikacione të tjera mund të mos punojnë si duhet + + + + main + + + + Package Installer + Instalues Paketash + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Instaluesi i Paketave i ndihmon përdoruesit të instalojnë dhe heqin paketa vendore, dhe mbulon instalime në masë. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_sr.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_sr.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_sr.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_sr.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + Унесите број да прилагодите: + + + + OK + У реду + + + DebInstaller - - Dark theme - Тамна тема + + Package Installer + Инсталатер Пакета - - Deepin Package Manager - Дипин Управник Пакета + + The deb package may be broken + deb пакет је можда оштећен - + + Already Added + Већ додато + + + Bulk Install Групно инсталирање @@ -20,33 +38,61 @@ DebListModel - + + Installation failed, please check your network connection - Инсталација неуспешна, молимо проверите везу са мрежом + Неуспешна инсталација, молимо проверите везу са мрежом - - Installation failed, please check updates in Control Center - Инсталација неуспешна, молимо проверите ажурирања у Контролном Центру + + Installation failed, please check for updates in Control Center + Неуспешна инсталација, молимо проверите ажурирања у Контролном Центру - + + + Installation failed, insufficient disk space - Инсталација неуспешна, недовољно простора на диску + Неуспашна инсталација, недовољно простора на диску - + Installation Failed - Инсталација неуспешна + Неуспашна инсталација + + + + Failed to install %1 + Неуспешна инсталација %1 + + + + Unable to install + Не могу да инсталирам + + + + This package does not have a valid digital signature + Пакет нема важећи дигитални потпис - - - Broken Dependencies: %1 + + OK + У реду + + + + + Broken dependencies: %1 Незадовољене зависности: %1 - + + Authentication failed + Неуспешна идентификација + + + Unmatched package architecture Неподударна архитектура пакета @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Превуци и убаци датотеку овде + + Drag deb packages here + Превуци deb датотеку овде - + Select File Изабери датотеку @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse Скупи - - Display details - Прикажи детаље + + Show details + Детаљи - + Install Инсталирај - + Done Готово - + Back Назад + + + Installing dependencies: %1 + Инсталирање зависности: %1 + PackagesListDelegate - + Installing Инсталирање - + Installed Инсталирано - + Failed Неуспешно - + + Waiting + Чекам + + + Same version installed Иста верзија је инсталирана - - Other version installed: %1 - Друга верзија је инсталирана: %1 + + Later version installed: %1 + Новија верзија је инсталирана: %1 + + + + Earlier version installed: %1 + Старија верзија је инсталирана: %1 - SingleInstallPage + PackagesListView - + + Delete + Обриши + + + + QApplication + + Collapse Скупи + + + SingleInstallPage - - Display details - Прикажи детаље + + Collapse + Скупи - + Install Инсталирај - + Remove Уклони - + Reinstall Инсталирај - + OK У реду - + Back Назад - + Done Готово - + + Later version installed: %1 + Новија верзија је инсталирана: %1 + + + + Earlier version installed: %1 + Старија верзија је инсталирана: %1 + + + + Installing dependencies: %1 + Инсталирање зависности: %1 + + + + Failed to install %1 + Неуспешна инсталација %1 + + + Version: Верзија: - + Installed successfully Успешно инсталирано - + Uninstalled successfully Успешно уклоњено - - Other version installed: %1 - Друга верзија је инсталирана: %1 - - - + + Uninstall Failed - Уклањање неуспешно + Неуспешно уклањање - + Name: Име: - + Same version installed Иста верзија је инсталирана - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - Прикажи повезане пакете + + + + Show details + Детаљи + + + SingleInstallPage_Uninstall - + + + Show details + Детаљи + + + + UninstallConfirmPage + + Collapse Скупи - + + Show related packages + Прикажи повезане пакете + + + Cancel Откажи - + Confirm Потврди - + Are you sure you want to uninstall %1? All dependencies will also be removed Заиста желите да уклоните %1? -Све зависности биће уклоњене такође +Биће уклоњене и све зависности + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Заиста желита да уклоните %1? +Систем и програми можда неће радити исправно main - - Deepin Package Manager - Дипин Управник Пакета + + + Package Installer + Инсталатер Пакета - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - Дипин Управник Пакета је програм који помаже корисницима при инсталирању и уклањању локалног софтвера. Подржава групну инсталацију. + + Package Installer helps users install and remove local packages, and supports bulk installation. + Инсалатер пакета помаже корисницима да инсталирају и уклањају локалне пакете. Подржава групну инсталацију. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_tr.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_tr.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_tr.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_tr.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + Yapılandırılacak numarayı gir: + + + + OK + Tamam + + + DebInstaller - - Dark theme - Koyu tema + + Package Installer + Paket Kurucu - - Deepin Package Manager - Deepin Paket Yöneticisi + + The deb package may be broken + Deb paketi bozulmuş olabilir - + + Already Added + Zaten Eklenmiş + + + Bulk Install Toplu Kurulum @@ -20,33 +38,61 @@ 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, please check for updates in Control Center + Kurulum başarısız, lütfen Kontrol Merkezindeki güncellemeleri kontrol edin - + + + Installation failed, insufficient disk space Kurulum tamamlanamadı, disk alanı yetersiz - + Installation Failed Kurulum tamamlanamadı - - - Broken Dependencies: %1 - Kopuk Bağımlılıklar: %1 + + Failed to install %1 + %1 Kurulamadı + + + + Unable to install + Kurulamıyor - + + This package does not have a valid digital signature + Bu paketin geçerli bir dijital imzası yok + + + + OK + Tamam + + + + + Broken dependencies: %1 + Bozuk bağımlılıklar: %1 + + + + Authentication failed + Kimlik doğrulama başarısız + + + Unmatched package architecture Paket mimarisi uyumsuz @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Dosyayı sürükleyip buraya bırakın + + Drag deb packages here + Deb paketlerini buraya sürükle - + Select File Dosya Seç @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse Daralt - - Display details - Ayrıntıları görüntüle + + Show details + Ayrıntıları göster - + Install Kur - + Done Bitti - + Back Geri + + + Installing dependencies: %1 + Bağımlılıklar kuruluyor: %1 + PackagesListDelegate - + Installing Kuruluyor - + Installed Kuruldu - + Failed Başarısız - + + Waiting + Bekleniyor + + + Same version installed Aynı sürüm kurulu - - Other version installed: %1 - Başka bir sürüm kurulmuş: %1 + + Later version installed: %1 + Daha sonraki sürüm kurulu: %1 + + + + Earlier version installed: %1 + Önceki sürüm kurulu: %1 - SingleInstallPage + PackagesListView - + + Delete + Sil + + + + QApplication + + Collapse Daralt + + + SingleInstallPage - - Display details - Ayrıntıları görüntüle + + Collapse + Daralt - + Install Kur - + Remove Kaldır - + Reinstall Yeniden kur - + OK Tamam - + Back Geri - + Done Bitti - + + Later version installed: %1 + Daha sonraki sürüm kurulu: %1 + + + + Earlier version installed: %1 + Önceki sürüm kurulu: %1 + + + + Installing dependencies: %1 + Bağımlılıklar kuruluyor: %1 + + + + Failed to install %1 + %1 Kurulamadı + + + 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 + SingleInstallPage_Install - - Display related packages - İlgili paketleri görüntüle + + + + Show details + Ayrıntıları göster + + + SingleInstallPage_Uninstall - + + + Show details + Ayrıntıları göster + + + + UninstallConfirmPage + + Collapse Daralt - + + Show related packages + İlgili paketleri göster + + + 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 + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + %1 uygulamasını kaldırmak istediğinizden emin misiniz? +Sistem veya diğer uygulamalar düzgün çalışmayabilir + main - - Deepin Package Manager - Deepin Paket Yöneticisi + + + Package Installer + Paket Kurucu - - 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. + + Package Installer helps users install and remove local packages, and supports bulk installation. + Paket Kurucu, kullanıcıların yerel paketleri kurmasına ve kaldırmasına yardımcı olur ve toplu kurulumu destekler. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,245 +1,361 @@ - + + + AptConfigMessage + + + Enter the number to configure: + Enter the number to configure: + + + + OK + OK + + DebInstaller - - Dark theme - + + Package Installer + Package Installer - - Deepin Package Manager - + + The deb package may be broken + The deb package may be broken - + + Already Added + Already Added + + + 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, please check for updates in Control Center + Installation failed, please check for updates in Control Center - + + + Installation failed, insufficient disk space - + Installation failed, insufficient disk space - + Installation Failed - + Installation Failed + + + + Failed to install %1 + Failed to install %1 - - - Broken Dependencies: %1 - + + Unable to install + Unable to install - + + This package does not have a valid digital signature + This package does not have a valid digital signature + + + + OK + OK + + + + + Broken dependencies: %1 + Broken dependencies: %1 + + + + Authentication failed + Authentication failed + + + Unmatched package architecture - + Unmatched package architecture FileChooseWidget - - Drag and drop file here - + + Drag deb packages here + Drag deb packages here - + Select File - + Select File MultipleInstallPage - + Collapse - + Collapse - - Display details - + + Show details + Show details - + Install - + Install - + Done - + Done - + Back - + Back + + + + Installing dependencies: %1 + Installing dependencies: %1 PackagesListDelegate - + Installing - + Installing - + Installed - + Installed - + Failed - + Failed - + + Waiting + Waiting + + + Same version installed - + Same version installed + + + + Later version installed: %1 + Later version installed: %1 - - Other version installed: %1 - + + Earlier version installed: %1 + Earlier version installed: %1 - SingleInstallPage + PackagesListView + + + Delete + Delete + + + + QApplication - + Collapse - + Collapse + + + SingleInstallPage - - Display details - + + Collapse + Collapse - + Install - + Install - + Remove - + Remove - + Reinstall - + Reinstall - + OK - + OK - + Back - + Back - + Done - + Done + + + + Later version installed: %1 + Later version installed: %1 - + + Earlier version installed: %1 + Earlier version installed: %1 + + + + Installing dependencies: %1 + Installing dependencies: %1 + + + + Failed to install %1 + Failed to install %1 + + + Version: - + Version: - + Installed successfully - + Installed successfully - + Uninstalled successfully - + Uninstalled successfully - - Other version installed: %1 - - - - + Uninstall Failed - + Uninstall Failed - + Name: - + Name: - + Same version installed - + Same version installed - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - + + + + + Show details + Show details + + + SingleInstallPage_Uninstall + + + + Show details + Show details + + + + UninstallConfirmPage - + Collapse - + Collapse + + + + Show related packages + Show related packages - + Cancel - + Cancel - + Confirm - + Confirm - + Are you sure you want to uninstall %1? All dependencies will also be removed - + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Are you sure you want to uninstall %1? +The system or other applications may not work properly main - - Deepin Package Manager - + + + Package Installer + Package Installer - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - + + Package Installer helps users install and remove local packages, and supports bulk installation. + Package Installer helps users install and remove local packages, and supports bulk installation. diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ug.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_ug.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_ug.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_ug.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,359 @@ + + + AptConfigMessage + + + Enter the number to configure: + تەڭشەش ئۈچۈن نومۇرنى كىرگۈزۈڭ: + + + + OK + تامام + + + + DebInstaller + + + Package Installer + بوغچا قاچىلىغۇچ + + + + The deb package may be broken + deb بوغچىسى بۇزۇلغان بولۇشى مۇمكىن + + + + Already Added + بۇرۇنلا قوشۇلغان + + + + Bulk Install + توپ قاچىلاش + + + + DebListModel + + + + Installation failed, please check your network connection + قاچىلاش مەغلۇپ بولدى ، تور ئۇلىنىشىڭىزنى تەكشۈرۈپ بېقىڭ + + + + Installation failed, please check for updates in Control Center + قاچىلاش مەغلۇپ بولدى ، كونترول مەركىزىدىكى يېڭىلانمىلارنى تەكشۈرۈپ بېقىڭ + + + + + + Installation failed, insufficient disk space + قاچىلاش مەغلۇپ بولدى ، دىسكا بوشلۇقى يېتەرلىك ئەمەس + + + + Installation Failed + قاچىلاش مەغلۇب بولدى + + + + Failed to install %1 + نى قاچىلىيالمىدى %1 + + + + Unable to install + قاچىلاشقا ئامالسىز + + + + This package does not have a valid digital signature + بۇ بولاقنىڭ ئۈنۈملۈك رەقەملىك ئىمزاسى يوق + + + + OK + تامام + + + + + Broken dependencies: %1 + بۇزۇلغان بېقىنىشچانلىقى:% 1 + + + + Authentication failed + دەلىللەش مەغلۇپ بولدى + + + + Unmatched package architecture + تەڭداشسىز يۈرۈشلۈك قۇرۇلما + + + + FileChooseWidget + + + Drag deb packages here + ئەپ بوغچىسىنى بۇ يەرگە سۆرەپ كىرىڭ + + + + Select File + ھۆججەتنى تاللاڭ + + + + MultipleInstallPage + + + Collapse + يىمىرىش + + + + Show details + تەپسىلىي ئۇچۇرىنى كۆرسىتىش + + + + Install + قاچىلاش + + + + Done + تامام + + + + Back + قايتىش + + + + Installing dependencies: %1 + بېقىنما %1 نى قاچىلاۋاتىدۇ + + + + PackagesListDelegate + + + Installing + قاچىلاش + + + + Installed + قاچىلاندى + + + + Failed + مەغلۇب بولدى + + + + Waiting + ساقلاڭ + + + + Same version installed + ئوخشاش نەشىرى قاچىلاندى + + + + Later version installed: %1 + ئەڭ يېڭى نەشىرى قاچىلاندى %1 + + + + Earlier version installed: %1 + بۇرۇنقى نەشىرى قاچىلاندى %1 + + + + PackagesListView + + + Delete + ئۆچۈرۈش + + + + QApplication + + + Collapse + يىمىرىش + + + + SingleInstallPage + + + Collapse + يىمىرىش + + + + Install + قاچىلاش + + + + Remove + ئۆچۈرۈڭ + + + + Reinstall + قايتا قاچىلاش + + + + OK + تامام + + + + Back + قايتىش + + + + Done + تامام + + + + Later version installed: %1 + ئەڭ يېڭى نەشىرى قاچىلاندى %1 + + + + Earlier version installed: %1 + بۇرۇنقى نەشىرى قاچىلاندى %1 + + + + Installing dependencies: %1 + بېقىنما %1 نى قاچىلاۋاتىدۇ + + + + Failed to install %1 + نى قاچىلىيالمىدى %1 + + + + Version: + نەشىرى: + + + + Installed successfully + قاچىلاش تاماملاندى + + + + Uninstalled successfully + ئۆچۈرۋېتىش تاماملاندى + + + + + Uninstall Failed + ئۆچۈرۈش مەغلۇپ بولدى + + + + Name: + ئىسمى: + + + + Same version installed + ئوخشاش نەشىرى قاچىلاندى + + + + SingleInstallPage_Install + + + + + Show details + تەپسىلىي ئۇچۇرىنى كۆرسىتىش + + + + SingleInstallPage_Uninstall + + + + Show details + تەپسىلىي ئۇچۇرىنى كۆرسىتىش + + + + UninstallConfirmPage + + + Collapse + يىمىرىش + + + + Show related packages + مۇناسىۋەتلىك بوغچىنى كۆرسىتىش + + + + Cancel + ئەمەلدىن قالدۇرۇش + + + + Confirm + جەزملەشتۈرۈڭ + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + % 1 نى ئۆچۈرمەكچىمۇ؟ +بارلىق بېقىنىشلارمۇ چىقىرىۋېتىلىدۇ + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + % 1 نى ئۆچۈرمەكچىمۇ؟ +سىستېما ياكى باشقا قوللىنىشچان پروگراممىلار نورمال ئىشلىمەسلىكى مۇمكىن + + + + main + + + + Package Installer + بوغچا قاچىلىغۇچ + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + ئورالما ئورناتقۇچ ئىشلەتكۈچىلەرنىڭ يەرلىك ئورالمىلارنى ئورنىتىشى ۋە ئۆچۈرۈشىگە ياردەم بېرىدۇ ھەمدە توپ قاچىلاشنى قوللايدۇ. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_uk.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_uk.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_uk.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_uk.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + Введіть число для налаштовування: + + + + OK + Гаразд + + + DebInstaller - - Dark theme - Темна тема + + Package Installer + Встановлювач пакунків - - Deepin Package Manager - Менеджер пакунків Deepin + + The deb package may be broken + Ймовірно, пакунок deb пошкоджено - + + Already Added + Вже додано + + + Bulk Install Масова інсталяція @@ -20,33 +38,61 @@ DebListModel - + + Installation failed, please check your network connection Не вдалося встановити, перевірте підключення до мережі - - Installation failed, please check updates in Control Center + + Installation failed, please check for updates in Control Center Не вдалося встановити, перевірте оновлення в Центрі керування - + + + Installation failed, insufficient disk space Помилка встановлення, недостатньо місця на диску - + Installation Failed Не вдалося встановити - - - Broken Dependencies: %1 - Поламані залежності: %1 + + Failed to install %1 + Не вдалося встановити %1 + + + + Unable to install + Неможливо встановити - + + This package does not have a valid digital signature + Цей пакунок не має коректного цифрового підпису + + + + OK + Гаразд + + + + + Broken dependencies: %1 + Помилкові залежності: %1 + + + + Authentication failed + Не вдалося пройти розпізнавання + + + Unmatched package architecture Неперевершена архітектура пакету @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - Перетягніть файл сюди + + Drag deb packages here + Перетягніть пакети deb сюди - + Select File Вибрати Файл @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse Згорнути - - Display details - Покзати деталі + + Show details + Показати подробиці - + Install Встановити - + Done Завершити - + Back Назад + + + Installing dependencies: %1 + Встановлення залежностей: %1 + PackagesListDelegate - + Installing Встановлення - + Installed Встановлено - + Failed Помилка - + + Waiting + Очікування + + + Same version installed Одна і та сама версія встановлена - - Other version installed: %1 - Інша версія встановлена: %1 + + Later version installed: %1 + Встановлено пізнішу версію: %1 + + + + Earlier version installed: %1 + Встановлено старішу версію: %1 - SingleInstallPage + PackagesListView - + + Delete + Вилучити + + + + QApplication + + Collapse Згорнути + + + SingleInstallPage - - Display details - Покзати деталі + + Collapse + Згорнути - + Install Встановити - + Remove Видалити - + Reinstall Перевстановити - + OK Гаразд - + Back Назад - + Done Завершити - + + Later version installed: %1 + Встановлено пізнішу версію: %1 + + + + Earlier version installed: %1 + Встановлено старішу версію: %1 + + + + Installing dependencies: %1 + Встановлення залежностей: %1 + + + + Failed to install %1 + Не вдалося встановити %1 + + + Version: Версія: - + Installed successfully Встановлено успішно - + Uninstalled successfully Видалено успішно - - Other version installed: %1 - Інша версія встановлена: %1 - - - + + Uninstall Failed Не вдалося видалити  - + Name: Ім'я: - + Same version installed Одна і та сама версія встановлена - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - Покзати пов'язані пакети + + + + Show details + Показати подробиці + + + SingleInstallPage_Uninstall - + + + Show details + Показати подробиці + + + + UninstallConfirmPage + + Collapse Згорнути - + + Show related packages + Показати пов'язані пакунки + + + Cancel Скасувати - + Confirm Підтвердити - + Are you sure you want to uninstall %1? All dependencies will also be removed Ви впевнені що хочете видалити %1? Всі залежності також будуть видалені + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + Ви справді хочете вилучити %1? +Якщо цю програму буде вилучено, можливо, система або інші програми не зможуть працювати належним чином. + main - - Deepin Package Manager - Менеджер пакунків Deepin + + + Package Installer + Встановлювач пакунків - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - Засіб керування пакунками Deepin використовується для полегшення встановлення і вилучення локальних пакунків користувачем. Передбачено підтримку пакетного встановлення. + + Package Installer helps users install and remove local packages, and supports bulk installation. + За допомогою засобу встановлення пакунків користувачі можуть встановлювати і вилучати локальні пакунки. Передбачено пакетне встановлення. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_zh_CN.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_zh_CN.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_zh_CN.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_zh_CN.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + 请输入序号进行配置: + + + + OK + 确定 + + + DebInstaller - - Dark theme - 深色主题 + + Package Installer + 软件包安装器 - - Deepin Package Manager - 深度软件包管理器 + + The deb package may be broken + 请检查deb包是否损坏 - + + Already Added + 已添加 + + + Bulk Install 批量安装 @@ -20,33 +38,61 @@ DebListModel - + + Installation failed, please check your network connection 安装失败,请检查您的网络连接 - - Installation failed, please check updates in Control Center + + Installation failed, please check for updates in Control Center 安装失败,请在控制中心检查更新 - + + + Installation failed, insufficient disk space 安装失败,磁盘空间不足 - + Installation Failed 安装失败 - - - Broken Dependencies: %1 + + Failed to install %1 + %1安装失败 + + + + Unable to install + 无法安装 + + + + This package does not have a valid digital signature + 此安装包没有有效的数字签名 + + + + OK + 确定 + + + + + Broken dependencies: %1 依赖关系不满足:%1 - + + Authentication failed + 配置授权失败 + + + Unmatched package architecture 软件包架构不匹配 @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here + + Drag deb packages here 拖拽软件包到此 - + Select File 选择文件 @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse 收起 - - Display details + + Show details 显示详细信息 - + Install 安装 - + Done 完成 - + Back 返回 + + + Installing dependencies: %1 + 正在安装依赖:%1 + PackagesListDelegate - + Installing 正在安装 - + Installed 已安装 - + Failed 安装失败 - + + Waiting + 等待安装 + + + Same version installed 已安装相同版本 - - Other version installed: %1 - 已安装其他版本:%1 + + Later version installed: %1 + 已安装较新的版本:%1 + + + + Earlier version installed: %1 + 已安装较早的版本:%1 - SingleInstallPage + PackagesListView + + + Delete + 删除 + + + + QApplication - + Collapse 收起 + + + SingleInstallPage - - Display details - 显示详细信息 + + Collapse + 收起 - + Install 安装 - + Remove 卸载 - + Reinstall 重新安装 - + OK 确定 - + Back 返回 - + Done 完成 - + + Later version installed: %1 + 已安装较新的版本:%1 + + + + Earlier version installed: %1 + 已安装较早的版本:%1 + + + + Installing dependencies: %1 + 正在安装依赖:%1 + + + + Failed to install %1 + %1安装失败 + + + Version: 版本: - + Installed successfully 安装成功 - + Uninstalled successfully 卸载成功 - - Other version installed: %1 - 已安装其他版本:%1 - - - + + Uninstall Failed 卸载失败 - + Name: 名称: - + Same version installed 已安装相同版本 - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - 显示相关软件包 + + + + Show details + 显示详细信息 + + + + SingleInstallPage_Uninstall + + + + Show details + 显示卸载进程 + + + UninstallConfirmPage - + Collapse 收起 - + + Show related packages + 显示相关软件包 + + + Cancel 取消 - + Confirm - 确认卸载 + 确定卸载 - + Are you sure you want to uninstall %1? All dependencies will also be removed 您确定要卸载%1 吗? 所有依赖也会被一起移除 + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + 您确定要卸载%1吗? +卸载此软件可能会导致系统或其他软件无法正常使用 + main - - Deepin Package Manager - 深度软件包管理器 + + + Package Installer + 软件包安装器 - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - 深度软件包管理器用于帮助用户安装和卸载本地软件包,支持批量安装。 + + Package Installer helps users install and remove local packages, and supports bulk installation. + 软件包安装器用于帮助用户安装和卸载本地软件,支持批量安装。 \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_zh_HK.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_zh_HK.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_zh_HK.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_zh_HK.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,359 @@ + + + AptConfigMessage + + + Enter the number to configure: + 請輸入序號進行配置: + + + + OK + 確定 + + + + DebInstaller + + + Package Installer + 軟件包安裝器 + + + + The deb package may be broken + 請檢查deb包是否損壞 + + + + Already Added + 已添加 + + + + Bulk Install + 批量安裝 + + + + DebListModel + + + + Installation failed, please check your network connection + 安裝失敗,請檢查您的網絡連接 + + + + Installation failed, please check for updates in Control Center + 安裝失敗,請在控制中心檢查更新 + + + + + + Installation failed, insufficient disk space + 安裝失敗,磁盤空間不足 + + + + Installation Failed + 安裝失敗 + + + + Failed to install %1 + %1安裝失敗 + + + + Unable to install + 無法安裝 + + + + This package does not have a valid digital signature + 此安裝包沒有有效的數字簽名 + + + + OK + 確定 + + + + + Broken dependencies: %1 + 依賴關係不滿足:%1 + + + + Authentication failed + 配置授權失敗 + + + + Unmatched package architecture + 軟件包架構不匹配 + + + + FileChooseWidget + + + Drag deb packages here + 拖拽軟件包到此 + + + + Select File + 選擇文件 + + + + MultipleInstallPage + + + Collapse + 收起 + + + + Show details + 顯示詳細訊息 + + + + Install + 安裝 + + + + Done + 完成 + + + + Back + 返回 + + + + Installing dependencies: %1 + 正在安裝依賴:%1 + + + + PackagesListDelegate + + + Installing + 正在安裝 + + + + Installed + 已安裝 + + + + Failed + 安裝失敗 + + + + Waiting + 等待安裝 + + + + Same version installed + 已安裝相同版本 + + + + Later version installed: %1 + 已安裝較新的版本:%1 + + + + Earlier version installed: %1 + 已安裝較早的版本:%1 + + + + PackagesListView + + + Delete + 刪除 + + + + QApplication + + + Collapse + 收起 + + + + SingleInstallPage + + + Collapse + 收起 + + + + Install + 安裝 + + + + Remove + 卸載 + + + + Reinstall + 重新安裝 + + + + OK + 確定 + + + + Back + 返回 + + + + Done + 完成 + + + + Later version installed: %1 + 已安裝較新的版本:%1 + + + + Earlier version installed: %1 + 已安裝較早的版本:%1 + + + + Installing dependencies: %1 + 正在安裝依賴:%1 + + + + Failed to install %1 + %1安裝失敗 + + + + Version: + 版本: + + + + Installed successfully + 安裝成功 + + + + Uninstalled successfully + 卸載成功 + + + + + Uninstall Failed + 卸載失敗 + + + + Name: + 名稱: + + + + Same version installed + 已安裝相同版本 + + + + SingleInstallPage_Install + + + + + Show details + 顯示詳細訊息 + + + + SingleInstallPage_Uninstall + + + + Show details + 顯示卸載進程 + + + + UninstallConfirmPage + + + Collapse + 收起 + + + + Show related packages + 顯示相關軟件包 + + + + Cancel + 取消 + + + + Confirm + 確定卸載 + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + 您確定要卸載%1 嗎? +所有依賴也會被一起移除 + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + 您確定要卸載%1嗎? +卸載此軟件可能會導致系統或其他軟件無法正常使用 + + + + main + + + + Package Installer + 軟件包安裝器 + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + 軟件包安裝器用於幫助用戶安裝和卸載本地軟件,支持批量安裝。 + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/deepin-deb-installer_zh_TW.ts deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_zh_TW.ts --- deepin-deb-installer-5.0.0/translations/deepin-deb-installer_zh_TW.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/deepin-deb-installer_zh_TW.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,18 +1,36 @@ + AptConfigMessage + + + Enter the number to configure: + 請輸入序號進行配置: + + + + OK + 確定 + + + DebInstaller - - Dark theme - 暗色主題 + + Package Installer + 軟體包安裝器 - - Deepin Package Manager - Deepin 軟體包管理器 + + The deb package may be broken + 請檢查deb包是否損壞 - + + Already Added + 已添加 + + + Bulk Install 批次安裝 @@ -20,33 +38,61 @@ DebListModel - + + Installation failed, please check your network connection 安裝失敗,請檢查網路連線 - - Installation failed, please check updates in Control Center + + Installation failed, please check for updates in Control Center 安裝失敗,請於控制中心檢查更新 - + + + Installation failed, insufficient disk space 安裝失敗,磁碟機空間不足 - + Installation Failed 安裝失敗 - - - Broken Dependencies: %1 + + Failed to install %1 + %1安裝失敗 + + + + Unable to install + 無法安裝 + + + + This package does not have a valid digital signature + 此安裝包沒有有效的數位簽章 + + + + OK + 確定 + + + + + Broken dependencies: %1 缺少依賴軟體:%1 - + + Authentication failed + 配置授權失敗 + + + Unmatched package architecture 軟體套件結構不符合規範 @@ -54,12 +100,12 @@ FileChooseWidget - - Drag and drop file here - 拖曳檔案到此 + + Drag deb packages here + 拖曳軟體包到此 - + Select File 選擇檔案 @@ -67,178 +113,247 @@ MultipleInstallPage - + Collapse 隱藏 - - Display details - 顯示詳細資訊 + + Show details + 顯示詳細訊息 - + Install 安裝 - + Done 完成 - + Back 返回 + + + Installing dependencies: %1 + 正在安裝依賴:%1 + PackagesListDelegate - + Installing 正在安裝 - + Installed 已安裝 - + Failed 安裝失敗 - + + Waiting + 等待安裝 + + + Same version installed 已安裝相同版本 - - Other version installed: %1 - 已安裝其他版本:%1 + + Later version installed: %1 + 已安裝較新的版本:%1 + + + + Earlier version installed: %1 + 已安裝舊版本:%1 - SingleInstallPage + PackagesListView + + + Delete + 刪除 + + + + QApplication - + Collapse 隱藏 + + + SingleInstallPage - - Display details - 顯示詳細資訊 + + Collapse + 隱藏 - + Install 安裝 - + Remove 移除 - + Reinstall 重裝 - + OK 確定 - + Back 返回 - + Done 完成 - + + Later version installed: %1 + 已安裝較新的版本:%1 + + + + Earlier version installed: %1 + 已安裝舊版本:%1 + + + + Installing dependencies: %1 + 正在安裝依賴:%1 + + + + Failed to install %1 + %1安裝失敗 + + + Version: 版本: - + Installed successfully 安裝成功 - + Uninstalled successfully 解除安裝成功 - - Other version installed: %1 - 已安裝其他版本:%1 - - - + + Uninstall Failed 解除安裝失敗 - + Name: 名稱: - + Same version installed 已安裝相同版本 - UninstallConfirmPage + SingleInstallPage_Install - - Display related packages - 顯示依賴的軟體套件 + + + + Show details + 顯示詳細訊息 + + + SingleInstallPage_Uninstall - + + + Show details + 顯示卸載進程 + + + + UninstallConfirmPage + + Collapse - 隱藏細節 + 隱藏 + + + + Show related packages + 顯示相關軟體包 - + Cancel 取消 - + Confirm 確定 - + Are you sure you want to uninstall %1? All dependencies will also be removed 確定解除安裝 %1? 也會移除所有依賴 + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + 您確定要移除%1嗎? +移除此軟體可能會導致系統或其他軟體無法正常使用 + main - - Deepin Package Manager - Deepin 軟體包管理器 + + + Package Installer + 軟體包安裝器 - - Deepin Package Manager is used to help users install and remove local packages, supporting bulk install. - Deepin 軟體包管理器用來協助使用者安裝及移除本機軟體包,支援批次安裝。 + + Package Installer helps users install and remove local packages, and supports bulk installation. + 軟體包安裝器用來幫助使用者安裝和移除本機軟體包。支援批次安裝。 \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_ar.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_ar.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_ar.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_ar.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1 @@ +desktopPackage Installerمثبّت الحزمPackage Installerمثبّت الحزمPackage Installer helps users install and remove local packages, and supports bulk installation.مثبت الحزم: يساعد المستخدمين على تثبيت وإزالة الحزم المحلية، ويدعم أيضاً الثبيت الجماعي للحزم. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_ast.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_ast.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_ast.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_ast.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,3 @@ -desktopDeepin Package ManagerDeepin Package ManagerDeepin Package Manager is used to help users install and remove local package, supports bulk install.Package ManagerXestor de paquetes \ No newline at end of file + + +desktopPackage InstallerXestor de paquetesPackage Installer helps users install and remove local packages, and supports bulk installation. diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_bg.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_bg.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_bg.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_bg.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,3 @@ -desktopDeepin Package ManagerDeepin Мениджър на пакетиDeepin Package Manager is used to help users install and remove local package, supports bulk install.Deepin Мениджър на пакети се използва, за да помогне на потребителите да инсталират и премахват локален пакет, поддръжка на групово инсталиране.Package ManagerМениджър на пакети \ No newline at end of file + + +desktopPackage InstallerМениджър на пакетиPackage Installer helps users install and remove local packages, and supports bulk installation.Deepin Мениджър на пакети се използва, за да помогне на потребителите да инсталират и премахват локален пакет, поддръжка на групово инсталиране. diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_br.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_br.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_br.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_br.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,17 @@ + +desktop + + + Deepin Package InstallerStalier pakadoù Deepin + + + + Package InstallerStalier pakadoù + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Ar stalier pakadoù a sikour an implijaderien da staliañ ha da zilemel ar pakadoù lec'hel, hag e kemer e kont ar staliadur a-vloc'had. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_ca.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_ca.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_ca.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_ca.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin 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 paquets \ No newline at end of file + +desktop + + + Deepin Package InstallerInstal·lador de paquets del Deepin + + + + Package InstallerInstal·lador de paquets + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + L'Instal·lador de paquets ajuda els usuaris a instal·lar i eliminar paquets locals i admet la instal·lació massiva. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_cs.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_cs.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_cs.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_cs.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin 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ů \ No newline at end of file + +desktop + + + Deepin Package InstallerDeepin instalátor balíčků + + + + Package InstallerInstalátor balíčků + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Instalátor balíčků slouží uživateli jako pomůcka pro instalaci a odebírání místních balíčků (tj. nepocházejících z repozitářů). Podporuje také hromadnou instalaci. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_da.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_da.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_da.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_da.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1 @@ -desktopDeepin 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åndtering \ No newline at end of file +desktopPackage InstallerPakkeinstallationsprogramPackage InstallerPakkeinstallationsprogramPackage Installer helps users install and remove local packages, and supports bulk installation.Pakkeinstallationsprogram hjælpe brugere med at installere og fjerne lokale pakker, med understøttelse af masseinstallation. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_de.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_de.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_de.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_de.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin 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 ManagerPaketverwaltung \ No newline at end of file + +desktop + + + Deepin Package InstallerDeepin Paket-Installationsprogramm + + + + Package InstallerPaket-Installationsprogramm + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Das Paket-Installationsprogramm hilft Benutzern bei der Installation und Entfernung lokaler Pakete und unterstützt die Masseninstallation. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_en_AU.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_en_AU.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_en_AU.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_en_AU.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,3 @@ -desktopDeepin 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 Manager \ No newline at end of file + + +desktopPackage InstallerPackage InstallerPackage Installer helps users install and remove local packages, and supports bulk installation.The Deepin Package Installer helps users install and remove local packages. It supports bulk package installation. diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_es_419.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_es_419.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_es_419.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_es_419.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,3 @@ -desktopDeepin 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 Paquetes \ No newline at end of file + + +desktopPackage InstallerGestor de PaquetesPackage Installer helps users install and remove local packages, and supports bulk installation.El Gestor de Paquetes Deepin se usa para ayudar a los usuarios a instalar y eliminar paquetes locales, admite la instalación masiva. diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_es.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_es.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_es.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_es.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin 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 Manager \ No newline at end of file + +desktop + + + Deepin Package InstallerInstalador de paquetes + + + + Package InstallerInstalador de paquetes + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Instalador de paquetes de Deepin ayuda a instalar y eliminar paquetes locales, y admite instalación en masa. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_et.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_et.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_et.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_et.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,3 @@ -desktopDeepin 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 ManagerPakihaldur \ No newline at end of file + + +desktopPackage InstallerPakihaldurPackage Installer helps users install and remove local packages, and supports bulk installation.Deepin pakihaldur on rakendus, millega kasutajad saavad arvutisse tarkvara paigaldada ja seda sealt eemaldada. Toetab ka hulgipaigaldamist. diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_fi.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_fi.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_fi.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_fi.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin 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 ManagerPaketinhallinta \ No newline at end of file + +desktop + + + Deepin Package InstallerDeepin pakettien asentaja + + + + Package InstallerOhjelmiston asentaja + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Ohjelmiston asentaja auttaa käyttäjiä asentamaan ja poistamaan ohjelmia. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_fr.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_fr.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_fr.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_fr.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin 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 Deepin \ No newline at end of file + +desktop + + + Deepin Package InstallerInstallateur de paquets Deepin + + + + Package InstallerInstallateur de paquets + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Installateur de paquets aide les utilisateurs à installer et supprimer des paquets locaux et prend en charge l'installation en bloc. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_gl_ES.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_gl_ES.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_gl_ES.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_gl_ES.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,17 @@ + +desktop + + + Deepin Package InstallerInstalador do paquete de Deepin + + + + Package InstallerInstalador do paquete + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + O instalador do paquete axuda aos usuarios a instalar e eliminar paquetes locais e admite a instalación masiva. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_hi_IN.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_hi_IN.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_hi_IN.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_hi_IN.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,17 @@ + +desktop + + + Deepin Package Installerदीपिन पैकेज इंस्टॉलर + + + + Package Installerपैकेज इंस्टॉलर + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + पैकेज इंस्टॉलर द्वारा उपयोक्ता लोकल पैकेज इंस्टॉल व हटा सकते हैं, यह सामूहिक इंस्टॉल की सुविधा भी प्रदान करता है। + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_hu.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_hu.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_hu.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_hu.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin Package ManagerDeepin csomagkezelőDeepin Package Manager is used to help users install and remove local package, supports bulk install.Package ManagerCsomagkezelő \ No newline at end of file + +desktop + + + Deepin Package InstallerDeepin Csomagtelepítő + + + + Package InstallerCsomagtelepítő + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + A Csomagtelepítő segít a felhasználóknak különféle csomagok telepítésében és eltávolításában, valamint támogatja a kötegelt telepítést. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_id.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_id.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_id.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_id.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,3 @@ -desktopDeepin 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 Paket \ No newline at end of file + + +desktopPackage InstallerManajer PaketPackage Installer helps users install and remove local packages, and supports bulk installation.Manajer Paket Deepin digunakan untuk menolong para pengguna install dan menghapus paket lokal, mendukung install massal diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_it.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_it.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_it.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_it.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,2 +1,18 @@ -desktopDeepin 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 Manager \ No newline at end of file + +desktop + + + Deepin Package InstallerGestore pacchetti di Deepin + + + + Package InstallerGestore pacchetti + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Il Gestore pacchetti è utile per installare e rimuovere software in locale, supporta inoltre l'installazione massiva. +Localizzazione italiana a cura di Massimo A. Carofano. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_ko.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_ko.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_ko.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_ko.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin Package ManagerDeepin 패키지 관리자Deepin Package Manager is used to help users install and remove local package, supports bulk install.Deepin 패키지 관리자는 사용자가 로컬 패키지를 설치 및 제거하고 일괄 설치를 지원하는데 사용됩니다.Package Manager패키지 관리자 \ No newline at end of file + +desktop + + + Deepin Package InstallerDeepin 패키지 설치도구 + + + + Package Installer패키지 관리자 + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + 패키지 설치 관리자는 사용자가 로컬 패키지를 설치하고, 제거할 수 있도록 지원하고 일괄 설치를 지원합니다. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_lt.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_lt.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_lt.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_lt.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1 @@ -desktopDeepin 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ė \ No newline at end of file +desktopPackage InstallerPaketų diegimo programaPackage InstallerPaketų diegimo programaPackage Installer helps users install and remove local packages, and supports bulk installation.Paketų diegimo programa padeda naudotojams įdiegti ir šalinti vietinius paketus bei palaiko masinį įdiegimą. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_mn.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_mn.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_mn.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_mn.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,3 @@ -desktopDeepin Package ManagerДеепин Багц ЗохицуулагчDeepin Package Manager is used to help users install and remove local package, supports bulk install.Деепин Багц Зохицуулагч нь хэрэглэгчдэд програм суулгах устгахад туслахаас гадна бүлэг суулгалтыг дэмждэг.Package ManagerБагц Зохицуулагч \ No newline at end of file + + +desktopPackage InstallerБагц ЗохицуулагчPackage Installer helps users install and remove local packages, and supports bulk installation.Деепин Багц Зохицуулагч нь хэрэглэгчдэд програм суулгах устгахад туслахаас гадна бүлэг суулгалтыг дэмждэг. diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_ms.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_ms.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_ms.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_ms.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1 @@ -desktopDeepin 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 Pakej \ No newline at end of file +desktopPackage InstallerPemasang PakejPackage InstallerPemasang PakejPackage Installer helps users install and remove local packages, and supports bulk installation.Pemasang pakej dapat membantu pengguna dan membuang pakej-pakej setempat, dan juga menyokong pemasangan pukal. \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_ne.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_ne.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_ne.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_ne.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1 @@ -desktopDeepin Package Managerडिपिन प्याकेज प्रबन्धकDeepin Package Manager is used to help users install and remove local package, supports bulk install.डिपिन प्याकेज प्रबन्धक, प्याकेज फाइल स्थापना र स्थापना रद्द गर्न प्रयोग हुन्छ Package Managerप्याकेज प्रबन्धक \ No newline at end of file +desktopPackage Installerप्याकेज स्थापनाकर्ताPackage Installerप्याकेज स्थापनाकर्ताPackage Installer helps users install and remove local packages, and supports bulk installation.प्याकेज स्थापनाकर्ताले प्रयोगकर्ताहरूलाई स्थानीय प्याकेजहरू स्थापना र हटाउन मद्दत गर्दछ, र बल्क स्थापनालाई समर्थन गर्दछ। \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_nl.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_nl.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_nl.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_nl.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin 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 ManagerPakketbeheer \ No newline at end of file + +desktop + + + Deepin Package InstallerDeepin Pakketinstallatie + + + + Package InstallerPakketinstallatie + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Pakketinstallatie is een programma dat gebruikers helpt bij het installeren van lokale software. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_pa.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_pa.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_pa.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_pa.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,3 @@ -desktopDeepin Package Managerਡੀਪਿਨ ਪੈਕੇਜ ਮੈਨੇਜਰDeepin Package Manager is used to help users install and remove local package, supports bulk install.Package Managerਪੈਕੇਜ ਮੈਨੇਜਰ \ No newline at end of file + + +desktopPackage Installerਪੈਕੇਜ ਮੈਨੇਜਰPackage Installer helps users install and remove local packages, and supports bulk installation. diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_pl.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_pl.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_pl.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_pl.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin 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 pakietami \ No newline at end of file + +desktop + + + Deepin Package InstallerInstalator pakietu Deepin + + + + Package InstallerInstalator pakietów + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Instalator pakietów pomaga użytkownikom instalować i usuwać pakiety lokalne oraz obsługuje instalację zbiorczą. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_pt_BR.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_pt_BR.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_pt_BR.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_pt_BR.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin 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 Pacotes \ No newline at end of file + +desktop + + + Deepin Package InstallerDeepin Instalador de Pacotes + + + + Package InstallerInstalador de Pacotes + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + O Instalador de Pacotes ajuda os usuários a instalar e remover pacotes locais e suporta a instalação em massa. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_pt.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_pt.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_pt.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_pt.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin 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 Pacotes \ No newline at end of file + +desktop + + + Deepin Package InstallerInstalador de Pacotes Deepin + + + + Package InstallerInstalador de Pacotes + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + O Instalador de Pacotes ajuda os utilizadores a instalar e remover pacotes locais e suporta a instalação em massa. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_ru.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_ru.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_ru.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_ru.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin Package ManagerМенеджер Пакетов DeepinDeepin Package Manager is used to help users install and remove local package, supports bulk install.Пакетный Менеджер Deepin используется для помощи пользователям в установке и удалении программного обеспечения, с поддержкой массовой установки.Package ManagerМенеджер Пакетов \ No newline at end of file + +desktop + + + Deepin Package InstallerУстановщик Пакетов Deepin + + + + Package InstallerУстановщик Пакетов + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Установщик Пакетов используется для установки и удаления программного обеспечения и поддерживает массовую установку приложений. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_sk.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_sk.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_sk.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_sk.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,3 @@ -desktopDeepin 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íčkov \ No newline at end of file + + +desktopPackage InstallerSprávca balíčkovPackage Installer helps users install and remove local packages, and supports bulk installation.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. diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_sq.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_sq.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_sq.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_sq.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin 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 Paketash \ No newline at end of file + +desktop + + + Deepin Package InstallerInstalues Paketash Deepin + + + + Package InstallerInstalues Paketash + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Instaluesi i Paketave i ndihmon përdoruesit të instalojnë dhe heqin paketa vendore, dhe mbulon instalime në masë. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_sr.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_sr.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_sr.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_sr.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin Package ManagerДипин Управник ПакетаDeepin Package Manager is used to help users install and remove local package, supports bulk install.Дипин Управник Пакета је програм који помаже корисницима при инсталирању и уклањању локалног софтвера. Подржава групну инсталацију.Package ManagerУправник Пакета \ No newline at end of file + +desktop + + + Deepin Package InstallerДипин Инсталатер Пакета + + + + Package InstallerИнсталатер Пакета + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Инсалатер пакета помаже корисницима да инсталирају и уклањају локалне пакете. Подржава групну инсталацију. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_tr.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_tr.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_tr.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_tr.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin 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öneticisi \ No newline at end of file + +desktop + + + Deepin Package InstallerDeepin Paket Kurucu + + + + Package InstallerPaket Kurucu + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Paket Kurucu, kullanıcıların yerel paketleri kurmasına ve kaldırmasına yardımcı olur ve toplu kurulumu destekler. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1,3 +1,17 @@ - - -desktopDeepin Package ManagerDeepin Package Manager is used to help users install and remove local package, supports bulk install.Package Manager + +desktop + + + Deepin Package InstallerDeepin Package Installer + + + + Package InstallerPackage Installer + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Package Installer helps users install and remove local packages, and supports bulk installation. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_ug.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_ug.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_ug.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_ug.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,17 @@ + +desktop + + + Deepin Package InstallerDeepin بوغچا قاچىلىغۇچ + + + + Package Installerبوغچا قاچىلىغۇچ + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + ئورالما ئورناتقۇچ ئىشلەتكۈچىلەرنىڭ يەرلىك ئورالمىلارنى ئورنىتىشى ۋە ئۆچۈرۈشىگە ياردەم بېرىدۇ ھەمدە توپ قاچىلاشنى قوللايدۇ. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_uk.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_uk.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_uk.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_uk.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin Package ManagerКерування пакунками DeepinDeepin Package Manager is used to help users install and remove local package, supports bulk install.Засіб керування пакунками Deepin використовується для полегшення встановлення і вилучення локальних пакунків користувачем. Передбачено підтримку пакетного встановлення.Package ManagerКерування пакунками \ No newline at end of file + +desktop + + + Deepin Package InstallerЗасіб встановлення пакунків Deepin + + + + Package InstallerВстановлювач пакунків + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + За допомогою засобу встановлення пакунків користувачі можуть встановлювати і вилучати локальні пакунки. Передбачено пакетне встановлення. + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_zh_CN.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_zh_CN.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_zh_CN.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_zh_CN.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin Package Manager深度软件包管理器Deepin Package Manager is used to help users install and remove local package, supports bulk install.深度软件包管理器用于帮助用户安装和卸载本地软件,支持批量安装。Package Manager软件包管理器 \ No newline at end of file + +desktop + + + Deepin Package Installer深度软件包安装器 + + + + Package Installer软件包安装器 + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + 软件包安装器用于帮助用户安装和卸载本地软件,支持批量安装。 + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_zh_HK.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_zh_HK.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_zh_HK.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_zh_HK.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,17 @@ + +desktop + + + Deepin Package InstallerDeepin 軟件包安裝器 + + + + Package Installer軟件包安裝器 + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + 軟件包安裝器用於幫助用戶安裝和卸載本地軟件,支持批量安裝。 + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop/desktop_zh_TW.ts deepin-deb-installer-5.7.0.17/translations/desktop/desktop_zh_TW.ts --- deepin-deb-installer-5.0.0/translations/desktop/desktop_zh_TW.ts 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop/desktop_zh_TW.ts 2020-12-03 11:59:49.000000000 +0000 @@ -1 +1,17 @@ -desktopDeepin Package ManagerDeepin 軟體包管理器Deepin Package Manager is used to help users install and remove local package, supports bulk install.Deepin 軟體包管理器用來幫助使用者安裝和移除本機軟體包。支援批次安裝。Package Manager軟體包管理器 \ No newline at end of file + +desktop + + + Deepin Package InstallerDeepin 軟體包安裝器 + + + + Package Installer軟體包安裝器 + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + 軟體包安裝器用來幫助使用者安裝和移除本機軟體包。支援批次安裝。 + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/desktop_ast.ts deepin-deb-installer-5.7.0.17/translations/desktop_ast.ts --- deepin-deb-installer-5.0.0/translations/desktop_ast.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_ast.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,366 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Xestor de paquetes + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Xestor de paquetes + + + + main + + + + Package Installer + Xestor de paquetes + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_bg.ts deepin-deb-installer-5.7.0.17/translations/desktop_bg.ts --- deepin-deb-installer-5.0.0/translations/desktop_bg.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_bg.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Мениджър на пакети + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Мениджър на пакети + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin Мениджър на пакети се използва, за да помогне на потребителите да инсталират и премахват локален пакет, поддръжка на групово инсталиране. + + + + main + + + + Package Installer + Мениджър на пакети + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin Мениджър на пакети се използва, за да помогне на потребителите да инсталират и премахват локален пакет, поддръжка на групово инсталиране. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_ca.ts deepin-deb-installer-5.7.0.17/translations/desktop_ca.ts --- deepin-deb-installer-5.0.0/translations/desktop_ca.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_ca.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Gestor de paquets + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Gestor de paquets + + + Package Installer helps users install and remove local packages, and supports bulk installation. + El Gestor de paquets del Deepin s'usa per ajudar els usuaris a instal·lar i eliminar paquets locals. Admet la instal·lació massiva. + + + + main + + + + Package Installer + Gestor de paquets + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + El Gestor de paquets del Deepin s'usa per ajudar els usuaris a instal·lar i eliminar paquets locals. Admet la instal·lació massiva. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_cs.ts deepin-deb-installer-5.7.0.17/translations/desktop_cs.ts --- deepin-deb-installer-5.0.0/translations/desktop_cs.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_cs.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Správce balíčků + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Správce balíčků + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Správce balíčků se používá k pomoci uživatelům instalovat a odebírat místní balíčky, podporuje hromadnou instalaci. + + + + main + + + + Package Installer + Správce balíčků + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Správce balíčků se používá k pomoci uživatelům instalovat a odebírat místní balíčky, podporuje hromadnou instalaci. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_da.ts deepin-deb-installer-5.7.0.17/translations/desktop_da.ts --- deepin-deb-installer-5.0.0/translations/desktop_da.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_da.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Pakkehåndtering + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Pakkehåndtering + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin pakkehåndtering bruges til at hjælpe brugere med at installere og fjerne lokal pakke, med understøttelse af masseinstallation. + + + + main + + + + Package Installer + Pakkehåndtering + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin pakkehåndtering bruges til at hjælpe brugere med at installere og fjerne lokal pakke, med understøttelse af masseinstallation. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_de.ts deepin-deb-installer-5.7.0.17/translations/desktop_de.ts --- deepin-deb-installer-5.0.0/translations/desktop_de.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_de.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Paketverwaltung + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Paketverwaltung + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Die Deepin Paketverwaltung unterstützt Benutzer beim Installieren und Entfernen von Softwarepaketen und unterstützt zudem die Installation via Stapelverarbeitung. + + + + main + + + + Package Installer + Paketverwaltung + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Die Deepin Paketverwaltung unterstützt Benutzer beim Installieren und Entfernen von Softwarepaketen und unterstützt zudem die Installation via Stapelverarbeitung. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_en_AU.ts deepin-deb-installer-5.7.0.17/translations/desktop_en_AU.ts --- deepin-deb-installer-5.0.0/translations/desktop_en_AU.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_en_AU.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Package Installer + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Package Installer + + + Package Installer helps users install and remove local packages, and supports bulk installation. + The Deepin Package Installer helps users install and remove local packages. It supports bulk package installation. + + + + main + + + + Package Installer + Package Installer + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + The Deepin Package Installer helps users install and remove local packages. It supports bulk package installation. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_es_419.ts deepin-deb-installer-5.7.0.17/translations/desktop_es_419.ts --- deepin-deb-installer-5.0.0/translations/desktop_es_419.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_es_419.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Gestor de Paquetes + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Gestor de Paquetes + + + Package Installer helps users install and remove local packages, and supports bulk installation. + El Gestor de Paquetes Deepin se usa para ayudar a los usuarios a instalar y eliminar paquetes locales, admite la instalación masiva. + + + + main + + + + Package Installer + Gestor de Paquetes + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + El Gestor de Paquetes Deepin se usa para ayudar a los usuarios a instalar y eliminar paquetes locales, admite la instalación masiva. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_es.ts deepin-deb-installer-5.7.0.17/translations/desktop_es.ts --- deepin-deb-installer-5.0.0/translations/desktop_es.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_es.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Package Installer + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Package Installer + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin Package Installer es usada para ayudar a los usuarios a instalar y quitar paquete local, soporta instalación en lote. + + + + main + + + + Package Installer + Package Installer + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin Package Installer es usada para ayudar a los usuarios a instalar y quitar paquete local, soporta instalación en lote. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_et.ts deepin-deb-installer-5.7.0.17/translations/desktop_et.ts --- deepin-deb-installer-5.0.0/translations/desktop_et.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_et.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Pakihaldur + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Pakihaldur + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin pakihaldur on rakendus, millega kasutajad saavad arvutisse tarkvara paigaldada ja seda sealt eemaldada. Toetab ka hulgipaigaldamist. + + + + main + + + + Package Installer + Pakihaldur + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin pakihaldur on rakendus, millega kasutajad saavad arvutisse tarkvara paigaldada ja seda sealt eemaldada. Toetab ka hulgipaigaldamist. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_fi.ts deepin-deb-installer-5.7.0.17/translations/desktop_fi.ts --- deepin-deb-installer-5.0.0/translations/desktop_fi.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_fi.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Paketinhallinta + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Paketinhallinta + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin-paketinhallintaa käytetään auttamaan käyttäjiä asentamaan ja poistamaan paikallisia paketteja. + + + + main + + + + Package Installer + Paketinhallinta + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin-paketinhallintaa käytetään auttamaan käyttäjiä asentamaan ja poistamaan paikallisia paketteja. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_fr.ts deepin-deb-installer-5.7.0.17/translations/desktop_fr.ts --- deepin-deb-installer-5.0.0/translations/desktop_fr.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_fr.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Gestionnaire de paquets Deepin + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Gestionnaire de paquets Deepin + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin Package Installer est une application pour aider les utilisateurs à gérer les paquets installés, il supporte également l'installation multiple. + + + + main + + + + Package Installer + Gestionnaire de paquets Deepin + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin Package Installer est une application pour aider les utilisateurs à gérer les paquets installés, il supporte également l'installation multiple. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_hu.ts deepin-deb-installer-5.7.0.17/translations/desktop_hu.ts --- deepin-deb-installer-5.0.0/translations/desktop_hu.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_hu.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,366 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Csomagkezelő + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Csomagkezelő + + + + main + + + + Package Installer + Csomagkezelő + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_id.ts deepin-deb-installer-5.7.0.17/translations/desktop_id.ts --- deepin-deb-installer-5.0.0/translations/desktop_id.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_id.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Manajer Paket + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Manajer Paket + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Manajer Paket Deepin digunakan untuk menolong para pengguna install dan menghapus paket lokal, mendukung install massal + + + + main + + + + Package Installer + Manajer Paket + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Manajer Paket Deepin digunakan untuk menolong para pengguna install dan menghapus paket lokal, mendukung install massal + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_it.ts deepin-deb-installer-5.7.0.17/translations/desktop_it.ts --- deepin-deb-installer-5.0.0/translations/desktop_it.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_it.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Package Installer + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Package Installer + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin Package Installer è utile per installare e rimuovere software in locale, supporta inoltre l'installazione massiva. Localizzazione italiana a cura di Massimo A. Carofano. + + + + main + + + + Package Installer + Package Installer + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin Package Installer è utile per installare e rimuovere software in locale, supporta inoltre l'installazione massiva. Localizzazione italiana a cura di Massimo A. Carofano. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_ko.ts deepin-deb-installer-5.7.0.17/translations/desktop_ko.ts --- deepin-deb-installer-5.0.0/translations/desktop_ko.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_ko.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + 패키지 관리자 + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + 패키지 관리자 + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin 패키지 관리자는 사용자가 로컬 패키지를 설치 및 제거하고 일괄 설치를 지원하는데 사용됩니다. + + + + main + + + + Package Installer + 패키지 관리자 + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin 패키지 관리자는 사용자가 로컬 패키지를 설치 및 제거하고 일괄 설치를 지원하는데 사용됩니다. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_lt.ts deepin-deb-installer-5.7.0.17/translations/desktop_lt.ts --- deepin-deb-installer-5.0.0/translations/desktop_lt.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_lt.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Paketų tvarkytuvė + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Paketų tvarkytuvė + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin paketų tvarkytuvė yra naudojama padėti naudotojams įdiegti ir šalinti vietinius paketus, ši programa palaiko masinį įdiegimą. + + + + main + + + + Package Installer + Paketų tvarkytuvė + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin paketų tvarkytuvė yra naudojama padėti naudotojams įdiegti ir šalinti vietinius paketus, ši programa palaiko masinį įdiegimą. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_mn.ts deepin-deb-installer-5.7.0.17/translations/desktop_mn.ts --- deepin-deb-installer-5.0.0/translations/desktop_mn.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_mn.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Багц Зохицуулагч + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Багц Зохицуулагч + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Деепин Багц Зохицуулагч нь хэрэглэгчдэд програм суулгах устгахад туслахаас гадна бүлэг суулгалтыг дэмждэг. + + + + main + + + + Package Installer + Багц Зохицуулагч + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Деепин Багц Зохицуулагч нь хэрэглэгчдэд програм суулгах устгахад туслахаас гадна бүлэг суулгалтыг дэмждэг. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_ms.ts deepin-deb-installer-5.7.0.17/translations/desktop_ms.ts --- deepin-deb-installer-5.0.0/translations/desktop_ms.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_ms.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Pengurus Pakej + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Pengurus Pakej + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Pengurus Pakej Deepin digunakan digunakan untuk bantu pengguna memasang dan membuang perisian setempat, selain itu ia menyokong pemasangan secara pukal. + + + + main + + + + Package Installer + Pengurus Pakej + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Pengurus Pakej Deepin digunakan digunakan untuk bantu pengguna memasang dan membuang perisian setempat, selain itu ia menyokong pemasangan secara pukal. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_ne.ts deepin-deb-installer-5.7.0.17/translations/desktop_ne.ts --- deepin-deb-installer-5.0.0/translations/desktop_ne.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_ne.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + प्याकेज प्रबन्धक + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + प्याकेज प्रबन्धक + + + Package Installer helps users install and remove local packages, and supports bulk installation. + डिपिन प्याकेज प्रबन्धक, प्याकेज फाइल स्थापना र स्थापना रद्द गर्न प्रयोग हुन्छ + + + + main + + + + Package Installer + प्याकेज प्रबन्धक + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + डिपिन प्याकेज प्रबन्धक, प्याकेज फाइल स्थापना र स्थापना रद्द गर्न प्रयोग हुन्छ + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_nl.ts deepin-deb-installer-5.7.0.17/translations/desktop_nl.ts --- deepin-deb-installer-5.0.0/translations/desktop_nl.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_nl.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Pakketbeheer + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Pakketbeheer + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin Pakketbeheer is een applicatie die gebruikers helpt bij het installeren en verwijderen van lokale software, zowel één voor één als meerdere tegelijk. + + + + main + + + + Package Installer + Pakketbeheer + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin Pakketbeheer is een applicatie die gebruikers helpt bij het installeren en verwijderen van lokale software, zowel één voor één als meerdere tegelijk. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_pa.ts deepin-deb-installer-5.7.0.17/translations/desktop_pa.ts --- deepin-deb-installer-5.0.0/translations/desktop_pa.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_pa.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,366 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + ਪੈਕੇਜ ਮੈਨੇਜਰ + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + ਪੈਕੇਜ ਮੈਨੇਜਰ + + + + main + + + + Package Installer + ਪੈਕੇਜ ਮੈਨੇਜਰ + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_pl.ts deepin-deb-installer-5.7.0.17/translations/desktop_pl.ts --- deepin-deb-installer-5.0.0/translations/desktop_pl.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_pl.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Zarządzanie pakietami + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Zarządzanie pakietami + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Zarządzanie pakietami Deepin pomaga użytkownikom instalować i usuwać lokalne pakiety, obsługuje instalację zbiorczą. + + + + main + + + + Package Installer + Zarządzanie pakietami + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Zarządzanie pakietami Deepin pomaga użytkownikom instalować i usuwać lokalne pakiety, obsługuje instalację zbiorczą. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_pt_BR.ts deepin-deb-installer-5.7.0.17/translations/desktop_pt_BR.ts --- deepin-deb-installer-5.0.0/translations/desktop_pt_BR.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_pt_BR.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Gerenciador de Pacotes + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Gerenciador de Pacotes + + + Package Installer helps users install and remove local packages, and supports bulk installation. + O Gerenciador de Pacotes Deepin tem como finalidade ajudar os usuários a instalar e remover pacotes locais, suportando a instalação em massa. + + + + main + + + + Package Installer + Gerenciador de Pacotes + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + O Gerenciador de Pacotes Deepin tem como finalidade ajudar os usuários a instalar e remover pacotes locais, suportando a instalação em massa. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_pt.ts deepin-deb-installer-5.7.0.17/translations/desktop_pt.ts --- deepin-deb-installer-5.0.0/translations/desktop_pt.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_pt.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Gestor de Pacotes + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Gestor de Pacotes + + + Package Installer helps users install and remove local packages, and supports bulk installation. + O Deepin Package Installer é uma aplicação utilizada para ajudar os utilizadores a instalar e remover pacotes locais, suporta instalações em massa. + + + + main + + + + Package Installer + Gestor de Pacotes + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + O Deepin Package Installer é uma aplicação utilizada para ajudar os utilizadores a instalar e remover pacotes locais, suporta instalações em massa. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_ru.ts deepin-deb-installer-5.7.0.17/translations/desktop_ru.ts --- deepin-deb-installer-5.0.0/translations/desktop_ru.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_ru.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Менеджер Пакетов + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Менеджер Пакетов + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Пакетный Менеджер Deepin используется для помощи пользователям в установке и удалении программного обеспечения, с поддержкой массовой установки. + + + + main + + + + Package Installer + Менеджер Пакетов + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Пакетный Менеджер Deepin используется для помощи пользователям в установке и удалении программного обеспечения, с поддержкой массовой установки. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_sk.ts deepin-deb-installer-5.7.0.17/translations/desktop_sk.ts --- deepin-deb-installer-5.0.0/translations/desktop_sk.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_sk.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Správca balíčkov + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Správca balíčkov + + + Package Installer helps users install and remove local packages, and supports bulk installation. + 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. + + + + main + + + + Package Installer + Správca balíčkov + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + 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. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_sq.ts deepin-deb-installer-5.7.0.17/translations/desktop_sq.ts --- deepin-deb-installer-5.0.0/translations/desktop_sq.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_sq.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Përgjegjës Paketash + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Përgjegjës Paketash + + + Package Installer helps users install and remove local packages, and supports bulk installation. + 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ë. + + + + main + + + + Package Installer + Përgjegjës Paketash + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + 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ë. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_sr.ts deepin-deb-installer-5.7.0.17/translations/desktop_sr.ts --- deepin-deb-installer-5.0.0/translations/desktop_sr.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_sr.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Управник Пакета + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Управник Пакета + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Дипин Управник Пакета је програм који помаже корисницима при инсталирању и уклањању локалног софтвера. Подржава групну инсталацију. + + + + main + + + + Package Installer + Управник Пакета + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Дипин Управник Пакета је програм који помаже корисницима при инсталирању и уклањању локалног софтвера. Подржава групну инсталацију. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_tr.ts deepin-deb-installer-5.7.0.17/translations/desktop_tr.ts --- deepin-deb-installer-5.0.0/translations/desktop_tr.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_tr.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Paket Yöneticisi + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Paket Yöneticisi + + + Package Installer helps users install and remove local packages, and supports bulk installation. + 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. + + + + main + + + + Package Installer + Paket Yöneticisi + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + 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. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop.ts deepin-deb-installer-5.7.0.17/translations/desktop.ts --- deepin-deb-installer-5.0.0/translations/desktop.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,359 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + main + + + + Package Installer + + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_uk.ts deepin-deb-installer-5.7.0.17/translations/desktop_uk.ts --- deepin-deb-installer-5.0.0/translations/desktop_uk.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_uk.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + Керування пакунками + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + Керування пакунками + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Засіб керування пакунками Deepin використовується для полегшення встановлення і вилучення локальних пакунків користувачем. Передбачено підтримку пакетного встановлення. + + + + main + + + + Package Installer + Керування пакунками + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Засіб керування пакунками Deepin використовується для полегшення встановлення і вилучення локальних пакунків користувачем. Передбачено підтримку пакетного встановлення. + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_zh_CN.ts deepin-deb-installer-5.7.0.17/translations/desktop_zh_CN.ts --- deepin-deb-installer-5.0.0/translations/desktop_zh_CN.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_zh_CN.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + 软件包安装器 + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + 软件包安装器 + + + Package Installer helps users install and remove local packages, and supports bulk installation. + 深度软件包安装器用于帮助用户安装和卸载本地软件,支持批量安装。 + + + + main + + + + Package Installer + 软件包安装器 + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + 深度软件包安装器用于帮助用户安装和卸载本地软件,支持批量安装。 + + + diff -Nru deepin-deb-installer-5.0.0/translations/desktop_zh_TW.ts deepin-deb-installer-5.7.0.17/translations/desktop_zh_TW.ts --- deepin-deb-installer-5.0.0/translations/desktop_zh_TW.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/desktop_zh_TW.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,370 @@ + + + + + AptConfigMessage + + + Enter the number to configure: + + + + + OK + + + + + DebInstaller + + + Package Installer + 軟體包管理器 + + + + The deb package may be broken + + + + + Already Added + + + + + Bulk Install + + + + + DebListModel + + + Authentication failed + + + + + + Installation failed, please check your network connection + + + + + Installation failed, please check for updates in Control Center + + + + + + + Installation failed, insufficient disk space + + + + + Installation Failed + + + + + Unmatched package architecture + + + + + Failed to install %1 + + + + + + Broken dependencies: %1 + + + + + Unable to install + + + + + This package does not have a valid digital signature + + + + + OK + + + + + FileChooseWidget + + + Drag deb packages here + + + + + Select File + + + + + MultipleInstallPage + + + Show details + + + + + Collapse + + + + + Install + + + + + Done + + + + + Back + + + + + Installing dependencies: %1 + + + + + PackagesListDelegate + + + Installing + + + + + Installed + + + + + Waiting + + + + + Failed + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + PackagesListView + + + Delete + + + + + QApplication + + + Collapse + + + + + SingleInstallPage + + + Name: + + + + + Version: + + + + + Install + + + + + Remove + + + + + Reinstall + + + + + OK + + + + + Back + + + + + Done + + + + + + Uninstall Failed + + + + + Installed successfully + + + + + Uninstalled successfully + + + + + Collapse + + + + + Same version installed + + + + + Later version installed: %1 + + + + + Earlier version installed: %1 + + + + + Installing dependencies: %1 + + + + + Failed to install %1 + + + + + SingleInstallPage_Install + + + + + Show details + + + + + SingleInstallPage_Uninstall + + + + Show details + + + + + UninstallConfirmPage + + + Show related packages + + + + + Collapse + + + + + Cancel + + + + + Confirm + + + + + Are you sure you want to uninstall %1? +All dependencies will also be removed + + + + + Are you sure you want to uninstall %1? +The system or other applications may not work properly + + + + + desktop + + Package Installer + 軟體包管理器 + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin 軟體包管理器用來幫助使用者安裝和移除本機軟體包。支援批次安裝。 + + + + main + + + + Package Installer + 軟體包管理器 + + + + Package Installer helps users install and remove local packages, and supports bulk installation. + Deepin 軟體包管理器用來幫助使用者安裝和移除本機軟體包。支援批次安裝。 + + + diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_ca.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_ca.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_ca.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_ca.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + Cal autenticació per continuar la configuració + + + + authentication + autenticació + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_cs.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_cs.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_cs.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_cs.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + Aby bylo možné pokračovat v nastavování, je třeba se ověřit + + + + authentication + ověření se + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_es.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_es.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_es.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_es.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + Se requiere autenticación para continuar con la configuración + + + + authentication + autenticación + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_fi.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_fi.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_fi.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_fi.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + Määritysten jatkaminen edellyttää todennusta + + + + authentication + todennus + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_fr.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_fr.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_fr.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_fr.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + L'authentification est requise pour continuer la configuration + + + + authentication + authentification + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_hi_IN.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_hi_IN.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_hi_IN.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_hi_IN.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + विन्यास जारी रखने हेतु प्रमाणीकरण आवश्यक है + + + + authentication + प्रमाणीकरण + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_hr.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_hr.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_hr.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_hr.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + Potrebna je ovjera da bi nastavili s konfiguracijom + + + + authentication + ovjera + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_hu.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_hu.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_hu.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_hu.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + Hitelesítés szükséges a konfigurálás folytatásához + + + + authentication + hitelesítés + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_it.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_it.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_it.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_it.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + Autenticazione richiesta per continuare la configurazione + + + + authentication + autenticazione + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_nl.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_nl.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_nl.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_nl.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + Voer je wachtwoord in om het instellen te voltooien + + + + authentication + goedkeuring + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_pl.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_pl.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_pl.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_pl.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + Aby kontynuować konfigurację, wymagane jest uwierzytelnienie + + + + authentication + poświadczenie + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_pt_BR.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_pt_BR.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_pt_BR.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_pt_BR.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + A autenticação é necessária para continuar com a configuração + + + + authentication + autenticação + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_pt.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_pt.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_pt.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_pt.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + É necessária a autenticação para continuar a configuração + + + + authentication + autenticação + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_ru.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_ru.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_ru.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_ru.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + Чтобы продолжить конфигурирование необходимо авторизоваться. + + + + authentication + аутентификация + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_sq.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_sq.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_sq.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_sq.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + Që të vazhdohet formësimi, lypset mirëfilltësim + + + + authentication + mirëfilltësim + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_sr.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_sr.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_sr.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_sr.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + Идентификација је неопходна за наставак прилагођавања + + + + authentication + идентификација + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_tr.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_tr.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_tr.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_tr.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + Yapılandırmaya devam etmek için kimlik doğrulaması gerekiyor + + + + authentication + kimlik doğrulama + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy.ts deepin-deb-installer-5.7.0.17/translations/policy/policy.ts --- deepin-deb-installer-5.0.0/translations/policy/policy.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + Authentication is required to continue the configuration + + + + authentication + authentication + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_ug.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_ug.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_ug.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_ug.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + داۋاملىق تەڭشەش ئۈچۈن ھوقۇق بېرىڭ + + + + authentication + دەلىللەش + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_uk.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_uk.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_uk.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_uk.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + Для продовження налаштовування слід пройти розпізнавання + + + + authentication + розпізнавання + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_zh_CN.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_zh_CN.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_zh_CN.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_zh_CN.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + 继续配置,需要授权 + + + + authentication + 认证 + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_zh_HK.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_zh_HK.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_zh_HK.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_zh_HK.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + 繼續配置,需要授權 + + + + authentication + 認證 + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/translations/policy/policy_zh_TW.ts deepin-deb-installer-5.7.0.17/translations/policy/policy_zh_TW.ts --- deepin-deb-installer-5.0.0/translations/policy/policy_zh_TW.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/translations/policy/policy_zh_TW.ts 2020-12-03 11:59:49.000000000 +0000 @@ -0,0 +1,15 @@ + + + policy + + + Authentication is required to continue the configuration + 繼續配置,需要授權 + + + + authentication + 認證 + + + \ No newline at end of file diff -Nru deepin-deb-installer-5.0.0/.tx/config deepin-deb-installer-5.7.0.17/.tx/config --- deepin-deb-installer-5.0.0/.tx/config 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/.tx/config 2020-12-03 11:59:49.000000000 +0000 @@ -6,11 +6,20 @@ [deepin-package-manager.deepin-deb-installer] file_filter = translations/deepin-deb-installer_.ts source_file = translations/deepin-deb-installer.ts +preTranlate_file = src/deb_installer/deepin-deb-installer.desktop source_lang = en type = QT [deepin-package-manager.deepin-deb-installer_desktop] file_filter = translations/desktop/desktop_.ts source_file = translations/desktop/desktop.ts +preTranlate_file = src/deb_installer/deepin-deb-installer.desktop source_lang = en type = QT + +[deepin-package-manager.deepin-deb-installer-policy-ts] +file_filter = translations/policy/policy_.ts +source_file = translations/policy/policy.ts +source_lang = en +type = QT + diff -Nru deepin-deb-installer-5.0.0/.tx/ts2desktop deepin-deb-installer-5.7.0.17/.tx/ts2desktop --- deepin-deb-installer-5.0.0/.tx/ts2desktop 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/.tx/ts2desktop 2020-12-03 11:59:49.000000000 +0000 @@ -1,4 +1,4 @@ -DESKTOP_TEMP_FILE=deepin-deb-installer.desktop.tmp -DESKTOP_SOURCE_FILE=deepin-deb-installer.desktop -DESKTOP_DEST_FILE=deepin-deb-installer.desktop +DESKTOP_TEMP_FILE=src/deb_installer/deepin-deb-installer.desktop.tmp +DESKTOP_SOURCE_FILE=src/deb_installer/deepin-deb-installer.desktop +DESKTOP_DEST_FILE=src/deb_installer/deepin-deb-installer.desktop DESKTOP_TS_DIR=translations/desktop diff -Nru deepin-deb-installer-5.0.0/uninstallconfirmpage.cpp deepin-deb-installer-5.7.0.17/uninstallconfirmpage.cpp --- deepin-deb-installer-5.0.0/uninstallconfirmpage.cpp 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/uninstallconfirmpage.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -/* - * 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); -} diff -Nru deepin-deb-installer-5.0.0/uninstallconfirmpage.h deepin-deb-installer-5.7.0.17/uninstallconfirmpage.h --- deepin-deb-installer-5.0.0/uninstallconfirmpage.h 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/uninstallconfirmpage.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ -/* - * 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 diff -Nru deepin-deb-installer-5.0.0/utils.h deepin-deb-installer-5.7.0.17/utils.h --- deepin-deb-installer-5.0.0/utils.h 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/utils.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -#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; - } -} diff -Nru deepin-deb-installer-5.0.0/widgets/bluebutton.cpp deepin-deb-installer-5.7.0.17/widgets/bluebutton.cpp --- deepin-deb-installer-5.0.0/widgets/bluebutton.cpp 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/widgets/bluebutton.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -/* - * 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);" - // "}"); -} diff -Nru deepin-deb-installer-5.0.0/widgets/bluebutton.h deepin-deb-installer-5.7.0.17/widgets/bluebutton.h --- deepin-deb-installer-5.0.0/widgets/bluebutton.h 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/widgets/bluebutton.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/* - * 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 diff -Nru deepin-deb-installer-5.0.0/widgets/graybutton.cpp deepin-deb-installer-5.7.0.17/widgets/graybutton.cpp --- deepin-deb-installer-5.0.0/widgets/graybutton.cpp 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/widgets/graybutton.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -/* - * 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);" - // "}"); -} diff -Nru deepin-deb-installer-5.0.0/widgets/graybutton.h deepin-deb-installer-5.7.0.17/widgets/graybutton.h --- deepin-deb-installer-5.0.0/widgets/graybutton.h 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/widgets/graybutton.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/* - * 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 diff -Nru deepin-deb-installer-5.0.0/workerprogress.cpp deepin-deb-installer-5.7.0.17/workerprogress.cpp --- deepin-deb-installer-5.0.0/workerprogress.cpp 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/workerprogress.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -/* - * 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);" - "}"); -} diff -Nru deepin-deb-installer-5.0.0/workerprogress.h deepin-deb-installer-5.7.0.17/workerprogress.h --- deepin-deb-installer-5.0.0/workerprogress.h 2019-07-05 09:38:51.000000000 +0000 +++ deepin-deb-installer-5.7.0.17/workerprogress.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -/* - * 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