Pamac 2.0
- complete rewrite in vala - it now directly depends on libalpm so it is easier to maintain - it is faster and uses less memory - alpm bindings for vala, other people could be interested - a DBus daemon which can perform every tasks which need root access using polkit to check authorization, it can be used by any other program. - pamac-manager and pamac-updater as you know before but with some new design, try them ! - the progress dialog now includes a terminal, it permits to launch yaourt which is used now to build packages from AUR. - reinstall a package - install optional dependencies of a package - mark a package as explicitly installed
14
.gitignore
vendored
@ -1,3 +1,11 @@
|
||||
__pycache__
|
||||
refresh-sources.sh
|
||||
*~
|
||||
pkgbuild
|
||||
resources/*.c
|
||||
src/pamac-daemon
|
||||
src/pamac-tray
|
||||
src/pamac-manager
|
||||
src/pamac-install
|
||||
src/pamac-updater
|
||||
data/polkit/org.manjaro.pamac.policy
|
||||
po/*.mo
|
||||
po/*~
|
||||
po/locale
|
||||
|
@ -1,8 +1,8 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
lang_map = af_ZA: af-ZA, am_ET: am-ET, ar_AE: ar-AE, ar_BH: ar-BH, ar_DZ: ar-DZ, ar_EG: ar-EG, ar_IQ: ar-IQ, ar_JO: ar-JO, ar_KW: ar-KW, ar_LB: ar-LB, ar_LY: ar-LY, ar_MA: ar-MA, ar_OM: ar-OM, ar_QA: ar-QA, ar_SA: ar-SA, ar_SY: ar-SY, ar_TN: ar-TN, ar_YE: ar-YE, arn_CL: arn-CL, as_IN: as-IN, az_AZ: az-AZ, ba_RU: ba-RU, be_BY: be-BY, bg_BG: bg-BG, bn_BD: bn-BD, bn_IN: bn-IN, bo_CN: bo-CN, br_FR: br-FR, bs_BA: bs-BA, ca_ES: ca-ES, co_FR: co-FR, cs_CZ: cs-CZ, cy_GB: cy-GB, da_DK: da-DK, de_AT: de-AT, de_CH: de-CH, de_DE: de-DE, de_LI: de-LI, de_LU: de-LU, dsb_DE: dsb-DE, dv_MV: dv-MV, el_GR: el-GR, en_AU: en-AU, en_BZ: en-BZ, en_CA: en-CA, en_GB: en-GB, en_IE: en-IE, en_IN: en-IN, en_JM: en-JM, en_MY: en-MY, en_NZ: en-NZ, en_PH: en-PH, en_SG: en-SG, en_TT: en-TT, en_US: en-US, en_ZA: en-ZA, en_ZW: en-ZW, es_AR: es-AR, es_BO: es-BO, es_CL: es-CL, es_CO: es-CO, es_CR: es-CR, es_DO: es-DO, es_EC: es-EC, es_ES: es-ES, es_GT: es-GT, es_HN: es-HN, es_MX: es-MX, es_NI: es-NI, es_PA: es-PA, es_PE: es-PE, es_PR: es-PR, es_PY: es-PY, es_SV: es-SV, es_US: es-US, es_UY: es-UY, es_VE: es-VE, et_EE: et-EE, eu_ES: eu-ES, fa_IR: fa-IR, fi_FI: fi-FI, fil_PH: fil-PH, fo_FO: fo-FO, fr_BE: fr-BE, fr_CA: fr-CA, fr_CH: fr-CH, fr_FR: fr-FR, fr_LU: fr-LU, fr_MC: fr-MC, fy_NL: fy-NL, ga_IE: ga-IE, gd_GB: gd-GB, gl_ES: gl-ES, gsw_FR: gsw-FR, gu_IN: gu-IN, ha_NG: ha-NG, he_IL: he-IL, hi_IN: hi-IN, hr_BA: hr-BA, hr_HR: hr-HR, hsb_DE: hsb-DE, hu_HU: hu-HU, hy_AM: hy-AM, id_ID: id-ID, ig_NG: ig-NG, ii_CN: ii-CN, is_IS: is-IS, it_CH: it-CH, it_IT: it-IT, iu_CA: iu-CA, ja_JP: ja-JP, ka_GE: ka-GE, kk_KZ: kk-KZ, kl_GL: kl-GL, km_KH: km-KH, kn_IN: kn-IN, ko_KR: ko-KR, kok_IN: kok-IN, ky_KG: ky-KG, lb_LU: lb-LU, lo_LA: lo-LA, lt_LT: lt-LT, lv_LV: lv-LV, mi_NZ: mi-NZ, mk_MK: mk-MK, ml_IN: ml-IN, mn_CN: mn-CN, mn_MN: mn-MN, moh_CA: moh-CA, mr_IN: mr-IN, ms_BN: ms-BN, ms_MY: ms-MY, mt_MT: mt-MT, nb_NO: nb-NO, ne_NP: ne-NP, nl_BE: nl-BE, nl_NL: nl-NL, nn_NO: nn-NO, nso_ZA: nso-ZA, oc_FR: oc-FR, or_IN: or-IN, pa_IN: pa-IN, pl_PL: pl-PL, prs_AF: prs-AF, ps_AF: ps-AF, pt_BR: pt-BR, pt_PT: pt-PT, qut_GT: qut-GT, quz_BO: quz-BO, quz_EC: quz-EC, quz_PE: quz-PE, rm_CH: rm-CH, ro_RO: ro-RO, ru_RU: ru-RU, rw_RW: rw-RW, sa_IN: sa-IN, sah_RU: sah-RU, se_FI: se-FI, se_NO: se-NO, se_SE: se-SE, si_LK: si-LK, sk_SK: sk-SK, sl_SI: sl-SI, sma_NO: sma-NO, sma_SE: sma-SE, smj_NO: smj-NO, smj_SE: smj-SE, smn_FI: smn-FI, sms_FI: sms-FI, sq_AL: sq-AL, sr_BA: sr-BA, sr_CS: sr-CS, sr_ME: sr-ME, sr_RS: sr-RS, sv_FI: sv-FI, sv_SE: sv-SE, sw_KE: sw-KE, syr_SY: syr-SY, ta_IN: ta-IN, te_IN: te-IN, tg_TJ: tg-TJ, th_TH: th-TH, tk_TM: tk-TM, tn_ZA: tn-ZA, tr_TR: tr-TR, tt_RU: tt-RU, tzm_DZ: tzm-DZ, ug_CN: ug-CN, uk_UA: uk-UA, ur_PK: ur-PK, uz_UZ: uz-UZ, vi_VN: vi-VN, wo_SN: wo-SN, xh_ZA: xh-ZA, yo_NG: yo-NG, zh_CN: zh-CN, zh_HK: zh-HK, zh_MO: zh-MO, zh_SG: zh-SG, zh_TW: zh-TW, zu_ZA: zu-ZA
|
||||
|
||||
[manjaro-pamac.pamacpot]
|
||||
file_filter = po/<lang>.po
|
||||
source_file = po/pamac.pot
|
||||
source_lang = en
|
||||
|
||||
type = PO
|
||||
|
49
Makefile
Normal file
@ -0,0 +1,49 @@
|
||||
|
||||
all:
|
||||
cd resources; make resources
|
||||
cd src; make binaries
|
||||
cd po; make gettext
|
||||
|
||||
clean:
|
||||
rm -f src/*.c src/pamac-daemon src/pamac-tray src/pamac-updater src/pamac-manager src/pamac-install
|
||||
rm -r resources/*.c
|
||||
rm -rf po/locale
|
||||
rm -f po/*.mo
|
||||
rm -f data/polkit/org.manjaro.pamac.policy
|
||||
|
||||
install:
|
||||
mkdir -p /usr/share/icons/hicolor
|
||||
cp -r data/icons/* /usr/share/icons/hicolor
|
||||
cp -r po/locale /usr/share
|
||||
install -Dm744 src/pamac-daemon /usr/bin/pamac-daemon
|
||||
install -Dm755 src/pamac-tray /usr/bin/pamac-tray
|
||||
install -Dm755 src/pamac-manager /usr/bin/pamac-manager
|
||||
install -Dm755 src/pamac-updater /usr/bin/pamac-updater
|
||||
install -Dm755 src/pamac-install /usr/bin/pamac-install
|
||||
#install -Dm755 src/pamac-refresh /usr/bin/pamac-refresh
|
||||
install -Dm755 src/pamac-install /usr/bin/pamac-install
|
||||
install -Dm644 data/applications/pamac-tray.desktop /etc/xdg/autostart/pamac-tray.desktop
|
||||
install -Dm644 data/applications/pamac-manager.desktop /usr/share/applications/pamac-manager.desktop
|
||||
install -Dm644 data/applications/pamac-updater.desktop /usr/share/applications/pamac-updater.desktop
|
||||
install -Dm644 data/applications/pamac-install.desktop /usr/share/applications/pamac-install.desktop
|
||||
install -Dm644 data/config/pamac.conf /etc/pamac.conf
|
||||
install -Dm644 data/dbus/org.manjaro.pamac.conf /etc/dbus-1/system.d/org.manjaro.pamac.conf
|
||||
install -Dm644 data/dbus/org.manjaro.pamac.service /usr/share/dbus-1/system-services/org.manjaro.pamac.service
|
||||
install -Dm644 data/systemd/pamac.service /usr/lib/systemd/system/pamac.service
|
||||
#install -Dm744 data/networkmanager/99_update_pamac_tray /etc/NetworkManager/dispatcher.d/99_update_pamac_tray
|
||||
install -Dm644 data/polkit/org.manjaro.pamac.policy /usr/share/polkit-1/actions/org.manjaro.pamac.policy
|
||||
|
||||
uninstall:
|
||||
rm -f /usr/share/icons/16x16/apps/system-software-install.png
|
||||
rm -f /usr/share/icons/24x24/status/pamac-tray-no-update.png
|
||||
rm -f /usr/share/icons/24x24/status/pamac-tray-update.png
|
||||
rm -f /usr/share/icons/32x32/apps/system-software-install.png
|
||||
rm -f /usr/share/locale/*/LC_MESSAGES/pamac.mo
|
||||
rm -f /usr/bin/pamac-daemon /usr/bin/pamac-updater /usr/bin/pamac-tray /usr/bin/pamac-manager /usr/bin/pamac-install
|
||||
rm -f /etc/xdg/autostart/pamac-tray.desktop
|
||||
rm -f /usr/share/applications/pamac-manager.desktop /usr/share/applications/pamac-updater.desktop /usr/share/applications/pamac-install.desktop
|
||||
rm -f /etc/pamac.conf
|
||||
rm -f /etc/dbus-1/system.d/org.manjaro.pamac.conf
|
||||
rm -f /usr/share/dbus-1/system-services/org.manjaro.pamac.service
|
||||
rm -f /usr/lib/systemd/system/pamac.service
|
||||
rm -f /usr/share/polkit-1/actions/org.manjaro.pamac.policy
|
11
README
@ -1 +1,12 @@
|
||||
A DBus daemon and Gtk3 frontend for libalpm written in Vala
|
||||
|
||||
Features:
|
||||
- Alpm bindings for Vala
|
||||
- a DBus daemon to perform every tasks with root access using polkit to check authorizations
|
||||
- a Gtk3 Package Manager
|
||||
- a Gtk3 Updates Manager
|
||||
- a Tray icon with configurable periodic refresh and updates notifications
|
||||
- a complete AUR support:
|
||||
* multiple words search capability
|
||||
* Enable/Disable check updates from AUR
|
||||
* Build and update your AUR packages in a integrated terminal using yaourt
|
||||
|
@ -128,4 +128,4 @@ Type=Application
|
||||
Icon=system-software-install
|
||||
StartupNotify=true
|
||||
NoDisplay=true
|
||||
MimeType=application/x-xz-compressed-tar;
|
||||
MimeType=application/x-alpm-package;
|
||||
|
Before Width: | Height: | Size: 411 B |
Before Width: | Height: | Size: 431 B |
Before Width: | Height: | Size: 488 B |
Before Width: | Height: | Size: 372 B |
Before Width: | Height: | Size: 598 B |
Before Width: | Height: | Size: 619 B |
Before Width: | Height: | Size: 745 B |
Before Width: | Height: | Size: 501 B |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.2 KiB |
8
data/mime/x-alpm-package.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
|
||||
<mime-type type="application/x-alpm-package">
|
||||
<generic-icon name="package-x-generic"/>
|
||||
<comment>Alpm Package</comment>
|
||||
<glob pattern="*.pkg.tar.xz"/>
|
||||
</mime-type>
|
||||
</mime-info>
|
@ -14,12 +14,4 @@
|
||||
<allow_active>auth_admin_keep</allow_active>
|
||||
</defaults>
|
||||
</action>
|
||||
<action id="org.manjaro.pamac.write_config">
|
||||
<message>Authentication is required</message>
|
||||
<defaults>
|
||||
<allow_any>no</allow_any>
|
||||
<allow_inactive>no</allow_inactive>
|
||||
<allow_active>auth_admin_keep</allow_active>
|
||||
</defaults>
|
||||
</action>
|
||||
</policyconfig>
|
278
examples/pactree.vala
Normal file
@ -0,0 +1,278 @@
|
||||
/*
|
||||
* pactree.vala - a simple dependency tree viewer translated in Vala
|
||||
*
|
||||
* Copyright (C) 2014 Guillaume Benoit <guillaume@manjaro.org>
|
||||
* Copyright (c) 2010-2011 Pacman Development Team <pacman-dev@archlinux.org>
|
||||
*
|
||||
* 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 2 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
// Compile with: valac --pkg=libalpm --vapidir=../vapi --Xcc=-I../util ../util/alpm-util.c pactree.vala -o pactree
|
||||
|
||||
using Alpm;
|
||||
|
||||
/* output */
|
||||
string provides;
|
||||
string unresolvable;
|
||||
string branch_tip1;
|
||||
string branch_tip2;
|
||||
int indent_size;
|
||||
|
||||
/* color */
|
||||
string branch1_color;
|
||||
string branch2_color;
|
||||
string leaf1_color;
|
||||
string leaf2_color;
|
||||
string color_off;
|
||||
|
||||
/* globals */
|
||||
Handle handle;
|
||||
unowned DB localdb;
|
||||
Alpm.List<string?> walked = null;
|
||||
Alpm.List<string?> provisions = null;
|
||||
|
||||
/* options */
|
||||
bool color;
|
||||
bool graphviz;
|
||||
bool linear;
|
||||
int max_depth;
|
||||
bool reverse;
|
||||
bool unique;
|
||||
string dbpath;
|
||||
|
||||
const OptionEntry[] options = {
|
||||
{ "dbpath", 'b', 0, OptionArg.STRING, ref dbpath, "set an alternate database location", "path" },
|
||||
{ "color", 'c', 0, OptionArg.NONE, ref color, "colorize output", null },
|
||||
{ "depth", 'd', 0, OptionArg.INT, ref max_depth, "limit the depth of recursion", "number" },
|
||||
{ "graph", 'g', 0, OptionArg.NONE, ref graphviz, "generate output for graphviz", null },
|
||||
{ "linear", 'l', 0, OptionArg.NONE, ref linear, "enable linear output", null },
|
||||
{ "reverse", 'r', 0, OptionArg.NONE, ref reverse, "show reverse dependencies", null },
|
||||
{ "unique", 'u', 0, OptionArg.NONE, ref unique, "show dependencies with no duplicates (implies -l)", null },
|
||||
{ null }
|
||||
};
|
||||
|
||||
static void init_options() {
|
||||
/* initialize options */
|
||||
color = false;
|
||||
graphviz = false;
|
||||
linear = false;
|
||||
max_depth = -1;
|
||||
reverse = false;
|
||||
unique = false;
|
||||
dbpath = "/var/lib/pacman";
|
||||
|
||||
/* output */
|
||||
provides = " provides";
|
||||
unresolvable = " [unresolvable]";
|
||||
branch_tip1 = "|--";
|
||||
branch_tip2 = "+--";
|
||||
indent_size = 3;
|
||||
|
||||
/* color */
|
||||
branch1_color = "\033[0;33m"; /* yellow */
|
||||
branch2_color = "\033[0;37m"; /* white */
|
||||
leaf1_color = "\033[1;32m"; /* bold green */
|
||||
leaf2_color = "\033[0;32m"; /* green */
|
||||
color_off = "\033[0m";
|
||||
}
|
||||
|
||||
static int parse_options(ref unowned string[] args) {
|
||||
var opts = new OptionContext("");
|
||||
opts.set_help_enabled(true);
|
||||
opts.add_main_entries(options, null);
|
||||
|
||||
try {
|
||||
bool b = opts.parse(ref args);
|
||||
if (!b) {
|
||||
stderr.puts(opts.get_help(false, null));
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
catch (OptionError e)
|
||||
{
|
||||
stderr.puts("Unable to parse options : " + e.message + "\n");
|
||||
return 1;
|
||||
}
|
||||
/* there must be (at least) one argument left */
|
||||
if (args.length == 1) return 1;
|
||||
/* unique implies linear */
|
||||
if (unique) linear = true;
|
||||
|
||||
/* no color */
|
||||
if (!color) {
|
||||
branch1_color = branch2_color = "";
|
||||
leaf1_color = leaf2_color = "";
|
||||
color_off = "";
|
||||
}
|
||||
|
||||
/* linear */
|
||||
if (linear) {
|
||||
provides = "";
|
||||
branch_tip1 = branch_tip2 = "";
|
||||
indent_size = 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void local_init() {
|
||||
Alpm.Errno error;
|
||||
handle = new Handle ("/", dbpath, out error);
|
||||
assert (error == 0);
|
||||
localdb = handle.localdb;
|
||||
assert (localdb != null);
|
||||
}
|
||||
|
||||
static int main (string[] args) {
|
||||
init_options();
|
||||
int ret = parse_options(ref args);
|
||||
if (ret != 0) return ret;
|
||||
|
||||
local_init();
|
||||
string? target_name = args[1];
|
||||
|
||||
unowned Package? pkg = find_satisfier(localdb.pkgcache, target_name);
|
||||
if (pkg == null) {
|
||||
stderr.printf("Error: package '%s' not found\n", target_name);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* begin writing */
|
||||
print_start(pkg.name, target_name);
|
||||
if(reverse)
|
||||
walk_reverse_deps(pkg, 1);
|
||||
else
|
||||
walk_deps(pkg, 1);
|
||||
|
||||
print_end();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void print_text(string? pkg, string? provision, int depth)
|
||||
{
|
||||
int indent_sz = (depth + 1) * indent_size;
|
||||
|
||||
if ((pkg == null) && (provision == null)) return;
|
||||
|
||||
if (pkg == null) {
|
||||
/* we failed to resolve provision */
|
||||
stdout.printf("%s%*s%s%s%s%s%s\n", branch1_color, indent_sz, branch_tip1,
|
||||
leaf1_color, provision, branch1_color, unresolvable, color_off);
|
||||
} else if ((provision != null) && (provision != pkg)) {
|
||||
/* pkg provides provision */
|
||||
stdout.printf("%s%*s%s%s%s%s %s%s%s\n", branch2_color, indent_sz, branch_tip2,
|
||||
leaf1_color, pkg, leaf2_color, provides, leaf1_color, provision,
|
||||
color_off);
|
||||
} else {
|
||||
/* pkg is a normal package */
|
||||
stdout.printf("%s%*s%s%s%s\n", branch1_color, indent_sz, branch_tip1, leaf1_color,
|
||||
pkg, color_off);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* walk dependencies in reverse, showing packages which require the target
|
||||
*/
|
||||
static void walk_reverse_deps(Package pkg, int depth) {
|
||||
if((max_depth >= 0) && (depth > max_depth)) return;
|
||||
|
||||
walked.add(pkg.name);
|
||||
unowned Alpm.List<string?> required_by = pkg.compute_requiredby ();
|
||||
|
||||
foreach(string? i in required_by) {
|
||||
string pkgname = i;
|
||||
if (walked.find_str(pkgname) != null) {
|
||||
/* if we've already seen this package, don't print in "unique" output
|
||||
* and don't recurse */
|
||||
if (!unique) print(pkg.name, pkgname, null, depth);
|
||||
} else {
|
||||
print(pkg.name, pkgname, null, depth);
|
||||
walk_reverse_deps(localdb.get_pkg(pkgname), depth + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* walk dependencies, showing dependencies of the target
|
||||
*/
|
||||
static void walk_deps(Package pkg, int depth)
|
||||
{
|
||||
if((max_depth >= 0) && (depth > max_depth)) return;
|
||||
|
||||
walked.add(pkg.name);
|
||||
|
||||
foreach (unowned Depend depend in pkg.depends) {
|
||||
string depname = depend.name;
|
||||
unowned Package? provider = find_satisfier (localdb.pkgcache, depname);
|
||||
|
||||
if (provider != null) {
|
||||
string provname = provider.name;
|
||||
|
||||
if (walked.find_str (provname) != null) {
|
||||
/* if we've already seen this package, don't print in "unique" output
|
||||
* and don't recurse */
|
||||
if (!unique) {
|
||||
print (pkg.name, provname, depname, depth);
|
||||
}
|
||||
} else {
|
||||
print (pkg.name, provname, depname, depth);
|
||||
walk_deps(provider, depth + 1);
|
||||
}
|
||||
} else {
|
||||
/* unresolvable package */
|
||||
print(pkg.name, null, depname, depth);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void print_graph(string parentname, string? pkgname, string? depname)
|
||||
{
|
||||
if(depname != null) {
|
||||
stdout.printf("\"%s\" -> \"%s\" [color=chocolate4];\n", parentname, depname);
|
||||
if((pkgname != null) && (depname != pkgname) && (provisions.find_str(depname) != null)) {
|
||||
stdout.printf("\"%s\" -> \"%s\" [arrowhead=none, color=grey];\n", depname, pkgname);
|
||||
provisions.add(depname);
|
||||
}
|
||||
} else if(pkgname != null) {
|
||||
stdout.printf("\"%s\" -> \"%s\" [color=chocolate4];\n", parentname, pkgname);
|
||||
}
|
||||
}
|
||||
|
||||
/* parent depends on dep which is satisfied by pkg */
|
||||
static void print(string? parentname, string? pkgname, string? depname, int depth)
|
||||
{
|
||||
if(graphviz) {
|
||||
print_graph(parentname, pkgname, depname);
|
||||
} else {
|
||||
print_text(pkgname, depname, depth);
|
||||
}
|
||||
}
|
||||
|
||||
static void print_start(string pkgname, string provname)
|
||||
{
|
||||
if(graphviz) {
|
||||
stdout.printf("digraph G { START [color=red, style=filled];\n" +
|
||||
"node [style=filled, color=green];\n" +
|
||||
" \"START\" -> \"%s\";\n", pkgname);
|
||||
} else {
|
||||
print_text(pkgname, provname, 0);
|
||||
}
|
||||
}
|
||||
|
||||
static void print_end()
|
||||
{
|
||||
if(graphviz) {
|
||||
/* close graph output */
|
||||
stdout.printf("}\n");
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
./pamac-daemon.py
|
||||
./pamac-manager.py
|
||||
./pamac-updater.py
|
||||
./pamac-tray.py
|
||||
./pamac-install.py
|
||||
./pamac/transaction.py
|
||||
./pamac/common.py
|
||||
./gui/manager.ui
|
||||
./gui/updater.ui
|
||||
./gui/dialogs.ui
|
721
gui/dialogs.ui
@ -1,721 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.16.1 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.6"/>
|
||||
<object class="GtkMessageDialog" id="ErrorDialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="resizable">False</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="window_position">center-on-parent</property>
|
||||
<property name="icon_name">system-software-install</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="urgency_hint">True</property>
|
||||
<property name="has_resize_grip">False</property>
|
||||
<property name="message_type">error</property>
|
||||
<property name="buttons">ok</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkBox" id="messagedialog-vbox">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkButtonBox" id="messagedialog-action_area">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkMessageDialog" id="InfoDialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="resizable">False</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="window_position">center-on-parent</property>
|
||||
<property name="icon_name">system-software-install</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="urgency_hint">True</property>
|
||||
<property name="has_resize_grip">False</property>
|
||||
<property name="buttons">ok</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkBox" id="messagedialog-vbox9">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkButtonBox" id="messagedialog-action_area9">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkWindow" id="ProgressWindow">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Progress</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="window_position">center-on-parent</property>
|
||||
<property name="default_width">450</property>
|
||||
<property name="icon_name">system-software-install</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="deletable">False</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="box8">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="box9">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="action_icon">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="progresslabel2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkProgressBar" id="progressbar2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="pulse_step">0.050000000000000003</property>
|
||||
<property name="show_text">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkExpander" id="progress_expander">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="resize_toplevel">True</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow11">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="vexpand">True</property>
|
||||
<property name="window_placement">bottom-left</property>
|
||||
<property name="shadow_type">in</property>
|
||||
<property name="min_content_width">400</property>
|
||||
<property name="min_content_height">200</property>
|
||||
<child>
|
||||
<object class="GtkTextView" id="progress_textview">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="editable">False</property>
|
||||
<property name="wrap_mode">word</property>
|
||||
<property name="cursor_visible">False</property>
|
||||
<signal name="size-allocate" handler="on_progress_textview_size_allocate" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label">
|
||||
<object class="GtkLabel" id="label4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">details</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButtonBox" id="buttonbox3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">5</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="ProgressCancelButton">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="clicked" handler="on_ProgressCancelButton_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="ProgressCloseButton">
|
||||
<property name="label">gtk-close</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="clicked" handler="on_ProgressCloseButton_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkMessageDialog" id="QuestionDialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="resizable">False</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="window_position">center-on-parent</property>
|
||||
<property name="icon_name">system-software-install</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="urgency_hint">True</property>
|
||||
<property name="has_resize_grip">False</property>
|
||||
<property name="message_type">question</property>
|
||||
<property name="buttons">yes-no</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkBox" id="messagedialog-vbox8">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkButtonBox" id="messagedialog-action_area8">
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkMessageDialog" id="WarningDialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="resizable">False</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="window_position">center-on-parent</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="urgency_hint">True</property>
|
||||
<property name="has_resize_grip">False</property>
|
||||
<property name="message_type">warning</property>
|
||||
<property name="buttons">ok</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkBox" id="messagedialog-vbox7">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkButtonBox" id="messagedialog-action_area7">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">10000</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkWindow" id="PreferencesWindow">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Pamac Preferences</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="default_width">300</property>
|
||||
<property name="default_height">250</property>
|
||||
<property name="icon_name">system-software-install</property>
|
||||
<signal name="delete-event" handler="on_PreferencesWindow_delete_event" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkBox" id="box1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkNotebook" id="notebook1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="box2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="EnableAURButton">
|
||||
<property name="label" translatable="yes">Enable AUR support</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Allow Pamac to search and install packages from AUR</property>
|
||||
<property name="focus_on_click">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="RemoveUnrequiredDepsButton">
|
||||
<property name="label" translatable="yes">Remove unrequired dependencies</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">When removing a package, also remove those dependencies that are not required by other packages</property>
|
||||
<property name="focus_on_click">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="box3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="RefreshPeriodLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin_left">3</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="RefreshPeriodSpinButton">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="tooltip_text" translatable="yes">How often to check for updates, value in hours</property>
|
||||
<property name="margin_right">3</property>
|
||||
<property name="caps_lock_warning">False</property>
|
||||
<property name="input_purpose">number</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="numeric">True</property>
|
||||
<property name="update_policy">if-valid</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="tab">
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Options</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="tab_fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButtonBox" id="buttonbox2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">5</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="PreferencesValidButton">
|
||||
<property name="label">gtk-ok</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="clicked" handler="on_PreferencesValidButton_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="PreferencesCloseButton">
|
||||
<property name="label">gtk-close</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="clicked" handler="on_PreferencesCloseButton_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkListStore" id="choose_list">
|
||||
<columns>
|
||||
<!-- column-name gboolean1 -->
|
||||
<column type="gboolean"/>
|
||||
<!-- column-name gchararray1 -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkDialog" id="ChooseDialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="title" translatable="yes">Choose</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="window_position">center-on-parent</property>
|
||||
<property name="icon_name">system-software-install</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="deletable">False</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkBox" id="dialog-vbox1">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkButtonBox" id="dialog-action_area1">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="ChooseButton">
|
||||
<property name="label">gtk-ok</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="clicked" handler="on_ChooseButton_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="choose_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="shadow_type">in</property>
|
||||
<property name="min_content_width">300</property>
|
||||
<property name="min_content_height">250</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="treeview5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="model">choose_list</property>
|
||||
<property name="headers_visible">False</property>
|
||||
<property name="headers_clickable">False</property>
|
||||
<property name="enable_search">False</property>
|
||||
<property name="show_expanders">False</property>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection" id="treeview-selection5">
|
||||
<property name="mode">none</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="treeviewcolumn1">
|
||||
<property name="sizing">autosize</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererToggle" id="choose_renderertoggle">
|
||||
<signal name="toggled" handler="on_choose_renderertoggle_toggled" swapped="no"/>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="active">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="choose_renderertext"/>
|
||||
<attributes>
|
||||
<attribute name="text">1</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="0">ChooseButton</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
<object class="GtkListStore" id="transaction_sum">
|
||||
<columns>
|
||||
<!-- column-name action -->
|
||||
<column type="gchararray"/>
|
||||
<!-- column-name packages -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkWindow" id="ConfDialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Summary</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="window_position">center-on-parent</property>
|
||||
<property name="icon_name">system-software-install</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="deletable">False</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="box7">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="sum_top_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="vexpand">True</property>
|
||||
<property name="shadow_type">in</property>
|
||||
<property name="min_content_width">330</property>
|
||||
<property name="min_content_height">250</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="treeview4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="vexpand">True</property>
|
||||
<property name="model">transaction_sum</property>
|
||||
<property name="headers_visible">False</property>
|
||||
<property name="headers_clickable">False</property>
|
||||
<property name="enable_search">False</property>
|
||||
<property name="show_expanders">False</property>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection" id="treeview-selection">
|
||||
<property name="mode">none</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="_action">
|
||||
<property name="sizing">autosize</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="cellrenderertext5">
|
||||
<property name="yalign">0</property>
|
||||
<property name="weight">600</property>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="_packages">
|
||||
<property name="sizing">autosize</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="cellrenderertext6"/>
|
||||
<attributes>
|
||||
<attribute name="text">1</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="sum_bottom_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButtonBox" id="buttonbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">7</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="TransCancelButton">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_focus">True</property>
|
||||
<property name="is_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="clicked" handler="on_TransCancelButton_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="TransValidButton">
|
||||
<property name="label">gtk-ok</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="clicked" handler="on_TransValidButton_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
@ -1,40 +0,0 @@
|
||||
#! /usr/bin/python3
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
# pamac - A Python implementation of alpm
|
||||
# Copyright (C) 2013 Guillaume Benoit <guillaume@manjaro.org>
|
||||
#
|
||||
# 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
from gi.repository import GObject
|
||||
from pamac import common, transaction
|
||||
import dbus
|
||||
|
||||
def handle_updates(updates):
|
||||
transaction.StopDaemon()
|
||||
loop.quit()
|
||||
|
||||
loop = GObject.MainLoop()
|
||||
|
||||
if not common.pid_file_exists():
|
||||
bus = dbus.SystemBus()
|
||||
bus.add_signal_receiver(handle_updates, dbus_interface = "org.manjaro.pamac", signal_name = "EmitAvailableUpdates")
|
||||
transaction.get_dbus_methods()
|
||||
try:
|
||||
transaction.CheckUpdates()
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
loop.run()
|
833
pamac-daemon.py
@ -1,833 +0,0 @@
|
||||
#! /usr/bin/python3
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
# pamac - A Python implementation of alpm
|
||||
# Copyright (C) 2013-2014 Guillaume Benoit <guillaume@manjaro.org>
|
||||
#
|
||||
# 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
import dbus
|
||||
import dbus.service
|
||||
from dbus.mainloop.glib import DBusGMainLoop
|
||||
from gi.repository import GObject
|
||||
import re
|
||||
|
||||
import pyalpm
|
||||
from multiprocessing import Process
|
||||
from pamac import config, common, aur
|
||||
|
||||
# i18n
|
||||
import locale
|
||||
locale.setlocale(locale.LC_ALL, '')
|
||||
import gettext
|
||||
gettext.bindtextdomain('pamac', '/usr/share/locale')
|
||||
gettext.textdomain('pamac')
|
||||
_ = gettext.gettext
|
||||
|
||||
def format_error(data):
|
||||
errstr = data[0].strip('\n')
|
||||
errno = data[1]
|
||||
detail = data[2]
|
||||
if detail:
|
||||
# detail is a list of '\n' terminated strings
|
||||
return '{}:\n'.format(errstr) + ''.join(i for i in detail)
|
||||
else:
|
||||
return errstr
|
||||
|
||||
class PamacDBusService(dbus.service.Object):
|
||||
def __init__(self):
|
||||
bus = dbus.SystemBus()
|
||||
bus_name = dbus.service.BusName('org.manjaro.pamac', bus)
|
||||
dbus.service.Object.__init__(self, bus_name, '/org/manjaro/pamac')
|
||||
self.t = None
|
||||
self.task = None
|
||||
self.error = ''
|
||||
self.warning = ''
|
||||
self.providers = []
|
||||
self.previous_action = ''
|
||||
self.previous_action_long = ''
|
||||
self.previous_icon = ''
|
||||
self.previous_target = ''
|
||||
self.previous_percent = 0
|
||||
self.total_size = 0
|
||||
self.already_transferred = 0
|
||||
self.local_packages = set()
|
||||
self.aur_updates_checked = False
|
||||
self.aur_updates_pkgs = []
|
||||
self.localdb = None
|
||||
self.syncdbs = None
|
||||
self.get_handle()
|
||||
|
||||
def get_handle(self):
|
||||
self.handle = config.handle()
|
||||
self.localdb = self.handle.get_localdb()
|
||||
self.syncdbs = self.handle.get_syncdbs()
|
||||
self.handle.dlcb = self.cb_dl
|
||||
self.handle.totaldlcb = self.totaldlcb
|
||||
self.handle.eventcb = self.cb_event
|
||||
self.handle.questioncb = self.cb_question
|
||||
self.handle.progresscb = self.cb_progress
|
||||
self.handle.logcb = self.cb_log
|
||||
|
||||
def get_local_packages(self):
|
||||
self.local_packages = set()
|
||||
sync_pkg = None
|
||||
for pkg in self.localdb.pkgcache:
|
||||
for db in self.syncdbs:
|
||||
sync_pkg = db.get_pkg(pkg.name)
|
||||
if sync_pkg:
|
||||
break
|
||||
if not sync_pkg:
|
||||
self.local_packages.add(pkg.name)
|
||||
|
||||
def check_finished_commit(self):
|
||||
if self.task.is_alive():
|
||||
return True
|
||||
else:
|
||||
self.get_handle()
|
||||
return False
|
||||
|
||||
@dbus.service.signal('org.manjaro.pamac')
|
||||
def EmitAction(self, action):
|
||||
pass
|
||||
|
||||
@dbus.service.signal('org.manjaro.pamac')
|
||||
def EmitActionLong(self, action):
|
||||
pass
|
||||
|
||||
@dbus.service.signal('org.manjaro.pamac')
|
||||
def EmitNeedDetails(self, need):
|
||||
pass
|
||||
|
||||
@dbus.service.signal('org.manjaro.pamac')
|
||||
def EmitIcon(self, icon):
|
||||
pass
|
||||
|
||||
@dbus.service.signal('org.manjaro.pamac')
|
||||
def EmitTarget(self, target):
|
||||
pass
|
||||
|
||||
@dbus.service.signal('org.manjaro.pamac')
|
||||
def EmitPercent(self, percent):
|
||||
pass
|
||||
|
||||
@dbus.service.signal('org.manjaro.pamac')
|
||||
def EmitLogError(self, message):
|
||||
pass
|
||||
|
||||
@dbus.service.signal('org.manjaro.pamac')
|
||||
def EmitLogWarning(self, message):
|
||||
pass
|
||||
|
||||
@dbus.service.signal('org.manjaro.pamac', signature = '(ba(ssssu))')
|
||||
def EmitAvailableUpdates(self, updates):
|
||||
pass
|
||||
|
||||
@dbus.service.signal('org.manjaro.pamac')
|
||||
def EmitTransactionStart(self, message):
|
||||
pass
|
||||
|
||||
@dbus.service.signal('org.manjaro.pamac')
|
||||
def EmitTransactionDone(self, message):
|
||||
pass
|
||||
|
||||
@dbus.service.signal('org.manjaro.pamac')
|
||||
def EmitTransactionError(self, message):
|
||||
pass
|
||||
|
||||
@dbus.service.signal('org.manjaro.pamac')
|
||||
def EmitReloadConfig(self, message):
|
||||
# recheck aur updates next time
|
||||
self.aur_updates_checked = False
|
||||
# reload config
|
||||
config.pamac_conf.reload()
|
||||
|
||||
def cb_event(self, event, tupel):
|
||||
action = self.previous_action
|
||||
action_long = self.previous_action_long
|
||||
icon = self.previous_icon
|
||||
if event == 'ALPM_EVENT_CHECKDEPS_START':
|
||||
action = _('Checking dependencies')+'...'
|
||||
action_long = action+'\n'
|
||||
icon = 'pamac-search'
|
||||
elif event == 'ALPM_EVENT_CHECKDEPS_DONE':
|
||||
if self.warning:
|
||||
self.EmitLogWarning(self.warning)
|
||||
self.warning = ''
|
||||
elif event == 'ALPM_EVENT_FILECONFLICTS_START':
|
||||
action = _('Checking file conflicts')+'...'
|
||||
action_long = action+'\n'
|
||||
icon = 'pamac-search'
|
||||
elif event == 'ALPM_EVENT_FILECONFLICTS_DONE':
|
||||
pass
|
||||
elif event == 'ALPM_EVENT_RESOLVEDEPS_START':
|
||||
action = _('Resolving dependencies')+'...'
|
||||
action_long = action+'\n'
|
||||
icon = 'pamac-setup'
|
||||
elif event == 'ALPM_EVENT_RESOLVEDEPS_DONE':
|
||||
if self.warning:
|
||||
self.EmitLogWarning(self.warning)
|
||||
self.warning = ''
|
||||
elif event == 'ALPM_EVENT_INTERCONFLICTS_START':
|
||||
action = _('Checking inter conflicts')+'...'
|
||||
action_long = action+'\n'
|
||||
icon = 'pamac-search'
|
||||
elif event == 'ALPM_EVENT_INTERCONFLICTS_DONE':
|
||||
if self.warning:
|
||||
self.EmitLogWarning(self.warning)
|
||||
self.warning = ''
|
||||
elif event == 'ALPM_EVENT_ADD_START':
|
||||
string = _('Installing {pkgname}').format(pkgname = tupel[0].name)
|
||||
action = string+'...'
|
||||
action_long = '{} ({})...\n'.format(string, tupel[0].version)
|
||||
icon = 'pamac-add'
|
||||
elif event == 'ALPM_EVENT_ADD_DONE':
|
||||
formatted_event = 'Installed {pkgname} ({pkgversion})'.format(pkgname = tupel[0].name, pkgversion = tupel[0].version)
|
||||
common.write_log_file(formatted_event)
|
||||
elif event == 'ALPM_EVENT_REMOVE_START':
|
||||
string = _('Removing {pkgname}').format(pkgname = tupel[0].name)
|
||||
action = string+'...'
|
||||
action_long = '{} ({})...\n'.format(string, tupel[0].version)
|
||||
icon = 'pamac-delete'
|
||||
elif event == 'ALPM_EVENT_REMOVE_DONE':
|
||||
formatted_event = 'Removed {pkgname} ({pkgversion})'.format(pkgname = tupel[0].name, pkgversion = tupel[0].version)
|
||||
common.write_log_file(formatted_event)
|
||||
elif event == 'ALPM_EVENT_UPGRADE_START':
|
||||
string = _('Upgrading {pkgname}').format(pkgname = tupel[1].name)
|
||||
action = string+'...'
|
||||
action_long = '{} ({} => {})...\n'.format(string, tupel[1].version, tupel[0].version)
|
||||
icon = 'pamac-update'
|
||||
elif event == 'ALPM_EVENT_UPGRADE_DONE':
|
||||
formatted_event = 'Upgraded {pkgname} ({oldversion} -> {newversion})'.format(pkgname = tupel[1].name, oldversion = tupel[1].version, newversion = tupel[0].version)
|
||||
common.write_log_file(formatted_event)
|
||||
elif event == 'ALPM_EVENT_DOWNGRADE_START':
|
||||
string = _('Downgrading {pkgname}').format(pkgname = tupel[1].name)
|
||||
action = string+'...'
|
||||
action_long = '{} ({} => {})...\n'.format(string, tupel[1].version, tupel[0].version)
|
||||
icon = 'pamac-add'
|
||||
elif event == 'ALPM_EVENT_DOWNGRADE_DONE':
|
||||
formatted_event = 'Downgraded {pkgname} ({oldversion} -> {newversion})'.format(pkgname = tupel[1].name, oldversion = tupel[1].version, newversion = tupel[0].version)
|
||||
common.write_log_file(formatted_event)
|
||||
elif event == 'ALPM_EVENT_REINSTALL_START':
|
||||
string = _('Reinstalling {pkgname}').format(pkgname = tupel[0].name)
|
||||
action = string+'...'
|
||||
action_long = '{} ({})...\n'.format(string, tupel[0].version)
|
||||
icon = 'pamac-add'
|
||||
elif event == 'ALPM_EVENT_REINSTALL_DONE':
|
||||
formatted_event = 'Reinstalled {pkgname} ({pkgversion})'.format(pkgname = tupel[0].name, pkgversion = tupel[0].version)
|
||||
common.write_log_file(formatted_event)
|
||||
elif event == 'ALPM_EVENT_INTEGRITY_START':
|
||||
action = _('Checking integrity')+'...'
|
||||
action_long = action+'\n'
|
||||
icon = 'pamac-search'
|
||||
self.already_transferred = 0
|
||||
elif event == 'ALPM_EVENT_INTEGRITY_DONE':
|
||||
pass
|
||||
elif event == 'ALPM_EVENT_LOAD_START':
|
||||
action = _('Loading packages files')+'...'
|
||||
action_long = action+'\n'
|
||||
icon = 'pamac-search'
|
||||
elif event == 'ALPM_EVENT_LOAD_DONE':
|
||||
pass
|
||||
elif event == 'ALPM_EVENT_DELTA_INTEGRITY_START':
|
||||
action = _('Checking delta integrity')+'...'
|
||||
action_long = action+'\n'
|
||||
icon = 'pamac-search'
|
||||
elif event == 'ALPM_EVENT_DELTA_INTEGRITY_DONE':
|
||||
pass
|
||||
elif event == 'ALPM_EVENT_DELTA_PATCHES_START':
|
||||
action = _('Applying deltas')+'...'
|
||||
action_long = action+'\n'
|
||||
icon = 'pamac-setup'
|
||||
elif event == 'ALPM_EVENT_DELTA_PATCHES_DONE':
|
||||
pass
|
||||
elif event == 'ALPM_EVENT_DELTA_PATCH_START':
|
||||
action = _('Generating {} with {}').format(tupel[0], tupel[1])+'...'
|
||||
action_long = action+'\n'
|
||||
icon = 'pamac-setup'
|
||||
elif event == 'ALPM_EVENT_DELTA_PATCH_DONE':
|
||||
action = _('Generation succeeded!')
|
||||
action_long = action+'\n'
|
||||
elif event == 'ALPM_EVENT_DELTA_PATCH_FAILED':
|
||||
action = _('Generation failed.')
|
||||
action_long = action+'\n'
|
||||
elif event == 'ALPM_EVENT_SCRIPTLET_INFO':
|
||||
action =_('Configuring {pkgname}').format(pkgname = self.previous_target)+'...'
|
||||
action_long = tupel[0]
|
||||
icon = 'pamac-setup'
|
||||
self.EmitNeedDetails(True)
|
||||
elif event == 'ALPM_EVENT_RETRIEVE_START':
|
||||
action = _('Downloading')+'...'
|
||||
action_long = action+'\n'
|
||||
icon = 'pamac-download'
|
||||
elif event == 'ALPM_EVENT_DISKSPACE_START':
|
||||
action = _('Checking available disk space')+'...'
|
||||
action_long = action+'\n'
|
||||
icon = 'pamac-search'
|
||||
elif event == 'ALPM_EVENT_OPTDEP_REQUIRED':
|
||||
print('Optionnal deps exist')
|
||||
elif event == 'ALPM_EVENT_DATABASE_MISSING':
|
||||
#action =_('Database file for {} does not exist').format(tupel[0])+'...'
|
||||
#action_long = action
|
||||
pass
|
||||
elif event == 'ALPM_EVENT_KEYRING_START':
|
||||
action = _('Checking keyring')+'...'
|
||||
action_long = action+'\n'
|
||||
icon = 'pamac-search'
|
||||
elif event == 'ALPM_EVENT_KEYRING_DONE':
|
||||
pass
|
||||
elif event == 'ALPM_EVENT_KEY_DOWNLOAD_START':
|
||||
action = _('Downloading required keys')+'...'
|
||||
action_long = action+'\n'
|
||||
elif event == 'ALPM_EVENT_KEY_DOWNLOAD_DONE':
|
||||
pass
|
||||
if action != self.previous_action:
|
||||
self.previous_action = action
|
||||
self.EmitAction(action)
|
||||
if action_long != self.previous_action_long:
|
||||
self.previous_action_long != action_long
|
||||
self.EmitActionLong(action_long)
|
||||
if icon != self.previous_icon:
|
||||
self.previous_icon = icon
|
||||
self.EmitIcon(icon)
|
||||
print(event)
|
||||
|
||||
def cb_question(self, event, data_tupel, extra_data):
|
||||
if event == 'ALPM_QUESTION_INSTALL_IGNOREPKG':
|
||||
return 0 # Do not install package in IgnorePkg/IgnoreGroup
|
||||
if event == 'ALPM_QUESTION_REPLACE_PKG':
|
||||
self.warning += _('{pkgname1} will be replaced by {pkgname2}').format(pkgname1 = data_tupel[0].name, pkgname2 = data_tupel[1].name)+'\n'
|
||||
return 1 # Auto-remove conflicts in case of replaces
|
||||
if event == 'ALPM_QUESTION_CONFLICT_PKG':
|
||||
self.warning += _('{pkgname1} conflicts with {pkgname2}').format(pkgname1 = data_tupel[0], pkgname2 = data_tupel[1])+'\n'
|
||||
return 1 # Auto-remove conflicts
|
||||
if event == 'ALPM_QUESTION_CORRUPTED_PKG':
|
||||
return 1 # Auto-remove corrupted pkgs in cache
|
||||
if event == 'ALPM_QUESTION_REMOVE_PKGS':
|
||||
return 1 # Do not upgrade packages which have unresolvable dependencies
|
||||
if event == 'ALPM_QUESTION_SELECT_PROVIDER':
|
||||
## In this case we populate providers with different choices
|
||||
## the client will have to release transaction and re-init one
|
||||
## with the chosen package added to it
|
||||
self.providers.append(([pkg.name for pkg in data_tupel[0]], data_tupel[1]))
|
||||
return 0 # return the first choice, this is not important because the transaction will be released
|
||||
if event == 'ALPM_QUESTION_IMPORT_KEY':
|
||||
## data_tupel = (revoked(int), length(int), pubkey_algo(string), fingerprint(string), uid(string), created_time(int))
|
||||
if data_tupel[0] is 0: # not revoked
|
||||
return 1 # Auto get not revoked key
|
||||
if data_tupel[0] is 1: # revoked
|
||||
return 0 # Do not get revoked key
|
||||
|
||||
def cb_log(self, level, line):
|
||||
_logmask = pyalpm.LOG_ERROR | pyalpm.LOG_WARNING
|
||||
if not (level & _logmask):
|
||||
return
|
||||
if level & pyalpm.LOG_ERROR:
|
||||
#self.EmitLogError(line)
|
||||
_error = _('Error: ')+line
|
||||
self.EmitActionLong(_error)
|
||||
self.EmitNeedDetails(True)
|
||||
print(line)
|
||||
elif level & pyalpm.LOG_WARNING:
|
||||
self.warning += line
|
||||
_warning = _('Warning: ')+line
|
||||
self.EmitActionLong(_warning)
|
||||
elif level & pyalpm.LOG_DEBUG:
|
||||
line = "DEBUG: " + line
|
||||
print(line)
|
||||
elif level & pyalpm.LOG_FUNCTION:
|
||||
line = "FUNC: " + line
|
||||
print(line)
|
||||
|
||||
def totaldlcb(self, _total_size):
|
||||
self.total_size = _total_size
|
||||
|
||||
def cb_dl(self, _target, _transferred, _total):
|
||||
if _target.endswith('.db'):
|
||||
action = _('Refreshing {repo}').format(repo = _target.replace('.db', ''))+'...'
|
||||
action_long = ''
|
||||
icon = 'pamac-refresh'
|
||||
else:
|
||||
action = _('Downloading {pkgname}').format(pkgname = _target.replace('.pkg.tar.xz', ''))+'...'
|
||||
action_long = action+'\n'
|
||||
icon = 'pamac-download'
|
||||
if self.total_size > 0:
|
||||
percent = round((_transferred+self.already_transferred)/self.total_size, 2)
|
||||
if _transferred+self.already_transferred <= self.total_size:
|
||||
target = '{transferred}/{size}'.format(transferred = common.format_size(_transferred+self.already_transferred), size = common.format_size(self.total_size))
|
||||
else:
|
||||
target = ''
|
||||
else:
|
||||
percent = round(_transferred/_total, 2)
|
||||
target = ''
|
||||
if action != self.previous_action:
|
||||
self.previous_action = action
|
||||
self.EmitAction(action)
|
||||
if action_long != self.previous_action_long:
|
||||
self.previous_action_long = action_long
|
||||
self.EmitActionLong(action_long)
|
||||
if icon != self.previous_icon:
|
||||
self.previous_icon = icon
|
||||
self.EmitIcon(icon)
|
||||
if target != self.previous_target:
|
||||
self.previous_target = target
|
||||
self.EmitTarget(target)
|
||||
if percent != self.previous_percent:
|
||||
self.previous_percent = percent
|
||||
self.EmitPercent(percent)
|
||||
elif _transferred == _total:
|
||||
self.already_transferred += _total
|
||||
|
||||
def cb_progress(self, event, target, _percent, n, i):
|
||||
if event in ('ALPM_PROGRESS_ADD_START', 'ALPM_PROGRESS_UPGRADE_START', 'ALPM_PROGRESS_DOWNGRADE_START', 'ALPM_PROGRESS_REINSTALL_START', 'ALPM_PROGRESS_REMOVE_START'):
|
||||
percent = round(((i-1)/n)+(_percent/(100*n)), 2)
|
||||
else:
|
||||
percent = round(_percent/100, 2)
|
||||
if percent == 0:
|
||||
self.EmitTransactionStart('')
|
||||
if target != self.previous_target:
|
||||
self.previous_target = target
|
||||
if percent != self.previous_percent:
|
||||
self.EmitTarget('{}/{}'.format(str(i), str(n)))
|
||||
self.previous_percent = percent
|
||||
self.EmitPercent(percent)
|
||||
|
||||
def policykit_test(self, sender, connexion, action):
|
||||
bus = dbus.SystemBus()
|
||||
proxy_dbus = connexion.get_object('org.freedesktop.DBus','/org/freedesktop/DBus/Bus', False)
|
||||
dbus_info = dbus.Interface(proxy_dbus,'org.freedesktop.DBus')
|
||||
sender_pid = dbus_info.GetConnectionUnixProcessID(sender)
|
||||
proxy_policykit = bus.get_object('org.freedesktop.PolicyKit1','/org/freedesktop/PolicyKit1/Authority',False)
|
||||
policykit_authority = dbus.Interface(proxy_policykit,'org.freedesktop.PolicyKit1.Authority')
|
||||
|
||||
Subject = ('unix-process', {'pid': dbus.UInt32(sender_pid, variant_level=1),
|
||||
'start-time': dbus.UInt64(0, variant_level=1)})
|
||||
# We would like an infinite timeout, but dbus-python won't allow it.
|
||||
# Pass the longest timeout dbus-python will accept
|
||||
(is_authorized,is_challenge,details) = policykit_authority.CheckAuthorization(Subject, action, {'': ''}, dbus.UInt32(1), '',timeout=2147483)
|
||||
return is_authorized
|
||||
|
||||
@dbus.service.method('org.manjaro.pamac', 'si', 's', sender_keyword='sender', connection_keyword='connexion')
|
||||
def SetPkgReason(self, pkgname, reason, sender=None, connexion=None):
|
||||
try:
|
||||
authorized = self.policykit_test(sender,connexion,'org.manjaro.pamac.commit')
|
||||
except dbus.exceptions.DBusException as e:
|
||||
return _('Authentication failed')
|
||||
else:
|
||||
if authorized:
|
||||
error = ''
|
||||
try:
|
||||
pkg = self.localdb.get_pkg(pkgname)
|
||||
if pkg:
|
||||
self.handle.set_pkgreason(pkg, reason)
|
||||
except Exception as e:
|
||||
error = format_error(e.args)
|
||||
return error
|
||||
else :
|
||||
return _('Authentication failed')
|
||||
|
||||
@dbus.service.method('org.manjaro.pamac', '', 's', async_callbacks=('success', 'nosuccess'))
|
||||
def CheckUpdates(self, success, nosuccess):
|
||||
success('')
|
||||
syncfirst = False
|
||||
updates = []
|
||||
_ignorepkgs = set()
|
||||
self.get_handle()
|
||||
for group in self.handle.ignoregrps:
|
||||
db = self.localdb
|
||||
grp = db.read_grp(group)
|
||||
if grp:
|
||||
name, pkg_list = grp
|
||||
for pkg in pkg_list:
|
||||
_ignorepkgs.add(pkg.name)
|
||||
for name in self.handle.ignorepkgs:
|
||||
pkg = self.localdb.get_pkg(name)
|
||||
if pkg:
|
||||
_ignorepkgs.add(pkg.name)
|
||||
if config.syncfirst:
|
||||
for name in config.syncfirst:
|
||||
pkg = self.localdb.get_pkg(name)
|
||||
if pkg:
|
||||
candidate = pyalpm.sync_newversion(pkg, self.syncdbs)
|
||||
if candidate:
|
||||
syncfirst = True
|
||||
updates.append((candidate.name, candidate.version, candidate.db.name, '', candidate.download_size))
|
||||
if not updates:
|
||||
if config.enable_aur:
|
||||
if not self.aur_updates_checked:
|
||||
self.get_local_packages()
|
||||
self.local_packages -= _ignorepkgs
|
||||
for pkg in self.localdb.pkgcache:
|
||||
if not pkg.name in _ignorepkgs:
|
||||
candidate = pyalpm.sync_newversion(pkg, self.syncdbs)
|
||||
if candidate:
|
||||
updates.append((candidate.name, candidate.version, candidate.db.name, '', candidate.download_size))
|
||||
self.local_packages.discard(pkg.name)
|
||||
if config.enable_aur:
|
||||
if not self.aur_updates_checked:
|
||||
if self.local_packages:
|
||||
self.aur_updates_pkgs = aur.multiinfo(self.local_packages)
|
||||
self.aur_updates_checked = True
|
||||
for aur_pkg in self.aur_updates_pkgs:
|
||||
if self.localdb.get_pkg(aur_pkg.name):
|
||||
comp = pyalpm.vercmp(aur_pkg.version, self.localdb.get_pkg(aur_pkg.name).version)
|
||||
if comp == 1:
|
||||
updates.append((aur_pkg.name, aur_pkg.version, aur_pkg.db.name, aur_pkg.tarpath, aur_pkg.download_size))
|
||||
self.EmitAvailableUpdates((syncfirst, updates))
|
||||
|
||||
@dbus.service.method('org.manjaro.pamac', 'b', '')
|
||||
def Refresh(self, force_update):
|
||||
def refresh():
|
||||
self.target = ''
|
||||
self.percent = 0
|
||||
error = ''
|
||||
for db in self.syncdbs:
|
||||
try:
|
||||
self.t = self.handle.init_transaction()
|
||||
db.update(force = bool(force_update))
|
||||
self.t.release()
|
||||
except pyalpm.error as e:
|
||||
print(e)
|
||||
error += format_error(e.args)
|
||||
break
|
||||
if error:
|
||||
self.EmitTransactionError(error)
|
||||
else:
|
||||
self.EmitTransactionDone('')
|
||||
self.task = Process(target=refresh)
|
||||
self.task.start()
|
||||
GObject.timeout_add(100, self.check_finished_commit)
|
||||
|
||||
@dbus.service.method('org.manjaro.pamac', 'a{sb}', 's')
|
||||
def Init(self, options):
|
||||
error = ''
|
||||
try:
|
||||
self.t = self.handle.init_transaction(**options)
|
||||
print('Init:',self.t.flags)
|
||||
except pyalpm.error as e:
|
||||
error = format_error(e.args)
|
||||
finally:
|
||||
return error
|
||||
|
||||
@dbus.service.method('org.manjaro.pamac', 'b', 's')
|
||||
def Sysupgrade(self, downgrade):
|
||||
error = ''
|
||||
try:
|
||||
self.t.sysupgrade(downgrade = bool(downgrade))
|
||||
except pyalpm.error as e:
|
||||
error = format_error(e.args)
|
||||
self.t.release()
|
||||
finally:
|
||||
return error
|
||||
|
||||
@dbus.service.method('org.manjaro.pamac', 's', 's')
|
||||
def Remove(self, pkgname):
|
||||
error = ''
|
||||
try:
|
||||
pkg = self.localdb.get_pkg(pkgname)
|
||||
if pkg is not None:
|
||||
self.t.remove_pkg(pkg)
|
||||
except pyalpm.error as e:
|
||||
error = format_error(e.args)
|
||||
finally:
|
||||
return error
|
||||
|
||||
@dbus.service.method('org.manjaro.pamac', 's', 's')
|
||||
def Add(self, pkgname):
|
||||
error = ''
|
||||
try:
|
||||
for db in self.syncdbs:
|
||||
# this is a security, in case of virtual package it will
|
||||
# choose the first provider, the choice should have been
|
||||
# done by the client
|
||||
pkg = pyalpm.find_satisfier(db.pkgcache, pkgname)
|
||||
if pkg:
|
||||
self.t.add_pkg(pkg)
|
||||
break
|
||||
except pyalpm.error as e:
|
||||
error = format_error(e.args)
|
||||
finally:
|
||||
return error
|
||||
|
||||
@dbus.service.method('org.manjaro.pamac', 's', 's')
|
||||
def Load(self, tarball_path):
|
||||
error = ''
|
||||
try:
|
||||
pkg = self.handle.load_pkg(tarball_path)
|
||||
if pkg:
|
||||
self.t.add_pkg(pkg)
|
||||
except pyalpm.error:
|
||||
error = _('{pkgname} is not a valid path or package name').format(pkgname = tarball_path)
|
||||
finally:
|
||||
return error
|
||||
|
||||
def check_extra_modules(self):
|
||||
to_add = set(pkg.name for pkg in self.t.to_add)
|
||||
to_remove = set(pkg.name for pkg in self.t.to_remove)
|
||||
to_check = [pkg for pkg in self.t.to_add]
|
||||
already_checked = set(pkg.name for pkg in to_check)
|
||||
depends = [to_check]
|
||||
# get installed kernels and modules
|
||||
pkgs = self.localdb.search('linux')
|
||||
installed_kernels = set()
|
||||
installed_modules = set()
|
||||
for pkg in pkgs:
|
||||
match = re.match("(linux[0-9]{2,3})(.*)", pkg.name)
|
||||
if match:
|
||||
installed_kernels.add(match.group(1))
|
||||
if match.group(2):
|
||||
installed_modules.add(match.group(2))
|
||||
for pkg in self.t.to_add:
|
||||
match = re.match("(linux[0-9]{2,3})(.*)", pkg.name)
|
||||
if match:
|
||||
installed_kernels.add(match.group(1))
|
||||
if match.group(2):
|
||||
installed_modules.add(match.group(2))
|
||||
# check in to_remove if there is a kernel and if so, auto-remove the corresponding modules
|
||||
for pkg in self.t.to_remove:
|
||||
match = re.match("(linux[0-9]{2,3})(.*)", pkg.name)
|
||||
if match:
|
||||
if not match.group(2):
|
||||
installed_kernels.discard(match.group(1))
|
||||
for module in installed_modules:
|
||||
pkgname = match.group(1)+module
|
||||
if not pkgname in to_remove:
|
||||
_pkg = self.localdb.get_pkg(pkgname)
|
||||
if _pkg:
|
||||
# Check we won't remove a third party kernel
|
||||
third_party = False
|
||||
for provide in _pkg.provides:
|
||||
if 'linux=' in provide:
|
||||
third_party = True
|
||||
if not third_party:
|
||||
to_remove.add(pkgname)
|
||||
self.t.remove_pkg(_pkg)
|
||||
# start loops to check pkgs
|
||||
i = 0
|
||||
while depends[i]:
|
||||
# add a empty list for new pkgs to check next loop
|
||||
depends.append([])
|
||||
# start to check one pkg
|
||||
for pkg in depends[i]:
|
||||
# check if the current pkg is a kernel and if so, check if a module is required to install
|
||||
match = re.match("(linux[0-9]{2,3})(.*)", pkg.name)
|
||||
if match:
|
||||
if not match.group(2): # match pkg is a kernel
|
||||
for module in installed_modules:
|
||||
pkgname = match.group(1) + module
|
||||
if not self.localdb.get_pkg(pkgname):
|
||||
for db in self.syncdbs:
|
||||
_pkg = db.get_pkg(pkgname)
|
||||
if _pkg:
|
||||
if not _pkg.name in already_checked:
|
||||
depends[i+1].append(_pkg)
|
||||
already_checked.add(_pkg.name)
|
||||
if not _pkg.name in to_add | to_remove:
|
||||
to_add.add(_pkg.name)
|
||||
self.t.add_pkg(_pkg)
|
||||
break
|
||||
# check if the current pkg is a kernel module and if so, install it for all installed kernels
|
||||
match = re.match("(linux[0-9]{2,3})(.*-modules)", pkg.name)
|
||||
if match:
|
||||
for kernel in installed_kernels:
|
||||
pkgname = kernel + match.group(2)
|
||||
if not self.localdb.get_pkg(pkgname):
|
||||
for db in self.syncdbs:
|
||||
_pkg = db.get_pkg(pkgname)
|
||||
if _pkg:
|
||||
if not _pkg.name in already_checked:
|
||||
depends[i+1].append(_pkg)
|
||||
already_checked.add(_pkg.name)
|
||||
if not _pkg.name in to_add | to_remove:
|
||||
to_add.add(_pkg.name)
|
||||
self.t.add_pkg(_pkg)
|
||||
break
|
||||
for depend in pkg.depends:
|
||||
found_depend = pyalpm.find_satisfier(self.localdb.pkgcache, depend)
|
||||
if not found_depend:
|
||||
for db in self.syncdbs:
|
||||
found_depend = pyalpm.find_satisfier(db.pkgcache, depend)
|
||||
if found_depend:
|
||||
break
|
||||
if found_depend:
|
||||
# add the dep in list to check its deps in next loop
|
||||
if not found_depend.name in already_checked:
|
||||
depends[i+1].append(found_depend)
|
||||
already_checked.add(found_depend.name)
|
||||
i += 1
|
||||
# end of the loop
|
||||
|
||||
@dbus.service.method('org.manjaro.pamac', '', 'a(ass)')
|
||||
def Prepare(self):
|
||||
error = ''
|
||||
self.providers.clear()
|
||||
self.check_extra_modules()
|
||||
try:
|
||||
self.t.prepare()
|
||||
except pyalpm.error as e:
|
||||
error = format_error(e.args)
|
||||
self.t.release()
|
||||
else:
|
||||
for pkg in self.t.to_remove:
|
||||
if pkg.name in config.holdpkg:
|
||||
error = _('The transaction cannot be performed because it needs to remove {pkgname1} which is a locked package').format(pkgname1 = pkg.name)
|
||||
self.t.release()
|
||||
break
|
||||
finally:
|
||||
try:
|
||||
summ = len(self.t.to_add) + len(self.t.to_remove)
|
||||
except pyalpm.error:
|
||||
return [((), error)]
|
||||
if summ == 0:
|
||||
self.t.release()
|
||||
return [((), _('Nothing to do'))]
|
||||
elif error:
|
||||
return [((), error)]
|
||||
elif self.providers:
|
||||
return self.providers
|
||||
else:
|
||||
return [((), '')]
|
||||
|
||||
@dbus.service.method('org.manjaro.pamac', '', 'a(ss)')
|
||||
def To_Remove(self):
|
||||
_list = []
|
||||
try:
|
||||
for pkg in self.t.to_remove:
|
||||
_list.append((pkg.name, pkg.version))
|
||||
except:
|
||||
pass
|
||||
return _list
|
||||
|
||||
@dbus.service.method('org.manjaro.pamac', '', 'a(ssi)')
|
||||
def To_Add(self):
|
||||
_list = []
|
||||
try:
|
||||
for pkg in self.t.to_add:
|
||||
_list.append((pkg.name, pkg.version, pkg.download_size))
|
||||
except:
|
||||
pass
|
||||
return _list
|
||||
|
||||
@dbus.service.method('org.manjaro.pamac', '', '')
|
||||
def Interrupt(self):
|
||||
def interrupt():
|
||||
try:
|
||||
self.t.interrupt()
|
||||
except:
|
||||
pass
|
||||
try:
|
||||
self.t.release()
|
||||
except:
|
||||
pass
|
||||
finally:
|
||||
common.rm_lock_file()
|
||||
self.task.terminate()
|
||||
interrupt()
|
||||
|
||||
@dbus.service.method('org.manjaro.pamac', '', '', sender_keyword='sender', connection_keyword='connexion', async_callbacks=('success', 'nosuccess'))
|
||||
def Commit(self, success, nosuccess, sender=None, connexion=None):
|
||||
def commit():
|
||||
error = ''
|
||||
try:
|
||||
self.t.commit()
|
||||
except pyalpm.error as e:
|
||||
error = format_error(e.args)
|
||||
#except dbus.exceptions.DBusException:
|
||||
#pass
|
||||
finally:
|
||||
self.t.release()
|
||||
if self.warning:
|
||||
self.EmitLogWarning(self.warning)
|
||||
self.warning = ''
|
||||
if error:
|
||||
self.EmitTransactionError(error)
|
||||
else:
|
||||
self.EmitTransactionDone(_('Transaction successfully finished'))
|
||||
success('')
|
||||
try:
|
||||
authorized = self.policykit_test(sender,connexion,'org.manjaro.pamac.commit')
|
||||
except dbus.exceptions.DBusException as e:
|
||||
self.EmitTransactionError(_('Authentication failed'))
|
||||
else:
|
||||
if authorized:
|
||||
self.task = Process(target=commit)
|
||||
self.task.start()
|
||||
GObject.timeout_add(100, self.check_finished_commit)
|
||||
else :
|
||||
self.t.release()
|
||||
self.EmitTransactionError(_('Authentication failed'))
|
||||
|
||||
@dbus.service.method('org.manjaro.pamac', '', '')
|
||||
def Release(self):
|
||||
try:
|
||||
self.t.release()
|
||||
except:
|
||||
pass
|
||||
|
||||
@dbus.service.method('org.manjaro.pamac')
|
||||
def StopDaemon(self):
|
||||
try:
|
||||
self.t.release()
|
||||
except:
|
||||
pass
|
||||
common.rm_pid_file()
|
||||
mainloop.quit()
|
||||
|
||||
@dbus.service.method('org.manjaro.pamac', 'a(ss)', '', sender_keyword='sender', connection_keyword='connexion')
|
||||
def WriteConfig(self, array, sender=None, connexion=None):
|
||||
try:
|
||||
authorized = self.policykit_test(sender,connexion,'org.manjaro.pamac.write_config')
|
||||
except dbus.exceptions.DBusException as e:
|
||||
self.EmitLogError(_('Authentication failed'))
|
||||
else:
|
||||
if authorized:
|
||||
with open('/etc/pamac.conf', 'r') as conffile:
|
||||
data = conffile.readlines()
|
||||
i = 0
|
||||
while i < len(data):
|
||||
line = data[i].strip()
|
||||
if len(line) == 0:
|
||||
i += 1
|
||||
continue
|
||||
if line[0] == '#':
|
||||
line = line.lstrip('#')
|
||||
if line == '\n':
|
||||
i += 1
|
||||
continue
|
||||
old_key, equal, old_value = [x.strip() for x in line.partition('=')]
|
||||
for tupel in array:
|
||||
new_key = tupel[0]
|
||||
new_value = tupel[1]
|
||||
if old_key == new_key:
|
||||
# i is equal to the line number where we find the key in the file
|
||||
if new_key in config.SINGLE_OPTIONS:
|
||||
data[i] = '{} = {}\n'.format(new_key, new_value)
|
||||
elif new_key in config.BOOLEAN_OPTIONS:
|
||||
if new_value == 'False':
|
||||
data[i] = '#{}\n'.format(new_key)
|
||||
else:
|
||||
data[i] = '{}\n'.format(new_key)
|
||||
i += 1
|
||||
with open('/etc/pamac.conf', 'w') as conffile:
|
||||
conffile.writelines(data)
|
||||
self.EmitReloadConfig('')
|
||||
else:
|
||||
self.EmitLogError(_('Authentication failed'))
|
||||
|
||||
GObject.threads_init()
|
||||
DBusGMainLoop(set_as_default = True)
|
||||
myservice = PamacDBusService()
|
||||
mainloop = GObject.MainLoop()
|
||||
mainloop.run()
|
170
pamac-install.py
@ -1,170 +0,0 @@
|
||||
#! /usr/bin/python3
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
# pamac - A Python implementation of alpm
|
||||
# Copyright (C) 2013-2014 Guillaume Benoit <guillaume@manjaro.org>
|
||||
#
|
||||
# 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
from gi.repository import Gtk
|
||||
from sys import argv
|
||||
import dbus
|
||||
from os.path import abspath
|
||||
from pamac import common, config, transaction, aur
|
||||
|
||||
# i18n
|
||||
import gettext
|
||||
import locale
|
||||
locale.bindtextdomain('pamac', '/usr/share/locale')
|
||||
gettext.bindtextdomain('pamac', '/usr/share/locale')
|
||||
gettext.textdomain('pamac')
|
||||
_ = gettext.gettext
|
||||
|
||||
def exiting(msg):
|
||||
transaction.StopDaemon()
|
||||
print(msg)
|
||||
print('exiting')
|
||||
Gtk.main_quit()
|
||||
|
||||
def handle_error(error):
|
||||
transaction.ProgressWindow.hide()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
if error:
|
||||
if not 'DBus.Error.NoReply' in str(error):
|
||||
transaction.ErrorDialog.format_secondary_text(error)
|
||||
response = transaction.ErrorDialog.run()
|
||||
if response:
|
||||
transaction.ErrorDialog.hide()
|
||||
exiting(error)
|
||||
|
||||
def handle_reply(reply):
|
||||
transaction.ProgressCloseButton.set_visible(True)
|
||||
transaction.action_icon.set_from_icon_name('dialog-information', Gtk.IconSize.BUTTON)
|
||||
transaction.progress_label.set_text(str(reply))
|
||||
transaction.progress_bar.set_text('')
|
||||
end_iter = transaction.progress_buffer.get_end_iter()
|
||||
transaction.progress_buffer.insert(end_iter, str(reply))
|
||||
|
||||
def handle_updates(update_data):
|
||||
syncfirst, updates = update_data
|
||||
if transaction_done:
|
||||
exiting('')
|
||||
elif updates:
|
||||
transaction.ErrorDialog.format_secondary_text(_('Some updates are available.\nPlease update your system first'))
|
||||
response = transaction.ErrorDialog.run()
|
||||
if response:
|
||||
transaction.ErrorDialog.hide()
|
||||
exiting('')
|
||||
else:
|
||||
transaction.action_handler(_('Preparing')+'...')
|
||||
transaction.icon_handler('/usr/share/pamac/icons/24x24/status/package-setup.png')
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
common.write_pid_file()
|
||||
transaction.interface.connect_signals(signals)
|
||||
transaction.config_dbus_signals()
|
||||
pkgs_to_install = argv[1:]
|
||||
install(pkgs_to_install)
|
||||
|
||||
def on_TransValidButton_clicked(*args):
|
||||
transaction.ConfDialog.hide()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
transaction.finalize()
|
||||
|
||||
def on_TransCancelButton_clicked(*args):
|
||||
transaction.ConfDialog.hide()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
transaction.Release()
|
||||
exiting('')
|
||||
|
||||
def on_ProgressCloseButton_clicked(*args):
|
||||
global transaction_done
|
||||
transaction.ProgressWindow.hide()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
transaction_done = True
|
||||
transaction.CheckUpdates()
|
||||
|
||||
def on_ProgressCancelButton_clicked(*args):
|
||||
transaction.Interrupt()
|
||||
transaction.ProgressWindow.hide()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
exiting('')
|
||||
|
||||
def get_pkgs(pkgs):
|
||||
error = ''
|
||||
for name in pkgs:
|
||||
if '.pkg.tar.' in name:
|
||||
full_path = abspath(name)
|
||||
transaction.to_load.add(full_path)
|
||||
elif transaction.get_syncpkg(name):
|
||||
transaction.to_add.add(name)
|
||||
else:
|
||||
aur_pkg = None
|
||||
if config.enable_aur:
|
||||
aur_pkg = aur.info(name)
|
||||
if aur_pkg:
|
||||
transaction.to_build.append(aur_pkg)
|
||||
if not aur_pkg:
|
||||
if error:
|
||||
error += '\n'
|
||||
error += _('{pkgname} is not a valid path or package name').format(pkgname = name)
|
||||
if error:
|
||||
handle_error(error)
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def install(pkgs):
|
||||
if get_pkgs(pkgs):
|
||||
error = transaction.run()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
if error:
|
||||
handle_error(error)
|
||||
|
||||
signals = {'on_ChooseButton_clicked' : transaction.on_ChooseButton_clicked,
|
||||
'on_progress_textview_size_allocate' : transaction.on_progress_textview_size_allocate,
|
||||
'on_choose_renderertoggle_toggled' : transaction.on_choose_renderertoggle_toggled,
|
||||
'on_PreferencesCloseButton_clicked' : transaction.on_PreferencesCloseButton_clicked,
|
||||
'on_PreferencesWindow_delete_event' : transaction.on_PreferencesWindow_delete_event,
|
||||
'on_PreferencesValidButton_clicked' : transaction.on_PreferencesValidButton_clicked,
|
||||
'on_TransValidButton_clicked' :on_TransValidButton_clicked,
|
||||
'on_TransCancelButton_clicked' :on_TransCancelButton_clicked,
|
||||
'on_ProgressCloseButton_clicked' : on_ProgressCloseButton_clicked,
|
||||
'on_ProgressCancelButton_clicked' : on_ProgressCancelButton_clicked}
|
||||
|
||||
def config_dbus_signals():
|
||||
bus = dbus.SystemBus()
|
||||
bus.add_signal_receiver(handle_reply, dbus_interface = "org.manjaro.pamac", signal_name = "EmitTransactionDone")
|
||||
bus.add_signal_receiver(handle_error, dbus_interface = "org.manjaro.pamac", signal_name = "EmitTransactionError")
|
||||
bus.add_signal_receiver(handle_updates, dbus_interface = "org.manjaro.pamac", signal_name = "EmitAvailableUpdates")
|
||||
|
||||
if common.pid_file_exists():
|
||||
transaction.ErrorDialog.format_secondary_text(_('Pamac is already running'))
|
||||
response = transaction.ErrorDialog.run()
|
||||
if response:
|
||||
transaction.ErrorDialog.hide()
|
||||
else:
|
||||
transaction_done = False
|
||||
transaction.get_handle()
|
||||
transaction.get_dbus_methods()
|
||||
config_dbus_signals()
|
||||
transaction.get_updates()
|
||||
Gtk.main()
|
1045
pamac-manager.py
@ -1,56 +0,0 @@
|
||||
#! /usr/bin/python3
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
# pamac - A Python implementation of alpm
|
||||
# Copyright (C) 2013 Guillaume Benoit <guillaume@manjaro.org>
|
||||
#
|
||||
# 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
from gi.repository import GObject
|
||||
from pamac import common, transaction
|
||||
import dbus
|
||||
|
||||
|
||||
def handle_reply(reply):
|
||||
print('check updates done')
|
||||
transaction.CheckUpdates()
|
||||
|
||||
def handle_error(error):
|
||||
transaction.StopDaemon()
|
||||
common.rm_pid_file()
|
||||
print('check updates failed')
|
||||
loop.quit()
|
||||
|
||||
def handle_updates(updates):
|
||||
common.rm_pid_file()
|
||||
transaction.StopDaemon()
|
||||
loop.quit()
|
||||
|
||||
loop = GObject.MainLoop()
|
||||
|
||||
if not common.pid_file_exists():
|
||||
common.write_pid_file()
|
||||
print('checking updates')
|
||||
bus = dbus.SystemBus()
|
||||
bus.add_signal_receiver(handle_reply, dbus_interface = "org.manjaro.pamac", signal_name = "EmitTransactionDone")
|
||||
bus.add_signal_receiver(handle_error, dbus_interface = "org.manjaro.pamac", signal_name = "EmitTransactionError")
|
||||
bus.add_signal_receiver(handle_updates, dbus_interface = "org.manjaro.pamac", signal_name = "EmitAvailableUpdates")
|
||||
transaction.get_dbus_methods()
|
||||
try:
|
||||
transaction.Refresh(False)
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
loop.run()
|
152
pamac-tray.py
@ -1,152 +0,0 @@
|
||||
#! /usr/bin/python3
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
# pamac - A Python implementation of alpm
|
||||
# Copyright (C) 2013-2014 Guillaume Benoit <guillaume@manjaro.org>
|
||||
#
|
||||
# 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
from gi.repository import Gtk, GObject, Notify
|
||||
from subprocess import call
|
||||
import dbus
|
||||
from dbus.mainloop.glib import DBusGMainLoop
|
||||
from threading import Thread
|
||||
from time import sleep
|
||||
|
||||
from pamac import common, config
|
||||
|
||||
# i18n
|
||||
import gettext
|
||||
gettext.bindtextdomain('pamac', '/usr/share/locale')
|
||||
gettext.textdomain('pamac')
|
||||
_ = gettext.gettext
|
||||
|
||||
update_icon = 'pamac-tray-update'
|
||||
update_info = _('{number} available updates')
|
||||
one_update_info = _('1 available update')
|
||||
noupdate_icon = 'pamac-tray-no-update'
|
||||
noupdate_info = _('Your system is up-to-date')
|
||||
icon = noupdate_icon
|
||||
info = noupdate_info
|
||||
|
||||
class Tray:
|
||||
def __init__(self):
|
||||
self.statusIcon = Gtk.StatusIcon()
|
||||
self.statusIcon.set_visible(True)
|
||||
|
||||
self.menu = Gtk.Menu()
|
||||
self.menuItem = Gtk.ImageMenuItem(_('Update Manager'))
|
||||
self.menuItem.set_image(Gtk.Image.new_from_icon_name('system-software-update', Gtk.IconSize.MENU))
|
||||
self.menuItem.connect('activate', self.execute_update, self.statusIcon)
|
||||
self.menu.append(self.menuItem)
|
||||
self.menuItem = Gtk.ImageMenuItem(_('Package Manager'))
|
||||
self.menuItem.set_image(Gtk.Image.new_from_icon_name('system-software-install', Gtk.IconSize.MENU))
|
||||
self.menuItem.connect('activate', self.execute_manager, self.statusIcon)
|
||||
self.menu.append(self.menuItem)
|
||||
self.menuItem = Gtk.ImageMenuItem(_('Quit'))
|
||||
self.menuItem.set_image(Gtk.Image.new_from_icon_name('application-exit', Gtk.IconSize.MENU))
|
||||
self.menuItem.connect('activate', self.quit_tray, self.statusIcon)
|
||||
self.menu.append(self.menuItem)
|
||||
|
||||
self.statusIcon.connect('popup-menu', self.popup_menu_cb, self.menu)
|
||||
self.statusIcon.connect('activate', self.activate_cb)
|
||||
|
||||
self.update_icon(icon, info)
|
||||
|
||||
def execute_update(self, widget, event, data = None):
|
||||
Thread(target = call, args = (['/usr/bin/pamac-updater'],)).start()
|
||||
|
||||
def execute_manager(self, widget, event, data = None):
|
||||
Thread(target = call, args = (['/usr/bin/pamac-manager'],)).start()
|
||||
|
||||
def quit_tray(self, widget, data = None):
|
||||
Gtk.main_quit()
|
||||
|
||||
def popup_menu_cb(self, widget, button, time, data = None):
|
||||
if button == 3:
|
||||
if data:
|
||||
data.show_all()
|
||||
data.popup(None, None, Gtk.StatusIcon.position_menu, self.statusIcon, 3, time)
|
||||
|
||||
def activate_cb(self, widget, data = None):
|
||||
if icon == update_icon:
|
||||
Thread(target = call, args = (['/usr/bin/pamac-updater'],)).start()
|
||||
|
||||
def update_icon(self, icon, info):
|
||||
self.statusIcon.set_from_icon_name(icon)
|
||||
self.statusIcon.set_tooltip_markup(info)
|
||||
|
||||
def set_visible(self, boolean):
|
||||
self.statusIcon.set_visible(boolean)
|
||||
|
||||
def refresh():
|
||||
Thread(target = call, args = (['/usr/bin/pamac-refresh'],)).start()
|
||||
return True
|
||||
|
||||
def check_updates():
|
||||
Thread(target = call, args = (['/usr/bin/pamac-check_updates'],)).start()
|
||||
|
||||
locked = False
|
||||
def check_pacman_running():
|
||||
global locked
|
||||
if locked:
|
||||
if not common.lock_file_exists():
|
||||
locked = False
|
||||
check_updates()
|
||||
else:
|
||||
if common.lock_file_exists():
|
||||
if not common.pid_file_exists():
|
||||
locked = True
|
||||
sleep(0.5)
|
||||
return True
|
||||
|
||||
def set_icon(update_data):
|
||||
global icon
|
||||
global info
|
||||
syncfirst, updates = update_data
|
||||
if updates:
|
||||
icon = update_icon
|
||||
if len(updates) == 1:
|
||||
info = one_update_info
|
||||
else:
|
||||
info = update_info.format(number = len(updates))
|
||||
if not common.pid_file_exists():
|
||||
Notify.Notification.new(_('Update Manager'), info, 'system-software-update').show()
|
||||
else:
|
||||
icon = noupdate_icon
|
||||
info = noupdate_info
|
||||
print(info)
|
||||
tray.update_icon(icon, info)
|
||||
|
||||
def launch_refresh_timeout():
|
||||
# GObject timeout is in milliseconds
|
||||
global refresh_timeout_id
|
||||
refresh_timeout_id = GObject.timeout_add(config.refresh_period*3600*1000, refresh)
|
||||
|
||||
def relaunch_refresh_timeout(msg):
|
||||
config.pamac_conf.reload()
|
||||
GObject.source_remove(refresh_timeout_id)
|
||||
launch_refresh_timeout()
|
||||
|
||||
DBusGMainLoop(set_as_default = True)
|
||||
bus = dbus.SystemBus()
|
||||
bus.add_signal_receiver(set_icon, dbus_interface = "org.manjaro.pamac", signal_name = "EmitAvailableUpdates")
|
||||
bus.add_signal_receiver(relaunch_refresh_timeout, dbus_interface = "org.manjaro.pamac", signal_name = "EmitReloadConfig")
|
||||
tray = Tray()
|
||||
Notify.init(_('Update Manager'))
|
||||
refresh()
|
||||
launch_refresh_timeout()
|
||||
GObject.idle_add(check_pacman_running)
|
||||
Gtk.main()
|
229
pamac-updater.py
@ -1,229 +0,0 @@
|
||||
#! /usr/bin/python3
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
# pamac - A Python implementation of alpm
|
||||
# Copyright (C) 2013-2014 Guillaume Benoit <guillaume@manjaro.org>
|
||||
#
|
||||
# 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
from gi.repository import Gtk, Gdk
|
||||
import pyalpm
|
||||
import dbus
|
||||
|
||||
from pamac import config, common, transaction
|
||||
|
||||
# i18n
|
||||
import gettext
|
||||
import locale
|
||||
locale.bindtextdomain('pamac', '/usr/share/locale')
|
||||
gettext.bindtextdomain('pamac', '/usr/share/locale')
|
||||
gettext.textdomain('pamac')
|
||||
_ = gettext.gettext
|
||||
|
||||
interface = transaction.interface
|
||||
|
||||
interface.add_from_file('/usr/share/pamac/gui/updater.ui')
|
||||
UpdaterWindow = interface.get_object("UpdaterWindow")
|
||||
update_listore = interface.get_object('update_list')
|
||||
update_top_label = interface.get_object('update_top_label')
|
||||
update_bottom_label = interface.get_object('update_bottom_label')
|
||||
UpdaterApplyButton = interface.get_object('UpdaterApplyButton')
|
||||
|
||||
update_top_label.set_markup('<big><b>{}</b></big>'.format(_('Your system is up-to-date')))
|
||||
update_bottom_label.set_markup('')
|
||||
UpdaterApplyButton.set_sensitive(False)
|
||||
|
||||
def have_updates():
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
UpdaterWindow.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.WATCH))
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
update_listore.clear()
|
||||
update_top_label.set_justify(Gtk.Justification.CENTER)
|
||||
updates = transaction.available_updates[1]
|
||||
if not updates:
|
||||
update_bottom_label.set_markup('')
|
||||
update_top_label.set_markup('<big><b>{}</b></big>'.format(_('Your system is up-to-date')))
|
||||
UpdaterApplyButton.set_sensitive(False)
|
||||
else:
|
||||
UpdaterApplyButton.set_sensitive(True)
|
||||
dsize = 0
|
||||
for name, version, db, tarpath, size in updates:
|
||||
dsize += size
|
||||
if size:
|
||||
size_str = common.format_size(size)
|
||||
else:
|
||||
size_str = ''
|
||||
update_listore.append([name+' '+version, size_str])
|
||||
if dsize == 0:
|
||||
update_bottom_label.set_markup('')
|
||||
else:
|
||||
update_bottom_label.set_markup('<b>{} {}</b>'.format(_('Total download size:'), common.format_size(dsize)))
|
||||
if len(updates) == 1:
|
||||
update_top_label.set_markup('<big><b>{}</b></big>'.format(_('1 available update')))
|
||||
else:
|
||||
update_top_label.set_markup('<big><b>{}</b></big>'.format(_('{number} available updates').format(number = len(updates))))
|
||||
UpdaterWindow.get_window().set_cursor(None)
|
||||
|
||||
def handle_error(error):
|
||||
UpdaterWindow.get_window().set_cursor(None)
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
if error:
|
||||
if not 'DBus.Error.NoReply' in str(error):
|
||||
print(error)
|
||||
transaction.ErrorDialog.format_secondary_text(error)
|
||||
response = transaction.ErrorDialog.run()
|
||||
if response:
|
||||
transaction.ErrorDialog.hide()
|
||||
transaction.ProgressWindow.hide()
|
||||
transaction.get_handle()
|
||||
transaction.mark_needed_pkgs_as_dep()
|
||||
|
||||
def handle_reply(reply):
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
if transaction.to_build:
|
||||
transaction.build_next()
|
||||
elif reply:
|
||||
transaction.Release()
|
||||
transaction.ProgressCloseButton.set_visible(True)
|
||||
transaction.action_icon.set_from_icon_name('dialog-information', Gtk.IconSize.BUTTON)
|
||||
transaction.progress_label.set_text(str(reply))
|
||||
transaction.progress_bar.set_text('')
|
||||
end_iter = transaction.progress_buffer.get_end_iter()
|
||||
transaction.progress_buffer.insert(end_iter, str(reply))
|
||||
transaction.get_handle()
|
||||
else:
|
||||
UpdaterWindow.get_window().set_cursor(None)
|
||||
transaction.get_handle()
|
||||
transaction.get_updates()
|
||||
transaction.mark_needed_pkgs_as_dep()
|
||||
|
||||
def handle_updates(updates):
|
||||
transaction.ProgressWindow.hide()
|
||||
transaction.available_updates = updates
|
||||
have_updates()
|
||||
|
||||
def reload_config(msg):
|
||||
config.pamac_conf.reload()
|
||||
transaction.get_updates()
|
||||
|
||||
def on_UpdaterWindow_delete_event(*args):
|
||||
transaction.StopDaemon()
|
||||
common.rm_pid_file()
|
||||
Gtk.main_quit()
|
||||
|
||||
def on_TransValidButton_clicked(*args):
|
||||
UpdaterWindow.get_window().set_cursor(None)
|
||||
transaction.ConfDialog.hide()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
transaction.finalize()
|
||||
|
||||
def on_TransCancelButton_clicked(*args):
|
||||
UpdaterWindow.get_window().set_cursor(None)
|
||||
transaction.ProgressWindow.hide()
|
||||
transaction.progress_buffer.delete(transaction.progress_buffer.get_start_iter(),transaction.progress_buffer.get_end_iter())
|
||||
transaction.ConfDialog.hide()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
transaction.Release()
|
||||
transaction.to_add.clear()
|
||||
transaction.to_update.clear()
|
||||
transaction.to_build.clear()
|
||||
|
||||
def on_ProgressCloseButton_clicked(*args):
|
||||
UpdaterWindow.get_window().set_cursor(None)
|
||||
transaction.progress_buffer.delete(transaction.progress_buffer.get_start_iter(),transaction.progress_buffer.get_end_iter())
|
||||
transaction.need_details_handler(False)
|
||||
transaction.get_updates()
|
||||
|
||||
def on_ProgressCancelButton_clicked(*args):
|
||||
transaction.to_add.clear()
|
||||
transaction.to_update.clear()
|
||||
transaction.to_build.clear()
|
||||
transaction.Interrupt()
|
||||
UpdaterWindow.get_window().set_cursor(None)
|
||||
transaction.ProgressWindow.hide()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
|
||||
def on_UpdaterPreferencesButton_clicked(*args):
|
||||
transaction.EnableAURButton.set_active(config.enable_aur)
|
||||
transaction.RemoveUnrequiredDepsButton.set_active(config.recurse)
|
||||
transaction.RefreshPeriodSpinButton.set_value(config.refresh_period)
|
||||
transaction.PreferencesWindow.show()
|
||||
|
||||
def on_Updater_ApplyButton_clicked(*args):
|
||||
UpdaterWindow.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.WATCH))
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
error = transaction.sysupgrade(show_updates = False)
|
||||
if error:
|
||||
handle_error(error)
|
||||
|
||||
def on_Updater_RefreshButton_clicked(*args):
|
||||
UpdaterWindow.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.WATCH))
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
transaction.refresh()
|
||||
|
||||
def on_Updater_CloseButton_clicked(*args):
|
||||
transaction.StopDaemon()
|
||||
common.rm_pid_file()
|
||||
Gtk.main_quit()
|
||||
|
||||
signals = {'on_ChooseButton_clicked' : transaction.on_ChooseButton_clicked,
|
||||
'on_progress_textview_size_allocate' : transaction.on_progress_textview_size_allocate,
|
||||
'on_choose_renderertoggle_toggled' : transaction.on_choose_renderertoggle_toggled,
|
||||
'on_PreferencesCloseButton_clicked' : transaction.on_PreferencesCloseButton_clicked,
|
||||
'on_PreferencesWindow_delete_event' : transaction.on_PreferencesWindow_delete_event,
|
||||
'on_PreferencesValidButton_clicked' : transaction.on_PreferencesValidButton_clicked,
|
||||
'on_TransValidButton_clicked' :on_TransValidButton_clicked,
|
||||
'on_TransCancelButton_clicked' :on_TransCancelButton_clicked,
|
||||
'on_ProgressCloseButton_clicked' : on_ProgressCloseButton_clicked,
|
||||
'on_ProgressCancelButton_clicked' : on_ProgressCancelButton_clicked,
|
||||
'on_UpdaterWindow_delete_event' : on_UpdaterWindow_delete_event,
|
||||
'on_UpdaterPreferencesButton_clicked': on_UpdaterPreferencesButton_clicked,
|
||||
'on_Updater_ApplyButton_clicked' : on_Updater_ApplyButton_clicked,
|
||||
'on_Updater_RefreshButton_clicked' : on_Updater_RefreshButton_clicked,
|
||||
'on_Updater_CloseButton_clicked' : on_Updater_CloseButton_clicked}
|
||||
|
||||
def config_dbus_signals():
|
||||
bus = dbus.SystemBus()
|
||||
bus.add_signal_receiver(handle_reply, dbus_interface = "org.manjaro.pamac", signal_name = "EmitTransactionDone")
|
||||
bus.add_signal_receiver(handle_error, dbus_interface = "org.manjaro.pamac", signal_name = "EmitTransactionError")
|
||||
bus.add_signal_receiver(handle_updates, dbus_interface = "org.manjaro.pamac", signal_name = "EmitAvailableUpdates")
|
||||
bus.add_signal_receiver(reload_config, dbus_interface = "org.manjaro.pamac", signal_name = "EmitReloadConfig")
|
||||
|
||||
if common.pid_file_exists():
|
||||
transaction.ErrorDialog.format_secondary_text(_('Pamac is already running'))
|
||||
response = transaction.ErrorDialog.run()
|
||||
if response:
|
||||
transaction.ErrorDialog.hide()
|
||||
else:
|
||||
common.write_pid_file()
|
||||
interface.connect_signals(signals)
|
||||
transaction.get_dbus_methods()
|
||||
transaction.config_dbus_signals()
|
||||
config_dbus_signals()
|
||||
UpdaterWindow.show()
|
||||
UpdaterWindow.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.WATCH))
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
transaction.refresh()
|
||||
Gtk.main()
|
551
pamac.pot
@ -1,551 +0,0 @@
|
||||
# Translation of Pamac.
|
||||
# Copyright (C) 2007-2012 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the Pamac package.
|
||||
# Guillaume Benoit <guillaume@manjaro.org>, 2013-2014.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: pamac 0.9.8\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-03-30 15:09+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: data/polkit/org.manjaro.pamac.policy:10
|
||||
msgid "Authentication is required"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:162
|
||||
msgid "Checking dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:170
|
||||
msgid "Checking file conflicts"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:176
|
||||
msgid "Resolving dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:184
|
||||
msgid "Checking inter conflicts"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:192
|
||||
#, python-brace-format
|
||||
msgid "Installing {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:200
|
||||
#, python-brace-format
|
||||
msgid "Removing {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:208
|
||||
#, python-brace-format
|
||||
msgid "Upgrading {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:216
|
||||
#, python-brace-format
|
||||
msgid "Downgrading {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:224
|
||||
#, python-brace-format
|
||||
msgid "Reinstalling {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:232
|
||||
msgid "Checking integrity"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:239
|
||||
msgid "Loading packages files"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:245
|
||||
msgid "Checking delta integrity"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:251
|
||||
msgid "Applying deltas"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:257
|
||||
msgid "Generating {} with {}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:261
|
||||
msgid "Generation succeeded!"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:264
|
||||
msgid "Generation failed."
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:267
|
||||
#, python-brace-format
|
||||
msgid "Configuring {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:272
|
||||
msgid "Downloading"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:276
|
||||
msgid "Checking available disk space"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:286
|
||||
msgid "Checking keyring"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:292
|
||||
msgid "Downloading required keys"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:311
|
||||
#, python-brace-format
|
||||
msgid "{pkgname1} will be replaced by {pkgname2}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:314
|
||||
#, python-brace-format
|
||||
msgid "{pkgname1} conflicts with {pkgname2}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:339
|
||||
msgid "Error: "
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:345
|
||||
msgid "Warning: "
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:359
|
||||
#, python-brace-format
|
||||
msgid "Refreshing {repo}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:363 pamac/transaction.py:608
|
||||
#, python-brace-format
|
||||
msgid "Downloading {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:427 pamac-daemon.py:439 pamac-daemon.py:762
|
||||
#: pamac-daemon.py:770 pamac-daemon.py:793 pamac-daemon.py:827
|
||||
msgid "Authentication failed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:572 pamac-install.py:127
|
||||
#, python-brace-format
|
||||
msgid "{pkgname} is not a valid path or package name"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:685
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"The transaction cannot be performed because it needs to remove {pkgname1} "
|
||||
"which is a locked package"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:695 pamac/transaction.py:449
|
||||
msgid "Nothing to do"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:757
|
||||
msgid "Transaction successfully finished"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:103 pamac-manager.py:134 pamac-manager.py:135
|
||||
#: pamac-manager.py:150 pamac-manager.py:159 pamac-manager.py:180
|
||||
#: pamac-manager.py:305 pamac-manager.py:657 pamac-manager.py:715
|
||||
#: pamac-manager.py:785
|
||||
msgid "No package found"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:204 pamac-manager.py:266
|
||||
msgid "local"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:249 pamac-manager.py:371
|
||||
msgid "Installed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:252
|
||||
msgid "Uninstalled"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:255
|
||||
msgid "Orphans"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:227 pamac/transaction.py:757
|
||||
msgid "To install"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:238 pamac/transaction.py:737
|
||||
msgid "To remove"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:361
|
||||
msgid "Licenses"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:366
|
||||
msgid "Depends On"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:374
|
||||
msgid "Optional Deps"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:377
|
||||
msgid "Required By"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:379
|
||||
msgid "Provides"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:381
|
||||
msgid "Replaces"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:383
|
||||
msgid "Conflicts With"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:388
|
||||
msgid "Repository"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:390 gui/manager.ui:557
|
||||
msgid "Groups"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:392
|
||||
msgid "Compressed Size"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:393
|
||||
msgid "Download Size"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:395
|
||||
msgid "Installed Size"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:396
|
||||
msgid "Packager"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:397
|
||||
msgid "Architecture"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:400
|
||||
msgid "Install Date"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:402
|
||||
msgid "Explicitly installed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:404
|
||||
msgid "Installed as a dependency for another package"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:406
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:407
|
||||
msgid "Install Reason"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:412
|
||||
msgid "Signatures"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:416
|
||||
msgid "Backup files"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:597
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"{pkgname} has {number} uninstalled optional deps.\n"
|
||||
"Please choose those you would like to install:"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:660
|
||||
msgid "Deselect"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:665
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:671
|
||||
msgid "Reinstall"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:682
|
||||
msgid "Install optional deps"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:687
|
||||
msgid "Mark as explicitly installed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:691
|
||||
msgid "Install"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:702
|
||||
msgid "Install with optional deps"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:1009 pamac-updater.py:214 pamac-install.py:160
|
||||
msgid "Pamac is already running"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:44 pamac-updater.py:59 pamac-tray.py:40
|
||||
msgid "Your system is up-to-date"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:74 pamac/transaction.py:787
|
||||
msgid "Total download size:"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:76 pamac-tray.py:38
|
||||
msgid "1 available update"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:78 pamac-tray.py:37
|
||||
#, python-brace-format
|
||||
msgid "{number} available updates"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-tray.py:50 pamac-tray.py:126 pamac-tray.py:148 gui/updater.ui:24
|
||||
msgid "Update Manager"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-tray.py:54 gui/manager.ui:324
|
||||
msgid "Package Manager"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-tray.py:58
|
||||
msgid "Quit"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-install.py:66
|
||||
msgid ""
|
||||
"Some updates are available.\n"
|
||||
"Please update your system first"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-install.py:72 pamac/transaction.py:406 pamac/transaction.py:799
|
||||
msgid "Preparing"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:94 gui/dialogs.ui:369
|
||||
msgid "How often to check for updates, value in hours"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:192
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"{pkgname} is provided by {number} packages.\n"
|
||||
"Please choose those you would like to install:"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:257
|
||||
msgid "Refreshing"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:341 pamac/transaction.py:380
|
||||
#, python-brace-format
|
||||
msgid "{pkgname} depends on {dependname} but it is not installable"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:384
|
||||
#, python-brace-format
|
||||
msgid "Failed to get {pkgname} archive from AUR"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:552 pamac/transaction.py:558
|
||||
msgid "Build process failed."
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:644
|
||||
#, python-brace-format
|
||||
msgid "Building {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:685
|
||||
msgid "Checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:735
|
||||
msgid "Transaction Summary"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:743
|
||||
msgid "To downgrade"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:751
|
||||
msgid "To build"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:765
|
||||
msgid "To reinstall"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:774
|
||||
msgid "To update"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/common.py:30
|
||||
#, python-format
|
||||
msgid "%.1f KiB"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/common.py:33
|
||||
#, python-format
|
||||
msgid "%.2f MiB"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:8
|
||||
msgid "About Pamac"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:13
|
||||
msgid "Copyright © 2013 Guillaume Benoit"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:14
|
||||
msgid "A gtk3 frontend for pyalpm"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:44
|
||||
msgid "Pamac History"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:160
|
||||
msgid "View History"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:170 gui/manager.ui:212
|
||||
msgid "Install local packages"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:344
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:362
|
||||
msgid "Apply changes"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:380
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:453
|
||||
msgid "Search in AUR"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:511
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:604 gui/manager.ui:696
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:651
|
||||
msgid "Repos"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:709
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:722
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:735
|
||||
msgid "Repo"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:748
|
||||
msgid "Size"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:850
|
||||
msgid "Infos"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:914
|
||||
msgid "Deps"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:983
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:1012
|
||||
msgid "Files"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:70
|
||||
msgid "Progress"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:162
|
||||
msgid "details"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:292
|
||||
msgid "Pamac Preferences"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:316
|
||||
msgid "Enable AUR support"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:320
|
||||
msgid "Allow Pamac to search and install packages from AUR"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:333
|
||||
msgid "Remove unrequired dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:337
|
||||
msgid ""
|
||||
"When removing a package, also remove those dependencies that are not "
|
||||
"required by other packages"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:396
|
||||
msgid "Options"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:465
|
||||
msgid "Choose"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:579
|
||||
msgid "Summary"
|
||||
msgstr ""
|
221
pamac/aur.py
@ -1,221 +0,0 @@
|
||||
#! /usr/bin/python3
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
# pamac - A Python implementation of alpm
|
||||
# Copyright (C) 2013 Guillaume Benoit <guillaume@manjaro.org>
|
||||
#
|
||||
# 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
import os
|
||||
import urllib
|
||||
import Namcap
|
||||
import requests
|
||||
import tarfile
|
||||
|
||||
# i18n
|
||||
import gettext
|
||||
import locale
|
||||
locale.bindtextdomain('pamac', '/usr/share/locale')
|
||||
gettext.bindtextdomain('pamac', '/usr/share/locale')
|
||||
gettext.textdomain('pamac')
|
||||
_ = gettext.gettext
|
||||
|
||||
aur_url = 'http://aur.archlinux.org'
|
||||
rpc_url = aur_url + '/rpc.php'
|
||||
srcpkgdir = '/tmp/pamac'
|
||||
|
||||
class AURPkg():
|
||||
def __init__(self, pkginfo):
|
||||
self.db = FakeDB()
|
||||
self.isize = None
|
||||
self.size = None
|
||||
self.download_size = 0
|
||||
keys = pkginfo.keys()
|
||||
if 'URL' in keys:
|
||||
self.url = pkginfo['URL']
|
||||
if 'URLPath' in keys:
|
||||
self.tarpath = pkginfo['URLPath']
|
||||
if 'name' in keys:
|
||||
self.name = pkginfo['name']
|
||||
else:
|
||||
self.name = pkginfo['Name']
|
||||
if 'version' in keys:
|
||||
self.version = pkginfo['version']
|
||||
else:
|
||||
self.version = pkginfo['Version']
|
||||
if 'desc' in keys:
|
||||
self.desc = pkginfo['desc']
|
||||
else:
|
||||
self.desc = pkginfo['Description']
|
||||
if 'licenses' in keys:
|
||||
self.licenses = pkginfo['licenses']
|
||||
elif 'License' in keys:
|
||||
self.licenses = [pkginfo['License']]
|
||||
else:
|
||||
self.licenses = []
|
||||
if 'source' in keys:
|
||||
self.source = pkginfo['source']
|
||||
else:
|
||||
self.source = []
|
||||
if 'orig_depends' in keys:
|
||||
self.depends = pkginfo['orig_depends']
|
||||
else:
|
||||
self.depends = []
|
||||
if 'orig_optdepends' in keys:
|
||||
self.optdepends = pkginfo['orig_optdepends']
|
||||
else:
|
||||
self.optdepends = []
|
||||
#~ if 'orig_provides' in keys:
|
||||
#~ self.provides = pkginfo['orig_provides']
|
||||
#~ else:
|
||||
#~ self.provides = []
|
||||
if 'orig_makedepends' in keys:
|
||||
self.makedepends = pkginfo['orig_makedepends']
|
||||
else:
|
||||
self.makedepends = []
|
||||
#~ if 'replaces' in keys:
|
||||
#~ self.replaces = pkginfo['replaces']
|
||||
#~ else:
|
||||
#~ self.replaces = []
|
||||
#~ if 'conflicts' in keys:
|
||||
#~ self.conflicts = pkginfo['conflicts']
|
||||
#~ else:
|
||||
#~ self.conflicts = []
|
||||
#~ if 'groups' in keys:
|
||||
#~ self.groups = pkginfo['groups']
|
||||
#~ else:
|
||||
#~ self.groups = []
|
||||
|
||||
def __repr__(self):
|
||||
return '{}-{}'.format(self.name, self.version)
|
||||
|
||||
def __eq__(self, other):
|
||||
if hasattr(other, 'name') and hasattr(other, 'version'):
|
||||
if self.name == other.name and self.version == other.version:
|
||||
return True
|
||||
return False
|
||||
|
||||
class FakeDB():
|
||||
def __init__(self):
|
||||
self.name = 'AUR'
|
||||
|
||||
def get_pkgs(pkgbuild_path):
|
||||
pkgbuild_info = Namcap.package.load_from_pkgbuild(pkgbuild_path)
|
||||
pkgs = []
|
||||
if pkgbuild_info.is_split:
|
||||
for infos in pkgbuild_info.subpackages:
|
||||
pkg = AURPkg(infos)
|
||||
pkgs.append(pkg)
|
||||
else:
|
||||
pkg = AURPkg(pkgbuild_info)
|
||||
pkgs.append(pkg)
|
||||
return pkgs
|
||||
|
||||
def search(args):
|
||||
spec = {'type':'search', 'arg':args}
|
||||
try:
|
||||
r = requests.get(rpc_url, params = spec)
|
||||
r.raise_for_status()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return []
|
||||
else:
|
||||
results_dict = r.json()
|
||||
results = results_dict['results']
|
||||
pkgs = []
|
||||
if results:
|
||||
for result in results:
|
||||
pkgs.append(AURPkg(result))
|
||||
return pkgs
|
||||
|
||||
def info(pkgname):
|
||||
spec = {'type':'info', 'arg':pkgname}
|
||||
try:
|
||||
r = requests.get(rpc_url, params = spec)
|
||||
r.raise_for_status()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return []
|
||||
else:
|
||||
results_dict = r.json()
|
||||
if results_dict['type'] == 'error':
|
||||
print('failed to get infos about {} from AUR'.format(pkgname))
|
||||
return None
|
||||
else:
|
||||
result = results_dict['results']
|
||||
if result:
|
||||
pkg = AURPkg(result)
|
||||
return pkg
|
||||
else:
|
||||
print('failed to get infos about {} from AUR'.format(pkgname))
|
||||
return None
|
||||
|
||||
def multiinfo(pkgnames):
|
||||
spec = {'type':'multiinfo', 'arg[]':pkgnames}
|
||||
try:
|
||||
r = requests.get(rpc_url, params = spec)
|
||||
r.raise_for_status()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return []
|
||||
else:
|
||||
results_dict = r.json()
|
||||
if results_dict['type'] == 'error':
|
||||
print('failed to get infos about {} from AUR'.format(pkgnames))
|
||||
return []
|
||||
else:
|
||||
pkgs = []
|
||||
results = results_dict['results']
|
||||
if results:
|
||||
for result in results:
|
||||
pkgs.append(AURPkg(result))
|
||||
else:
|
||||
print('failed to get infos about {} from AUR'.format(pkgnames))
|
||||
return pkgs
|
||||
|
||||
def get_extract_tarball(pkg):
|
||||
try:
|
||||
r = requests.get(aur_url + pkg.tarpath)
|
||||
r.raise_for_status()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return None
|
||||
else:
|
||||
if not os.path.exists(srcpkgdir):
|
||||
os.makedirs(srcpkgdir)
|
||||
full_tarpath = os.path.join(srcpkgdir, os.path.basename(pkg.tarpath))
|
||||
try:
|
||||
with open(full_tarpath, 'wb') as f:
|
||||
f.write(r.content)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return None
|
||||
else:
|
||||
try:
|
||||
tar = tarfile.open(full_tarpath)
|
||||
tar.extractall(path = srcpkgdir)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return None
|
||||
else:
|
||||
return os.path.join(srcpkgdir, get_name(pkg))
|
||||
|
||||
def get_name(pkg):
|
||||
# the splitext is to remove the original extension
|
||||
# which is tar.foo - currently foo is gz, but this can change
|
||||
# the rstrip is to remove the trailing tar part.
|
||||
if pkg.name not in pkg.tarpath:
|
||||
return os.path.splitext(os.path.basename(pkg.tarpath))[0].rstrip('.tar')
|
||||
return pkg.name
|
@ -1,74 +0,0 @@
|
||||
#! /usr/bin/python3
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
# pamac - A Python implementation of alpm
|
||||
# Copyright (C) 2013 Guillaume Benoit <guillaume@manjaro.org>
|
||||
#
|
||||
# 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
# i18n
|
||||
import gettext
|
||||
gettext.bindtextdomain('pamac', '/usr/share/locale')
|
||||
gettext.textdomain('pamac')
|
||||
_ = gettext.gettext
|
||||
|
||||
def format_size(size):
|
||||
KiB_size = size / 1024
|
||||
if KiB_size < 1000:
|
||||
size_string = _('%.1f KiB') % (KiB_size)
|
||||
return size_string
|
||||
else:
|
||||
size_string = _('%.2f MiB') % (KiB_size / 1024)
|
||||
return size_string
|
||||
|
||||
def format_pkg_name(name):
|
||||
unwanted = ['>','<','=']
|
||||
for i in unwanted:
|
||||
index = name.find(i)
|
||||
if index != -1:
|
||||
name = name[0:index]
|
||||
return name
|
||||
|
||||
from os.path import isfile, join
|
||||
from os import getpid, remove
|
||||
|
||||
from pamac import config
|
||||
|
||||
pid_file = '/tmp/pamac.pid'
|
||||
lock_file = join(config.pacman_conf.options['DBPath'], 'db.lck')
|
||||
|
||||
def lock_file_exists():
|
||||
return isfile(lock_file)
|
||||
|
||||
def pid_file_exists():
|
||||
return isfile(pid_file)
|
||||
|
||||
def write_pid_file():
|
||||
with open(pid_file, "w") as _file:
|
||||
_file.write(str(getpid()))
|
||||
|
||||
def rm_pid_file():
|
||||
if isfile(pid_file):
|
||||
remove(pid_file)
|
||||
|
||||
def rm_lock_file():
|
||||
if isfile(lock_file):
|
||||
remove(lock_file)
|
||||
|
||||
import time
|
||||
|
||||
def write_log_file(string):
|
||||
with open('/var/log/pamac.log', 'a') as logfile:
|
||||
logfile.write(time.strftime('[%Y-%m-%d %H:%M]') + ' {}\n'.format(string))
|
376
pamac/config.py
@ -1,376 +0,0 @@
|
||||
#! /usr/bin/python3
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
# pamac - A Python implementation of alpm
|
||||
# Copyright (C) 2011 Rémy Oudompheng <remy@archlinux.org>
|
||||
# Copyright (C) 2013-2014 Guillaume Benoit <guillaume@manjaro.org>
|
||||
#
|
||||
# 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
import os
|
||||
import glob
|
||||
import argparse
|
||||
import collections
|
||||
import warnings
|
||||
|
||||
import pyalpm
|
||||
|
||||
class InvalidSyntax(Warning):
|
||||
def __init__(self, filename, problem, arg):
|
||||
self.filename = filename
|
||||
self.problem = problem
|
||||
self.arg = arg
|
||||
|
||||
def __str__(self):
|
||||
return "unable to parse %s, %s: %r" % (self.filename, self.problem, self.arg)
|
||||
|
||||
# Options that may occur several times in a section. Their values should be
|
||||
# accumulated in a list.
|
||||
LIST_OPTIONS = (
|
||||
'CacheDir',
|
||||
'HoldPkg',
|
||||
'SyncFirst',
|
||||
'IgnoreGroup',
|
||||
'IgnorePkg',
|
||||
'NoExtract',
|
||||
'NoUpgrade',
|
||||
'Server'
|
||||
)
|
||||
|
||||
SINGLE_OPTIONS = (
|
||||
'RootDir',
|
||||
'DBPath',
|
||||
'GPGDir',
|
||||
'LogFile',
|
||||
'UseDelta',
|
||||
'Architecture',
|
||||
'XferCommand',
|
||||
'CleanMethod',
|
||||
'SigLevel',
|
||||
'LocalFileSigLevel',
|
||||
'RemoteFileSigLevel',
|
||||
'RefreshPeriod'
|
||||
)
|
||||
|
||||
BOOLEAN_OPTIONS = (
|
||||
'UseSyslog',
|
||||
'TotalDownload',
|
||||
'CheckSpace',
|
||||
'VerbosePkgLists',
|
||||
'ILoveCandy',
|
||||
'Color',
|
||||
'EnableAUR',
|
||||
'RemoveUnrequiredDeps'
|
||||
)
|
||||
|
||||
def define_siglevel(default_level, conf_string):
|
||||
for directive in conf_string.split():
|
||||
affect_package = False
|
||||
affect_database = False
|
||||
if 'Package' in directive:
|
||||
affect_package = True
|
||||
elif 'Database' in directive:
|
||||
affect_database = True
|
||||
else:
|
||||
affect_package = True
|
||||
affect_database = True
|
||||
if 'Never' in directive:
|
||||
if affect_package:
|
||||
default_level &= ~pyalpm.SIG_PACKAGE
|
||||
default_level |= pyalpm.SIG_PACKAGE_SET
|
||||
if affect_database:
|
||||
default_level &= ~pyalpm.SIG_DATABASE
|
||||
elif 'Optional' in directive:
|
||||
if affect_package:
|
||||
default_level |= pyalpm.SIG_PACKAGE
|
||||
default_level |= pyalpm.SIG_PACKAGE_OPTIONAL
|
||||
default_level |= pyalpm.SIG_PACKAGE_SET
|
||||
if affect_database:
|
||||
default_level |= pyalpm.SIG_DATABASE
|
||||
default_level |= pyalpm.SIG_DATABASE_OPTIONAL
|
||||
elif 'Required' in directive:
|
||||
if affect_package:
|
||||
default_level |= pyalpm.SIG_PACKAGE
|
||||
default_level &= ~pyalpm.SIG_PACKAGE_OPTIONAL
|
||||
default_level |= pyalpm.SIG_PACKAGE_SET
|
||||
if affect_database:
|
||||
default_level |= pyalpm.SIG_DATABASE
|
||||
default_level &= ~pyalpm.SIG_DATABASE_OPTIONAL
|
||||
elif 'TrustedOnly' in directive:
|
||||
if affect_package:
|
||||
default_level &= ~pyalpm.SIG_PACKAGE_MARGINAL_OK
|
||||
default_level &= ~pyalpm.SIG_PACKAGE_UNKNOWN_OK
|
||||
default_level |= pyalpm.SIG_PACKAGE_TRUST_SET
|
||||
if affect_database:
|
||||
default_level &= ~pyalpm.SIG_DATABASE_MARGINAL_OK
|
||||
default_level &= ~pyalpm.SIG_DATABASE_UNKNOWN_OK
|
||||
elif 'TrustAll' in directive:
|
||||
if affect_package:
|
||||
default_level |= pyalpm.SIG_PACKAGE_MARGINAL_OK
|
||||
default_level |= pyalpm.SIG_PACKAGE_UNKNOWN_OK
|
||||
default_level |= pyalpm.SIG_PACKAGE_TRUST_SET
|
||||
if affect_database:
|
||||
default_level |= pyalpm.SIG_DATABASE_MARGINAL_OK
|
||||
default_level |= pyalpm.SIG_DATABASE_UNKNOWN_OK
|
||||
else:
|
||||
print('unrecognized siglevel: {}'.format(conf_string))
|
||||
return default_level
|
||||
|
||||
def merge_siglevel(base_level, over_level):
|
||||
if not over_level & pyalpm.SIG_PACKAGE_SET:
|
||||
over_level |= base_level & pyalpm.SIG_PACKAGE
|
||||
over_level |= base_level & pyalpm.SIG_PACKAGE_OPTIONAL
|
||||
if not over_level & pyalpm.SIG_PACKAGE_TRUST_SET:
|
||||
over_level |= base_level & pyalpm.SIG_PACKAGE_MARGINAL_OK
|
||||
over_level |= base_level & pyalpm.SIG_PACKAGE_UNKNOWN_OK
|
||||
return over_level
|
||||
|
||||
def pacman_conf_enumerator(path):
|
||||
filestack = []
|
||||
current_section = None
|
||||
filestack.append(open(path))
|
||||
while len(filestack) > 0:
|
||||
f = filestack[-1]
|
||||
line = f.readline()
|
||||
if len(line) == 0:
|
||||
# end of file
|
||||
filestack.pop()
|
||||
continue
|
||||
|
||||
line = line.strip()
|
||||
if len(line) == 0:
|
||||
continue
|
||||
if line[0] == '#':
|
||||
continue
|
||||
if line[0] == '[' and line[-1] == ']':
|
||||
current_section = line[1:-1]
|
||||
continue
|
||||
if not current_section:
|
||||
raise InvalidSyntax(f.name, 'statement outside of a section', line)
|
||||
# read key, value
|
||||
key, equal, value = [x.strip() for x in line.partition('=')]
|
||||
|
||||
# include files
|
||||
if equal == '=' and key == 'Include':
|
||||
filestack.extend(open(f) for f in glob.glob(value))
|
||||
continue
|
||||
if current_section != 'options':
|
||||
# repos only have the Server option
|
||||
if key == 'Server' and equal == '=':
|
||||
yield (current_section, 'Server', value)
|
||||
elif key == 'SigLevel' and equal == '=':
|
||||
yield (current_section, 'SigLevel', value)
|
||||
else:
|
||||
raise InvalidSyntax(f.name, 'invalid key for repository configuration', line)
|
||||
continue
|
||||
if equal == '=':
|
||||
if key in LIST_OPTIONS:
|
||||
for val in value.split():
|
||||
yield (current_section, key, val)
|
||||
elif key in SINGLE_OPTIONS:
|
||||
yield (current_section, key, value)
|
||||
else:
|
||||
warnings.warn(InvalidSyntax(f.name, 'unrecognized option', key))
|
||||
else:
|
||||
if key in BOOLEAN_OPTIONS:
|
||||
yield (current_section, key, 1)
|
||||
else:
|
||||
warnings.warn(InvalidSyntax(f.name, 'unrecognized option', key))
|
||||
|
||||
class PacmanConfig():
|
||||
def __init__(self, conf = None, options = None):
|
||||
self.options = {}
|
||||
self.repos = collections.OrderedDict()
|
||||
self.options["RootDir"] = "/"
|
||||
self.options["DBPath"] = "/var/lib/pacman"
|
||||
self.options["GPGDir"] = "/etc/pacman.d/gnupg/"
|
||||
self.options["LogFile"] = "/var/log/pacman.log"
|
||||
self.options["Architecture"] = os.uname()[-1]
|
||||
self.default_siglevel = pyalpm.SIG_PACKAGE | pyalpm.SIG_PACKAGE_OPTIONAL | pyalpm.SIG_DATABASE | pyalpm.SIG_DATABASE_OPTIONAL
|
||||
if conf:
|
||||
self.load_from_file(conf)
|
||||
if options:
|
||||
self.load_from_options(options)
|
||||
|
||||
def load_from_file(self, filename):
|
||||
for section, key, value in pacman_conf_enumerator(filename):
|
||||
if section == 'options':
|
||||
if key == 'Architecture' and value == 'auto':
|
||||
continue
|
||||
if key in LIST_OPTIONS:
|
||||
self.options.setdefault(key, []).append(value)
|
||||
else:
|
||||
self.options[key] = value
|
||||
# define here default_siglevel to make it usable for servers
|
||||
if key == 'SigLevel':
|
||||
self.default_siglevel = define_siglevel(self.default_siglevel, self.options["SigLevel"])
|
||||
else:
|
||||
if not self.repos.get(section):
|
||||
self.repos[section] = ([], self.default_siglevel)
|
||||
if key == 'Server':
|
||||
self.repos[section][0].append(value)
|
||||
elif key == 'SigLevel':
|
||||
urls = self.repos[section][0].copy()
|
||||
new_siglevel = define_siglevel(self.repos[section][1], value)
|
||||
self.repos[section] = (urls, new_siglevel)
|
||||
if not "CacheDir" in self.options:
|
||||
self.options["CacheDir"]= ["/var/cache/pacman/pkg"]
|
||||
|
||||
def load_from_options(self, options):
|
||||
global _logmask
|
||||
if options.root:
|
||||
self.options["RootDir"] = options.root
|
||||
if options.dbpath:
|
||||
self.options["DBPath"] = options.dbpath
|
||||
if options.gpgdir:
|
||||
self.options["GPGDir"] = options.gpgdir
|
||||
if options.arch:
|
||||
self.options["Architecture"] = options.arch
|
||||
if options.logfile:
|
||||
self.options["LogFile"] = options.logfile
|
||||
if options.cachedir:
|
||||
self.options["CacheDir"] = [option.cachedir]
|
||||
if options.debug:
|
||||
_logmask = 0xffff
|
||||
|
||||
def initialize_alpm(self):
|
||||
h = pyalpm.Handle(self.options["RootDir"], self.options["DBPath"])
|
||||
h.arch = self.options["Architecture"]
|
||||
h.logfile = self.options["LogFile"]
|
||||
h.gpgdir = self.options["GPGDir"]
|
||||
h.cachedirs = self.options["CacheDir"]
|
||||
if "IgnoreGroup" in self.options:
|
||||
h.ignoregrps = self.options["IgnoreGroup"]
|
||||
if "IgnorePkg" in self.options:
|
||||
h.ignorepkgs = self.options["IgnorePkg"]
|
||||
if "NoExtract" in self.options:
|
||||
h.noextracts = self.options["NoExtract"]
|
||||
if "NoUpgrade" in self.options:
|
||||
h.noupgrades = self.options["NoUpgrade"]
|
||||
if "UseSyslog" in self.options:
|
||||
h.usesyslog = self.options["UseSyslog"]
|
||||
if "CheckSpace" in self.options:
|
||||
h.checkspace = self.options["CheckSpace"]
|
||||
# register default siglevel, it should have been updated previously
|
||||
h.siglevel = self.default_siglevel
|
||||
# update localsiglevel
|
||||
if "LocalFileSigLevel" in self.options:
|
||||
localsiglevel = define_siglevel(self.default_siglevel, self.options["LocalFileSigLevel"])
|
||||
localsiglevel = merge_siglevel(self.default_siglevel, localsiglevel)
|
||||
else:
|
||||
localsiglevel = self.default_siglevel
|
||||
# define localsiglevel
|
||||
h.localsiglevel = localsiglevel
|
||||
# update remotesiglevel
|
||||
if "RemoteFileSigLevel" in self.options:
|
||||
remotesiglevel = define_siglevel(self.default_siglevel, self.options["RemoteFileSigLevel"])
|
||||
remotesiglevel = merge_siglevel(self.default_siglevel, remotesiglevel)
|
||||
else:
|
||||
remotesiglevel = self.default_siglevel
|
||||
# define remotesiglevel
|
||||
h.remotesiglevel = remotesiglevel
|
||||
# set sync databases
|
||||
for repo, servers in self.repos.items():
|
||||
db = h.register_syncdb(repo, servers[1])
|
||||
db_servers = []
|
||||
for rawurl in servers[0]:
|
||||
url = rawurl.replace("$repo", repo)
|
||||
url = url.replace("$arch", self.options["Architecture"])
|
||||
db_servers.append(url)
|
||||
db.servers = db_servers
|
||||
return h
|
||||
|
||||
def __str__(self):
|
||||
return("PacmanConfig(options={}, repos={})".format(self.options, self.repos))
|
||||
|
||||
def pamac_conf_enumerator(path):
|
||||
filestack = []
|
||||
current_section = None
|
||||
filestack.append(open(path))
|
||||
while len(filestack) > 0:
|
||||
f = filestack[-1]
|
||||
line = f.readline()
|
||||
if len(line) == 0:
|
||||
# end of file
|
||||
filestack.pop()
|
||||
continue
|
||||
|
||||
line = line.strip()
|
||||
if len(line) == 0:
|
||||
continue
|
||||
if line[0] == '#':
|
||||
continue
|
||||
# read key, value
|
||||
key, equal, value = [x.strip() for x in line.partition('=')]
|
||||
|
||||
if equal == '=':
|
||||
if key in LIST_OPTIONS:
|
||||
for val in value.split():
|
||||
yield (current_section, key, val)
|
||||
elif key in SINGLE_OPTIONS:
|
||||
if key == 'RefreshPeriod':
|
||||
yield (current_section, key, int(value))
|
||||
else:
|
||||
yield (current_section, key, value)
|
||||
else:
|
||||
warnings.warn(InvalidSyntax(f.name, 'unrecognized option', key))
|
||||
else:
|
||||
if key in BOOLEAN_OPTIONS:
|
||||
yield (current_section, key, True)
|
||||
else:
|
||||
warnings.warn(InvalidSyntax(f.name, 'unrecognized option', key))
|
||||
|
||||
class PamacConfig():
|
||||
def __init__(self, conf = None):
|
||||
self.options = {}
|
||||
self.options["RefreshPeriod"] = 3600*3
|
||||
self.options["EnableAUR"] = False
|
||||
self.options["RemoveUnrequiredDeps"] = False
|
||||
if conf:
|
||||
self.load_from_file(conf)
|
||||
|
||||
def load_from_file(self, filename):
|
||||
for section, key, value in pamac_conf_enumerator(filename):
|
||||
if key in LIST_OPTIONS:
|
||||
self.options.setdefault(key, []).append(value)
|
||||
else:
|
||||
self.options[key] = value
|
||||
self.set_global_variables()
|
||||
|
||||
def set_global_variables(self):
|
||||
global refresh_period
|
||||
global enable_aur
|
||||
global recurse
|
||||
refresh_period = self.options['RefreshPeriod']
|
||||
enable_aur = self.options['EnableAUR']
|
||||
recurse = self.options['RemoveUnrequiredDeps']
|
||||
|
||||
def reload(self):
|
||||
self.options["EnableAUR"] = False
|
||||
self.options["RemoveUnrequiredDeps"] = False
|
||||
self.load_from_file("/etc/pamac.conf")
|
||||
|
||||
def __str__(self):
|
||||
return("PamacConfig(options={})".format(self.options))
|
||||
|
||||
pacman_conf = PacmanConfig(conf = "/etc/pacman.conf")
|
||||
handle = pacman_conf.initialize_alpm
|
||||
pamac_conf = PamacConfig(conf = "/etc/pamac.conf")
|
||||
holdpkg = []
|
||||
syncfirst = []
|
||||
if 'HoldPkg' in pacman_conf.options:
|
||||
holdpkg = pacman_conf.options['HoldPkg']
|
||||
if 'SyncFirst' in pacman_conf.options:
|
||||
syncfirst = pacman_conf.options['SyncFirst']
|
@ -1,864 +0,0 @@
|
||||
#! /usr/bin/python3
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
# pamac - A Python implementation of alpm
|
||||
# Copyright (C) 2013-2014 Guillaume Benoit <guillaume@manjaro.org>
|
||||
#
|
||||
# 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
import pyalpm
|
||||
from gi.repository import Gtk, GObject
|
||||
from time import sleep
|
||||
import subprocess
|
||||
import os
|
||||
import fnmatch
|
||||
#import requests
|
||||
#from ftplib import FTP
|
||||
#from urllib.parse import urlparse
|
||||
import dbus
|
||||
from dbus.mainloop.glib import DBusGMainLoop
|
||||
import signal
|
||||
import re
|
||||
|
||||
from pamac import config, common, aur
|
||||
|
||||
to_remove = set()
|
||||
to_add = set()
|
||||
to_mark_as_dep = set()
|
||||
to_update = set()
|
||||
to_load = set()
|
||||
available_updates = (False, [])
|
||||
to_build = []
|
||||
cancel_download = False
|
||||
build_proc = None
|
||||
make_depends = set()
|
||||
base_devel = ('autoconf', 'automake', 'binutils', 'bison', 'fakeroot',
|
||||
'file', 'findutils', 'flex', 'gawk', 'gcc', 'gettext',
|
||||
'grep', 'groff', 'gzip', 'libtool', 'm4', 'make', 'patch',
|
||||
'pkg-config', 'sed', 'sudo', 'texinfo', 'util-linux', 'which')
|
||||
build_depends = set()
|
||||
handle = None
|
||||
syncdbs = None
|
||||
localdb = None
|
||||
colors_regexp = re.compile('\\033\[(\d;)?\d*m')
|
||||
|
||||
# i18n
|
||||
import gettext
|
||||
import locale
|
||||
locale.bindtextdomain('pamac', '/usr/share/locale')
|
||||
gettext.bindtextdomain('pamac', '/usr/share/locale')
|
||||
gettext.textdomain('pamac')
|
||||
_ = gettext.gettext
|
||||
|
||||
interface = Gtk.Builder()
|
||||
interface.set_translation_domain('pamac')
|
||||
|
||||
interface.add_from_file('/usr/share/pamac/gui/dialogs.ui')
|
||||
ErrorDialog = interface.get_object('ErrorDialog')
|
||||
WarningDialog = interface.get_object('WarningDialog')
|
||||
#InfoDialog = interface.get_object('InfoDialog')
|
||||
QuestionDialog = interface.get_object('QuestionDialog')
|
||||
ConfDialog = interface.get_object('ConfDialog')
|
||||
transaction_sum = interface.get_object('transaction_sum')
|
||||
sum_top_label = interface.get_object('sum_top_label')
|
||||
sum_bottom_label = interface.get_object('sum_bottom_label')
|
||||
ChooseDialog = interface.get_object('ChooseDialog')
|
||||
choose_list = interface.get_object('choose_list')
|
||||
choose_label = interface.get_object('choose_label')
|
||||
choose_renderertoggle = interface.get_object('choose_renderertoggle')
|
||||
ProgressWindow = interface.get_object('ProgressWindow')
|
||||
progress_bar = interface.get_object('progressbar2')
|
||||
progress_label = interface.get_object('progresslabel2')
|
||||
action_icon = interface.get_object('action_icon')
|
||||
ProgressCancelButton = interface.get_object('ProgressCancelButton')
|
||||
ProgressCloseButton = interface.get_object('ProgressCloseButton')
|
||||
progress_expander = interface.get_object('progress_expander')
|
||||
progress_textview = interface.get_object('progress_textview')
|
||||
PreferencesWindow = interface.get_object('PreferencesWindow')
|
||||
EnableAURButton = interface.get_object('EnableAURButton')
|
||||
RemoveUnrequiredDepsButton = interface.get_object('RemoveUnrequiredDepsButton')
|
||||
RefreshPeriodSpinButton = interface.get_object('RefreshPeriodSpinButton')
|
||||
RefreshPeriodLabel = interface.get_object('RefreshPeriodLabel')
|
||||
|
||||
# Do it for transalation ease
|
||||
RefreshPeriodLabel.set_markup(_('How often to check for updates, value in hours')+':')
|
||||
|
||||
progress_buffer = progress_textview.get_buffer()
|
||||
|
||||
DBusGMainLoop(set_as_default = True)
|
||||
bus = dbus.SystemBus()
|
||||
|
||||
def get_dbus_methods():
|
||||
proxy = bus.get_object('org.manjaro.pamac','/org/manjaro/pamac', introspect = False)
|
||||
global Refresh
|
||||
global CheckUpdates
|
||||
global Init
|
||||
global Sysupgrade
|
||||
global Remove
|
||||
global Add
|
||||
global Load
|
||||
global Prepare
|
||||
global To_Remove
|
||||
global To_Add
|
||||
global Commit
|
||||
global Interrupt
|
||||
global Release
|
||||
global StopDaemon
|
||||
global SetPkgReason
|
||||
global WriteConfig
|
||||
SetPkgReason = proxy.get_dbus_method('SetPkgReason','org.manjaro.pamac')
|
||||
Refresh = proxy.get_dbus_method('Refresh','org.manjaro.pamac')
|
||||
CheckUpdates = proxy.get_dbus_method('CheckUpdates','org.manjaro.pamac')
|
||||
Init = proxy.get_dbus_method('Init','org.manjaro.pamac')
|
||||
Sysupgrade = proxy.get_dbus_method('Sysupgrade','org.manjaro.pamac')
|
||||
Remove = proxy.get_dbus_method('Remove','org.manjaro.pamac')
|
||||
Add = proxy.get_dbus_method('Add','org.manjaro.pamac')
|
||||
Load = proxy.get_dbus_method('Load','org.manjaro.pamac')
|
||||
Prepare = proxy.get_dbus_method('Prepare','org.manjaro.pamac')
|
||||
To_Remove = proxy.get_dbus_method('To_Remove','org.manjaro.pamac')
|
||||
To_Add = proxy.get_dbus_method('To_Add','org.manjaro.pamac')
|
||||
Commit = proxy.get_dbus_method('Commit','org.manjaro.pamac')
|
||||
Interrupt = proxy.get_dbus_method('Interrupt','org.manjaro.pamac')
|
||||
Release = proxy.get_dbus_method('Release','org.manjaro.pamac')
|
||||
StopDaemon = proxy.get_dbus_method('StopDaemon','org.manjaro.pamac')
|
||||
WriteConfig = proxy.get_dbus_method('WriteConfig','org.manjaro.pamac')
|
||||
|
||||
def config_dbus_signals():
|
||||
bus.add_signal_receiver(action_handler, dbus_interface = "org.manjaro.pamac", signal_name = "EmitAction")
|
||||
bus.add_signal_receiver(action_long_handler, dbus_interface = "org.manjaro.pamac", signal_name = "EmitActionLong")
|
||||
bus.add_signal_receiver(icon_handler, dbus_interface = "org.manjaro.pamac", signal_name = "EmitIcon")
|
||||
bus.add_signal_receiver(target_handler, dbus_interface = "org.manjaro.pamac", signal_name = "EmitTarget")
|
||||
bus.add_signal_receiver(percent_handler, dbus_interface = "org.manjaro.pamac", signal_name = "EmitPercent")
|
||||
bus.add_signal_receiver(need_details_handler, dbus_interface = "org.manjaro.pamac", signal_name = "EmitNeedDetails")
|
||||
bus.add_signal_receiver(transaction_start_handler, dbus_interface = "org.manjaro.pamac", signal_name = "EmitTransactionStart")
|
||||
bus.add_signal_receiver(log_error, dbus_interface = "org.manjaro.pamac", signal_name = "EmitLogError")
|
||||
bus.add_signal_receiver(log_warning, dbus_interface = "org.manjaro.pamac", signal_name = "EmitLogWarning")
|
||||
|
||||
def action_handler(action):
|
||||
progress_label.set_text(action)
|
||||
|
||||
def action_long_handler(action_long):
|
||||
global progress_buffer
|
||||
end_iter = progress_buffer.get_end_iter()
|
||||
progress_buffer.insert(end_iter, action_long)
|
||||
|
||||
def need_details_handler(need):
|
||||
progress_expander.set_expanded(need)
|
||||
|
||||
def icon_handler(icon):
|
||||
action_icon.set_from_icon_name(icon, Gtk.IconSize.BUTTON)
|
||||
|
||||
def target_handler(target):
|
||||
progress_bar.set_text(target)
|
||||
|
||||
def percent_handler(percent):
|
||||
if percent > 1:
|
||||
progress_bar.pulse()
|
||||
else:
|
||||
progress_bar.set_fraction(percent)
|
||||
|
||||
def transaction_start_handler(msg):
|
||||
ProgressCancelButton.set_visible(False)
|
||||
|
||||
def log_error(msg):
|
||||
ErrorDialog.format_secondary_text(msg)
|
||||
response = ErrorDialog.run()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
if response:
|
||||
ErrorDialog.hide()
|
||||
|
||||
def log_warning(msg):
|
||||
WarningDialog.format_secondary_text(msg)
|
||||
response = WarningDialog.run()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
if response:
|
||||
WarningDialog.hide()
|
||||
|
||||
def choose_provides(data):
|
||||
virtual_dep = str(data[1])
|
||||
providers = data[0]
|
||||
choose_label.set_markup('<b>{}</b>'.format(_('{pkgname} is provided by {number} packages.\nPlease choose those you would like to install:').format(pkgname = virtual_dep, number = str(len(providers)))))
|
||||
choose_list.clear()
|
||||
for name in providers:
|
||||
choose_list.append([False, str(name)])
|
||||
lenght = len(to_add)
|
||||
ChooseDialog.run()
|
||||
if len(to_add) == lenght: # no choice was done by the user
|
||||
to_add.add(choose_list.get(choose_list.get_iter_first(), 1)[0]) # add first provider
|
||||
|
||||
def on_choose_renderertoggle_toggled(widget, line):
|
||||
choose_list[line][0] = not choose_list[line][0]
|
||||
|
||||
def on_ChooseButton_clicked(*args):
|
||||
ChooseDialog.hide()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
for row in choose_list:
|
||||
if row[0] is True:
|
||||
to_add.add(row[1].split(':')[0]) # split done in case of optdep choice
|
||||
|
||||
def on_progress_textview_size_allocate(*args):
|
||||
#auto-scrolling method
|
||||
adj = progress_textview.get_vadjustment()
|
||||
adj.set_value(adj.get_upper() - adj.get_page_size())
|
||||
|
||||
def on_PreferencesValidButton_clicked(*args):
|
||||
data = []
|
||||
if EnableAURButton.get_active() != config.enable_aur:
|
||||
data.append(('EnableAUR', str(EnableAURButton.get_active())))
|
||||
if RemoveUnrequiredDepsButton.get_active() != config.recurse:
|
||||
data.append(('RemoveUnrequiredDeps', str(RemoveUnrequiredDepsButton.get_active())))
|
||||
if RefreshPeriodSpinButton.get_value() != config.refresh_period:
|
||||
data.append(('RefreshPeriod', str(RefreshPeriodSpinButton.get_value_as_int())))
|
||||
if data:
|
||||
WriteConfig(data)
|
||||
PreferencesWindow.hide()
|
||||
|
||||
def on_PreferencesCloseButton_clicked(*args):
|
||||
PreferencesWindow.hide()
|
||||
|
||||
def on_PreferencesWindow_delete_event(*args):
|
||||
PreferencesWindow.hide()
|
||||
# return True is needed to not destroy the window
|
||||
return True
|
||||
|
||||
def get_handle():
|
||||
global handle
|
||||
global syncdbs
|
||||
global localdb
|
||||
handle = config.handle()
|
||||
syncdbs = handle.get_syncdbs()
|
||||
localdb = handle.get_localdb()
|
||||
|
||||
def get_localpkg(name):
|
||||
return localdb.get_pkg(name)
|
||||
|
||||
def get_syncpkg(name):
|
||||
for repo in syncdbs:
|
||||
pkg = repo.get_pkg(name)
|
||||
if pkg:
|
||||
return pkg
|
||||
|
||||
def refresh(force_update = False):
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
action_handler(_('Refreshing')+'...')
|
||||
icon_handler('pamac-refresh')
|
||||
target_handler('')
|
||||
percent_handler(0)
|
||||
ProgressCancelButton.set_visible(True)
|
||||
ProgressCloseButton.set_visible(False)
|
||||
progress_expander.set_visible(True)
|
||||
ProgressWindow.show()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
Refresh(force_update)
|
||||
|
||||
def init_transaction(**options):
|
||||
return Init(dbus.Dictionary(options, signature='sb'))
|
||||
|
||||
def check_to_build():
|
||||
global to_build
|
||||
global to_add
|
||||
global to_mark_as_dep
|
||||
global make_depends
|
||||
global build_depends
|
||||
make_depends = set()
|
||||
builds_depends = set()
|
||||
# check if base_devel packages are installed
|
||||
for name in base_devel:
|
||||
if not pyalpm.find_satisfier(localdb.pkgcache, name):
|
||||
make_depends.add(name)
|
||||
already_checked = set()
|
||||
build_order = []
|
||||
i = 0
|
||||
error = ''
|
||||
while i < len(to_build):
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
pkg = to_build[i]
|
||||
# if current pkg is not in build_order add it at the end of the list
|
||||
if not pkg.name in build_order:
|
||||
build_order.append(pkg.name)
|
||||
# download end extract tarball from AUR
|
||||
srcdir = aur.get_extract_tarball(pkg)
|
||||
if srcdir:
|
||||
# get PKGBUILD and parse it to create a new pkg object with makedeps and deps
|
||||
new_pkgs = aur.get_pkgs(srcdir + '/PKGBUILD')
|
||||
for new_pkg in new_pkgs:
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
print('checking', new_pkg.name)
|
||||
# check if some makedeps must be installed
|
||||
for makedepend in new_pkg.makedepends:
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
if not makedepend in already_checked:
|
||||
if not pyalpm.find_satisfier(localdb.pkgcache, makedepend):
|
||||
print('found make dep:',makedepend)
|
||||
for db in syncdbs:
|
||||
provider = pyalpm.find_satisfier(db.pkgcache, makedepend)
|
||||
if provider:
|
||||
break
|
||||
if provider:
|
||||
make_depends.add(provider.name)
|
||||
already_checked.add(makedepend)
|
||||
else:
|
||||
# current makedep need to be built
|
||||
raw_makedepend = common.format_pkg_name(makedepend)
|
||||
if raw_makedepend in build_order:
|
||||
# add it in build_order before pkg
|
||||
build_order.remove(raw_makedepend)
|
||||
index = build_order.index(pkg.name)
|
||||
build_order.insert(index, raw_makedepend)
|
||||
else:
|
||||
# get infos about it
|
||||
makedep_pkg = aur.info(raw_makedepend)
|
||||
if makedep_pkg:
|
||||
# add it in to_build so it will be checked
|
||||
to_build.append(makedep_pkg)
|
||||
# add it in build_order before pkg
|
||||
index = build_order.index(pkg.name)
|
||||
build_order.insert(index, raw_makedepend)
|
||||
# add it in already_checked and to_add_as_as_dep
|
||||
already_checked.add(raw_makedepend)
|
||||
to_mark_as_dep.add(raw_makedepend)
|
||||
else:
|
||||
if error:
|
||||
error += '\n'
|
||||
error += _('{pkgname} depends on {dependname} but it is not installable').format(pkgname = pkg.name, dependname = makedepend)
|
||||
# check if some deps must be installed or built
|
||||
for depend in new_pkg.depends:
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
if not depend in already_checked:
|
||||
if not pyalpm.find_satisfier(localdb.pkgcache, depend):
|
||||
print('found dep:',depend)
|
||||
for db in syncdbs:
|
||||
provider = pyalpm.find_satisfier(db.pkgcache, depend)
|
||||
if provider:
|
||||
break
|
||||
if provider:
|
||||
# current dep need to be installed
|
||||
build_depends.add(provider.name)
|
||||
already_checked.add(depend)
|
||||
else:
|
||||
# current dep need to be built
|
||||
raw_depend = common.format_pkg_name(depend)
|
||||
if raw_depend in build_order:
|
||||
# add it in build_order before pkg
|
||||
build_order.remove(raw_depend)
|
||||
index = build_order.index(pkg.name)
|
||||
build_order.insert(index, raw_depend)
|
||||
else:
|
||||
# get infos about it
|
||||
dep_pkg = aur.info(raw_depend)
|
||||
if dep_pkg:
|
||||
# add it in to_build so it will be checked
|
||||
to_build.append(dep_pkg)
|
||||
# add it in build_order before pkg
|
||||
index = build_order.index(pkg.name)
|
||||
build_order.insert(index, raw_depend)
|
||||
# add it in already_checked and to_add_as_as_dep
|
||||
already_checked.add(raw_depend)
|
||||
to_mark_as_dep.add(raw_depend)
|
||||
else:
|
||||
if error:
|
||||
error += '\n'
|
||||
error += _('{pkgname} depends on {dependname} but it is not installable').format(pkgname = pkg.name, dependname = depend)
|
||||
else:
|
||||
if error:
|
||||
error += '\n'
|
||||
error += _('Failed to get {pkgname} archive from AUR').format(pkgname = pkg.name)
|
||||
i += 1
|
||||
if error:
|
||||
return error
|
||||
# add pkgname in make_depends and build_depends in to_add and to_mark_as_dep
|
||||
for name in make_depends:
|
||||
to_add.add(name)
|
||||
to_mark_as_dep.add(name)
|
||||
for name in build_depends:
|
||||
to_add.add(name)
|
||||
to_mark_as_dep.add(name)
|
||||
# reorder to_build following build_order
|
||||
to_build.sort(key = lambda pkg: build_order.index(pkg.name))
|
||||
#print('order:', build_order)
|
||||
print('to build:',to_build)
|
||||
print('makedeps:',make_depends)
|
||||
print('builddeps:',build_depends)
|
||||
return error
|
||||
|
||||
def run(cascade = True, recurse = False):
|
||||
if to_add or to_remove or to_load or to_build:
|
||||
global progress_buffer
|
||||
action_handler(_('Preparing')+'...')
|
||||
icon_handler('pamac-setup')
|
||||
target_handler('')
|
||||
percent_handler(0)
|
||||
progress_buffer.delete(progress_buffer.get_start_iter(), progress_buffer.get_end_iter())
|
||||
ProgressCancelButton.set_visible(False)
|
||||
ProgressCloseButton.set_visible(False)
|
||||
progress_expander.set_visible(True)
|
||||
ProgressWindow.show()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
# we need to give some time to the window to refresh
|
||||
sleep(0.1)
|
||||
error = ''
|
||||
if to_build:
|
||||
# check if packages in to_build have deps or makedeps which need to be install first
|
||||
error += check_to_build()
|
||||
if not error:
|
||||
if to_add or to_remove or to_load:
|
||||
ProgressCancelButton.set_visible(True)
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
trans_flags = {'cascade': cascade, 'recurse': recurse}
|
||||
error += init_transaction(**trans_flags)
|
||||
if not error:
|
||||
for name in to_add:
|
||||
error += Add(name)
|
||||
for name in to_remove:
|
||||
error += Remove(name)
|
||||
for path in to_load:
|
||||
error += Load(path)
|
||||
if not error:
|
||||
error += prepare(**trans_flags)
|
||||
if not error:
|
||||
set_transaction_sum()
|
||||
ConfDialog.show_all()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
if error:
|
||||
ProgressWindow.hide()
|
||||
Release()
|
||||
return(error)
|
||||
else:
|
||||
return (_('Nothing to do'))
|
||||
|
||||
def prepare(**trans_flags):
|
||||
error = ''
|
||||
ret = Prepare()
|
||||
# ret type is a(ass) so [([''], '')]
|
||||
if ret[0][0]: # providers are emitted
|
||||
Release()
|
||||
for item in ret:
|
||||
choose_provides(item)
|
||||
error += init_transaction(**trans_flags)
|
||||
if not error:
|
||||
for name in to_add:
|
||||
error += Add(name)
|
||||
for name in to_remove:
|
||||
error += Remove(name)
|
||||
for path in to_load:
|
||||
error += Load(path)
|
||||
if not error:
|
||||
ret = Prepare()
|
||||
if ret[0][1]:
|
||||
error = str(ret[0][1])
|
||||
elif ret[0][1]: # an error is emitted
|
||||
error = str(ret[0][1])
|
||||
return(error)
|
||||
|
||||
def check_finished_build(data):
|
||||
def handle_timeout(*args):
|
||||
raise Exception('timeout')
|
||||
def no_handle_timeout(*args):
|
||||
try:
|
||||
pass
|
||||
except:
|
||||
pass
|
||||
global to_build
|
||||
global build_proc
|
||||
path = data[0]
|
||||
pkg = data[1]
|
||||
if build_proc.poll() is None:
|
||||
# Build no finished : read stdout to push it to text_buffer
|
||||
# add a timeout to stop reading stdout if too long
|
||||
# so the gui won't freeze
|
||||
signal.signal(signal.SIGALRM, handle_timeout)
|
||||
signal.setitimer(signal.ITIMER_REAL, 0.05) # 50 ms timeout
|
||||
try:
|
||||
line = build_proc.stdout.readline().decode(encoding='UTF-8')
|
||||
line = re.sub(colors_regexp, '', line)
|
||||
#print(line.rstrip('\n'))
|
||||
progress_buffer.insert_at_cursor(line)
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
signal.signal(signal.SIGALRM, no_handle_timeout)
|
||||
finally:
|
||||
progress_bar.pulse()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
return True
|
||||
elif build_proc.poll() == 0:
|
||||
# Build successfully finished
|
||||
built = []
|
||||
# parse again PKGBUILD to have new pkg objects in case of a pkgver() function
|
||||
# was used so pkgver was changed during build process
|
||||
new_pkgs = aur.get_pkgs(path + '/PKGBUILD')
|
||||
# find built packages
|
||||
for new_pkg in new_pkgs:
|
||||
for item in os.listdir(path):
|
||||
if os.path.isfile(os.path.join(path, item)):
|
||||
# add a * before pkgver if there an epoch variable
|
||||
if fnmatch.fnmatch(item, '{}-*{}-*.pkg.tar.?z'.format(new_pkg.name, new_pkg.version)):
|
||||
built.append(os.path.join(path, item))
|
||||
break
|
||||
if built:
|
||||
print('successfully built:', built)
|
||||
build_proc = None
|
||||
if pkg in to_build:
|
||||
to_build.remove(pkg)
|
||||
# install built packages
|
||||
error = ''
|
||||
error += init_transaction()
|
||||
if not error:
|
||||
for pkg_path in built:
|
||||
error += Load(pkg_path)
|
||||
if not error:
|
||||
error += prepare()
|
||||
if not error:
|
||||
if To_Remove():
|
||||
set_transaction_sum()
|
||||
ConfDialog.show_all()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
else:
|
||||
finalize()
|
||||
if error:
|
||||
Release()
|
||||
ProgressCancelButton.set_visible(False)
|
||||
ProgressCloseButton.set_visible(True)
|
||||
ErrorDialog.format_secondary_text(error)
|
||||
response = ErrorDialog.run()
|
||||
if response:
|
||||
ErrorDialog.hide()
|
||||
else:
|
||||
ProgressCancelButton.set_visible(False)
|
||||
ProgressCloseButton.set_visible(True)
|
||||
action_long_handler(_('Build process failed.'))
|
||||
return False
|
||||
elif build_proc.poll() == 1:
|
||||
# Build finish with an error
|
||||
ProgressCancelButton.set_visible(False)
|
||||
ProgressCloseButton.set_visible(True)
|
||||
action_long_handler(_('Build process failed.'))
|
||||
return False
|
||||
|
||||
def download(url_list, path):
|
||||
def write_file(chunk):
|
||||
nonlocal transferred
|
||||
nonlocal f
|
||||
if cancel_download:
|
||||
if ftp:
|
||||
ftp.quit()
|
||||
raise Exception('Download cancelled')
|
||||
return
|
||||
f.write(chunk)
|
||||
transferred += len(chunk)
|
||||
if total_size > 0:
|
||||
percent = round(transferred/total_size, 2)
|
||||
percent_handler(percent)
|
||||
if transferred <= total_size:
|
||||
target = '{transferred}/{size}'.format(transferred = common.format_size(transferred), size = common.format_size(total_size))
|
||||
else:
|
||||
target = ''
|
||||
target_handler(target)
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
|
||||
global cancel_download
|
||||
cancel_download = False
|
||||
ftp = None
|
||||
total_size = 0
|
||||
transferred = 0
|
||||
icon_handler('pamac-download')
|
||||
ProgressCancelButton.set_visible(True)
|
||||
ProgressCloseButton.set_visible(False)
|
||||
parsed_urls = []
|
||||
for url in url_list:
|
||||
url_components = urlparse(url)
|
||||
if url_components.scheme:
|
||||
parsed_urls.append(url_components)
|
||||
print(parsed_urls)
|
||||
for url_components in parsed_urls:
|
||||
if url_components.scheme == 'http':
|
||||
total_size += int(requests.get(url).headers['Content-Length'])
|
||||
elif url_components.scheme == 'ftp':
|
||||
ftp = FTP(url_components.netloc)
|
||||
ftp.login('anonymous', '')
|
||||
total_size += int(ftp.size(url_components.path))
|
||||
print(total_size)
|
||||
for url_components in parsed_urls:
|
||||
filename = url_components.path.split('/')[-1]
|
||||
print(filename)
|
||||
action = _('Downloading {pkgname}').format(pkgname = filename)+'...'
|
||||
action_long = action+'\n'
|
||||
action_handler(action)
|
||||
action_long_handler(action_long)
|
||||
ProgressWindow.show()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
with open(os.path.join(path, filename), 'wb') as f:
|
||||
if url_components.scheme == 'http':
|
||||
try:
|
||||
r = requests.get(url, stream = True)
|
||||
for chunk in r.iter_content(1024):
|
||||
if cancel_download:
|
||||
raise Exception('Download cancelled')
|
||||
break
|
||||
else:
|
||||
write_file(chunk)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
cancel_download = False
|
||||
elif url_components.scheme == 'ftp':
|
||||
try:
|
||||
ftp = FTP(url_components.netloc)
|
||||
ftp.login('anonymous', '')
|
||||
ftp.retrbinary('RETR '+url_components.path, write_file, blocksize=1024)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
cancel_download = False
|
||||
|
||||
def build_next():
|
||||
global build_proc
|
||||
pkg = to_build[0]
|
||||
path = os.path.join(aur.srcpkgdir, aur.get_name(pkg))
|
||||
new_pkgs = aur.get_pkgs(path + '/PKGBUILD')
|
||||
# sources are identicals for splitted packages
|
||||
# (not complete) download(new_pkgs[0].source, path)
|
||||
action = _('Building {pkgname}').format(pkgname = pkg.name)+'...'
|
||||
action_handler(action)
|
||||
action_long_handler(action+'\n')
|
||||
icon_handler('pamac-setup')
|
||||
target_handler('')
|
||||
percent_handler(0)
|
||||
ProgressCancelButton.set_visible(True)
|
||||
ProgressCloseButton.set_visible(False)
|
||||
progress_expander.set_visible(True)
|
||||
progress_expander.set_expanded(True)
|
||||
ProgressWindow.show()
|
||||
build_proc = subprocess.Popen(["makepkg", "-cf"], cwd = path, stdout = subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
GObject.timeout_add(100, check_finished_build, (path, pkg))
|
||||
|
||||
def finalize():
|
||||
if To_Add() or To_Remove():
|
||||
try:
|
||||
Commit()
|
||||
except dbus.exceptions.DBusException as e:
|
||||
Release()
|
||||
elif to_build:
|
||||
# packages in to_build have no deps or makedeps
|
||||
# so we build and install the first one
|
||||
# the next ones will be built by the caller
|
||||
build_next()
|
||||
|
||||
def mark_needed_pkgs_as_dep():
|
||||
global to_mark_as_dep
|
||||
for name in to_mark_as_dep.copy():
|
||||
if get_localpkg(name):
|
||||
error = SetPkgReason(name, pyalpm.PKG_REASON_DEPEND)
|
||||
if error:
|
||||
print(error)
|
||||
else:
|
||||
to_mark_as_dep.discard(name)
|
||||
|
||||
def get_updates():
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
action_handler(_('Checking for updates')+'...')
|
||||
icon_handler('pamac-search')
|
||||
target_handler('')
|
||||
percent_handler(0)
|
||||
ProgressCancelButton.set_visible(False)
|
||||
ProgressCloseButton.set_visible(False)
|
||||
progress_expander.set_visible(False)
|
||||
ProgressWindow.show()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
CheckUpdates()
|
||||
|
||||
def get_transaction_sum():
|
||||
transaction_dict = {'to_remove': [], 'to_build': [], 'to_install': [], 'to_update': [], 'to_reinstall': [], 'to_downgrade': []}
|
||||
for pkg in to_build:
|
||||
transaction_dict['to_build'].append(pkg.name+' '+pkg.version)
|
||||
_to_remove = sorted(To_Remove())
|
||||
for name, version in _to_remove:
|
||||
transaction_dict['to_remove'].append(name+' '+version)
|
||||
others = sorted(To_Add())
|
||||
for name, version, dsize in others:
|
||||
pkg = get_localpkg(name)
|
||||
if pkg:
|
||||
comp = pyalpm.vercmp(version, pkg.version)
|
||||
if comp == 1:
|
||||
transaction_dict['to_update'].append((name+' '+version, dsize))
|
||||
elif comp == 0:
|
||||
transaction_dict['to_reinstall'].append((name+' '+version, dsize))
|
||||
elif comp == -1:
|
||||
transaction_dict['to_downgrade'].append((name+' '+version, dsize))
|
||||
else:
|
||||
transaction_dict['to_install'].append((name+' '+version, dsize))
|
||||
#~ if transaction_dict['to_build']:
|
||||
#~ print('To build:', [name for name in transaction_dict['to_build']])
|
||||
#~ if transaction_dict['to_install']:
|
||||
#~ print('To install:', [name for name, size in transaction_dict['to_install']])
|
||||
#~ if transaction_dict['to_reinstall']:
|
||||
#~ print('To reinstall:', [name for name, size in transaction_dict['to_reinstall']])
|
||||
#~ if transaction_dict['to_downgrade']:
|
||||
#~ print('To downgrade:', [name for name, size in transaction_dict['to_downgrade']])
|
||||
#~ if transaction_dict['to_remove']:
|
||||
#~ print('To remove:', [name for name in transaction_dict['to_remove']])
|
||||
#~ if transaction_dict['to_update']:
|
||||
#~ print('To update:', [name for name, size in transaction_dict['to_update']])
|
||||
return transaction_dict
|
||||
|
||||
def set_transaction_sum(show_updates = True):
|
||||
dsize = 0
|
||||
transaction_sum.clear()
|
||||
transaction_dict = get_transaction_sum()
|
||||
sum_top_label.set_markup('<big><b>{}</b></big>'.format(_('Transaction Summary')))
|
||||
if transaction_dict['to_remove']:
|
||||
transaction_sum.append([_('To remove')+':', transaction_dict['to_remove'][0]])
|
||||
i = 1
|
||||
while i < len(transaction_dict['to_remove']):
|
||||
transaction_sum.append(['', transaction_dict['to_remove'][i]])
|
||||
i += 1
|
||||
if transaction_dict['to_downgrade']:
|
||||
transaction_sum.append([_('To downgrade')+':', transaction_dict['to_downgrade'][0][0]])
|
||||
dsize += transaction_dict['to_downgrade'][0][1]
|
||||
i = 1
|
||||
while i < len(transaction_dict['to_downgrade']):
|
||||
transaction_sum.append(['', transaction_dict['to_downgrade'][i][0]])
|
||||
dsize += transaction_dict['to_downgrade'][i][1]
|
||||
i += 1
|
||||
if transaction_dict['to_build']:
|
||||
transaction_sum.append([_('To build')+':', transaction_dict['to_build'][0]])
|
||||
i = 1
|
||||
while i < len(transaction_dict['to_build']):
|
||||
transaction_sum.append(['', transaction_dict['to_build'][i]])
|
||||
i += 1
|
||||
if transaction_dict['to_install']:
|
||||
transaction_sum.append([_('To install')+':', transaction_dict['to_install'][0][0]])
|
||||
dsize += transaction_dict['to_install'][0][1]
|
||||
i = 1
|
||||
while i < len(transaction_dict['to_install']):
|
||||
transaction_sum.append(['', transaction_dict['to_install'][i][0]])
|
||||
dsize += transaction_dict['to_install'][i][1]
|
||||
i += 1
|
||||
if transaction_dict['to_reinstall']:
|
||||
transaction_sum.append([_('To reinstall')+':', transaction_dict['to_reinstall'][0][0]])
|
||||
dsize += transaction_dict['to_reinstall'][0][1]
|
||||
i = 1
|
||||
while i < len(transaction_dict['to_reinstall']):
|
||||
transaction_sum.append(['', transaction_dict['to_reinstall'][i][0]])
|
||||
dsize += transaction_dict['to_reinstall'][i][1]
|
||||
i += 1
|
||||
if show_updates:
|
||||
if transaction_dict['to_update']:
|
||||
transaction_sum.append([_('To update')+':', transaction_dict['to_update'][0][0]])
|
||||
dsize += transaction_dict['to_update'][0][1]
|
||||
i = 1
|
||||
while i < len(transaction_dict['to_update']):
|
||||
transaction_sum.append(['', transaction_dict['to_update'][i][0]])
|
||||
dsize += transaction_dict['to_update'][i][1]
|
||||
i += 1
|
||||
else:
|
||||
for name, size in transaction_dict['to_update']:
|
||||
dsize += size
|
||||
if dsize == 0:
|
||||
sum_bottom_label.set_markup('')
|
||||
else:
|
||||
sum_bottom_label.set_markup('<b>{} {}</b>'.format(_('Total download size:'), common.format_size(dsize)))
|
||||
|
||||
def sysupgrade(show_updates = True, downgrade = False):
|
||||
syncfirst, updates = available_updates
|
||||
if updates:
|
||||
global to_update
|
||||
global to_add
|
||||
global to_remove
|
||||
global progress_buffer
|
||||
to_update.clear()
|
||||
to_add.clear()
|
||||
to_remove.clear()
|
||||
action_handler(_('Preparing')+'...')
|
||||
icon_handler('pamac-setup')
|
||||
target_handler('')
|
||||
percent_handler(0)
|
||||
progress_buffer.delete(progress_buffer.get_start_iter(), progress_buffer.get_end_iter())
|
||||
ProgressCancelButton.set_visible(False)
|
||||
ProgressCloseButton.set_visible(False)
|
||||
progress_expander.set_visible(True)
|
||||
ProgressWindow.show()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
for name, version, db, tarpath, size in updates:
|
||||
if db == 'AUR':
|
||||
# call AURPkg constructor directly to avoid a request to AUR
|
||||
infos = {'name': name, 'version': version, 'Description': '', 'URLPath': tarpath}
|
||||
pkg = aur.AURPkg(infos)
|
||||
to_build.append(pkg)
|
||||
else:
|
||||
to_update.add(name)
|
||||
error = ''
|
||||
if syncfirst:
|
||||
ProgressCancelButton.set_visible(True)
|
||||
error += init_transaction()
|
||||
if not error:
|
||||
for name in to_update:
|
||||
error += Add(name)
|
||||
if not error:
|
||||
error += prepare()
|
||||
else:
|
||||
if to_build:
|
||||
# check if packages in to_build have deps or makedeps which need to be install first
|
||||
# grab errors differently here to not break regular updates
|
||||
_error = check_to_build()
|
||||
if to_update or to_add:
|
||||
ProgressCancelButton.set_visible(True)
|
||||
error += init_transaction()
|
||||
if not error:
|
||||
if to_update:
|
||||
error += Sysupgrade(downgrade)
|
||||
_error = ''
|
||||
for name in to_add:
|
||||
_error += Add(name)
|
||||
if _error:
|
||||
print(_error)
|
||||
if not error:
|
||||
error += prepare()
|
||||
if not error:
|
||||
set_transaction_sum(show_updates = show_updates)
|
||||
if show_updates:
|
||||
ConfDialog.show_all()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
else:
|
||||
if len(transaction_sum) != 0:
|
||||
ConfDialog.show_all()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
else:
|
||||
finalize()
|
||||
if error:
|
||||
ProgressWindow.hide()
|
||||
Release()
|
||||
return error
|
12
po/Makefile
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
MSGLANGS=$(notdir $(wildcard *.po))
|
||||
|
||||
MSGOBJS=$(addprefix locale/,$(MSGLANGS:.po=/LC_MESSAGES/pamac.mo))
|
||||
|
||||
locale/%/LC_MESSAGES/pamac.mo: %.po
|
||||
msgfmt -c -o $*.mo $*.po
|
||||
mkdir -p $(dir $@)
|
||||
cp $*.mo $(dir $@)pamac.mo
|
||||
|
||||
gettext: $(MSGOBJS)
|
||||
itstool -j ../data/polkit/org.manjaro.pamac.policy.in -o ../data/polkit/org.manjaro.pamac.policy $(MSGLANGS:.po=.mo)
|
553
po/bn.po
@ -1,553 +0,0 @@
|
||||
# Translation of Pamac.
|
||||
# Copyright (C) 2007-2012 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the Pamac package.
|
||||
# Guillaume Benoit <guillaume@manjaro.org>, 2013-2014.
|
||||
#
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: manjaro-pamac\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-03-30 15:09+0100\n"
|
||||
"PO-Revision-Date: 2014-03-05 22:14+0000\n"
|
||||
"Last-Translator: manjarolinux <philm@manjaro.org>\n"
|
||||
"Language-Team: Bengali (http://www.transifex.com/projects/p/manjaro-pamac/language/bn/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: bn\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: data/polkit/org.manjaro.pamac.policy:10
|
||||
msgid "Authentication is required"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:162
|
||||
msgid "Checking dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:170
|
||||
msgid "Checking file conflicts"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:176
|
||||
msgid "Resolving dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:184
|
||||
msgid "Checking inter conflicts"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:192
|
||||
#, python-brace-format
|
||||
msgid "Installing {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:200
|
||||
#, python-brace-format
|
||||
msgid "Removing {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:208
|
||||
#, python-brace-format
|
||||
msgid "Upgrading {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:216
|
||||
#, python-brace-format
|
||||
msgid "Downgrading {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:224
|
||||
#, python-brace-format
|
||||
msgid "Reinstalling {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:232
|
||||
msgid "Checking integrity"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:239
|
||||
msgid "Loading packages files"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:245
|
||||
msgid "Checking delta integrity"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:251
|
||||
msgid "Applying deltas"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:257
|
||||
msgid "Generating {} with {}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:261
|
||||
msgid "Generation succeeded!"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:264
|
||||
msgid "Generation failed."
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:267
|
||||
#, python-brace-format
|
||||
msgid "Configuring {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:272
|
||||
msgid "Downloading"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:276
|
||||
msgid "Checking available disk space"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:286
|
||||
msgid "Checking keyring"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:292
|
||||
msgid "Downloading required keys"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:311
|
||||
#, python-brace-format
|
||||
msgid "{pkgname1} will be replaced by {pkgname2}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:314
|
||||
#, python-brace-format
|
||||
msgid "{pkgname1} conflicts with {pkgname2}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:339
|
||||
msgid "Error: "
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:345
|
||||
msgid "Warning: "
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:359
|
||||
#, python-brace-format
|
||||
msgid "Refreshing {repo}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:363 pamac/transaction.py:608
|
||||
#, python-brace-format
|
||||
msgid "Downloading {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:427 pamac-daemon.py:439 pamac-daemon.py:762
|
||||
#: pamac-daemon.py:770 pamac-daemon.py:793 pamac-daemon.py:827
|
||||
msgid "Authentication failed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:572 pamac-install.py:127
|
||||
#, python-brace-format
|
||||
msgid "{pkgname} is not a valid path or package name"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:685
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"The transaction cannot be performed because it needs to remove {pkgname1} "
|
||||
"which is a locked package"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:695 pamac/transaction.py:449
|
||||
msgid "Nothing to do"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:757
|
||||
msgid "Transaction successfully finished"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:103 pamac-manager.py:134 pamac-manager.py:135
|
||||
#: pamac-manager.py:150 pamac-manager.py:159 pamac-manager.py:180
|
||||
#: pamac-manager.py:305 pamac-manager.py:657 pamac-manager.py:715
|
||||
#: pamac-manager.py:785
|
||||
msgid "No package found"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:204 pamac-manager.py:266
|
||||
msgid "local"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:249 pamac-manager.py:371
|
||||
msgid "Installed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:252
|
||||
msgid "Uninstalled"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:255
|
||||
msgid "Orphans"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:227 pamac/transaction.py:757
|
||||
msgid "To install"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:238 pamac/transaction.py:737
|
||||
msgid "To remove"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:361
|
||||
msgid "Licenses"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:366
|
||||
msgid "Depends On"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:374
|
||||
msgid "Optional Deps"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:377
|
||||
msgid "Required By"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:379
|
||||
msgid "Provides"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:381
|
||||
msgid "Replaces"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:383
|
||||
msgid "Conflicts With"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:388
|
||||
msgid "Repository"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:390 gui/manager.ui:557
|
||||
msgid "Groups"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:392
|
||||
msgid "Compressed Size"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:393
|
||||
msgid "Download Size"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:395
|
||||
msgid "Installed Size"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:396
|
||||
msgid "Packager"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:397
|
||||
msgid "Architecture"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:400
|
||||
msgid "Install Date"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:402
|
||||
msgid "Explicitly installed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:404
|
||||
msgid "Installed as a dependency for another package"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:406
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:407
|
||||
msgid "Install Reason"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:412
|
||||
msgid "Signatures"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:416
|
||||
msgid "Backup files"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:597
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"{pkgname} has {number} uninstalled optional deps.\n"
|
||||
"Please choose those you would like to install:"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:660
|
||||
msgid "Deselect"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:665
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:671
|
||||
msgid "Reinstall"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:682
|
||||
msgid "Install optional deps"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:687
|
||||
msgid "Mark as explicitly installed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:691
|
||||
msgid "Install"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:702
|
||||
msgid "Install with optional deps"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:1009 pamac-updater.py:214 pamac-install.py:160
|
||||
msgid "Pamac is already running"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:44 pamac-updater.py:59 pamac-tray.py:40
|
||||
msgid "Your system is up-to-date"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:74 pamac/transaction.py:787
|
||||
msgid "Total download size:"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:76 pamac-tray.py:38
|
||||
msgid "1 available update"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:78 pamac-tray.py:37
|
||||
#, python-brace-format
|
||||
msgid "{number} available updates"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-tray.py:50 pamac-tray.py:126 pamac-tray.py:148 gui/updater.ui:24
|
||||
msgid "Update Manager"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-tray.py:54 gui/manager.ui:324
|
||||
msgid "Package Manager"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-tray.py:58
|
||||
msgid "Quit"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-install.py:66
|
||||
msgid ""
|
||||
"Some updates are available.\n"
|
||||
"Please update your system first"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-install.py:72 pamac/transaction.py:406 pamac/transaction.py:799
|
||||
msgid "Preparing"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:94 gui/dialogs.ui:369
|
||||
msgid "How often to check for updates, value in hours"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:192
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"{pkgname} is provided by {number} packages.\n"
|
||||
"Please choose those you would like to install:"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:257
|
||||
msgid "Refreshing"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:341 pamac/transaction.py:380
|
||||
#, python-brace-format
|
||||
msgid "{pkgname} depends on {dependname} but it is not installable"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:384
|
||||
#, python-brace-format
|
||||
msgid "Failed to get {pkgname} archive from AUR"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:552 pamac/transaction.py:558
|
||||
msgid "Build process failed."
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:644
|
||||
#, python-brace-format
|
||||
msgid "Building {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:685
|
||||
msgid "Checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:735
|
||||
msgid "Transaction Summary"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:743
|
||||
msgid "To downgrade"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:751
|
||||
msgid "To build"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:765
|
||||
msgid "To reinstall"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:774
|
||||
msgid "To update"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/common.py:30
|
||||
#, python-format
|
||||
msgid "%.1f KiB"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/common.py:33
|
||||
#, python-format
|
||||
msgid "%.2f MiB"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:8
|
||||
msgid "About Pamac"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:13
|
||||
msgid "Copyright © 2013 Guillaume Benoit"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:14
|
||||
msgid "A gtk3 frontend for pyalpm"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:44
|
||||
msgid "Pamac History"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:160
|
||||
msgid "View History"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:170 gui/manager.ui:212
|
||||
msgid "Install local packages"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:344
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:362
|
||||
msgid "Apply changes"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:380
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:453
|
||||
msgid "Search in AUR"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:511
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:604 gui/manager.ui:696
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:651
|
||||
msgid "Repos"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:709
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:722
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:735
|
||||
msgid "Repo"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:748
|
||||
msgid "Size"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:850
|
||||
msgid "Infos"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:914
|
||||
msgid "Deps"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:983
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:1012
|
||||
msgid "Files"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:70
|
||||
msgid "Progress"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:162
|
||||
msgid "details"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:292
|
||||
msgid "Pamac Preferences"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:316
|
||||
msgid "Enable AUR support"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:320
|
||||
msgid "Allow Pamac to search and install packages from AUR"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:333
|
||||
msgid "Remove unrequired dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:337
|
||||
msgid ""
|
||||
"When removing a package, also remove those dependencies that are not "
|
||||
"required by other packages"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:396
|
||||
msgid "Options"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:465
|
||||
msgid "Choose"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:579
|
||||
msgid "Summary"
|
||||
msgstr ""
|
553
po/ca-ES.po
@ -1,553 +0,0 @@
|
||||
# Translation of Pamac.
|
||||
# Copyright (C) 2007-2012 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the Pamac package.
|
||||
# Guillaume Benoit <guillaume@manjaro.org>, 2013-2014.
|
||||
#
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: manjaro-pamac\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-03-30 15:09+0100\n"
|
||||
"PO-Revision-Date: 2013-04-16 23:37+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Catalan (Spain) (http://www.transifex.com/projects/p/manjaro-pamac/language/ca_ES/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: ca_ES\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: data/polkit/org.manjaro.pamac.policy:10
|
||||
msgid "Authentication is required"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:162
|
||||
msgid "Checking dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:170
|
||||
msgid "Checking file conflicts"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:176
|
||||
msgid "Resolving dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:184
|
||||
msgid "Checking inter conflicts"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:192
|
||||
#, python-brace-format
|
||||
msgid "Installing {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:200
|
||||
#, python-brace-format
|
||||
msgid "Removing {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:208
|
||||
#, python-brace-format
|
||||
msgid "Upgrading {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:216
|
||||
#, python-brace-format
|
||||
msgid "Downgrading {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:224
|
||||
#, python-brace-format
|
||||
msgid "Reinstalling {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:232
|
||||
msgid "Checking integrity"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:239
|
||||
msgid "Loading packages files"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:245
|
||||
msgid "Checking delta integrity"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:251
|
||||
msgid "Applying deltas"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:257
|
||||
msgid "Generating {} with {}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:261
|
||||
msgid "Generation succeeded!"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:264
|
||||
msgid "Generation failed."
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:267
|
||||
#, python-brace-format
|
||||
msgid "Configuring {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:272
|
||||
msgid "Downloading"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:276
|
||||
msgid "Checking available disk space"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:286
|
||||
msgid "Checking keyring"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:292
|
||||
msgid "Downloading required keys"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:311
|
||||
#, python-brace-format
|
||||
msgid "{pkgname1} will be replaced by {pkgname2}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:314
|
||||
#, python-brace-format
|
||||
msgid "{pkgname1} conflicts with {pkgname2}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:339
|
||||
msgid "Error: "
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:345
|
||||
msgid "Warning: "
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:359
|
||||
#, python-brace-format
|
||||
msgid "Refreshing {repo}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:363 pamac/transaction.py:608
|
||||
#, python-brace-format
|
||||
msgid "Downloading {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:427 pamac-daemon.py:439 pamac-daemon.py:762
|
||||
#: pamac-daemon.py:770 pamac-daemon.py:793 pamac-daemon.py:827
|
||||
msgid "Authentication failed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:572 pamac-install.py:127
|
||||
#, python-brace-format
|
||||
msgid "{pkgname} is not a valid path or package name"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:685
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"The transaction cannot be performed because it needs to remove {pkgname1} "
|
||||
"which is a locked package"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:695 pamac/transaction.py:449
|
||||
msgid "Nothing to do"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:757
|
||||
msgid "Transaction successfully finished"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:103 pamac-manager.py:134 pamac-manager.py:135
|
||||
#: pamac-manager.py:150 pamac-manager.py:159 pamac-manager.py:180
|
||||
#: pamac-manager.py:305 pamac-manager.py:657 pamac-manager.py:715
|
||||
#: pamac-manager.py:785
|
||||
msgid "No package found"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:204 pamac-manager.py:266
|
||||
msgid "local"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:249 pamac-manager.py:371
|
||||
msgid "Installed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:252
|
||||
msgid "Uninstalled"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:255
|
||||
msgid "Orphans"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:227 pamac/transaction.py:757
|
||||
msgid "To install"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:238 pamac/transaction.py:737
|
||||
msgid "To remove"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:361
|
||||
msgid "Licenses"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:366
|
||||
msgid "Depends On"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:374
|
||||
msgid "Optional Deps"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:377
|
||||
msgid "Required By"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:379
|
||||
msgid "Provides"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:381
|
||||
msgid "Replaces"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:383
|
||||
msgid "Conflicts With"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:388
|
||||
msgid "Repository"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:390 gui/manager.ui:557
|
||||
msgid "Groups"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:392
|
||||
msgid "Compressed Size"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:393
|
||||
msgid "Download Size"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:395
|
||||
msgid "Installed Size"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:396
|
||||
msgid "Packager"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:397
|
||||
msgid "Architecture"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:400
|
||||
msgid "Install Date"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:402
|
||||
msgid "Explicitly installed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:404
|
||||
msgid "Installed as a dependency for another package"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:406
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:407
|
||||
msgid "Install Reason"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:412
|
||||
msgid "Signatures"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:416
|
||||
msgid "Backup files"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:597
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"{pkgname} has {number} uninstalled optional deps.\n"
|
||||
"Please choose those you would like to install:"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:660
|
||||
msgid "Deselect"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:665
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:671
|
||||
msgid "Reinstall"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:682
|
||||
msgid "Install optional deps"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:687
|
||||
msgid "Mark as explicitly installed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:691
|
||||
msgid "Install"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:702
|
||||
msgid "Install with optional deps"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:1009 pamac-updater.py:214 pamac-install.py:160
|
||||
msgid "Pamac is already running"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:44 pamac-updater.py:59 pamac-tray.py:40
|
||||
msgid "Your system is up-to-date"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:74 pamac/transaction.py:787
|
||||
msgid "Total download size:"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:76 pamac-tray.py:38
|
||||
msgid "1 available update"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:78 pamac-tray.py:37
|
||||
#, python-brace-format
|
||||
msgid "{number} available updates"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-tray.py:50 pamac-tray.py:126 pamac-tray.py:148 gui/updater.ui:24
|
||||
msgid "Update Manager"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-tray.py:54 gui/manager.ui:324
|
||||
msgid "Package Manager"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-tray.py:58
|
||||
msgid "Quit"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-install.py:66
|
||||
msgid ""
|
||||
"Some updates are available.\n"
|
||||
"Please update your system first"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-install.py:72 pamac/transaction.py:406 pamac/transaction.py:799
|
||||
msgid "Preparing"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:94 gui/dialogs.ui:369
|
||||
msgid "How often to check for updates, value in hours"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:192
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"{pkgname} is provided by {number} packages.\n"
|
||||
"Please choose those you would like to install:"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:257
|
||||
msgid "Refreshing"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:341 pamac/transaction.py:380
|
||||
#, python-brace-format
|
||||
msgid "{pkgname} depends on {dependname} but it is not installable"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:384
|
||||
#, python-brace-format
|
||||
msgid "Failed to get {pkgname} archive from AUR"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:552 pamac/transaction.py:558
|
||||
msgid "Build process failed."
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:644
|
||||
#, python-brace-format
|
||||
msgid "Building {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:685
|
||||
msgid "Checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:735
|
||||
msgid "Transaction Summary"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:743
|
||||
msgid "To downgrade"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:751
|
||||
msgid "To build"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:765
|
||||
msgid "To reinstall"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:774
|
||||
msgid "To update"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/common.py:30
|
||||
#, python-format
|
||||
msgid "%.1f KiB"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/common.py:33
|
||||
#, python-format
|
||||
msgid "%.2f MiB"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:8
|
||||
msgid "About Pamac"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:13
|
||||
msgid "Copyright © 2013 Guillaume Benoit"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:14
|
||||
msgid "A gtk3 frontend for pyalpm"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:44
|
||||
msgid "Pamac History"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:160
|
||||
msgid "View History"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:170 gui/manager.ui:212
|
||||
msgid "Install local packages"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:344
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:362
|
||||
msgid "Apply changes"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:380
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:453
|
||||
msgid "Search in AUR"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:511
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:604 gui/manager.ui:696
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:651
|
||||
msgid "Repos"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:709
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:722
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:735
|
||||
msgid "Repo"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:748
|
||||
msgid "Size"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:850
|
||||
msgid "Infos"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:914
|
||||
msgid "Deps"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:983
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:1012
|
||||
msgid "Files"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:70
|
||||
msgid "Progress"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:162
|
||||
msgid "details"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:292
|
||||
msgid "Pamac Preferences"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:316
|
||||
msgid "Enable AUR support"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:320
|
||||
msgid "Allow Pamac to search and install packages from AUR"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:333
|
||||
msgid "Remove unrequired dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:337
|
||||
msgid ""
|
||||
"When removing a package, also remove those dependencies that are not "
|
||||
"required by other packages"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:396
|
||||
msgid "Options"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:465
|
||||
msgid "Choose"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:579
|
||||
msgid "Summary"
|
||||
msgstr ""
|
1146
po/en_GB.po
554
po/eu.po
@ -1,554 +0,0 @@
|
||||
# Translation of Pamac.
|
||||
# Copyright (C) 2007-2012 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the Pamac package.
|
||||
# Guillaume Benoit <guillaume@manjaro.org>, 2013-2014.
|
||||
#
|
||||
# Translators:
|
||||
# tarteka <semosa@gmail.com>, 2014
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: manjaro-pamac\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-03-30 15:09+0100\n"
|
||||
"PO-Revision-Date: 2014-03-05 22:14+0000\n"
|
||||
"Last-Translator: manjarolinux <philm@manjaro.org>\n"
|
||||
"Language-Team: Basque (http://www.transifex.com/projects/p/manjaro-pamac/language/eu/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: eu\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: data/polkit/org.manjaro.pamac.policy:10
|
||||
msgid "Authentication is required"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:162
|
||||
msgid "Checking dependencies"
|
||||
msgstr "Mendekotasunak egiaztatzen"
|
||||
|
||||
#: pamac-daemon.py:170
|
||||
msgid "Checking file conflicts"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:176
|
||||
msgid "Resolving dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:184
|
||||
msgid "Checking inter conflicts"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:192
|
||||
#, python-brace-format
|
||||
msgid "Installing {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:200
|
||||
#, python-brace-format
|
||||
msgid "Removing {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:208
|
||||
#, python-brace-format
|
||||
msgid "Upgrading {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:216
|
||||
#, python-brace-format
|
||||
msgid "Downgrading {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:224
|
||||
#, python-brace-format
|
||||
msgid "Reinstalling {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:232
|
||||
msgid "Checking integrity"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:239
|
||||
msgid "Loading packages files"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:245
|
||||
msgid "Checking delta integrity"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:251
|
||||
msgid "Applying deltas"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:257
|
||||
msgid "Generating {} with {}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:261
|
||||
msgid "Generation succeeded!"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:264
|
||||
msgid "Generation failed."
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:267
|
||||
#, python-brace-format
|
||||
msgid "Configuring {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:272
|
||||
msgid "Downloading"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:276
|
||||
msgid "Checking available disk space"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:286
|
||||
msgid "Checking keyring"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:292
|
||||
msgid "Downloading required keys"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:311
|
||||
#, python-brace-format
|
||||
msgid "{pkgname1} will be replaced by {pkgname2}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:314
|
||||
#, python-brace-format
|
||||
msgid "{pkgname1} conflicts with {pkgname2}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:339
|
||||
msgid "Error: "
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:345
|
||||
msgid "Warning: "
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:359
|
||||
#, python-brace-format
|
||||
msgid "Refreshing {repo}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:363 pamac/transaction.py:608
|
||||
#, python-brace-format
|
||||
msgid "Downloading {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:427 pamac-daemon.py:439 pamac-daemon.py:762
|
||||
#: pamac-daemon.py:770 pamac-daemon.py:793 pamac-daemon.py:827
|
||||
msgid "Authentication failed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:572 pamac-install.py:127
|
||||
#, python-brace-format
|
||||
msgid "{pkgname} is not a valid path or package name"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:685
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"The transaction cannot be performed because it needs to remove {pkgname1} "
|
||||
"which is a locked package"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:695 pamac/transaction.py:449
|
||||
msgid "Nothing to do"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:757
|
||||
msgid "Transaction successfully finished"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:103 pamac-manager.py:134 pamac-manager.py:135
|
||||
#: pamac-manager.py:150 pamac-manager.py:159 pamac-manager.py:180
|
||||
#: pamac-manager.py:305 pamac-manager.py:657 pamac-manager.py:715
|
||||
#: pamac-manager.py:785
|
||||
msgid "No package found"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:204 pamac-manager.py:266
|
||||
msgid "local"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:249 pamac-manager.py:371
|
||||
msgid "Installed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:252
|
||||
msgid "Uninstalled"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:255
|
||||
msgid "Orphans"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:227 pamac/transaction.py:757
|
||||
msgid "To install"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:238 pamac/transaction.py:737
|
||||
msgid "To remove"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:361
|
||||
msgid "Licenses"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:366
|
||||
msgid "Depends On"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:374
|
||||
msgid "Optional Deps"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:377
|
||||
msgid "Required By"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:379
|
||||
msgid "Provides"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:381
|
||||
msgid "Replaces"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:383
|
||||
msgid "Conflicts With"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:388
|
||||
msgid "Repository"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:390 gui/manager.ui:557
|
||||
msgid "Groups"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:392
|
||||
msgid "Compressed Size"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:393
|
||||
msgid "Download Size"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:395
|
||||
msgid "Installed Size"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:396
|
||||
msgid "Packager"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:397
|
||||
msgid "Architecture"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:400
|
||||
msgid "Install Date"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:402
|
||||
msgid "Explicitly installed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:404
|
||||
msgid "Installed as a dependency for another package"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:406
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:407
|
||||
msgid "Install Reason"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:412
|
||||
msgid "Signatures"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:416
|
||||
msgid "Backup files"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:597
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"{pkgname} has {number} uninstalled optional deps.\n"
|
||||
"Please choose those you would like to install:"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:660
|
||||
msgid "Deselect"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:665
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:671
|
||||
msgid "Reinstall"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:682
|
||||
msgid "Install optional deps"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:687
|
||||
msgid "Mark as explicitly installed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:691
|
||||
msgid "Install"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:702
|
||||
msgid "Install with optional deps"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:1009 pamac-updater.py:214 pamac-install.py:160
|
||||
msgid "Pamac is already running"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:44 pamac-updater.py:59 pamac-tray.py:40
|
||||
msgid "Your system is up-to-date"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:74 pamac/transaction.py:787
|
||||
msgid "Total download size:"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:76 pamac-tray.py:38
|
||||
msgid "1 available update"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:78 pamac-tray.py:37
|
||||
#, python-brace-format
|
||||
msgid "{number} available updates"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-tray.py:50 pamac-tray.py:126 pamac-tray.py:148 gui/updater.ui:24
|
||||
msgid "Update Manager"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-tray.py:54 gui/manager.ui:324
|
||||
msgid "Package Manager"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-tray.py:58
|
||||
msgid "Quit"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-install.py:66
|
||||
msgid ""
|
||||
"Some updates are available.\n"
|
||||
"Please update your system first"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-install.py:72 pamac/transaction.py:406 pamac/transaction.py:799
|
||||
msgid "Preparing"
|
||||
msgstr "Prestatzen"
|
||||
|
||||
#: pamac/transaction.py:94 gui/dialogs.ui:369
|
||||
msgid "How often to check for updates, value in hours"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:192
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"{pkgname} is provided by {number} packages.\n"
|
||||
"Please choose those you would like to install:"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:257
|
||||
msgid "Refreshing"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:341 pamac/transaction.py:380
|
||||
#, python-brace-format
|
||||
msgid "{pkgname} depends on {dependname} but it is not installable"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:384
|
||||
#, python-brace-format
|
||||
msgid "Failed to get {pkgname} archive from AUR"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:552 pamac/transaction.py:558
|
||||
msgid "Build process failed."
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:644
|
||||
#, python-brace-format
|
||||
msgid "Building {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:685
|
||||
msgid "Checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:735
|
||||
msgid "Transaction Summary"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:743
|
||||
msgid "To downgrade"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:751
|
||||
msgid "To build"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:765
|
||||
msgid "To reinstall"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:774
|
||||
msgid "To update"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/common.py:30
|
||||
#, python-format
|
||||
msgid "%.1f KiB"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/common.py:33
|
||||
#, python-format
|
||||
msgid "%.2f MiB"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:8
|
||||
msgid "About Pamac"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:13
|
||||
msgid "Copyright © 2013 Guillaume Benoit"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:14
|
||||
msgid "A gtk3 frontend for pyalpm"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:44
|
||||
msgid "Pamac History"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:160
|
||||
msgid "View History"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:170 gui/manager.ui:212
|
||||
msgid "Install local packages"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:344
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:362
|
||||
msgid "Apply changes"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:380
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:453
|
||||
msgid "Search in AUR"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:511
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:604 gui/manager.ui:696
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:651
|
||||
msgid "Repos"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:709
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:722
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:735
|
||||
msgid "Repo"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:748
|
||||
msgid "Size"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:850
|
||||
msgid "Infos"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:914
|
||||
msgid "Deps"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:983
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:1012
|
||||
msgid "Files"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:70
|
||||
msgid "Progress"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:162
|
||||
msgid "details"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:292
|
||||
msgid "Pamac Preferences"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:316
|
||||
msgid "Enable AUR support"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:320
|
||||
msgid "Allow Pamac to search and install packages from AUR"
|
||||
msgstr "Pamac AURtik paketeak bilatzeko eta instalatzeko baimendu"
|
||||
|
||||
#: gui/dialogs.ui:333
|
||||
msgid "Remove unrequired dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:337
|
||||
msgid ""
|
||||
"When removing a package, also remove those dependencies that are not "
|
||||
"required by other packages"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:396
|
||||
msgid "Options"
|
||||
msgstr "Aukerak"
|
||||
|
||||
#: gui/dialogs.ui:465
|
||||
msgid "Choose"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:579
|
||||
msgid "Summary"
|
||||
msgstr ""
|
1123
po/fa-IR.po
26
po/files_to_translate
Normal file
@ -0,0 +1,26 @@
|
||||
../resources/choose_provider_dialog.ui
|
||||
../resources/packages_chooser_dialog.ui
|
||||
../resources/progress_dialog.ui
|
||||
../resources/history_dialog.ui
|
||||
../resources/transaction_info_dialog.ui
|
||||
../resources/transaction_sum_dialog.ui
|
||||
../resources/manager_window.ui
|
||||
../resources/updater_window.ui
|
||||
../resources/preferences_dialog.ui
|
||||
|
||||
../src/packages_chooser_dialog.vala
|
||||
../src/transaction_info_dialog.vala
|
||||
../src/history_dialog.vala
|
||||
../src/transaction_sum_dialog.vala
|
||||
../src/daemon.vala
|
||||
../src/transaction.vala
|
||||
../src/installer.vala
|
||||
../src/tray.vala
|
||||
../src/manager.vala
|
||||
../src/preferences_dialog.vala
|
||||
../src/updater.vala
|
||||
../src/choose_provider_dialog.vala
|
||||
../src/manager_window.vala
|
||||
../src/progress_dialog.vala
|
||||
../src/updater_window.vala
|
||||
../src/common.vala
|
553
po/ka.po
@ -1,553 +0,0 @@
|
||||
# Translation of Pamac.
|
||||
# Copyright (C) 2007-2012 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the Pamac package.
|
||||
# Guillaume Benoit <guillaume@manjaro.org>, 2013-2014.
|
||||
#
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: manjaro-pamac\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-03-30 15:09+0100\n"
|
||||
"PO-Revision-Date: 2014-03-07 23:43+0000\n"
|
||||
"Last-Translator: manjarolinux <philm@manjaro.org>\n"
|
||||
"Language-Team: Georgian (http://www.transifex.com/projects/p/manjaro-pamac/language/ka/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: ka\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#: data/polkit/org.manjaro.pamac.policy:10
|
||||
msgid "Authentication is required"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:162
|
||||
msgid "Checking dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:170
|
||||
msgid "Checking file conflicts"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:176
|
||||
msgid "Resolving dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:184
|
||||
msgid "Checking inter conflicts"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:192
|
||||
#, python-brace-format
|
||||
msgid "Installing {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:200
|
||||
#, python-brace-format
|
||||
msgid "Removing {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:208
|
||||
#, python-brace-format
|
||||
msgid "Upgrading {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:216
|
||||
#, python-brace-format
|
||||
msgid "Downgrading {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:224
|
||||
#, python-brace-format
|
||||
msgid "Reinstalling {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:232
|
||||
msgid "Checking integrity"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:239
|
||||
msgid "Loading packages files"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:245
|
||||
msgid "Checking delta integrity"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:251
|
||||
msgid "Applying deltas"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:257
|
||||
msgid "Generating {} with {}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:261
|
||||
msgid "Generation succeeded!"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:264
|
||||
msgid "Generation failed."
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:267
|
||||
#, python-brace-format
|
||||
msgid "Configuring {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:272
|
||||
msgid "Downloading"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:276
|
||||
msgid "Checking available disk space"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:286
|
||||
msgid "Checking keyring"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:292
|
||||
msgid "Downloading required keys"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:311
|
||||
#, python-brace-format
|
||||
msgid "{pkgname1} will be replaced by {pkgname2}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:314
|
||||
#, python-brace-format
|
||||
msgid "{pkgname1} conflicts with {pkgname2}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:339
|
||||
msgid "Error: "
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:345
|
||||
msgid "Warning: "
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:359
|
||||
#, python-brace-format
|
||||
msgid "Refreshing {repo}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:363 pamac/transaction.py:608
|
||||
#, python-brace-format
|
||||
msgid "Downloading {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:427 pamac-daemon.py:439 pamac-daemon.py:762
|
||||
#: pamac-daemon.py:770 pamac-daemon.py:793 pamac-daemon.py:827
|
||||
msgid "Authentication failed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:572 pamac-install.py:127
|
||||
#, python-brace-format
|
||||
msgid "{pkgname} is not a valid path or package name"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:685
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"The transaction cannot be performed because it needs to remove {pkgname1} "
|
||||
"which is a locked package"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:695 pamac/transaction.py:449
|
||||
msgid "Nothing to do"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-daemon.py:757
|
||||
msgid "Transaction successfully finished"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:103 pamac-manager.py:134 pamac-manager.py:135
|
||||
#: pamac-manager.py:150 pamac-manager.py:159 pamac-manager.py:180
|
||||
#: pamac-manager.py:305 pamac-manager.py:657 pamac-manager.py:715
|
||||
#: pamac-manager.py:785
|
||||
msgid "No package found"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:204 pamac-manager.py:266
|
||||
msgid "local"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:249 pamac-manager.py:371
|
||||
msgid "Installed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:252
|
||||
msgid "Uninstalled"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:255
|
||||
msgid "Orphans"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:227 pamac/transaction.py:757
|
||||
msgid "To install"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:208 pamac-manager.py:238 pamac/transaction.py:737
|
||||
msgid "To remove"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:361
|
||||
msgid "Licenses"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:366
|
||||
msgid "Depends On"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:374
|
||||
msgid "Optional Deps"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:377
|
||||
msgid "Required By"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:379
|
||||
msgid "Provides"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:381
|
||||
msgid "Replaces"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:383
|
||||
msgid "Conflicts With"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:388
|
||||
msgid "Repository"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:390 gui/manager.ui:557
|
||||
msgid "Groups"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:392
|
||||
msgid "Compressed Size"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:393
|
||||
msgid "Download Size"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:395
|
||||
msgid "Installed Size"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:396
|
||||
msgid "Packager"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:397
|
||||
msgid "Architecture"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:400
|
||||
msgid "Install Date"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:402
|
||||
msgid "Explicitly installed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:404
|
||||
msgid "Installed as a dependency for another package"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:406
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:407
|
||||
msgid "Install Reason"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:412
|
||||
msgid "Signatures"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:416
|
||||
msgid "Backup files"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:597
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"{pkgname} has {number} uninstalled optional deps.\n"
|
||||
"Please choose those you would like to install:"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:660
|
||||
msgid "Deselect"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:665
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:671
|
||||
msgid "Reinstall"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:682
|
||||
msgid "Install optional deps"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:687
|
||||
msgid "Mark as explicitly installed"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:691
|
||||
msgid "Install"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:702
|
||||
msgid "Install with optional deps"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-manager.py:1009 pamac-updater.py:214 pamac-install.py:160
|
||||
msgid "Pamac is already running"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:44 pamac-updater.py:59 pamac-tray.py:40
|
||||
msgid "Your system is up-to-date"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:74 pamac/transaction.py:787
|
||||
msgid "Total download size:"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:76 pamac-tray.py:38
|
||||
msgid "1 available update"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-updater.py:78 pamac-tray.py:37
|
||||
#, python-brace-format
|
||||
msgid "{number} available updates"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-tray.py:50 pamac-tray.py:126 pamac-tray.py:148 gui/updater.ui:24
|
||||
msgid "Update Manager"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-tray.py:54 gui/manager.ui:324
|
||||
msgid "Package Manager"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-tray.py:58
|
||||
msgid "Quit"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-install.py:66
|
||||
msgid ""
|
||||
"Some updates are available.\n"
|
||||
"Please update your system first"
|
||||
msgstr ""
|
||||
|
||||
#: pamac-install.py:72 pamac/transaction.py:406 pamac/transaction.py:799
|
||||
msgid "Preparing"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:94 gui/dialogs.ui:369
|
||||
msgid "How often to check for updates, value in hours"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:192
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"{pkgname} is provided by {number} packages.\n"
|
||||
"Please choose those you would like to install:"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:257
|
||||
msgid "Refreshing"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:341 pamac/transaction.py:380
|
||||
#, python-brace-format
|
||||
msgid "{pkgname} depends on {dependname} but it is not installable"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:384
|
||||
#, python-brace-format
|
||||
msgid "Failed to get {pkgname} archive from AUR"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:552 pamac/transaction.py:558
|
||||
msgid "Build process failed."
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:644
|
||||
#, python-brace-format
|
||||
msgid "Building {pkgname}"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:685
|
||||
msgid "Checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:735
|
||||
msgid "Transaction Summary"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:743
|
||||
msgid "To downgrade"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:751
|
||||
msgid "To build"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:765
|
||||
msgid "To reinstall"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/transaction.py:774
|
||||
msgid "To update"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/common.py:30
|
||||
#, python-format
|
||||
msgid "%.1f KiB"
|
||||
msgstr ""
|
||||
|
||||
#: pamac/common.py:33
|
||||
#, python-format
|
||||
msgid "%.2f MiB"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:8
|
||||
msgid "About Pamac"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:13
|
||||
msgid "Copyright © 2013 Guillaume Benoit"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:14
|
||||
msgid "A gtk3 frontend for pyalpm"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:44
|
||||
msgid "Pamac History"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:160
|
||||
msgid "View History"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:170 gui/manager.ui:212
|
||||
msgid "Install local packages"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:344
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:362
|
||||
msgid "Apply changes"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:380
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:453
|
||||
msgid "Search in AUR"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:511
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:604 gui/manager.ui:696
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:651
|
||||
msgid "Repos"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:709
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:722
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:735
|
||||
msgid "Repo"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:748
|
||||
msgid "Size"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:850
|
||||
msgid "Infos"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:914
|
||||
msgid "Deps"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:983
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
#: gui/manager.ui:1012
|
||||
msgid "Files"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:70
|
||||
msgid "Progress"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:162
|
||||
msgid "details"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:292
|
||||
msgid "Pamac Preferences"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:316
|
||||
msgid "Enable AUR support"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:320
|
||||
msgid "Allow Pamac to search and install packages from AUR"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:333
|
||||
msgid "Remove unrequired dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:337
|
||||
msgid ""
|
||||
"When removing a package, also remove those dependencies that are not "
|
||||
"required by other packages"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:396
|
||||
msgid "Options"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:465
|
||||
msgid "Choose"
|
||||
msgstr ""
|
||||
|
||||
#: gui/dialogs.ui:579
|
||||
msgid "Summary"
|
||||
msgstr ""
|
590
po/pamac.pot
Normal file
@ -0,0 +1,590 @@
|
||||
# Translation of Pamac.
|
||||
# Copyright (C) 2007-2012 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the Pamac package.
|
||||
# Guillaume Benoit <guillaume@manjaro.org>, 2013-2014.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: pamac 2.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-10-23 15:09+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
||||
|
||||
#: data/polkit/org.manjaro.pamac.policy:10
|
||||
msgid "Authentication is required"
|
||||
msgstr ""
|
||||
|
||||
#: resources/choose_provider_dialog.ui:6
|
||||
msgid "Choose a Provider"
|
||||
msgstr ""
|
||||
|
||||
#: resources/choose_provider_dialog.ui:22
|
||||
#: resources/transaction_sum_dialog.ui:34 resources/preferences_dialog.ui:22
|
||||
msgid "_OK"
|
||||
msgstr ""
|
||||
|
||||
#: resources/packages_chooser_dialog.ui:6 resources/manager_window.ui:765
|
||||
msgid "Install local packages"
|
||||
msgstr ""
|
||||
|
||||
#: resources/packages_chooser_dialog.ui:28 resources/progress_dialog.ui:28
|
||||
#: resources/transaction_sum_dialog.ui:20
|
||||
msgid "_Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: resources/packages_chooser_dialog.ui:40
|
||||
msgid "_Open"
|
||||
msgstr ""
|
||||
|
||||
#: resources/progress_dialog.ui:6
|
||||
msgid "Progress"
|
||||
msgstr ""
|
||||
|
||||
#: resources/progress_dialog.ui:41 resources/history_dialog.ui:22
|
||||
#: resources/transaction_info_dialog.ui:20 resources/updater_window.ui:153
|
||||
#: resources/preferences_dialog.ui:36
|
||||
msgid "_Close"
|
||||
msgstr ""
|
||||
|
||||
#: resources/progress_dialog.ui:92 resources/transaction_info_dialog.ui:79
|
||||
#: resources/manager_window.ui:695
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
#: resources/history_dialog.ui:6
|
||||
msgid "Pamac History"
|
||||
msgstr ""
|
||||
|
||||
#: resources/transaction_sum_dialog.ui:5 src/transaction.vala:387
|
||||
msgid "Transaction Summary"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:7 src/tray.vala:74
|
||||
msgid "Package Manager"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:25
|
||||
msgid "Refresh databases"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:48
|
||||
msgid "Apply changes"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:71
|
||||
msgid "Cancel all planned changes"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:156 resources/manager_window.ui:168
|
||||
msgid "Search in AUR"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:221
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:266 src/manager_window.vala:397
|
||||
msgid "Groups"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:312 resources/manager_window.ui:406
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:358
|
||||
msgid "Repositories"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:421
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:436
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:451 src/manager_window.vala:389
|
||||
msgid "Repository"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:466
|
||||
msgid "Size"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:570
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:630
|
||||
msgid "Dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:728
|
||||
msgid "Files"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:757
|
||||
msgid "View History"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:773 resources/updater_window.ui:101
|
||||
msgid "_Preferences"
|
||||
msgstr ""
|
||||
|
||||
#: resources/manager_window.ui:782
|
||||
msgid "_About"
|
||||
msgstr ""
|
||||
|
||||
#: resources/updater_window.ui:6 src/tray.vala:71 src/tray.vala:157
|
||||
#: src/tray.vala:229
|
||||
msgid "Update Manager"
|
||||
msgstr ""
|
||||
|
||||
#: resources/updater_window.ui:126
|
||||
msgid "_Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: resources/updater_window.ui:139
|
||||
msgid "_Apply"
|
||||
msgstr ""
|
||||
|
||||
#: resources/preferences_dialog.ui:6
|
||||
msgid "Preferences"
|
||||
msgstr ""
|
||||
|
||||
#: resources/preferences_dialog.ui:71
|
||||
msgid "Enable AUR support"
|
||||
msgstr ""
|
||||
|
||||
#: resources/preferences_dialog.ui:84
|
||||
msgid "Allow Pamac to search and install packages from AUR"
|
||||
msgstr ""
|
||||
|
||||
#: resources/preferences_dialog.ui:102
|
||||
msgid "Remove unrequired dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: resources/preferences_dialog.ui:115
|
||||
msgid ""
|
||||
"When removing a package, also remove its dependencies that are not required "
|
||||
"by other packages"
|
||||
msgstr ""
|
||||
|
||||
#: resources/preferences_dialog.ui:149 src/preferences_dialog.vala:37
|
||||
msgid "How often to check for updates, value in hours"
|
||||
msgstr ""
|
||||
|
||||
#: resources/preferences_dialog.ui:173
|
||||
msgid "Options"
|
||||
msgstr ""
|
||||
|
||||
#: src/packages_chooser_dialog.vala:32
|
||||
msgid "Alpm Package"
|
||||
msgstr ""
|
||||
|
||||
#: src/daemon.vala:64
|
||||
msgid "Failed to initialize alpm library"
|
||||
msgstr ""
|
||||
|
||||
#: src/daemon.vala:135 src/daemon.vala:141
|
||||
msgid "Failed to synchronize any databases"
|
||||
msgstr ""
|
||||
|
||||
#: src/daemon.vala:184
|
||||
msgid "Failed to init transaction"
|
||||
msgstr ""
|
||||
|
||||
#: src/daemon.vala:196 src/daemon.vala:214 src/daemon.vala:226
|
||||
#: src/daemon.vala:240 src/daemon.vala:252 src/daemon.vala:269
|
||||
#: src/daemon.vala:276 src/daemon.vala:290 src/daemon.vala:340
|
||||
msgid "Failed to prepare transaction"
|
||||
msgstr ""
|
||||
|
||||
#: src/daemon.vala:215 src/daemon.vala:270
|
||||
#, c-format
|
||||
msgid "target not found: %s"
|
||||
msgstr ""
|
||||
|
||||
#: src/daemon.vala:298
|
||||
#, c-format
|
||||
msgid "package %s does not have a valid architecture"
|
||||
msgstr ""
|
||||
|
||||
#: src/daemon.vala:307
|
||||
#, c-format
|
||||
msgid "%s: requires %s"
|
||||
msgstr ""
|
||||
|
||||
#: src/daemon.vala:315
|
||||
#, c-format
|
||||
msgid "%s and %s are in conflict"
|
||||
msgstr ""
|
||||
|
||||
#: src/daemon.vala:334
|
||||
#, c-format
|
||||
msgid "%s needs to be removed but it is a locked package"
|
||||
msgstr ""
|
||||
|
||||
#: src/daemon.vala:403
|
||||
msgid "Failed to commit transaction"
|
||||
msgstr ""
|
||||
|
||||
#: src/daemon.vala:417
|
||||
#, c-format
|
||||
msgid "%s exists in both %s and %s"
|
||||
msgstr ""
|
||||
|
||||
#: src/daemon.vala:420
|
||||
#, c-format
|
||||
msgid "%s: %s already exists in filesystem"
|
||||
msgstr ""
|
||||
|
||||
#: src/daemon.vala:433
|
||||
#, c-format
|
||||
msgid "%s is invalid or corrupted"
|
||||
msgstr ""
|
||||
|
||||
#: src/daemon.vala:465
|
||||
msgid "Authentication failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:177
|
||||
msgid "Synchronizing package databases"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:231
|
||||
msgid "Starting full system upgrade"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:286
|
||||
msgid "Preparing"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:359
|
||||
#, c-format
|
||||
msgid "Choose a provider for %s"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:417 src/manager_window.vala:245
|
||||
#: src/manager_window.vala:974
|
||||
msgid "To remove"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:430
|
||||
msgid "To downgrade"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:443
|
||||
msgid "To build"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:456 src/manager_window.vala:244
|
||||
#: src/manager_window.vala:963
|
||||
msgid "To install"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:469
|
||||
msgid "To reinstall"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:483
|
||||
msgid "To update"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:496 src/updater_window.vala:182
|
||||
msgid "Total download size"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:513
|
||||
msgid "Building packages"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:570
|
||||
msgid "Checking dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:575
|
||||
msgid "Checking file conflicts"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:580
|
||||
msgid "Resolving dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:585
|
||||
msgid "Checking inter-conflicts"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:592 src/transaction.vala:594
|
||||
#, c-format
|
||||
msgid "Installing %s"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:600 src/transaction.vala:602
|
||||
#, c-format
|
||||
msgid "Reinstalling %s"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:608 src/transaction.vala:610
|
||||
#, c-format
|
||||
msgid "Removing %s"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:616 src/transaction.vala:618
|
||||
#, c-format
|
||||
msgid "Upgrading %s"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:624 src/transaction.vala:626
|
||||
#, c-format
|
||||
msgid "Downgrading %s"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:630
|
||||
msgid "Checking integrity"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:636
|
||||
msgid "Checking keyring"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:641
|
||||
msgid "Downloading required keys"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:646
|
||||
msgid "Loading packages files"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:651
|
||||
msgid "Checking delta integrity"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:656
|
||||
msgid "Applying deltas"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:661
|
||||
#, c-format
|
||||
msgid "Generating %s with %s"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:666
|
||||
msgid "Generation succeeded"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:671
|
||||
msgid "Generation failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:676
|
||||
#, c-format
|
||||
msgid "Configuring %s"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:682
|
||||
msgid "Downloading"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:687
|
||||
msgid "Checking available disk space"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:692
|
||||
#, c-format
|
||||
msgid "%s optionally requires %s"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:695
|
||||
#, c-format
|
||||
msgid "Database file for %s does not exist"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:747
|
||||
#, c-format
|
||||
msgid "Refreshing %s"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:749
|
||||
#, c-format
|
||||
msgid "Downloading %s"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:797 src/transaction.vala:799 src/transaction.vala:816
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:804 src/transaction.vala:806 src/transaction.vala:837
|
||||
#: src/installer.vala:41 src/manager.vala:41 src/updater.vala:41
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:904 src/transaction.vala:920
|
||||
#: src/progress_dialog.vala:55
|
||||
msgid "Transaction cancelled"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:934
|
||||
msgid "Nothing to do"
|
||||
msgstr ""
|
||||
|
||||
#: src/transaction.vala:956 src/transaction.vala:972
|
||||
msgid "Transaction successfully finished"
|
||||
msgstr ""
|
||||
|
||||
#: src/installer.vala:43 src/manager.vala:43 src/updater.vala:43
|
||||
msgid "Pamac is already running"
|
||||
msgstr ""
|
||||
|
||||
#: src/tray.vala:25 src/updater_window.vala:175
|
||||
msgid "Your system is up-to-date"
|
||||
msgstr ""
|
||||
|
||||
#: src/tray.vala:77
|
||||
msgid "_Quit"
|
||||
msgstr ""
|
||||
|
||||
#: src/tray.vala:136 src/updater_window.vala:178
|
||||
#, c-format
|
||||
msgid "%u available update"
|
||||
msgid_plural "%u available updates"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: src/tray.vala:158
|
||||
msgid "Show available updates"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:132
|
||||
msgid "Deselect"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:135
|
||||
msgid "Install"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:138
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:143
|
||||
msgid "Reinstall"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:146
|
||||
msgid "Install optional dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:149
|
||||
msgid "Mark as explicitly installed"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:225 src/manager_window.vala:1016
|
||||
msgid "local"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:241 src/manager_window.vala:311
|
||||
#: src/manager_window.vala:323 src/manager_window.vala:980
|
||||
msgid "Installed"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:243 src/manager_window.vala:990
|
||||
msgid "Orphans"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:271
|
||||
msgid "Licenses"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:293
|
||||
msgid "Depends On"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:313
|
||||
msgid "Optional Dependencies"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:333
|
||||
msgid "Required By"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:347
|
||||
msgid "Provides"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:360
|
||||
msgid "Replaces"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:373
|
||||
msgid "Conflicts With"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:407
|
||||
msgid "Packager"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:413
|
||||
msgid "Install Date"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:417
|
||||
msgid "Explicitly installed"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:419
|
||||
msgid "Installed as a dependency for another package"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:421
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:423
|
||||
msgid "Install Reason"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:428
|
||||
msgid "Signatures"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:436
|
||||
msgid "Backup files"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:559 src/manager_window.vala:700
|
||||
msgid "No package found"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:653
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s has %u uninstalled optional dependencies.\n"
|
||||
"Choose those you would like to install:"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:982
|
||||
msgid "Uninstalled"
|
||||
msgstr ""
|
||||
|
||||
#: src/manager_window.vala:1134
|
||||
msgid "A Gtk3 frontend for libalpm"
|
||||
msgstr ""
|
||||
|
||||
#: src/common.vala:48
|
||||
#, c-format
|
||||
msgid "%.0f KiB"
|
||||
msgstr ""
|
||||
|
||||
#: src/common.vala:51
|
||||
#, c-format
|
||||
msgid "%.2f MiB"
|
||||
msgstr ""
|
@ -3,11 +3,12 @@
|
||||
# This file is distributed under the same license as the Pamac package.
|
||||
# Guillaume Benoit <guillaume@manjaro.org>, 2013-2014.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: pamac 0.9\n"
|
||||
"Project-Id-Version: pamac 2.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-03-30 15:09+0100\n"
|
||||
"POT-Creation-Date: 2014-10-23 15:09+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -15,6 +16,7 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
||||
|
||||
#: data/polkit/org.manjaro.pamac.policy:10
|
||||
msgid "Authentication is required"
|
1157
po/pt_BR.po
1149
po/pt_PT.po
1156
po/sr@latin.po
5
po/update_po_files.sh
Executable file
@ -0,0 +1,5 @@
|
||||
#! /bin/sh
|
||||
|
||||
for i in `ls po | sed s'|.po||'` ; do
|
||||
msgmerge --update ./$i.po pamac.pot
|
||||
done
|
1032
po/ur-PK.po
1148
po/zh-CN.po
1145
po/zh_TW.po
45
resources/Makefile
Normal file
@ -0,0 +1,45 @@
|
||||
|
||||
MANAGER_GRESOURCE_FILE = pamac.manager.gresource.xml
|
||||
|
||||
MANAGER_RESOURCES_FILES = manager_window.ui \
|
||||
packages_chooser_dialog.ui \
|
||||
choose_dep_dialog.ui \
|
||||
history_dialog.ui \
|
||||
preferences_dialog.ui \
|
||||
progress_dialog.ui \
|
||||
choose_provider_dialog.ui \
|
||||
transaction_sum_dialog.ui \
|
||||
transaction_info_dialog.ui \
|
||||
package-available.png \
|
||||
package-install.png \
|
||||
package-installed-locked.png \
|
||||
package-installed-updated.png \
|
||||
package-reinstall.png \
|
||||
package-remove.png
|
||||
|
||||
UPDATER_GRESOURCE_FILE = pamac.updater.gresource.xml
|
||||
|
||||
UPDATER_RESOURCES_FILES = updater_window.ui \
|
||||
preferences_dialog.ui \
|
||||
progress_dialog.ui \
|
||||
choose_provider_dialog.ui \
|
||||
transaction_sum_dialog.ui \
|
||||
transaction_info_dialog.ui
|
||||
|
||||
INSTALLER_GRESOURCE_FILE = pamac.installer.gresource.xml
|
||||
|
||||
INSTALLER_RESOURCES_FILES = progress_dialog.ui \
|
||||
choose_provider_dialog.ui \
|
||||
transaction_sum_dialog.ui \
|
||||
transaction_info_dialog.ui
|
||||
|
||||
manager_resources.c: $(MANAGER_GRESOURCE_FILE) $(MANAGER_RESOURCES_FILES)
|
||||
glib-compile-resources $(MANAGER_GRESOURCE_FILE) --target=manager_resources.c --generate-source
|
||||
|
||||
updater_resources.c: $(UPDATER_GRESOURCE_FILE) $(UPDATER_RESOURCES_FILES)
|
||||
glib-compile-resources $(UPDATER_GRESOURCE_FILE) --target=updater_resources.c --generate-source
|
||||
|
||||
installer_resources.c: $(INSTALLER_GRESOURCE_FILE) $(INSTALLER_RESOURCES_FILES)
|
||||
glib-compile-resources $(INSTALLER_GRESOURCE_FILE) --target=installer_resources.c --generate-source
|
||||
|
||||
resources: manager_resources.c updater_resources.c installer_resources.c
|
109
resources/choose_dep_dialog.ui
Normal file
@ -0,0 +1,109 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.12"/>
|
||||
<template class="PamacChooseDependenciesDialog" parent="GtkDialog">
|
||||
<property name="border_width">6</property>
|
||||
<property name="title" translatable="yes">Choose Optional Dependencies</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="window_position">center-on-parent</property>
|
||||
<property name="icon_name">system-software-install</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkBox" id="dialog-vbox1">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">12</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkButtonBox" id="dialog-action_area1">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="valid_button">
|
||||
<property name="label" translatable="yes">_OK</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_focus">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="shadow_type">in</property>
|
||||
<property name="min_content_width">300</property>
|
||||
<property name="min_content_height">250</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="treeview">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="headers_visible">False</property>
|
||||
<property name="headers_clickable">False</property>
|
||||
<property name="enable_search">False</property>
|
||||
<property name="show_expanders">False</property>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection" id="treeview-selection5">
|
||||
<property name="mode">none</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="treeviewcolumn1">
|
||||
<property name="sizing">autosize</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererToggle" id="renderertoggle">
|
||||
<signal name="toggled" handler="on_renderertoggle_toggled" swapped="no"/>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="active">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderertext1"/>
|
||||
<attributes>
|
||||
<attribute name="text">1</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderertext2"/>
|
||||
<attributes>
|
||||
<attribute name="text">2</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-5">valid_button</action-widget>
|
||||
</action-widgets>
|
||||
</template>
|
||||
</interface>
|
79
resources/choose_provider_dialog.ui
Normal file
@ -0,0 +1,79 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.12"/>
|
||||
<template class="PamacChooseProviderDialog" parent="GtkDialog">
|
||||
<property name="border_width">6</property>
|
||||
<property name="title" translatable="yes">Choose a Provider</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="window_position">center-on-parent</property>
|
||||
<property name="icon_name">system-software-install</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkBox" id="dialog-vbox2">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">12</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkButtonBox" id="dialog-action_area2">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="valid_button">
|
||||
<property name="label" translatable="yes">_OK</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_focus">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="box4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="track_visited_links">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBoxText" id="comboboxtext">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-5">valid_button</action-widget>
|
||||
</action-widgets>
|
||||
</template>
|
||||
</interface>
|