From 80ea4ea70f95f0170083fff00ab4480fa62e2cd9 Mon Sep 17 00:00:00 2001 From: guinux <nuxgui@gmail.com> Date: Sat, 9 Sep 2017 10:23:59 +0200 Subject: [PATCH] add appstream support and redesign ui --- data/applications/pamac-manager.desktop | 3 +- data/applications/pamac-updater.desktop | 3 +- po/pamac.pot | 86 +- po/pot_head | 6 +- resources/choose_ignorepkgs_dialog.ui | 2 +- resources/choose_provider_dialog.ui | 2 +- resources/history_dialog.ui | 2 +- resources/manager_window.ui | 1011 ++++++----- resources/package-generic.png | Bin 0 -> 4206 bytes resources/pamac.manager.gresource.xml | 1 + resources/preferences_dialog.ui | 95 +- resources/progress_box.ui | 2 +- resources/progress_dialog.ui | 2 +- resources/transaction_sum_dialog.ui | 2 +- src/Makefile | 2 + src/manager.vala | 9 +- src/manager_window.vala | 1104 +++++++----- src/package.vala | 12 +- src/preferences_dialog.vala | 11 +- src/system_daemon.vala | 8 +- src/transaction.vala | 19 +- src/user_daemon.vala | 306 +++- vapi/appstream-glib.vapi | 2077 +++++++++++++++++++++++ 23 files changed, 3868 insertions(+), 897 deletions(-) create mode 100644 resources/package-generic.png create mode 100644 vapi/appstream-glib.vapi diff --git a/data/applications/pamac-manager.desktop b/data/applications/pamac-manager.desktop index 1df7512e..0d963aba 100644 --- a/data/applications/pamac-manager.desktop +++ b/data/applications/pamac-manager.desktop @@ -134,6 +134,5 @@ Icon=system-software-install Exec=pamac-manager Terminal=false Type=Application -Categories=GNOME;GTK;System; -#NotShowIn=KDE; +Categories=GNOME;GTK;System;Settings;X-XFCE-SettingsDialog;X-XFCE-SystemSettings; StartupNotify=true diff --git a/data/applications/pamac-updater.desktop b/data/applications/pamac-updater.desktop index 63cc633e..1740f9b2 100644 --- a/data/applications/pamac-updater.desktop +++ b/data/applications/pamac-updater.desktop @@ -130,6 +130,5 @@ Icon=system-software-update Exec=pamac-updater Terminal=false Type=Application -Categories=GNOME;GTK;System; -#NotShowIn=KDE +Categories=GNOME;GTK;System;Settings;X-XFCE-SettingsDialog;X-XFCE-SystemSettings; StartupNotify=true diff --git a/po/pamac.pot b/po/pamac.pot index 554843c2..d8345f05 100644 --- a/po/pamac.pot +++ b/po/pamac.pot @@ -1,13 +1,13 @@ # Translation of Pamac. -# Copyright (C) 2013-2016 Manjaro Developers <manjaro-dev@manjaro.org> +# Copyright (C) 2013-2017 Manjaro Developers <manjaro-dev@manjaro.org> # This file is distributed under the same license as the Pamac package. -# Guillaume Benoit <guillaume@manjaro.org>, 2013-2016. +# Guillaume Benoit <guillaume@manjaro.org>, 2013-2017. # msgid "" msgstr "" "Project-Id-Version: Pamac\n" "Report-Msgid-Bugs-To: guillaume@manjaro.org\n" -"POT-Creation-Date: 2016-04-24 08:44+0200\n" +"POT-Creation-Date: 2017-09-09 09:46+0200\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" @@ -170,6 +170,10 @@ msgstr "" msgid "To reinstall" msgstr "" +#: ../src/transaction.vala +msgid "To upgrade" +msgstr "" + #: ../src/transaction.vala ../src/manager_window.vala msgid "Total download size" msgstr "" @@ -333,7 +337,7 @@ msgid "Warning" msgstr "" #: ../src/transaction.vala ../resources/progress_dialog.ui -#: ../resources/history_dialog.ui +#: ../resources/history_dialog.ui ../resources/preferences_dialog.ui msgid "_Close" msgstr "" @@ -349,6 +353,10 @@ msgstr "" msgid "Pamac is already running" msgstr "" +#: ../src/installer.vala ../src/manager_window.vala +msgid "Waiting for another package manager to quit" +msgstr "" + #: ../src/tray.vala ../src/manager_window.vala msgid "Your system is up-to-date" msgstr "" @@ -373,6 +381,10 @@ msgstr[1] "" msgid "Details" msgstr "" +#: ../src/manager_window.vala +msgid "No package found" +msgstr "" + #: ../src/manager_window.vala msgid "Deselect" msgstr "" @@ -389,10 +401,6 @@ msgstr "" msgid "Remove" msgstr "" -#: ../src/manager_window.vala -msgid "Waiting for another package manager to quit" -msgstr "" - #: ../src/manager_window.vala #, c-format msgid "%u pending operation" @@ -400,7 +408,7 @@ msgid_plural "%u pending operations" msgstr[0] "" msgstr[1] "" -#: ../src/manager_window.vala +#: ../src/manager_window.vala ../resources/manager_window.ui msgid "Installed" msgstr "" @@ -413,7 +421,47 @@ msgid "Foreign" msgstr "" #: ../src/manager_window.vala -msgid "Pending" +msgid "Accessories" +msgstr "" + +#: ../src/manager_window.vala +msgid "Audio & Video" +msgstr "" + +#: ../src/manager_window.vala +msgid "Development" +msgstr "" + +#: ../src/manager_window.vala +msgid "Education" +msgstr "" + +#: ../src/manager_window.vala +msgid "Games" +msgstr "" + +#: ../src/manager_window.vala +msgid "Graphics" +msgstr "" + +#: ../src/manager_window.vala +msgid "Internet" +msgstr "" + +#: ../src/manager_window.vala +msgid "Office" +msgstr "" + +#: ../src/manager_window.vala +msgid "Science" +msgstr "" + +#: ../src/manager_window.vala +msgid "Settings" +msgstr "" + +#: ../src/manager_window.vala +msgid "System Tools" msgstr "" #: ../src/manager_window.vala @@ -594,7 +642,7 @@ msgstr "" msgid "View History" msgstr "" -#: ../resources/manager_window.ui +#: ../resources/manager_window.ui ../resources/preferences_dialog.ui msgid "Preferences" msgstr "" @@ -603,19 +651,27 @@ msgid "About" msgstr "" #: ../resources/manager_window.ui -msgid "Search" +msgid "Categories" msgstr "" #: ../resources/manager_window.ui -msgid "State" +msgid "Repositories" msgstr "" #: ../resources/manager_window.ui -msgid "Repositories" +msgid "Updates" msgstr "" #: ../resources/manager_window.ui -msgid "Updates" +msgid "Pending" +msgstr "" + +#: ../resources/manager_window.ui +msgid "Search" +msgstr "" + +#: ../resources/manager_window.ui +msgid "State" msgstr "" #: ../resources/manager_window.ui diff --git a/po/pot_head b/po/pot_head index 9ab3ae19..4a7812e0 100644 --- a/po/pot_head +++ b/po/pot_head @@ -1,13 +1,13 @@ # Translation of Pamac. -# Copyright (C) 2013-2016 Manjaro Developers <manjaro-dev@manjaro.org> +# Copyright (C) 2013-2017 Manjaro Developers <manjaro-dev@manjaro.org> # This file is distributed under the same license as the Pamac package. -# Guillaume Benoit <guillaume@manjaro.org>, 2013-2016. +# Guillaume Benoit <guillaume@manjaro.org>, 2013-2017. # msgid "" msgstr "" "Project-Id-Version: Pamac\n" "Report-Msgid-Bugs-To: guillaume@manjaro.org\n" -"POT-Creation-Date: 2016-04-24 08:44+0200\n" +"POT-Creation-Date: 2017-09-09 09:46+0200\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" diff --git a/resources/choose_ignorepkgs_dialog.ui b/resources/choose_ignorepkgs_dialog.ui index fb9ebfea..22c87615 100644 --- a/resources/choose_ignorepkgs_dialog.ui +++ b/resources/choose_ignorepkgs_dialog.ui @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- Generated with glade 3.20.0 --> <interface> - <requires lib="gtk+" version="3.12"/> + <requires lib="gtk+" version="3.20"/> <template class="PamacChooseIgnorepkgsDialog" parent="GtkDialog"> <property name="can_focus">False</property> <property name="border_width">3</property> diff --git a/resources/choose_provider_dialog.ui b/resources/choose_provider_dialog.ui index 4356fb56..f12e1f44 100644 --- a/resources/choose_provider_dialog.ui +++ b/resources/choose_provider_dialog.ui @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- Generated with glade 3.20.0 --> <interface> - <requires lib="gtk+" version="3.12"/> + <requires lib="gtk+" version="3.20"/> <template class="PamacChooseProviderDialog" parent="GtkDialog"> <property name="can_focus">False</property> <property name="border_width">3</property> diff --git a/resources/history_dialog.ui b/resources/history_dialog.ui index 67f4169e..8a1c3d8f 100644 --- a/resources/history_dialog.ui +++ b/resources/history_dialog.ui @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- Generated with glade 3.20.0 --> <interface> - <requires lib="gtk+" version="3.12"/> + <requires lib="gtk+" version="3.20"/> <template class="PamacHistoryDialog" parent="GtkDialog"> <property name="can_focus">False</property> <property name="border_width">3</property> diff --git a/resources/manager_window.ui b/resources/manager_window.ui index a3f294ae..8c38e5fa 100644 --- a/resources/manager_window.ui +++ b/resources/manager_window.ui @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- Generated with glade 3.20.0 --> <interface> - <requires lib="gtk+" version="3.16"/> + <requires lib="gtk+" version="3.20"/> <object class="GtkPopoverMenu" id="popovermenu"> <property name="can_focus">False</property> <child> @@ -15,7 +15,7 @@ <object class="GtkModelButton" id="refresh_button"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">True</property> + <property name="receives_default">False</property> <property name="text" translatable="yes">Refresh databases</property> <signal name="clicked" handler="on_refresh_button_clicked" swapped="no"/> </object> @@ -29,7 +29,7 @@ <object class="GtkModelButton" id="history_button"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">True</property> + <property name="receives_default">False</property> <property name="text" translatable="yes">View History</property> <signal name="clicked" handler="on_history_button_clicked" swapped="no"/> </object> @@ -43,7 +43,7 @@ <object class="GtkModelButton" id="local_button"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">True</property> + <property name="receives_default">False</property> <property name="text" translatable="yes">Install Local Packages</property> <signal name="clicked" handler="on_local_button_clicked" swapped="no"/> </object> @@ -57,7 +57,7 @@ <object class="GtkModelButton" id="preferences_button"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">True</property> + <property name="receives_default">False</property> <property name="text" translatable="yes">Preferences</property> <signal name="clicked" handler="on_preferences_button_clicked" swapped="no"/> </object> @@ -71,7 +71,7 @@ <object class="GtkModelButton" id="about_button"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">True</property> + <property name="receives_default">False</property> <property name="text" translatable="yes">About</property> <signal name="clicked" handler="on_about_button_clicked" swapped="no"/> </object> @@ -91,7 +91,8 @@ <template class="PamacManagerWindow" parent="GtkApplicationWindow"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="default_height">500</property> + <property name="default_width">1005</property> + <property name="default_height">600</property> <property name="icon_name">system-software-install</property> <property name="gravity">center</property> <property name="show_menubar">False</property> @@ -109,211 +110,161 @@ <object class="GtkBox" id="box3"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="margin_top">3</property> - <property name="spacing">3</property> <child> - <object class="GtkStack" id="filters_stack"> + <object class="GtkRevealer" id="sidebar_revealer"> <property name="visible">True</property> <property name="can_focus">False</property> + <property name="transition_type">slide-right</property> + <property name="transition_duration">200</property> + <property name="reveal_child">True</property> <child> - <object class="GtkBox" id="box5"> - <property name="width_request">200</property> + <object class="GtkStack" id="filters_stack"> + <property name="width_request">175</property> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <property name="spacing">3</property> + <property name="transition_duration">250</property> + <property name="transition_type">crossfade</property> <child> - <object class="GtkSearchEntry" id="search_entry"> + <object class="GtkScrolledWindow" id="categories_scrolledwindow"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="margin_left">3</property> - <property name="caps_lock_warning">False</property> - <property name="primary_icon_name">edit-find-symbolic</property> - <property name="placeholder_text" translatable="yes">Search</property> - <signal name="activate" handler="on_search_entry_activate" swapped="no"/> - <signal name="changed" handler="on_search_entry_changed" swapped="no"/> + <property name="shadow_type">in</property> + <child> + <object class="GtkViewport" id="categories_viewport"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkListBox" id="categories_listbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <signal name="row-activated" handler="on_categories_listbox_row_activated" swapped="no"/> + </object> + </child> + </object> + </child> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> + <property name="name">categories</property> + <property name="title" translatable="yes">Categories</property> </packing> </child> <child> - <object class="GtkScrolledWindow" id="scrolledwindow3"> + <object class="GtkScrolledWindow" id="groups_scrolledwindow"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="shadow_type">in</property> <child> - <object class="GtkTreeView" id="search_treeview"> + <object class="GtkViewport" id="groups_viewport"> <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="search_treeview_selection"> - <signal name="changed" handler="on_search_treeview_selection_changed" after="yes" swapped="no"/> - </object> - </child> + <property name="can_focus">False</property> <child> - <object class="GtkTreeViewColumn" id="Terms"> - <child> - <object class="GtkCellRendererText" id="cellrenderertext8"/> - <attributes> - <attribute name="text">0</attribute> - </attributes> - </child> + <object class="GtkListBox" id="groups_listbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <signal name="row-activated" handler="on_groups_listbox_row_activated" swapped="no"/> </object> </child> </object> </child> </object> <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">2</property> + <property name="name">groups</property> + <property name="title" translatable="yes">Groups</property> + <property name="position">1</property> </packing> </child> - </object> - <packing> - <property name="name">search</property> - <property name="title" translatable="yes">Search</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow1"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="shadow_type">in</property> <child> - <object class="GtkTreeView" id="groups_treeview"> + <object class="GtkScrolledWindow" id="repos_scrolledwindow"> <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="groups_treeview_selection"> - <signal name="changed" handler="on_groups_treeview_selection_changed" after="yes" swapped="no"/> - </object> - </child> + <property name="shadow_type">in</property> <child> - <object class="GtkTreeViewColumn" id="Groups"> + <object class="GtkViewport" id="repos_viewport"> + <property name="visible">True</property> + <property name="can_focus">False</property> <child> - <object class="GtkCellRendererText" id="cellrenderertext2"/> - <attributes> - <attribute name="text">0</attribute> - </attributes> + <object class="GtkListBox" id="repos_listbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <signal name="row-activated" handler="on_repos_listbox_row_activated" swapped="no"/> + </object> </child> </object> </child> </object> + <packing> + <property name="name">repos</property> + <property name="title" translatable="yes">Repositories</property> + <property name="position">2</property> + </packing> </child> - </object> - <packing> - <property name="name">groups</property> - <property name="title" translatable="yes">Groups</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow2"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="shadow_type">in</property> <child> - <object class="GtkTreeView" id="states_treeview"> + <object class="GtkScrolledWindow" id="installed_scrolledwindow"> <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="states_treeview_selection"> - <signal name="changed" handler="on_states_treeview_selection_changed" after="yes" swapped="no"/> - </object> - </child> + <property name="shadow_type">in</property> <child> - <object class="GtkTreeViewColumn" id="State"> + <object class="GtkViewport" id="installed_viewport"> + <property name="visible">True</property> + <property name="can_focus">False</property> <child> - <object class="GtkCellRendererText" id="cellrenderertext9"/> - <attributes> - <attribute name="text">0</attribute> - </attributes> + <object class="GtkListBox" id="installed_listbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <signal name="row-activated" handler="on_installed_listbox_row_activated" swapped="no"/> + </object> </child> </object> </child> </object> + <packing> + <property name="name">installed</property> + <property name="title" translatable="yes">Installed</property> + <property name="position">3</property> + </packing> </child> - </object> - <packing> - <property name="name">states</property> - <property name="title" translatable="yes">State</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow8"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="shadow_type">in</property> <child> - <object class="GtkTreeView" id="repos_treeview"> + <object class="GtkStackSidebar" id="updates_stacksidebar"> <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="repos_treeview_selection"> - <signal name="changed" handler="on_repos_treeview_selection_changed" after="yes" swapped="no"/> - </object> - </child> - <child> - <object class="GtkTreeViewColumn" id="Repos"> - <child> - <object class="GtkCellRendererText" id="cellrenderertext10"/> - <attributes> - <attribute name="text">0</attribute> - </attributes> - </child> - </object> - </child> + <property name="can_focus">False</property> + <property name="stack">origin_stack</property> </object> + <packing> + <property name="name">updates</property> + <property name="title" translatable="yes">Updates</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkStackSidebar" id="pending_stacksidebar"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stack">origin_stack</property> + </object> + <packing> + <property name="name">pending</property> + <property name="title" translatable="yes">Pending</property> + <property name="position">5</property> + </packing> </child> - </object> - <packing> - <property name="name">repos</property> - <property name="title" translatable="yes">Repositories</property> - <property name="position">3</property> - </packing> - </child> - <child> - <object class="GtkBox" id="box6"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="orientation">vertical</property> <child> - <placeholder/> + <object class="GtkStackSidebar" id="search_stacksidebar"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stack">origin_stack</property> + </object> + <packing> + <property name="name">search</property> + <property name="position">6</property> + </packing> </child> </object> - <packing> - <property name="name">updates</property> - <property name="title" translatable="yes">Updates</property> - <property name="position">4</property> - </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">1</property> + <property name="position">0</property> </packing> </child> <child> @@ -321,13 +272,34 @@ <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> - <property name="spacing">3</property> <child> - <object class="GtkStackSwitcher" id="packages_stackswitcher"> + <object class="GtkSearchBar" id="searchbar"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="halign">center</property> - <property name="stack">packages_stack</property> + <child> + <object class="GtkComboBoxText" id="search_comboboxtext"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="has_entry">True</property> + <signal name="changed" handler="on_search_comboboxtext_changed" swapped="no"/> + <child internal-child="entry"> + <object class="GtkEntry" id="search_entry"> + <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="can_default">True</property> + <property name="has_default">True</property> + <property name="receives_default">True</property> + <property name="caps_lock_warning">False</property> + <property name="primary_icon_name">edit-find-symbolic</property> + <property name="secondary_icon_name">edit-clear-symbolic</property> + <property name="placeholder_text" translatable="yes">Search</property> + <signal name="icon-press" handler="on_search_entry_icon_press" swapped="no"/> + </object> + </child> + </object> + </child> </object> <packing> <property name="expand">False</property> @@ -336,12 +308,12 @@ </packing> </child> <child> - <object class="GtkStack" id="packages_stack"> + <object class="GtkStack" id="origin_stack"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkScrolledWindow" id="packages_scrolledwindow"> - <property name="width_request">614</property> + <property name="width_request">700</property> <property name="height_request">200</property> <property name="visible">True</property> <property name="can_focus">True</property> @@ -359,6 +331,7 @@ <property name="fixed_height_mode">True</property> <property name="show_expanders">False</property> <property name="rubber_banding">True</property> + <property name="activate_on_single_click">True</property> <signal name="button-press-event" handler="on_packages_treeview_button_press_event" swapped="no"/> <signal name="query-tooltip" handler="on_packages_treeview_query_tooltip" swapped="no"/> <signal name="row-activated" handler="on_packages_treeview_row_activated" swapped="no"/> @@ -381,13 +354,20 @@ <child> <object class="GtkTreeViewColumn" id="packages_name_column"> <property name="resizable">True</property> + <property name="spacing">12</property> <property name="sizing">fixed</property> - <property name="fixed_width">200</property> - <property name="min_width">20</property> + <property name="fixed_width">240</property> + <property name="min_width">40</property> <property name="title" translatable="yes">Name</property> <property name="expand">True</property> <property name="clickable">True</property> <property name="sort_column_id">1</property> + <child> + <object class="GtkCellRendererPixbuf" id="packages_pixbuf"/> + <attributes> + <attribute name="pixbuf">8</attribute> + </attributes> + </child> <child> <object class="GtkCellRendererText" id="packages_name_renderertext"> <property name="wrap_mode">word</property> @@ -459,7 +439,7 @@ </child> <child> <object class="GtkScrolledWindow" id="aur_scrolledwindow"> - <property name="width_request">500</property> + <property name="width_request">700</property> <property name="height_request">200</property> <property name="visible">True</property> <property name="can_focus">True</property> @@ -477,6 +457,7 @@ <property name="fixed_height_mode">True</property> <property name="show_expanders">False</property> <property name="rubber_banding">True</property> + <property name="activate_on_single_click">True</property> <signal name="button-press-event" handler="on_aur_treeview_button_press_event" swapped="no"/> <signal name="query-tooltip" handler="on_aur_treeview_query_tooltip" swapped="no"/> <signal name="row-activated" handler="on_aur_treeview_row_activated" swapped="no"/> @@ -499,13 +480,20 @@ <child> <object class="GtkTreeViewColumn" id="aur_name_column"> <property name="resizable">True</property> + <property name="spacing">12</property> <property name="sizing">fixed</property> - <property name="fixed_width">200</property> + <property name="fixed_width">240</property> <property name="min_width">20</property> <property name="title" translatable="yes">Name</property> <property name="expand">True</property> <property name="clickable">True</property> <property name="sort_column_id">1</property> + <child> + <object class="GtkCellRendererPixbuf" id="aur_pixbuf"/> + <attributes> + <attribute name="pixbuf">6</attribute> + </attributes> + </child> <child> <object class="GtkCellRendererText" id="aur_name_renderertext"> <property name="wrap_mode">word</property> @@ -537,7 +525,7 @@ <object class="GtkTreeViewColumn" id="aur_popularity_column"> <property name="resizable">True</property> <property name="sizing">fixed</property> - <property name="fixed_width">90</property> + <property name="fixed_width">100</property> <property name="min_width">20</property> <property name="title" translatable="yes">Popularity</property> <property name="clickable">True</property> @@ -597,6 +585,44 @@ <property name="position">2</property> </packing> </child> + <child> + <object class="GtkBox" id="no_item_box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkImage" id="no_item_icon"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="valign">end</property> + <property name="icon_name">action-unavailable-symbolic</property> + <property name="icon_size">6</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="no_item_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="valign">start</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="name">no_item</property> + <property name="position">3</property> + </packing> + </child> </object> <packing> <property name="expand">True</property> @@ -608,7 +634,7 @@ <packing> <property name="expand">True</property> <property name="fill">True</property> - <property name="position">2</property> + <property name="position">1</property> </packing> </child> </object> @@ -618,32 +644,98 @@ </packing> </child> <child> - <object class="GtkBox" id="box4"> + <object class="GtkBox" id="properties_box"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <property name="spacing">6</property> <child> - <object class="GtkBox" id="box8"> + <object class="GtkStackSidebar" id="properties_stacksidebar"> + <property name="width_request">175</property> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="spacing">6</property> + <property name="halign">center</property> + <property name="stack">properties_stack</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkBox" id="box9"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> <child> - <object class="GtkBox" id="box9"> + <object class="GtkBox" id="properties_box1"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="margin_top">3</property> - <property name="border_width">6</property> + <property name="border_width">18</property> <property name="orientation">vertical</property> <property name="spacing">18</property> <child> - <object class="GtkLabel" id="name_label"> + <object class="GtkBox" id="properties_box2"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="halign">start</property> - <property name="margin_start">6</property> - <property name="margin_end">6</property> - <property name="selectable">True</property> + <property name="spacing">18</property> + <child> + <object class="GtkImage" id="app_image"> + <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="GtkBox" id="name_box"> + <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="name_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="margin_start">6</property> + <property name="margin_end">6</property> + <property name="selectable">True</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="desc_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="margin_start">6</property> + <property name="margin_end">6</property> + <property name="wrap">True</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> <packing> <property name="expand">False</property> @@ -652,28 +744,53 @@ </packing> </child> <child> - <object class="GtkLabel" id="desc_label"> + <object class="GtkButtonBox" id="details_buttonbox"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="halign">start</property> - <property name="margin_start">6</property> - <property name="margin_end">6</property> - <property name="wrap">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="link_label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">start</property> - <property name="margin_start">6</property> - <property name="margin_end">6</property> - <property name="selectable">True</property> + <property name="spacing">12</property> + <property name="layout_style">start</property> + <child> + <object class="GtkToggleButton" id="remove_togglebutton"> + <property name="label" translatable="yes">Remove</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <signal name="toggled" handler="on_remove_togglebutton_toggled" swapped="no"/> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="reinstall_togglebutton"> + <property name="label" translatable="yes">Reinstall</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <signal name="toggled" handler="on_reinstall_togglebutton_toggled" swapped="no"/> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="install_togglebutton"> + <property name="label" translatable="yes">Install</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <signal name="toggled" handler="on_install_togglebutton_toggled" swapped="no"/> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> </object> <packing> <property name="expand">False</property> @@ -681,195 +798,244 @@ <property name="position">2</property> </packing> </child> - <child> - <object class="GtkLabel" id="licenses_label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">start</property> - <property name="margin_start">6</property> - <property name="margin_end">6</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> - </child> </object> <packing> - <property name="expand">True</property> + <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> - <object class="GtkButtonBox" id="details_buttonbox"> + <object class="GtkStack" id="properties_stack"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="border_width">6</property> - <property name="orientation">vertical</property> - <property name="spacing">6</property> - <property name="layout_style">start</property> <child> - <object class="GtkToggleButton" id="remove_togglebutton"> - <property name="label" translatable="yes">Remove</property> + <object class="GtkScrolledWindow" id="details_scrolledwindow"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">True</property> - <signal name="toggled" handler="on_remove_togglebutton_toggled" swapped="no"/> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkToggleButton" id="reinstall_togglebutton"> - <property name="label" translatable="yes">Reinstall</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <signal name="toggled" handler="on_reinstall_togglebutton_toggled" swapped="no"/> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkToggleButton" id="install_togglebutton"> - <property name="label" translatable="yes">Install</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <signal name="toggled" handler="on_install_togglebutton_toggled" swapped="no"/> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - </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="GtkStackSwitcher" id="properties_stackswitcher"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">center</property> - <property name="stack">properties_stack</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkStack" id="properties_stack"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkScrolledWindow" id="details_scrolledwindow"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <child> - <object class="GtkViewport" id="viewport1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="shadow_type">none</property> <child> - <object class="GtkGrid" id="details_grid"> + <object class="GtkViewport" id="details_viewport"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="border_width">6</property> - <property name="row_spacing">12</property> - <property name="column_spacing">12</property> + <property name="shadow_type">none</property> <child> - <placeholder/> + <object class="GtkBox" id="details_box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">18</property> + <child> + <object class="GtkBox" id="label_box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">18</property> + <property name="margin_right">199</property> + <property name="orientation">vertical</property> + <property name="spacing">18</property> + <child> + <object class="GtkLabel" id="long_desc_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="wrap">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkImage" id="app_screenshot"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="link_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="margin_left">6</property> + <property name="margin_start">6</property> + <property name="margin_end">6</property> + <property name="selectable">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="licenses_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="margin_left">6</property> + <property name="margin_start">6</property> + <property name="margin_end">6</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</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="GtkGrid" id="details_grid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">24</property> + <property name="margin_bottom">18</property> + <property name="row_spacing">18</property> + <property name="column_spacing">18</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> </child> </object> </child> </object> + <packing> + <property name="name">details</property> + <property name="title" translatable="yes">Details</property> + </packing> </child> - </object> - <packing> - <property name="name">details</property> - <property name="title" translatable="yes">Details</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="deps_scrolledwindow"> - <property name="visible">True</property> - <property name="can_focus">True</property> <child> - <object class="GtkViewport" id="viewport2"> + <object class="GtkScrolledWindow" id="deps_scrolledwindow"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="shadow_type">none</property> + <property name="can_focus">True</property> <child> - <object class="GtkGrid" id="deps_grid"> + <object class="GtkViewport" id="deps_viewport"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="border_width">6</property> - <property name="row_spacing">3</property> - <property name="column_spacing">3</property> + <property name="shadow_type">none</property> <child> - <placeholder/> + <object class="GtkGrid" id="deps_grid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="border_width">18</property> + <property name="row_spacing">3</property> + <property name="column_spacing">3</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> </child> </object> </child> </object> + <packing> + <property name="name">deps</property> + <property name="title" translatable="yes">Dependencies</property> + <property name="position">1</property> + </packing> </child> - </object> - <packing> - <property name="name">deps</property> - <property name="title" translatable="yes">Dependencies</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="files_scrolledwindow"> - <property name="visible">True</property> - <property name="can_focus">True</property> <child> - <object class="GtkTextView" id="files_textview"> + <object class="GtkScrolledWindow" id="files_scrolledwindow"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="pixels_above_lines">3</property> - <property name="pixels_below_lines">3</property> - <property name="editable">False</property> - <property name="left_margin">6</property> - <property name="right_margin">6</property> - <property name="cursor_visible">False</property> + <child> + <object class="GtkTextView" id="files_textview"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="pixels_above_lines">3</property> + <property name="pixels_below_lines">3</property> + <property name="editable">False</property> + <property name="left_margin">6</property> + <property name="right_margin">6</property> + <property name="cursor_visible">False</property> + </object> + </child> </object> + <packing> + <property name="name">files</property> + <property name="title" translatable="yes">Files</property> + <property name="position">2</property> + </packing> </child> </object> <packing> - <property name="name">files</property> - <property name="title" translatable="yes">Files</property> - <property name="position">2</property> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> - <property name="position">2</property> + <property name="position">1</property> </packing> </child> </object> @@ -898,72 +1064,79 @@ </packing> </child> <child> - <object class="GtkBox" id="transaction_infobox"> + <object class="GtkRevealer" id="transaction_infobox_revealer"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="border_width">6</property> - <property name="spacing">12</property> - <child> - <placeholder/> - </child> + <property name="transition_type">slide-up</property> <child> - <object class="GtkButtonBox" id="transaction_infos_buttonbox"> + <object class="GtkBox" id="transaction_infobox"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="valign">end</property> - <property name="spacing">6</property> - <property name="layout_style">start</property> + <property name="border_width">6</property> + <property name="spacing">12</property> <child> - <object class="GtkButton" id="details_button"> - <property name="label" translatable="yes">Details</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <signal name="clicked" handler="on_details_button_clicked" swapped="no"/> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> + <placeholder/> </child> <child> - <object class="GtkButton" id="apply_button"> - <property name="label" translatable="yes">_Apply</property> + <object class="GtkButtonBox" id="transaction_infos_buttonbox"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="use_underline">True</property> - <signal name="clicked" handler="on_apply_button_clicked" swapped="no"/> + <property name="can_focus">False</property> + <property name="valign">end</property> + <property name="spacing">6</property> + <property name="layout_style">start</property> + <child> + <object class="GtkButton" id="details_button"> + <property name="label" translatable="yes">Details</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <signal name="clicked" handler="on_details_button_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="apply_button"> + <property name="label" translatable="yes">_Apply</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_underline">True</property> + <signal name="clicked" handler="on_apply_button_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="cancel_button"> + <property name="label" translatable="yes">_Cancel</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <signal name="clicked" handler="on_cancel_button_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> </object> <packing> - <property name="expand">True</property> + <property name="expand">False</property> <property name="fill">True</property> + <property name="pack_type">end</property> <property name="position">1</property> </packing> </child> - <child> - <object class="GtkButton" id="cancel_button"> - <property name="label" translatable="yes">_Cancel</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="use_underline">True</property> - <signal name="clicked" handler="on_cancel_button_clicked" swapped="no"/> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack_type">end</property> - <property name="position">1</property> - </packing> </child> </object> <packing> @@ -1008,23 +1181,55 @@ </object> </child> <child> - <object class="GtkMenuButton" id="menu_button"> + <object class="GtkBox" id="header_buttonbox"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="popover">popovermenu</property> - <signal name="toggled" handler="on_menu_button_toggled" swapped="no"/> + <property name="can_focus">False</property> + <property name="spacing">3</property> <child> - <object class="GtkImage" id="menu_icon"> + <object class="GtkToggleButton" id="search_button"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="icon_name">open-menu-symbolic</property> - <property name="icon_size">1</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <signal name="toggled" handler="on_search_button_toggled" swapped="no"/> + <child> + <object class="GtkImage" id="search_image"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="icon_name">edit-find-symbolic</property> + </object> + </child> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkMenuButton" id="menu_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="popover">popovermenu</property> + <signal name="toggled" handler="on_menu_button_toggled" swapped="no"/> + <child> + <object class="GtkImage" id="menu_icon"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="icon_name">open-menu-symbolic</property> + <property name="icon_size">1</property> + </object> + </child> + <style> + <class name="image-button"/> + </style> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> </child> - <style> - <class name="image-button"/> - </style> </object> <packing> <property name="pack_type">end</property> diff --git a/resources/package-generic.png b/resources/package-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..11967a92c5fc0708a2c548e1f8c8542aeb6b38ca GIT binary patch literal 4206 zcmV-!5RvbRP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF00004b3#c}2nYxW zd<bNS00009a7bBm000R(000R(0q|s!N&o-=8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H159>)pK~#90<(o~cCC63Af2X?d?fc%lGtcv3PiDsUc;eVeuqB8v ziWFj5VHY;6SVRhJ5fXw0V#CIG#fO9<V1)#mNC?T1kXRsAkjMgIu^}P>CywKcaO|-? zGoJDLxF6kJ=dh@%{<ydAdv^v)!BA4a*SD*?s?NXu=hQi;tHsRt|6JTpdH_G^l5eUI z5g`C1A4Nxh_R?2(uU)#df9cBOpUp?bRdI6JyuX~~Ib}J!skPkHdinN^H~;-V-@bGB z;qUz6-_AdZegOm2Hc(wwuZu_qOn@<vJ^$RZJ1;!{-2SyI4?pzKnZ5nJoynP^$oGqJ zb~bbFj1xKIoJ^hA83$9u&Ir0^#?)a`Q$H24JyV~X!OoRun!aWSciDgVD%En<T)XrA zZ((LQq%x5sGmZo~Q0%~vBSQ{U-J!vusUFsz!&*5kD?M0N_2I#Bd35*S_~4zJw-5j2 z+piz~>v!H*03IlTg_-%Tygdep$QYP@<IjKhD?j_wKl8_Vo)?B-s$hzlVrH0nOg-BD z?>%ZYcty3wR6EzxeXw)NbXDbo%sJF$BQbX_bMBmokhu&I7Y-+gWQcP(afowBs(0z0 zj9>fem%&u$%f)-&diC4C`P;w$*Z(LYM`l*80U#ndaON-n=(m35^Ur<$Yo<!QoT0vK z1xbQg_}vF3oohU|<~OmfRy{?0D3>LZVjPI;3{^uMh(%o#z_M_`42udXX7O6OC;XNy zcYAwhFaP2%eDUSO<K?gZ-k<)>-;2nHW>!Nqf>Gahf%7js|Ajxml*QruREtCEa)Gaw zs4p>JV_JhMU{S~@X#9;CQSHLH8AcF9?Q{SHFpX_A+L_vk&6E1+)>-I|?igs!oy+9Q zFZ|rsfb+m^l(|_2GN1r17vo7$m-DufBt+9mdvxp5{oVRiP@JB=<oZhc!gPgg`bgq+ z>sEm3+@G*GGo4-lE=O6jE&z_8o_jcl`YQIfBE%M;*a@I`?b)BfqE1_3y2AE^>9iZi zIn0U<V=%IOB*0#j)vW?B4u>GfRx@h@pl}i>EvGk@?ts^3b*+xh_=Z@~9edM7l(P>& zTJtlB%l<Yq%c-FB?SS9H>og3-T47g(8PfHW7}IGvmW+;nv+fBBCkn9{6g?f3Emi?h zU7yvSQEP!2W<__bL+a5l!>+L0-^^~!lq~>2HweRkFbyj@K=cG10&+6|0ysnZ9X06x z&uoC2M&V8_?PRYAGo<UR0FhWRq#m)3759FP0TO#S)xw`Z_l-*=Td06^e2kNXSyhjO zm9@gIv*Kh11o>h6*<}EfE-)*g=oUuMtA;_O0T1bVudZVh2U*c!OlYJR+zr@(EsWVl zJD>whY1{Ml=>Vv?2-JYCTL*}yt^>v(EBflOTHMOHdteK{g&pV)Xw#7dToVRZ6{b<O zHCC)JrmG%N&LngShFV&rr%$s14`2rr4Y5S(Dn^stYvB8{dP=a9Zj~4u_3P68);`}B z83I5!MTj9#wsn<N71OE(!0K>xu6gaWAzdIg2$O`3!1U|rM~${BYd;?lyuq&CZ8@{6 zpsj<Vh#7)Gceb@|k2DBJLx1T4u`0|OD>^{M@ei?rm1S@(B^JdQ6k;6|9RNj#L5U1d zUlAiwP!AmyFf&5FrtK#Uz9&pqJyz*|8Y@=HdQR{pA?}0jgEqh{&^-cRS~W)kK+Mxx ztpQ<rtVne&FvG0qFy;gRgvP9_2ti-yZ6m`$P<#z8j>vpCk_uSpT@Bn2{pkR)Y7|do zMXYnJoSPUR$HzzH*|>dZNRR<gHr?B+S4FkN#Z}0(jz?sGhRjg{xkvwwMPD<DgREF# zj1vwIjuHTa3?Kt{eE1<3E<TJM-o8J|r#e7HkSuRz&oEpLc^QRX10XO!RmqDT^3epB z1zRNoh+xD(eQQ?qfpiA*rQZy|7@W^Cspt3b^*+-Jk5bK#sH;V6P#WDO4W=<V5*JV) zCPh^hvzR#bo@H60$MDRTeuI2824H^lAv@FkW-z|4`2Kf(9Vw<1<1vUtgBkzF-;!uA zE{-E6ahwb393f<f3EAN+FUX2L4nKG^je0-@#$&;I(ej{~4L9CpT<lR-C9~r>%f*8E zazVLVGM_J4EEX*03+D3$^ZA^`V##biXE9$gUo4r==gemd7R!>lR@9X9`#Gag#!#ti z&tH7~??416j-tpZikzKs!MGSPDGDZ&B3zqH7*EFRObT|!V<tO0OeSL{#h9Jl3DYzC zOwXRh<po(j0^s&rH--VYc=4h;I5@yLN3}Q()>s5zEx7aJ*ICYw@!q3e@$qopQ>Zd_ z#_ps>M~2_c@w$il33a-^4(ar|R*sGrWLbvGhF?fI6Ta~5RrYoY^2~vAWX|ET@Lw`V zo;kA2;qsh3%W%$<XC)b)tjfV0%R0l)?yx+Va^bO0M*xh&ySKXCMMp?PxOkC~nRpO2 zFkd5C&YgFDKwT}!Mma9eTQ9k>1=8rh7-(ARlFd+JdP^~ddk06je1yw}8Q@HK;;ARu z-`|b-`f$y#M*Bp-Asv+zTt>s1a5<<-RV}#v*7vyl<md3dZfsPy^i;rkFQ`#hOGIm` z`5aty5ha|MfFtOdMMEHQU1)5>KruDEb4Zp2136H{V0w1S{zFq74nvy^Q5R@KL$4Nn zhoMg6L{!T;<#I+<R%!WNQ2{f~J$*syIh2mf%qYtxB7#X{d*iu_zk~1=jguuKNzaAp zk0%;Qars6Ska&}{%SSY<0R)NcGlS)Pf%=--hg5sDSTdRvjK*WK%#md|68(+kVn)3z z!z8Yx0Gg3lo;&BwnJHS8q2u6@01^h5{1>79ooF>cuhkh5HJr<F*=X<<r_wYfo#*JN zm12m(;`o@mw{Nktx5sEa0&%?eUvF{#k%t+L3nsfeWO-0EUoNT2B_c_&It+N}rI!RQ zFyj3Hju~~m1aZ+d6-*>J9C4NtkrEq%*ClM^KSYNm_y-#qpeep+852Mbj0hM9bViec z3zsh8YYzfhmT~2YYs_aeyw=Q)j+ySC2>{e3RapjGu~PCEfxn9Vli|D>byZ@)84cMP zRh)Ct1Cz#+4IWl!@=qXv8F(YS#oYveS0EYIn4C4j%T}~`XQ-x(i!l^q?!5Q@T06zg z4#lKEV-~tDE6T;Z%YYUDfU{@4+`T)3%7@O>FcdYzMaLuQdE<>m%%YNRv5Ue0g)GD6 zn*mU3TQdu8Ztylk8``lAV#W`@``TJNpM2&sjEjex->NmLo*`@5jAR7jofA{=b&WU| zUTY`%n_;409Ud9M$BdLsm~0Z?Yg(c<?aYzRYxYQcO#pOP1dU$#2Fk^_qXEGCz+&n7 zuYCZ_EG7!t2hE~mAckd%s0$#_(f3ZkMfd+|QH#QDs0Yk61Vb^{F*Ujm^n)xm8s0XN zZGUS!u#oua0^q$SW{YX?-J8u0$r35ikVPpi2^$@i&2pttbe?HTSys_yp7Y_ogJx#a z8lPsfWri_3I%07=TW>6uqk9LK87_0|pF4+nkEr5Yj{*IZn5BGx#kV--nt@0Px{Wpr zO^3t)Y(vJSZ9lvo|K>lu!eY6kT2@qLg<#}aMxJMkM;VVl`bcjHT+J$(8F`-b;~(9i zT9$)--MaZMw{E`66Q6#HB#)XV8*pMiAnfGuKInY30SZWbK4?HkQ`DkCI++7zusbQZ z^bj~V#YG=K7l#`;oH<+uE&{1(#x>c2$N~(PXIy{!X@2nC|JY~;9=Up%v*#a*X*eJ4 z#|cKT9ca?Apf#q}7&?fteeVfbF#;Qkz;wF9?%t&1%hO?#_H?{SL(td#6o>3gce!%? z8gIXOW38*{{yvu;yV8JTkpV+4^C|!iQ`FapxnK)2pka>zS=9N&Bso>~4hCUgO3Dy* zZGyG$1Vc_TZmv>|?+zkBamN}4=PzDhet5(Ow{ACmjEjQDp1juXGa{@4VO5YI;}8G> zrcELvx}Cu)B1qV+B?c0flisptHn_%~T2d+}0n$W{9Tvt&60BnggAZV4eB#=p%;z)a zM>8aIJoeNlaap#u3V`C=hG_8KJ*cQctQU1gq6erQ!zp68<oU%=Gzor+4IGxg`2)}b z-|Bw5?G6<4tw(5$V8&zDuk+?>uk(q=uTm7_wS5R0a}%u-zhVTPb7obz=*@!Hlo+64 z)<wZYFpFua)QkmStjRrZD|tXItukiO?e6Y9j6i7GZ%7<dCoV8E+$iUXpZXMeJ{o)j zt?KdZ7QGb!UVPE``kw%p_Yq~)AXK!Tngvf#nw&rf1Oyf9MT=XNxO9q1i13<qUt>}w z<P;MVP>nz&V+djzJrE;v*~T3xrW)MP7J#NSHlU^=Y|k;&Jc2__ablQ)xCDZQ#Db;7 zXc$0~3b_vk7+o8%vH~@>z(;|*Z=qUO*t#M4h7vYt4ug{e+`S7_@mBR%?J?14Jslzz z_vvbg5j><!tcbLN+$RGPaQ(EpMcN0d>*_w`6d|Vj(^7g;SJ4J^hSyO65jb~_3Q$!^ z@9;z<8o?xd%m>6(p@|G7`iadzwxod2=zqhAlnbECgmy)u0}?4@*3;eaX0vx+_~;6o z8RySKU85l0E55Elz<b{&KAh{#IwYxsK%29HC&6IE^wJs#G^_}8Pj;d;f^q3JJB<KM zMtf+6q6*w)G#ZKbUK+2-qV5>M_<7&XdZfGbX#W6yKzH_=^C(bK2WxJK8!cPmO?5lI zHLFPD2(9f9X+iWJ_3>3zOgKvG3KCLaH0KW_cW-pv?$dJG&>_Lm01@&M(lBEi_d~sp zVfMNqY*vA)s?0fu0?zxG?bW#MTU6T^4EMag2cv)c^h%Ht2iXdqqS0jaTj96vLv_1g zNTc7Ka%ook#>j=o`-u=3Z1et$(OFGstbEf|5<EzAU&2F-1q|X+IP3?+BB}=J5echZ z3d=;oTql)moXYNC?q^`D!09Tc7ALJ0Jgs{7TO@AyNLtjbTeSgpG%J^9_FQ3v^)oz@ z1YZp>Hp_Eb8N_Pn<;se8_W&VBuw@3v^K#i~!k`7f12dq!@$SLxXRnX1LPyA6UM`Nc z`LjB(`w0g6muzT?K7x{5<QwlD+$MZIHX{-|0Z;?Sz~RfUyz%OjSI+)Yk!QJ`@Qu%d z%*56M{)pRCgJtdOmtXnetH2>a)*50CFn&Pv2=FQ3=dYaK{n9Ug@%rbUxHLVtH;KC$ zKBnb(QI$8|JG%RgfBMnCz4O8Bo4`K<ZvgL`nKd6y#%~6%08ay-1wI3uC464;aV{lr z0DKR44R{@R$Ktnxy)Q>aWEZ$d__FFE;S;mdzIFWHUgp3Dz-{0raNEq9PgRFLoy~!L z!gqutKK>tAD<RgM0nG=KsjLCeR0O+_^M3<?+BOLK-}c;_VT)nT$p8QV07*qoM6N<$ Ef;Ecg8vp<R literal 0 HcmV?d00001 diff --git a/resources/pamac.manager.gresource.xml b/resources/pamac.manager.gresource.xml index 99dba715..b1b7a6b3 100644 --- a/resources/pamac.manager.gresource.xml +++ b/resources/pamac.manager.gresource.xml @@ -11,5 +11,6 @@ <file preprocess="to-pixdata">package-reinstall.png</file> <file preprocess="to-pixdata">package-remove.png</file> <file preprocess="to-pixdata">package-upgrade.png</file> + <file preprocess="to-pixdata">package-generic.png</file> </gresource> </gresources> diff --git a/resources/preferences_dialog.ui b/resources/preferences_dialog.ui index bf505796..11d087e3 100644 --- a/resources/preferences_dialog.ui +++ b/resources/preferences_dialog.ui @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- Generated with glade 3.20.0 --> <interface> - <requires lib="gtk+" version="3.14"/> + <requires lib="gtk+" version="3.20"/> <object class="GtkAdjustment" id="cache_keep_nb_adjustment"> <property name="upper">10</property> <property name="value">3</property> @@ -18,6 +18,7 @@ <template class="PamacPreferencesDialog" parent="GtkDialog"> <property name="can_focus">False</property> <property name="border_width">3</property> + <property name="title" translatable="yes">Preferences</property> <property name="window_position">center-on-parent</property> <property name="icon_name">system-software-install</property> <property name="type_hint">dialog</property> @@ -31,20 +32,31 @@ <property name="can_focus">False</property> <property name="layout_style">end</property> <child> - <placeholder/> + <object class="GtkButton" id="close_button"> + <property name="label" translatable="yes">_Close</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + </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> + <property name="position">1</property> </packing> </child> <child> - <object class="GtkStack" id="stack"> + <object class="GtkNotebook" id="notebook"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can_focus">True</property> <child> <object class="GtkBox" id="general_config_box"> <property name="visible">True</property> @@ -370,9 +382,15 @@ </packing> </child> </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="general_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">General</property> + </object> <packing> - <property name="name">general</property> - <property name="title" translatable="yes">General</property> + <property name="tab_fill">False</property> </packing> </child> <child> @@ -485,11 +503,20 @@ </child> </object> <packing> - <property name="name">official_repositories</property> - <property name="title" translatable="yes">Official Repositories</property> <property name="position">1</property> </packing> </child> + <child type="tab"> + <object class="GtkLabel" id="mirrors_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Official Repositories</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> <child> <object class="GtkBox" id="aur_config_box"> <property name="visible">True</property> @@ -640,11 +667,20 @@ All AUR users should be familiar with the build process.</property> </child> </object> <packing> - <property name="name">aur</property> - <property name="title" translatable="yes">AUR</property> <property name="position">2</property> </packing> </child> + <child type="tab"> + <object class="GtkLabel" id="aur_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">AUR</property> + </object> + <packing> + <property name="position">2</property> + <property name="tab_fill">False</property> + </packing> + </child> <child> <object class="GtkBox" id="cache_config_box"> <property name="visible">True</property> @@ -736,37 +772,34 @@ All AUR users should be familiar with the build process.</property> </child> </object> <packing> - <property name="name">cache</property> - <property name="title" translatable="yes">Cache</property> <property name="position">3</property> </packing> </child> + <child type="tab"> + <object class="GtkLabel" id="cache_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Cache</property> + </object> + <packing> + <property name="position">3</property> + <property name="tab_fill">False</property> + </packing> + </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> - <property name="position">2</property> + <property name="position">0</property> </packing> </child> </object> </child> - <child type="titlebar"> - <object class="GtkHeaderBar"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="show_close_button">True</property> - <child> - <placeholder/> - </child> - <child type="title"> - <object class="GtkStackSwitcher" id="stackswitcher"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">center</property> - <property name="stack">stack</property> - </object> - </child> - </object> + <action-widgets> + <action-widget response="-7">close_button</action-widget> + </action-widgets> + <child> + <placeholder/> </child> </template> </interface> diff --git a/resources/progress_box.ui b/resources/progress_box.ui index cd330901..d72aa94e 100644 --- a/resources/progress_box.ui +++ b/resources/progress_box.ui @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- Generated with glade 3.20.0 --> <interface> - <requires lib="gtk+" version="3.12"/> + <requires lib="gtk+" version="3.20"/> <template class="PamacProgressBox" parent="GtkBox"> <property name="visible">True</property> <property name="can_focus">False</property> diff --git a/resources/progress_dialog.ui b/resources/progress_dialog.ui index 4aef5f90..c82d36db 100644 --- a/resources/progress_dialog.ui +++ b/resources/progress_dialog.ui @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- Generated with glade 3.20.0 --> <interface> - <requires lib="gtk+" version="3.12"/> + <requires lib="gtk+" version="3.20"/> <template class="PamacProgressDialog" parent="GtkApplicationWindow"> <property name="can_focus">False</property> <property name="border_width">6</property> diff --git a/resources/transaction_sum_dialog.ui b/resources/transaction_sum_dialog.ui index f0973aed..9a94f0ad 100644 --- a/resources/transaction_sum_dialog.ui +++ b/resources/transaction_sum_dialog.ui @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- Generated with glade 3.20.0 --> <interface> - <requires lib="gtk+" version="3.12"/> + <requires lib="gtk+" version="3.20"/> <template class="PamacTransactionSumDialog" parent="GtkDialog"> <property name="can_focus">False</property> <property name="border_width">3</property> diff --git a/src/Makefile b/src/Makefile index 46038382..62aab0ae 100644 --- a/src/Makefile +++ b/src/Makefile @@ -69,6 +69,7 @@ pamac-user-daemon: ../vapi/libalpm.vapi alpm_config.vala common.vala package.val $(ALPM_VALA_FLAGS) \ --pkg=json-glib-1.0 \ --pkg=libsoup-2.4 \ + --pkg=appstream-glib \ --thread \ alpm_config.vala \ common.vala \ @@ -112,6 +113,7 @@ pamac-manager: libpamac.so ../resources/manager_resources.c history_dialog.vala $(PAMAC_LIB_FLAGS) \ --pkg=gtk+-3.0 \ --pkg=gdk-3.0 \ + --pkg=libsoup-2.4 \ --gresources=$(MANAGER_GRESOURCE_FILE) \ ../resources/manager_resources.c \ history_dialog.vala \ diff --git a/src/manager.vala b/src/manager.vala index 72878dc2..6aa118dd 100644 --- a/src/manager.vala +++ b/src/manager.vala @@ -61,7 +61,7 @@ namespace Pamac { this.set_accels_for_action ("app.back", accels); // search accel action = new SimpleAction ("search", null); - action.activate.connect (() => {manager_window.filters_stack.visible_child_name = "search";}); + action.activate.connect (() => {manager_window.search_button.activate ();}); this.add_action (action); accels = {"<Ctrl>F"}; this.set_accels_for_action ("app.search", accels); @@ -70,11 +70,16 @@ namespace Pamac { public override int command_line (ApplicationCommandLine cmd) { if (cmd.get_arguments ()[0] == "pamac-updater") { + if (!started) { + manager_window.update_lists (); + started = true; + } manager_window.display_package_queue.clear (); manager_window.main_stack.visible_child_name = "browse"; manager_window.filters_stack.visible_child_name = "updates"; } else if (!started) { - manager_window.show_default_pkgs (); + manager_window.update_lists (); + manager_window.refresh_packages_list (); started = true; } if (!pamac_run) { diff --git a/src/manager_window.vala b/src/manager_window.vala index 86ae978b..ed4f1752 100644 --- a/src/manager_window.vala +++ b/src/manager_window.vala @@ -17,7 +17,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -const string VERSION = "5.1.1"; +const string VERSION = "5.9.0"; namespace Pamac { @@ -47,6 +47,7 @@ namespace Pamac { Gdk.Pixbuf? to_upgrade_icon; Gdk.Pixbuf? installed_locked_icon; Gdk.Pixbuf? available_locked_icon; + Gdk.Pixbuf? package_icon; // manager objects [GtkChild] @@ -64,29 +65,45 @@ namespace Pamac { [GtkChild] Gtk.TreeViewColumn aur_state_column; [GtkChild] + Gtk.Revealer sidebar_revealer; + [GtkChild] public Gtk.Stack filters_stack; [GtkChild] Gtk.StackSwitcher filters_stackswitcher; [GtkChild] - Gtk.SearchEntry search_entry; + Gtk.StackSidebar updates_stacksidebar; + [GtkChild] + Gtk.StackSidebar pending_stacksidebar; + [GtkChild] + public Gtk.ToggleButton search_button; + [GtkChild] + Gtk.SearchBar searchbar; + [GtkChild] + Gtk.ComboBoxText search_comboboxtext; [GtkChild] - Gtk.TreeView search_treeview; + Gtk.Entry search_entry; [GtkChild] - Gtk.TreeView groups_treeview; + Gtk.ListBox categories_listbox; [GtkChild] - Gtk.TreeView states_treeview; + Gtk.ListBox groups_listbox; [GtkChild] - Gtk.TreeView repos_treeview; + Gtk.ListBox installed_listbox; [GtkChild] - Gtk.Stack packages_stack; + Gtk.ListBox repos_listbox; [GtkChild] - Gtk.StackSwitcher packages_stackswitcher; + Gtk.Stack origin_stack; + [GtkChild] + Gtk.ScrolledWindow packages_scrolledwindow; + [GtkChild] + Gtk.ScrolledWindow aur_scrolledwindow; [GtkChild] Gtk.Label updated_label; [GtkChild] + Gtk.Label no_item_label; + [GtkChild] Gtk.Stack properties_stack; [GtkChild] - Gtk.StackSwitcher properties_stackswitcher; + Gtk.StackSidebar properties_stacksidebar; [GtkChild] Gtk.Grid deps_grid; [GtkChild] @@ -96,8 +113,14 @@ namespace Pamac { [GtkChild] Gtk.Label name_label; [GtkChild] + Gtk.Image app_image; + [GtkChild] + Gtk.Image app_screenshot; + [GtkChild] Gtk.Label desc_label; [GtkChild] + Gtk.Label long_desc_label; + [GtkChild] Gtk.Label link_label; [GtkChild] Gtk.Label licenses_label; @@ -112,6 +135,8 @@ namespace Pamac { [GtkChild] Gtk.Box transaction_infobox; [GtkChild] + Gtk.Revealer transaction_infobox_revealer; + [GtkChild] Gtk.Button details_button; [GtkChild] Gtk.Button apply_button; @@ -129,10 +154,6 @@ namespace Pamac { GLib.List<string> selected_aur; // liststores - Gtk.ListStore search_list; - Gtk.ListStore groups_list; - Gtk.ListStore states_list; - Gtk.ListStore repos_list; Gtk.ListStore packages_list; Gtk.ListStore aur_list; @@ -150,14 +171,21 @@ namespace Pamac { bool waiting; bool force_refresh; + AlpmPackage[] repos_updates; + AURPackage[] aur_updates; + bool updates_checked; + uint search_entry_timeout_id; + string search_string; + bool show_last_search; public ManagerWindow (Gtk.Application application) { Object (application: application); - support_aur (false); + updates_checked = false; button_back.visible = false; - transaction_infobox.visible = false; + pending_stacksidebar.visible = false; + searchbar.connect_entry (search_entry); refreshing = false; important_details = false; transaction_running = false; @@ -166,6 +194,7 @@ namespace Pamac { this.title = dgettext (null, "Package Manager"); updated_label.set_markup ("<b>%s</b>".printf (dgettext (null, "Your system is up-to-date"))); + no_item_label.set_markup ("<b>%s</b>".printf (dgettext (null, "No package found"))); this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); while (Gtk.events_pending ()) { Gtk.main_iteration (); @@ -190,23 +219,16 @@ namespace Pamac { right_click_menu.append (details_item); right_click_menu.show_all (); - search_list = new Gtk.ListStore (1, typeof (string)); - search_treeview.set_model (search_list); - groups_list = new Gtk.ListStore (1, typeof (string)); - groups_treeview.set_model (groups_list); - states_list = new Gtk.ListStore (1, typeof (string)); - states_treeview.set_model (states_list); - repos_list = new Gtk.ListStore (1, typeof (string)); - repos_treeview.set_model (repos_list); - - packages_list = new Gtk.ListStore (7, + packages_list = new Gtk.ListStore (9, typeof (uint), //origin - typeof (string), //name + typeof (string), //pkgname typeof (string), //name+desc typeof (string), //version typeof (string), //repo typeof (uint64), //isize - typeof (string)); //GLib.format (isize) + typeof (string), //GLib.format (isize) + typeof (string), //app_name + typeof (Gdk.Pixbuf)); //icon packages_treeview.set_model (packages_list); // add custom cellrenderer to packages_treeview and aur_treewiew var packages_state_renderer = new ActivableCellRendererPixbuf (); @@ -241,13 +263,14 @@ namespace Pamac { }); packages_state_renderer.activated.connect (on_packages_state_icon_activated); - aur_list = new Gtk.ListStore (6, + aur_list = new Gtk.ListStore (7, typeof (uint), //origin typeof (string), //name typeof (string), //name+desc typeof (string), //version typeof (double), //popularity - typeof (string)); //populariy to string + typeof (string), //populariy to string + typeof (Gdk.Pixbuf)); //icon // sort packages by popularity by default aur_list.set_sort_column_id (4, Gtk.SortType.DESCENDING); aur_treeview.set_model (aur_list); @@ -295,8 +318,9 @@ namespace Pamac { to_upgrade_icon = new Gdk.Pixbuf.from_resource ("/org/manjaro/pamac/manager/package-upgrade.png"); installed_locked_icon = new Gdk.Pixbuf.from_resource ("/org/manjaro/pamac/manager/package-installed-locked.png"); available_locked_icon = new Gdk.Pixbuf.from_resource ("/org/manjaro/pamac/manager/package-available-locked.png"); + package_icon = new Gdk.Pixbuf.from_resource ("/org/manjaro/pamac/manager/package-generic.png"); } catch (GLib.Error e) { - stderr.printf (e.message); + stderr.printf ("%s\n", e.message); } transaction = new Transaction (this as Gtk.ApplicationWindow); @@ -316,21 +340,30 @@ namespace Pamac { main_stack.add_named (transaction.term_window, "term"); transaction_infobox.pack_start (transaction.progress_box); - support_aur (transaction.enable_aur); - display_package_queue = new Queue<string> (); main_stack.notify["visible-child"].connect (on_main_stack_visible_child_changed); filters_stack.notify["visible-child"].connect (on_filters_stack_visible_child_changed); - packages_stack.notify["visible-child"].connect (on_packages_stack_visible_child_changed); + origin_stack.notify["visible-child"].connect (on_origin_stack_visible_child_changed); properties_stack.notify["visible-child"].connect (on_properties_stack_visible_child_changed); - Timeout.add (100, populate_window); - } + searchbar.notify["search-mode-enabled"].connect (on_search_mode_enabled); + show_last_search = true; + // enable "type to search" + this.get_window ().set_events (Gdk.EventMask.KEY_PRESS_MASK); + this.key_press_event.connect ((event) => { + show_last_search = false; + return searchbar.handle_event (event); + }); - bool populate_window () { - update_lists (); - return false; + // create screenshots tmp dir + string screenshots_tmp_dir = "/tmp/pamac-app-screenshots"; + try { + Process.spawn_command_line_sync ("mkdir -p %s".printf (screenshots_tmp_dir)); + Process.spawn_command_line_sync ("chmod -R 777 %s".printf (screenshots_tmp_dir)); + } catch (SpawnError e) { + stderr.printf ("SpawnError: %s\n", e.message); + } } void on_write_pamac_config_finished (bool recurse, uint64 refresh_period, bool no_update_hide_icon, @@ -353,15 +386,32 @@ namespace Pamac { } void support_aur (bool enable_aur) { - if (enable_aur) { - if (filters_stack.visible_child_name == "search") { - packages_stackswitcher.visible = true; + if (filters_stack.visible_child_name == "search") { + if (enable_aur) { + show_sidebar (); + } else { + hide_sidebar (); + origin_stack.visible_child_name = "repos"; } - } else { - packages_stackswitcher.visible = false; } } + void hide_sidebar () { + sidebar_revealer.set_reveal_child (false); + } + + void show_sidebar () { + sidebar_revealer.set_reveal_child (true); + } + + void hide_transaction_infobox () { + transaction_infobox_revealer.set_reveal_child (false); + } + + void show_transaction_infobox () { + transaction_infobox_revealer.set_reveal_child (true); + } + void try_lock_and_run (TransactionAction action) { if (transaction.get_lock ()) { action (); @@ -370,7 +420,7 @@ namespace Pamac { transaction.progress_box.action_label.label = dgettext (null, "Waiting for another package manager to quit") + "..."; transaction.start_progressbar_pulse (); cancel_button.sensitive = true; - transaction_infobox.show_all (); + show_transaction_infobox (); Timeout.add (5000, () => { bool locked = transaction.get_lock (); if (locked) { @@ -408,67 +458,108 @@ namespace Pamac { apply_button.sensitive = false; } cancel_button.sensitive = false; - // fix an possible visibility issue - transaction_infobox.show_all (); + show_transaction_infobox (); } else { uint total_pending = transaction.to_install.length + transaction.to_remove.length + transaction.to_build.length; if (total_pending == 0) { + if (filters_stack.visible_child_name != "pending") { + pending_stacksidebar.visible = false; + updates_stacksidebar.visible = true; + } transaction.progress_box.action_label.label = ""; cancel_button.sensitive = false; apply_button.sensitive = false; if (important_details) { - transaction_infobox.show_all (); + show_transaction_infobox (); } } else { + updates_stacksidebar.visible = false; + pending_stacksidebar.visible = true; + var attention_val = GLib.Value (typeof (bool)); + attention_val.set_boolean (true); + filters_stack.child_set_property (filters_stack.get_child_by_name ("pending"), + "needs-attention", + attention_val); string info = dngettext (null, "%u pending operation", "%u pending operations", total_pending).printf (total_pending); transaction.progress_box.action_label.label = info; cancel_button.sensitive = true; apply_button.sensitive = true; - // fix an possible visibility issue - transaction_infobox.show_all (); + show_transaction_infobox (); } } } } - public void show_default_pkgs () { + void show_default_pkgs () { this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); transaction.get_installed_pkgs.begin ((obj, res) => { populate_packages_list (transaction.get_installed_pkgs.end (res)); }); } - void update_lists () { - Gtk.TreeIter iter; - Gtk.TreeSelection selection = repos_treeview.get_selection (); - selection.changed.disconnect (on_repos_treeview_selection_changed); + Gtk.Label create_list_label (string str) { + var label = new Gtk.Label (str); + label.visible = true; + label.margin = 8; + label.xalign = 0; + return label; + } + + int sort_list_row (Gtk.ListBoxRow row1, Gtk.ListBoxRow row2) { + var label1 = row1.get_child () as Gtk.Label; + var label2 = row2.get_child () as Gtk.Label; + return strcmp (label1.label, label2.label); + } + + public void update_lists () { + Gtk.Label label; foreach (unowned string repo in transaction.get_repos_names ()) { - repos_list.insert_with_values (null, -1, 0, repo); + label = create_list_label (repo); + repos_listbox.add (label); } - repos_list.get_iter_first (out iter); - selection.select_iter (iter); - selection.changed.connect_after (on_repos_treeview_selection_changed); + repos_listbox.select_row (repos_listbox.get_row_at_index (0)); - selection = groups_treeview.get_selection (); - selection.changed.disconnect (on_groups_treeview_selection_changed); foreach (unowned string group in transaction.get_groups_names ()) { - groups_list.insert_with_values (null, -1, 0, group); - } - groups_list.set_sort_column_id (0, Gtk.SortType.ASCENDING); - groups_list.get_iter_first (out iter); - selection.select_iter (iter); - selection.changed.connect_after (on_groups_treeview_selection_changed); - - selection = states_treeview.get_selection (); - selection.changed.disconnect (on_states_treeview_selection_changed); - states_list.insert_with_values (null, -1, 0, dgettext (null, "Installed")); - states_list.insert_with_values (null, -1, 0, dgettext (null, "Explicitly installed")); - states_list.insert_with_values (null, -1, 0, dgettext (null, "Orphans")); - states_list.insert_with_values (null, -1, 0, dgettext (null, "Foreign")); - states_list.insert_with_values (null, -1, 0, dgettext (null, "Pending")); - states_list.get_iter_first (out iter); - selection.select_iter (iter); - selection.changed.connect_after (on_states_treeview_selection_changed); + label = create_list_label (group); + groups_listbox.add (label); + } + groups_listbox.set_sort_func (sort_list_row); + groups_listbox.select_row (groups_listbox.get_row_at_index (0)); + + label = create_list_label (dgettext (null, "Installed")); + installed_listbox.add (label); + label = create_list_label (dgettext (null, "Explicitly installed")); + installed_listbox.add (label); + label = create_list_label (dgettext (null, "Orphans")); + installed_listbox.add (label); + label = create_list_label (dgettext (null, "Foreign")); + installed_listbox.add (label); + installed_listbox.select_row (installed_listbox.get_row_at_index (0)); + + label = create_list_label (dgettext (null, "Accessories")); + categories_listbox.add (label); + label = create_list_label (dgettext (null, "Audio & Video")); + categories_listbox.add (label); + label = create_list_label (dgettext (null, "Development")); + categories_listbox.add (label); + label = create_list_label (dgettext (null, "Education")); + categories_listbox.add (label); + label = create_list_label (dgettext (null, "Games")); + categories_listbox.add (label); + label = create_list_label (dgettext (null, "Graphics")); + categories_listbox.add (label); + label = create_list_label (dgettext (null, "Internet")); + categories_listbox.add (label); + label = create_list_label (dgettext (null, "Office")); + categories_listbox.add (label); + label = create_list_label (dgettext (null, "Science")); + categories_listbox.add (label); + label = create_list_label (dgettext (null, "Settings")); + categories_listbox.add (label); + label = create_list_label (dgettext (null, "System Tools")); + categories_listbox.add (label); + categories_listbox.set_sort_func (sort_list_row); + categories_listbox.select_row (categories_listbox.get_row_at_index (0)); } void on_mark_explicit_button_clicked (Gtk.Button button) { @@ -481,21 +572,21 @@ namespace Pamac { var label = new Gtk.Label ("<b>%s</b>".printf (detail_type + ":")); label.use_markup = true; label.halign = Gtk.Align.START; + label.valign = Gtk.Align.START; details_grid.attach_next_to (label, previous_widget, Gtk.PositionType.BOTTOM); if (!transaction_running && !sysupgrade_running && detail_type == dgettext (null, "Install Reason") && detail == dgettext (null, "Installed as a dependency for another package")) { - var box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 12); + var box = new Gtk.Box (Gtk.Orientation.VERTICAL, 12); box.homogeneous = false; - box.hexpand = true; var label2 = new Gtk.Label (detail); label2.halign = Gtk.Align.START; box.pack_start (label2, false); var mark_explicit_button = new Gtk.Button.with_label (dgettext (null, "Mark as explicitly installed")); - mark_explicit_button.margin = 3; + mark_explicit_button.halign = Gtk.Align.START; mark_explicit_button.clicked.connect (on_mark_explicit_button_clicked); - box.pack_end (mark_explicit_button, false); + box.pack_start (mark_explicit_button, false); details_grid.attach_next_to (box, label, Gtk.PositionType.RIGHT); } else { var label2 = new Gtk.Label (detail); @@ -540,34 +631,29 @@ namespace Pamac { label.valign = Gtk.Align.START; label.margin_top = 6; deps_grid.attach_next_to (label, previous_widget, Gtk.PositionType.BOTTOM); - var box = new Gtk.Box (Gtk.Orientation.VERTICAL, 3); - box.hexpand = true; + var dep_name_grid = new Gtk.Grid (); + dep_name_grid.hexpand = true; + Gtk.Widget? previous_dep_name = null; foreach (unowned string dep in dep_list) { + var dep_button = new Gtk.Button.with_label (dep); + dep_button.relief = Gtk.ReliefStyle.NONE; + dep_button.halign = Gtk.Align.START; + dep_button.clicked.connect (on_dep_button_clicked); + dep_name_grid.attach_next_to (dep_button, previous_dep_name, Gtk.PositionType.BOTTOM); + previous_dep_name = dep_button; if (add_install_button) { - var box2 = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 12); - box2.homogeneous = false; - var dep_button = new Gtk.Button.with_label (dep); - dep_button.relief = Gtk.ReliefStyle.NONE; - dep_button.clicked.connect (on_dep_button_clicked); - box2.pack_start (dep_button, false); if (transaction.find_installed_satisfier (dep).name == "") { var install_dep_button = new Gtk.ToggleButton.with_label (dgettext (null, "Install")); install_dep_button.margin = 3; + install_dep_button.halign = Gtk.Align.START; install_dep_button.toggled.connect (on_install_dep_button_toggled); - box2.pack_end (install_dep_button, false); + dep_name_grid.attach_next_to (install_dep_button, dep_button, Gtk.PositionType.RIGHT); string dep_name = find_install_button_dep_name (install_dep_button); install_dep_button.active = (dep_name in transaction.to_install); } - box.pack_start (box2); - } else { - var dep_button = new Gtk.Button.with_label (dep); - dep_button.relief = Gtk.ReliefStyle.NONE; - dep_button.halign = Gtk.Align.START; - dep_button.clicked.connect (on_dep_button_clicked); - box.pack_start (dep_button, false); } } - deps_grid.attach_next_to (box, label, Gtk.PositionType.RIGHT); + deps_grid.attach_next_to (dep_name_grid, label, Gtk.PositionType.RIGHT); return label as Gtk.Widget; } @@ -575,11 +661,81 @@ namespace Pamac { widget.destroy (); } - void set_package_details (string pkgname) { - AlpmPackageDetails details = transaction.get_pkg_details (pkgname); + async Gdk.Pixbuf get_screenshot_pixbuf (string url) { + var uri = File.new_for_uri (url); + var cached_screenshot = File.new_for_path ("/tmp/pamac-app-screenshots/%s".printf (uri.get_basename ())); + Gdk.Pixbuf pixbuf = null; + if (cached_screenshot.query_exists ()) { + try { + pixbuf = new Gdk.Pixbuf.from_file (cached_screenshot.get_path ()); + } catch (GLib.Error e) { + stderr.printf ("%s: %s\n", url, e.message); + } + } else { + // download screenshot + var session = new Soup.Session (); + var utsname = Posix.utsname(); + session.user_agent = "pamac (%s %s)".printf (utsname.sysname, utsname.machine); + try { + var request = session.request (url); + try { + var inputstream = yield request.send_async (null); + pixbuf = new Gdk.Pixbuf.from_stream (inputstream); + // scale pixbux at a width of 600 pixels + int width = pixbuf.get_width (); + if (width > 600) { + float ratio = (float) width / (float) pixbuf.get_height (); + int new_height = (int) (600 / ratio); + pixbuf = pixbuf.scale_simple (600, new_height, Gdk.InterpType.BILINEAR); + } + // save scaled image in tmp + FileOutputStream os = cached_screenshot.append_to (FileCreateFlags.NONE); + pixbuf.save_to_stream (os, "png"); + } catch (GLib.Error e) { + stderr.printf ("%s: %s\n", url, e.message); + } + } catch (GLib.Error e) { + stderr.printf ("%s: %s\n", url, e.message); + } + } + return pixbuf; + } + + void set_package_details (string pkgname, string app_name) { + AlpmPackageDetails details = transaction.get_pkg_details (pkgname, app_name); + // download screenshot + app_screenshot.pixbuf = null; + if (details.screenshot != "") { + get_screenshot_pixbuf.begin (details.screenshot, (obj, res) => { + var pixbuf = get_screenshot_pixbuf.end (res); + app_screenshot.pixbuf = pixbuf; + }); + } // infos - name_label.set_markup ("<big><b>%s %s</b></big>".printf (details.name, details.version)); + if (details.app_name == "") { + name_label.set_markup ("<big><b>%s %s</b></big>".printf (details.name, details.version)); + app_image.pixbuf = package_icon; + } else { + name_label.set_markup ("<big><b>%s (%s) %s</b></big>".printf (Markup.escape_text (details.app_name), details.name, details.version)); + if (details.icon != "") { + try { + var pixbuf = new Gdk.Pixbuf.from_file (details.icon); + app_image.pixbuf = pixbuf; + } catch (GLib.Error e) { + app_image.pixbuf = package_icon; + stderr.printf ("%s: %s\n", details.icon, e.message); + } + } else { + app_image.pixbuf = package_icon; + } + } desc_label.set_text (details.desc); + if (details.long_desc == "") { + long_desc_label.visible = false; + } else { + long_desc_label.set_text (details.long_desc); + long_desc_label.visible = true; + } string escaped_url = Markup.escape_text (details.url); link_label.set_markup ("<a href=\"%s\">%s</a>".printf (escaped_url, escaped_url)); StringBuilder licenses = new StringBuilder (); @@ -727,14 +883,17 @@ namespace Pamac { } void set_aur_details (string pkgname) { + app_image.pixbuf = null; + app_screenshot.pixbuf = null; name_label.set_text (""); desc_label.set_text (""); link_label.set_text (""); licenses_label.set_text (""); + long_desc_label.visible = false; remove_togglebutton.visible = false; reinstall_togglebutton.visible = false; install_togglebutton.visible = false; - properties_stackswitcher.visible = false; + properties_stacksidebar.visible = false; details_grid.foreach (destroy_widget); deps_grid.foreach (destroy_widget); this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); @@ -745,6 +904,7 @@ namespace Pamac { AURPackageDetails details = transaction.get_aur_details.end (res); // infos name_label.set_markup ("<big><b>%s %s</b></big>".printf (details.name, details.version)); + app_image.pixbuf = package_icon; desc_label.set_text (details.desc); string aur_url = "http://aur.archlinux.org/packages/" + details.name; string escaped_url = Markup.escape_text (details.url); @@ -765,7 +925,7 @@ namespace Pamac { remove_togglebutton.active = transaction.to_remove.contains (pkg.name); } // details - properties_stackswitcher.visible = true; + properties_stacksidebar.visible = true; details_grid.foreach (destroy_widget); Gtk.Widget? previous_widget = null; if (details.packagebase != details.name) { @@ -774,14 +934,11 @@ namespace Pamac { if (details.maintainer != "") { previous_widget = populate_details_grid (dgettext (null, "Maintainer"), details.maintainer, previous_widget); } - GLib.Time time = GLib.Time.local ((time_t) details.firstsubmitted); - previous_widget = populate_details_grid (dgettext (null, "First Submitted"), time.format ("%a %d %b %Y %X %Z"), previous_widget); - time = GLib.Time.local ((time_t) details.lastmodified); - previous_widget = populate_details_grid (dgettext (null, "Last Modified"), time.format ("%a %d %b %Y %X %Z"), previous_widget); + previous_widget = populate_details_grid (dgettext (null, "First Submitted"), details.firstsubmitted, previous_widget); + previous_widget = populate_details_grid (dgettext (null, "Last Modified"), details.lastmodified, previous_widget); previous_widget = populate_details_grid (dgettext (null, "Votes"), details.numvotes.to_string (), previous_widget); - if (details.outofdate != 0) { - time = GLib.Time.local ((time_t) details.outofdate); - previous_widget = populate_details_grid (dgettext (null, "Out of Date"), time.format ("%a %d %b %Y %X %Z"), previous_widget); + if (details.outofdate != "") { + previous_widget = populate_details_grid (dgettext (null, "Out of Date"), details.outofdate, previous_widget); } details_grid.show_all (); // deps @@ -888,10 +1045,26 @@ namespace Pamac { packages_treeview.freeze_notify (); packages_treeview.freeze_child_notify (); packages_list.clear (); + // scroll to top + packages_scrolledwindow.vadjustment.value = 0; + if (pkgs.length == 0) { + origin_stack.visible_child_name = "no_item"; + packages_treeview.thaw_child_notify (); + packages_treeview.thaw_notify (); + this.get_window ().set_cursor (null); + return; + } foreach (unowned AlpmPackage pkg in pkgs) { string version; uint64 size; string size_str; + string summary; + Gdk.Pixbuf pixbuf = null; + if (pkg.app_name == "") { + summary = "<b>%s</b>\n%s".printf (pkg.name, Markup.escape_text (pkg.desc)); + } else { + summary = "<b>%s (%s)</b>\n%s".printf (Markup.escape_text (pkg.app_name), pkg.name, Markup.escape_text (pkg.desc)); + } if (filters_stack.visible_child_name == "updates") { version = "<b>%s</b>\n(%s)".printf (pkg.version, pkg.installed_version); size = pkg.download_size; @@ -901,14 +1074,37 @@ namespace Pamac { size = pkg.size; size_str = GLib.format_size (pkg.size); } + if (pkg.icon != "") { + try { + pixbuf = new Gdk.Pixbuf.from_file_at_scale (pkg.icon, 32, 32, true); + } catch (GLib.Error e) { + // some icons are not in the right repo + string icon = pkg.icon; + if ("extra" in pkg.icon) { + icon = pkg.icon.replace ("extra", "community"); + } else if ("community" in pkg.icon) { + icon = pkg.icon.replace ("community", "extra"); + } + try { + pixbuf = new Gdk.Pixbuf.from_file_at_scale (icon, 32, 32, true); + } catch (GLib.Error e) { + pixbuf = package_icon.scale_simple (32, 32, Gdk.InterpType.BILINEAR); + stderr.printf ("%s: %s\n", pkg.icon, e.message); + } + } + } else { + pixbuf = package_icon.scale_simple (32, 32, Gdk.InterpType.BILINEAR); + } packages_list.insert_with_values (null, -1, 0, pkg.origin, 1, pkg.name, - 2, "<b>%s</b>\n%s".printf (pkg.name, Markup.escape_text (pkg.desc)), + 2, summary, 3, version, 4, pkg.repo, 5, size, - 6, size_str); + 6, size_str, + 7, pkg.app_name, + 8, pixbuf); } packages_treeview.thaw_child_notify (); packages_treeview.thaw_notify (); @@ -920,6 +1116,15 @@ namespace Pamac { aur_treeview.freeze_notify (); aur_treeview.freeze_child_notify (); aur_list.clear (); + // scroll to top + aur_scrolledwindow.vadjustment.value = 0; + if (pkgs.length == 0) { + origin_stack.visible_child_name = "no_item"; + aur_treeview.thaw_child_notify (); + aur_treeview.thaw_notify (); + this.get_window ().set_cursor (null); + return; + } foreach (unowned AURPackage aur_pkg in pkgs) { string version; if (filters_stack.visible_child_name == "updates") { @@ -935,53 +1140,86 @@ namespace Pamac { 2, "<b>%s</b>\n%s".printf (aur_pkg.name, Markup.escape_text (aur_pkg.desc)), 3, version, 4, aur_pkg.popularity, - 5, "%.2f".printf (aur_pkg.popularity)); + 5, "%.2f".printf (aur_pkg.popularity), + 6, package_icon.scale_simple (32, 32, Gdk.InterpType.BILINEAR)); } aur_treeview.thaw_child_notify (); aur_treeview.thaw_notify (); this.get_window ().set_cursor (null); } - void refresh_packages_list () { + public void refresh_packages_list () { + if (filters_stack.visible_child_name != "search") { + searchbar.search_mode_enabled = false; + search_button.active = false; + origin_stack.visible_child_name = "repos"; + } + if (filters_stack.visible_child_name != "pending") { + uint total_pending = transaction.to_install.length + transaction.to_remove.length + transaction.to_build.length; + if (total_pending == 0) { + pending_stacksidebar.visible = false; + updates_stacksidebar.visible = true; + } + } switch (filters_stack.visible_child_name) { - case "search": - aur_list.clear (); - filters_stack.visible = true; + case "categories": + show_sidebar (); set_pendings_operations (); - packages_stackswitcher.visible = transaction.enable_aur; - if (packages_stack.visible_child_name == "updated") { - packages_stack.visible_child_name = "repos"; - } - Gtk.TreeSelection selection = search_treeview.get_selection (); - if (selection.get_selected (null, null)) { - on_search_treeview_selection_changed (); + on_categories_listbox_row_activated (categories_listbox.get_selected_row ()); + break; + case "search": + if (search_string != null) { + if (transaction.enable_aur) { + show_sidebar (); + } else { + hide_sidebar (); + } + if (show_last_search) { + // select lest search_string + bool found = false; + search_comboboxtext.get_model ().foreach ((model, path, iter) => { + string line; + model.get (iter, 0, out line); + if (line == search_string) { + found = true; + // we select the iter in search list + // it will populate the packages list with the comboboxtext changed signal + search_comboboxtext.set_active_iter (null); + search_comboboxtext.set_active_iter (iter); + } + return found; + }); + } } else { - show_default_pkgs (); - search_entry.grab_focus (); + hide_sidebar (); + if (origin_stack.visible_child_name != "repos") { + // add a timeout for a smooth transition + Timeout.add (250, () => { + origin_stack.visible_child_name = "repos"; + show_default_pkgs (); + return false; + }); + } + // else do not modify packages list } break; case "groups": - filters_stack.visible = true; + show_sidebar (); set_pendings_operations (); - packages_stack.visible_child_name = "repos"; - packages_stackswitcher.visible = false; - on_groups_treeview_selection_changed (); + on_groups_listbox_row_activated (groups_listbox.get_selected_row ()); break; - case "states": - filters_stack.visible = true; + case "installed": + show_sidebar (); set_pendings_operations (); - packages_stack.visible_child_name = "repos"; - packages_stackswitcher.visible = false; - on_states_treeview_selection_changed (); + on_installed_listbox_row_activated (installed_listbox.get_selected_row ()); break; case "repos": - filters_stack.visible = true; + show_sidebar (); set_pendings_operations (); - packages_stack.visible_child_name = "repos"; - packages_stackswitcher.visible = false; - on_repos_treeview_selection_changed (); + on_repos_listbox_row_activated (repos_listbox.get_selected_row ()); break; case "updates": + hide_sidebar (); packages_list.clear (); aur_list.clear (); var attention_val = GLib.Value (typeof (bool)); @@ -989,22 +1227,81 @@ namespace Pamac { filters_stack.child_set_property (filters_stack.get_child_by_name ("updates"), "needs-attention", attention_val); - filters_stack.visible = false; - packages_stack.visible_child_name = "repos"; - packages_stackswitcher.visible = false; - apply_button.visible = false; - this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); - transaction.start_get_updates (); + if (updates_checked) { + populate_updates (); + } else { + apply_button.sensitive = false; + this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); + transaction.start_get_updates (); + } + break; + case "pending": + if (transaction.to_build.length != 0) { + show_sidebar (); + } else { + hide_sidebar (); + } + var attention_val = GLib.Value (typeof (bool)); + attention_val.set_boolean (false); + filters_stack.child_set_property (filters_stack.get_child_by_name ("pending"), + "needs-attention", + attention_val); + AlpmPackage[] pkgs = {}; + foreach (unowned string pkgname in transaction.to_install) { + AlpmPackage pkg = transaction.get_installed_pkg (pkgname); + if (pkg.name == "") { + pkg = transaction.get_sync_pkg (pkgname); + } + if (pkg.name != "") { + pkgs += pkg; + } + } + foreach (unowned string pkgname in transaction.to_remove) { + AlpmPackage pkg = transaction.get_installed_pkg (pkgname); + if (pkg.name != "") { + pkgs += pkg; + } + } + populate_packages_list (pkgs); + if (transaction.to_build.length != 0) { + AURPackage[] aur_pkgs = {}; + foreach (unowned string pkgname in transaction.to_build) { + transaction.get_aur_details.begin (pkgname, (obj, res) => { + AURPackageDetails details_pkg = transaction.get_aur_details.end (res); + if (details_pkg.name != "") { + var aur_pkg = AURPackage () { + name = details_pkg.name, + version = details_pkg.version, + installed_version = "", + desc = details_pkg.desc, + popularity = details_pkg.popularity + }; + aur_pkgs += aur_pkg; + populate_aur_list (aur_pkgs); + if (aur_pkgs.length > 0 ) { + if (pkgs.length == 0) { + origin_stack.visible_child_name = "aur"; + } else { + attention_val.set_boolean (true); + origin_stack.child_set_property (origin_stack.get_child_by_name ("aur"), + "needs-attention", + attention_val); + } + } + } + }); + } + } break; default: break; } } - void display_package_properties (string pkgname) { + void display_package_properties (string pkgname, string app_name = "") { current_package_displayed = pkgname; files_scrolledwindow.visible = true; - set_package_details (current_package_displayed); + set_package_details (current_package_displayed, app_name); } void display_aur_properties (string pkgname) { @@ -1024,8 +1321,9 @@ namespace Pamac { Gtk.TreeIter iter; packages_list.get_iter (out iter, path); string pkgname; - packages_list.get (iter, 1, out pkgname); - display_package_properties (pkgname); + string app_name; + packages_list.get (iter, 1, out pkgname, 7, out app_name); + display_package_properties (pkgname, app_name); this.get_window ().set_cursor (null); } } @@ -1268,47 +1566,65 @@ namespace Pamac { set_pendings_operations (); } - void on_packages_stack_visible_child_changed () { - // do nothing if it we want to see pendings AUR operations - switch (filters_stack.visible_child_name) { - case "search": - Gtk.TreeIter iter; - Gtk.TreeSelection selection = search_treeview.get_selection (); - if (selection.get_selected (null, out iter)) { + void on_origin_stack_visible_child_changed () { + switch (origin_stack.visible_child_name) { + case "repos": + if (filters_stack.visible_child_name == "search") { + Timeout.add (200, () => { + search_entry.grab_focus_without_selecting (); + search_entry.set_position (-1); + return false; + }); + if (search_string == null) { + return; + } this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); while (Gtk.events_pending ()) { Gtk.main_iteration (); } - string search_string; - search_list.get (iter, 0, out search_string); - switch (packages_stack.visible_child_name) { - case "repos": - transaction.search_pkgs.begin (search_string, (obj, res) => { - // get custom sort by relevance - packages_list.set_sort_column_id (Gtk.TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, 0); - populate_packages_list (transaction.search_pkgs.end (res)); - }); - break; - case "aur": - transaction.search_in_aur.begin (search_string, (obj, res) => { - populate_aur_list (transaction.search_in_aur.end (res)); - }); - break; - default: - break; + transaction.search_pkgs.begin (search_string, (obj, res) => { + // get custom sort by relevance + packages_list.set_sort_column_id (Gtk.TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, 0); + populate_packages_list (transaction.search_pkgs.end (res)); + }); + } else if (filters_stack.visible_child_name == "updates") { + populate_packages_list (repos_updates); + } else if (filters_stack.visible_child_name == "pending") { + if ((transaction.to_install.length + transaction.to_remove.length) == 0) { + origin_stack.visible_child_name = "no_item"; + } + } + break; + case "aur": + if (filters_stack.visible_child_name == "search") { + Timeout.add (200, () => { + search_entry.grab_focus_without_selecting (); + search_entry.set_position (-1); + return false; + }); + if (search_string == null) { + origin_stack.visible_child_name = "no_item"; + return; + } + this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); + while (Gtk.events_pending ()) { + Gtk.main_iteration (); } + transaction.search_in_aur.begin (search_string, (obj, res) => { + populate_aur_list (transaction.search_in_aur.end (res)); + }); + var attention_val = GLib.Value (typeof (bool)); + attention_val.set_boolean (false); + origin_stack.child_set_property (origin_stack.get_child_by_name ("aur"), + "needs-attention", + attention_val); + } else if (filters_stack.visible_child_name == "updates") { + populate_aur_list (aur_updates); } break; default: break; } - if (packages_stack.visible_child_name == "aur") { - var attention_val = GLib.Value (typeof (bool)); - attention_val.set_boolean (false); - packages_stack.child_set_property (packages_stack.get_child_by_name ("aur"), - "needs-attention", - attention_val); - } } [GtkCallback] @@ -1474,106 +1790,103 @@ namespace Pamac { return false; } + void on_search_mode_enabled () { + if (searchbar.search_mode_enabled) { + filters_stack.visible_child_name = "search"; + // do it after change filters stack child + // so show_last_search=false if we "type to search" + search_button.active = true; + set_pendings_operations (); + } + } + [GtkCallback] - void on_search_entry_activate () { - string search_string = search_entry.get_text ().strip (); - if (search_string != "") { - this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); - Gtk.TreeModel model; - Gtk.TreeIter iter; - Gtk.TreeSelection selection = search_treeview.get_selection (); - // add search string in search_list if needed - bool found = false; - // check if search string is already selected in search list - if (selection.get_selected (out model, out iter)) { - string selected_string; - model.get (iter, 0, out selected_string); - if (selected_string == search_string) { - on_search_treeview_selection_changed (); - found = true; - } - } - // check if search string exists in search list - if (!found) { - search_list.foreach ((_model, _path, _iter) => { - string line; - _model.get (_iter, 0, out line); - if (line == search_string) { - found = true; - // we select the iter in search_list - // it will populate the list with the selection changed signal - selection.select_iter (_iter); - } - return found; - }); - } - if (!found) { - search_list.insert_with_values (out iter, -1, 0, search_string); - // we select the iter in search_list - // it will populate the list with the selection changed signal - selection.select_iter (iter); - } + void on_search_button_toggled () { + if (search_button.active) { + show_last_search = true; + searchbar.search_mode_enabled = true; + } else { + searchbar.search_mode_enabled = false; } } bool search_entry_timeout_callback () { - on_search_entry_activate (); + // add search string in search_list if needed + string tmp_search_string = search_comboboxtext.get_active_text ().strip (); + if (tmp_search_string == "") { + search_entry_timeout_id = 0; + return false; + } + bool found = false; + // check if search string exists in search list + search_comboboxtext.get_model ().foreach ((model, path, iter) => { + string line; + model.get (iter, 0, out line); + if (line == tmp_search_string) { + found = true; + // we select the iter in search list + // it will populate the packages list with the comboboxtext changed signal + search_comboboxtext.set_active_iter (iter); + } + return found; + }); + if (!found) { + Gtk.TreeIter iter; + var store = search_comboboxtext.get_model () as Gtk.ListStore; + store.insert_with_values (out iter, -1, 0, tmp_search_string); + // we select the iter in search list + // it will populate the packages list with the comboboxtext changed signal + search_comboboxtext.set_active_iter (iter); + } search_entry_timeout_id = 0; return false; } [GtkCallback] - void on_search_entry_changed () { - if (search_entry.get_text ().strip () != "") { - if (search_entry_timeout_id != 0) { - Source.remove (search_entry_timeout_id); + void on_search_comboboxtext_changed () { + if (search_comboboxtext.get_active () == -1) { + // entry was edited + if (search_comboboxtext.get_active_text ().strip () != "") { + if (search_entry_timeout_id != 0) { + Source.remove (search_entry_timeout_id); + } + search_entry_timeout_id = Timeout.add (500, search_entry_timeout_callback); } - search_entry_timeout_id = Timeout.add (750, search_entry_timeout_callback); - } - } - - [GtkCallback] - void on_search_treeview_selection_changed () { - Gtk.TreeIter iter; - Gtk.TreeSelection selection = search_treeview.get_selection (); - if (selection.get_selected (null, out iter)) { + } else { + // a history line was choosen this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); - string search_string; - search_list.get (iter, 0, out search_string); - // change search entry text to the selected one - search_entry.changed.disconnect (on_search_entry_changed); - search_entry.set_text (search_string); - search_entry.changed.connect (on_search_entry_changed); + search_string = search_comboboxtext.get_active_text (); Timeout.add (200, () => { search_entry.grab_focus_without_selecting (); + search_entry.set_position (-1); return false; }); - search_entry.set_position (-1); - switch (packages_stack.visible_child_name) { + switch (origin_stack.visible_child_name) { case "repos": transaction.search_pkgs.begin (search_string, (obj, res) => { + if (transaction.enable_aur) { + show_sidebar (); + } else { + hide_sidebar (); + } var pkgs = transaction.search_pkgs.end (res); // get custom sort by relevance packages_list.set_sort_column_id (Gtk.TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, 0); populate_packages_list (pkgs); if (transaction.search_aur) { - if (pkgs.length == 0) { - transaction.search_in_aur.begin (search_string, (obj, res) => { - if (transaction.search_in_aur.end (res).length != 0) { - packages_stack.visible_child_name = "aur"; - } - }); - } else { - transaction.search_in_aur.begin (search_string, (obj, res) => { - if (transaction.search_in_aur.end (res).length != 0) { + transaction.search_in_aur.begin (search_string, (obj, res) => { + if (transaction.search_in_aur.end (res).length > 0) { + if (pkgs.length > 0) { var attention_val = GLib.Value (typeof (bool)); attention_val.set_boolean (true); - packages_stack.child_set_property (packages_stack.get_child_by_name ("aur"), + origin_stack.child_set_property (origin_stack.get_child_by_name ("aur"), "needs-attention", attention_val); + } else { + origin_stack.visible_child_name = "aur"; } - }); - } + } + }); } }); aur_list.clear (); @@ -1584,6 +1897,12 @@ namespace Pamac { }); packages_list.clear (); break; + case "updated": + origin_stack.visible_child_name = "repos"; + break; + case "no_item": + origin_stack.visible_child_name = "repos"; + break; default: break; } @@ -1591,127 +1910,120 @@ namespace Pamac { } [GtkCallback] - void on_groups_treeview_selection_changed () { - Gtk.TreeIter iter; - Gtk.TreeSelection selection = groups_treeview.get_selection (); - if (selection.get_selected (null, out iter)) { - this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); - string group_name; - groups_list.get (iter, 0, out group_name); - transaction.get_group_pkgs.begin (group_name, (obj, res) => { - populate_packages_list (transaction.get_group_pkgs.end (res)); - }); + void on_search_entry_icon_press (Gtk.EntryIconPosition pos, Gdk.Event event) { + if (pos == Gtk.EntryIconPosition.SECONDARY) { + search_entry.set_text (""); } } [GtkCallback] - void on_states_treeview_selection_changed () { - Gtk.TreeIter iter; - Gtk.TreeSelection selection = states_treeview.get_selection (); - if (selection.get_selected (null, out iter)) { - this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); - packages_stackswitcher.visible = false; - string state; - states_list.get (iter, 0, out state); - if (state == dgettext (null, "Installed")) { - transaction.get_installed_pkgs.begin ((obj, res) => { - populate_packages_list (transaction.get_installed_pkgs.end (res)); - }); - } else if (state == dgettext (null, "Explicitly installed")) { - transaction.get_explicitly_installed_pkgs.begin ((obj, res) => { - populate_packages_list (transaction.get_explicitly_installed_pkgs.end (res)); - }); - } else if (state == dgettext (null, "Orphans")) { - transaction.get_orphans.begin ((obj, res) => { - populate_packages_list (transaction.get_orphans.end (res)); - }); - } else if (state == dgettext (null, "Foreign")) { - transaction.get_foreign_pkgs.begin ((obj, res) => { - populate_packages_list (transaction.get_foreign_pkgs.end (res)); - }); - } else if (state == dgettext (null, "Pending")) { - AlpmPackage[] pkgs = {}; - foreach (unowned string pkgname in transaction.to_install) { - AlpmPackage pkg = transaction.get_installed_pkg (pkgname); - if (pkg.name == "") { - pkg = transaction.get_sync_pkg (pkgname); - } - if (pkg.name != "") { - pkgs += pkg; - } - } - foreach (unowned string pkgname in transaction.to_remove) { - AlpmPackage pkg = transaction.get_installed_pkg (pkgname); - if (pkg.name != "") { - pkgs += pkg; - } - } - populate_packages_list (pkgs); - if (transaction.to_build.length != 0) { - packages_stackswitcher.visible = true; - AURPackage[] aur_pkgs = {}; - foreach (unowned string pkgname in transaction.to_build) { - transaction.get_aur_details.begin (pkgname, (obj, res) => { - AURPackageDetails details_pkg = transaction.get_aur_details.end (res); - if (details_pkg.name != "") { - var aur_pkg = AURPackage () { - name = details_pkg.name, - version = details_pkg.version, - desc = details_pkg.desc, - popularity = details_pkg.popularity - }; - aur_pkgs += aur_pkg; - populate_aur_list (aur_pkgs); - if (aur_pkgs.length > 0 ) { - if (pkgs.length == 0) { - packages_stack.visible_child_name = "aur"; - } else { - var attention_val = GLib.Value (typeof (bool)); - attention_val.set_boolean (true); - packages_stack.child_set_property (packages_stack.get_child_by_name ("aur"), - "needs-attention", - attention_val); - } - } - } - }); - } - } - } - } + void on_categories_listbox_row_activated (Gtk.ListBoxRow row) { + this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); + var label = row.get_child () as Gtk.Label; + string matching_cat = ""; + string category = label.label; + if (category == dgettext (null, "Accessories")) { + matching_cat = "Utility"; + } else if (category == dgettext (null, "Audio & Video")) { + matching_cat = "AudioVideo"; + } else if (category == dgettext (null, "Development")) { + matching_cat = "Development"; + } else if (category == dgettext (null, "Education")) { + matching_cat = "Education"; + } else if (category == dgettext (null, "Games")) { + matching_cat = "Game"; + } else if (category == dgettext (null, "Graphics")) { + matching_cat = "Graphics"; + } else if (category == dgettext (null, "Internet")) { + matching_cat = "Network"; + } else if (category == dgettext (null, "Office")) { + matching_cat = "Office"; + } else if (category == dgettext (null, "Science")) { + matching_cat = "Science"; + } else if (category == dgettext (null, "Settings")) { + matching_cat = "Settings"; + } else if (category == dgettext (null, "System Tools")) { + matching_cat = "System"; + } + // get sort by app_name + packages_list.set_sort_column_id (2, Gtk.SortType.ASCENDING); + transaction.get_category_pkgs.begin (matching_cat, (obj, res) => { + populate_packages_list (transaction.get_category_pkgs.end (res)); + }); } [GtkCallback] - void on_repos_treeview_selection_changed () { - Gtk.TreeIter iter; - Gtk.TreeSelection selection = repos_treeview.get_selection (); - if (selection.get_selected (null, out iter)) { - this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); - string repo; - repos_list.get (iter, 0, out repo); - transaction.get_repo_pkgs.begin (repo, (obj, res) => { - populate_packages_list (transaction.get_repo_pkgs.end (res)); + void on_groups_listbox_row_activated (Gtk.ListBoxRow row) { + this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); + var label = row.get_child () as Gtk.Label; + string group_name = label.label; + transaction.get_group_pkgs.begin (group_name, (obj, res) => { + populate_packages_list (transaction.get_group_pkgs.end (res)); + }); + } + + [GtkCallback] + void on_installed_listbox_row_activated (Gtk.ListBoxRow row) { + this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); + origin_stack.visible_child_name = "repos"; + var label = row.get_child () as Gtk.Label; + string state = label.label; + if (state == dgettext (null, "Installed")) { + transaction.get_installed_pkgs.begin ((obj, res) => { + populate_packages_list (transaction.get_installed_pkgs.end (res)); + }); + } else if (state == dgettext (null, "Explicitly installed")) { + transaction.get_explicitly_installed_pkgs.begin ((obj, res) => { + populate_packages_list (transaction.get_explicitly_installed_pkgs.end (res)); + }); + } else if (state == dgettext (null, "Orphans")) { + transaction.get_orphans.begin ((obj, res) => { + populate_packages_list (transaction.get_orphans.end (res)); + }); + } else if (state == dgettext (null, "Foreign")) { + transaction.get_foreign_pkgs.begin ((obj, res) => { + populate_packages_list (transaction.get_foreign_pkgs.end (res)); }); } } + [GtkCallback] + void on_repos_listbox_row_activated (Gtk.ListBoxRow row) { + this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); + var label = row.get_child () as Gtk.Label; + string repo = label.label; + transaction.get_repo_pkgs.begin (repo, (obj, res) => { + populate_packages_list (transaction.get_repo_pkgs.end (res)); + }); + } + void on_main_stack_visible_child_changed () { switch (main_stack.visible_child_name) { case "browse": button_back.visible = false; + search_button.visible = true; + if (filters_stack.visible_child_name == "search") { + search_button.activate (); + } filters_stackswitcher.visible = true; details_button.sensitive = true; break; case "details": button_back.visible = true; + searchbar.search_mode_enabled = false; + search_button.active = false; + search_button.visible = false; filters_stackswitcher.visible = false; details_button.sensitive = true; break; case "term": - filters_stackswitcher.visible = false; button_back.visible = true; - details_button.get_style_context ().remove_class (Gtk.STYLE_CLASS_SUGGESTED_ACTION); + searchbar.search_mode_enabled = false; + search_button.active = false; + search_button.visible = false; + filters_stackswitcher.visible = false; details_button.sensitive = false; + details_button.get_style_context ().remove_class (Gtk.STYLE_CLASS_SUGGESTED_ACTION); break; default: break; @@ -1749,7 +2061,7 @@ namespace Pamac { text.prepend (line + "\n"); } } catch (GLib.Error e) { - GLib.stderr.printf ("%s\n", e.message); + stderr.printf ("%s\n", e.message); } var history_dialog = new HistoryDialog (this); history_dialog.textview.buffer.set_text (text.str, (int) text.len); @@ -1842,18 +2154,7 @@ namespace Pamac { main_stack.visible_child_name = "term"; } else { main_stack.visible_child_name = "browse"; - filters_stack.notify["visible-child"].disconnect (on_filters_stack_visible_child_changed); - filters_stack.visible_child_name = "states"; - filters_stack.notify["visible-child"].connect (on_filters_stack_visible_child_changed); - Gtk.TreeIter iter; - // show "Pending" in states_list - // "Pending" is at indice 4 - states_list.get_iter (out iter, new Gtk.TreePath.from_indices (4)); - Gtk.TreeSelection selection = states_treeview.get_selection (); - selection.changed.disconnect (on_states_treeview_selection_changed); - selection.select_iter (iter); - selection.changed.connect_after (on_states_treeview_selection_changed); - refresh_packages_list (); + filters_stack.visible_child_name = "pending"; } } } @@ -1873,7 +2174,7 @@ namespace Pamac { transaction_running = true; apply_button.sensitive = false; cancel_button.sensitive = false; - transaction_infobox.show_all (); + show_transaction_infobox (); transaction.run (); } @@ -1930,45 +2231,17 @@ namespace Pamac { this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); apply_button.sensitive = false; cancel_button.sensitive = true; - transaction_infobox.show_all (); + show_transaction_infobox (); transaction.start_refresh (force_refresh); } void on_get_updates_finished (Updates updates) { + updates_checked = true; + repos_updates = updates.repos_updates; + aur_updates = updates.aur_updates; if (filters_stack.visible_child_name == "updates") { - transaction.to_update.remove_all (); - packages_stackswitcher.visible = false; - if ((updates.repos_updates.length + updates.aur_updates.length) == 0) { - filters_stack.visible = false; - if (!refreshing && !transaction_running && !sysupgrade_running) { - transaction_infobox.visible = false; - } - packages_stack.visible_child_name = "updated"; - this.get_window ().set_cursor (null); - } else { - if (updates.repos_updates.length > 0) { - foreach (unowned AlpmPackage pkg in updates.repos_updates) { - if (!transaction.temporary_ignorepkgs.contains (pkg.name)) { - transaction.to_update.add (pkg.name); - } - } - populate_packages_list (updates.repos_updates); - } - if (updates.aur_updates.length > 0) { - packages_stackswitcher.visible = true; - foreach (unowned AURPackage pkg in updates.aur_updates) { - if (!transaction.temporary_ignorepkgs.contains (pkg.name)) { - transaction.to_update.add (pkg.name); - } - } - populate_aur_list (updates.aur_updates); - if (updates.repos_updates.length == 0) { - packages_stack.visible_child_name = "aur"; - } - } - set_pendings_operations (); - } - } else if ((updates.repos_updates.length + updates.aur_updates.length) > 0) { + populate_updates (); + } else if ((repos_updates.length + aur_updates.length) > 0) { this.get_window ().set_cursor (null); var attention_val = GLib.Value (typeof (bool)); attention_val.set_boolean (true); @@ -1978,6 +2251,43 @@ namespace Pamac { } } + void populate_updates () { + transaction.to_update.remove_all (); + if ((repos_updates.length + aur_updates.length) == 0) { + if (!refreshing && !transaction_running && !sysupgrade_running) { + hide_transaction_infobox (); + } + origin_stack.visible_child_name = "updated"; + this.get_window ().set_cursor (null); + } else { + if (repos_updates.length > 0) { + foreach (unowned AlpmPackage pkg in repos_updates) { + if (!transaction.temporary_ignorepkgs.contains (pkg.name)) { + transaction.to_update.add (pkg.name); + } + } + } + if (aur_updates.length > 0) { + foreach (unowned AURPackage pkg in aur_updates) { + if (!transaction.temporary_ignorepkgs.contains (pkg.name)) { + transaction.to_update.add (pkg.name); + } + } + show_sidebar (); + } + if (origin_stack.visible_child_name == "repos") { + if (repos_updates.length == 0) { + origin_stack.visible_child_name = "aur"; + } else { + populate_packages_list (repos_updates); + } + } else if (origin_stack.visible_child_name == "aur") { + populate_aur_list (aur_updates); + } + set_pendings_operations (); + } + } + void on_start_downloading () { cancel_button.sensitive = true; } @@ -2007,10 +2317,12 @@ namespace Pamac { void on_generate_mirrors_list () { generate_mirrors_list = true; apply_button.sensitive = false; - transaction_infobox.show_all (); + show_transaction_infobox (); } void on_transaction_finished (bool success) { + updates_checked = false; + show_last_search = true; transaction.refresh_handle (); if (main_stack.visible_child_name == "details") { if (transaction.get_installed_pkg (current_package_displayed).name != "" diff --git a/src/package.vala b/src/package.vala index bbb6282b..699c2914 100644 --- a/src/package.vala +++ b/src/package.vala @@ -20,6 +20,7 @@ namespace Pamac { public struct AlpmPackage { public string name; + public string app_name; public string version; public string installed_version; public string desc; @@ -27,15 +28,20 @@ namespace Pamac { public uint64 size; public uint64 download_size; public uint origin; + public string icon; } public struct AlpmPackageDetails { public string name; + public string app_name; public string version; public string desc; + public string long_desc; public string repo; public uint origin; public string url; + public string icon; + public string screenshot; public string packager; public string builddate; public string installdate; @@ -69,9 +75,9 @@ namespace Pamac { public string packagebase; public string url; public string maintainer; - public int64 firstsubmitted; - public int64 lastmodified; - public int64 outofdate; + public string firstsubmitted; + public string lastmodified; + public string outofdate; public int64 numvotes; public string[] licenses; public string[] depends; diff --git a/src/preferences_dialog.vala b/src/preferences_dialog.vala index 85313a11..f78e3faf 100644 --- a/src/preferences_dialog.vala +++ b/src/preferences_dialog.vala @@ -62,10 +62,11 @@ namespace Pamac { Gtk.ListStore ignorepkgs_liststore; Transaction transaction; uint64 previous_refresh_period; - string[] countries; public PreferencesDialog (Transaction transaction) { - Object (transient_for: transaction.application_window, use_header_bar: 1); + int use_header_bar; + Gtk.Settings.get_default ().get ("gtk-dialogs-use-header", out use_header_bar); + Object (transient_for: transaction.application_window, use_header_bar: use_header_bar); this.transaction = transaction; refresh_period_label.set_markup (dgettext (null, "How often to check for updates, value in hours") +":"); @@ -109,9 +110,11 @@ namespace Pamac { var mirrors_config = new MirrorsConfig ("/etc/pacman-mirrors.conf"); mirrors_country_comboboxtext.append_text (dgettext (null, "Worldwide")); mirrors_country_comboboxtext.active = 0; - countries = transaction.get_mirrors_countries (); + if (transaction.preferences_available_countries.length == 0) { + transaction.preferences_available_countries = transaction.get_mirrors_countries (); + } int index = 1; - foreach (unowned string country in countries) { + foreach (unowned string country in transaction.preferences_available_countries) { mirrors_country_comboboxtext.append_text (country); if (country == mirrors_config.choosen_country) { mirrors_country_comboboxtext.active = index; diff --git a/src/system_daemon.vala b/src/system_daemon.vala index d937d088..477bd99e 100644 --- a/src/system_daemon.vala +++ b/src/system_daemon.vala @@ -551,19 +551,23 @@ namespace Pamac { } return AlpmPackage () { name = alpm_pkg.name, + app_name = "", version = alpm_pkg.version, // desc can be null desc = alpm_pkg.desc ?? "", repo = (owned) repo_name, size = alpm_pkg.isize, - origin = (uint) alpm_pkg.origin + origin = (uint) alpm_pkg.origin, + icon = "" }; } else { return AlpmPackage () { name = "", + app_name = "", version = "", desc = "", - repo = "" + repo = "", + icon = "" }; } } diff --git a/src/transaction.vala b/src/transaction.vala index 3c56bf7a..113a8774 100644 --- a/src/transaction.vala +++ b/src/transaction.vala @@ -36,11 +36,12 @@ namespace Pamac { public abstract AlpmPackage find_sync_satisfier (string depstring) throws IOError; public abstract async AlpmPackage[] search_pkgs (string search_string) throws IOError; public abstract async AURPackage[] search_in_aur (string search_string) throws IOError; + public abstract async AlpmPackage[] get_category_pkgs (string category) throws IOError; public abstract string[] get_repos_names () throws IOError; public abstract async AlpmPackage[] get_repo_pkgs (string repo) throws IOError; public abstract string[] get_groups_names () throws IOError; public abstract async AlpmPackage[] get_group_pkgs (string groupname) throws IOError; - public abstract AlpmPackageDetails get_pkg_details (string pkgname) throws IOError; + public abstract AlpmPackageDetails get_pkg_details (string pkgname, string app_name) throws IOError; public abstract string[] get_pkg_files (string pkgname) throws IOError; public abstract async AURPackageDetails get_aur_details (string pkgname) throws IOError; public abstract string[] get_pkg_uninstalled_optdeps (string pkgname) throws IOError; @@ -154,6 +155,7 @@ namespace Pamac { StringBuilder warning_textbuffer; //dialogs + public string[] preferences_available_countries; TransactionSumDialog transaction_sum_dialog; public ProgressBox progress_box; Vte.Terminal term; @@ -198,6 +200,7 @@ namespace Pamac { connecting_user_daemon (); //creating dialogs this.application_window = application_window; + preferences_available_countries = {}; transaction_sum_dialog = new TransactionSumDialog (application_window); progress_box = new ProgressBox (); progress_box.progressbar.text = ""; @@ -658,6 +661,16 @@ namespace Pamac { return pkgs; } + public async AlpmPackage[] get_category_pkgs (string category) { + AlpmPackage[] pkgs = {}; + try { + pkgs = yield user_daemon.get_category_pkgs (category); + } catch (IOError e) { + stderr.printf ("IOError: %s\n", e.message); + } + return pkgs; + } + public string[] get_repos_names () { string[] repos_names = {}; try { @@ -708,9 +721,9 @@ namespace Pamac { return optdeps; } - public AlpmPackageDetails get_pkg_details (string pkgname) { + public AlpmPackageDetails get_pkg_details (string pkgname, string app_name) { try { - return user_daemon.get_pkg_details (pkgname); + return user_daemon.get_pkg_details (pkgname, app_name); } catch (IOError e) { stderr.printf ("IOError: %s\n", e.message); return AlpmPackageDetails () { diff --git a/src/user_daemon.vala b/src/user_daemon.vala index 09d8dc95..55f7fbe0 100644 --- a/src/user_daemon.vala +++ b/src/user_daemon.vala @@ -89,6 +89,8 @@ namespace Pamac { private Json.Array aur_updates_results; private HashTable<string, Json.Array> aur_search_results; private HashTable<string, Json.Object> aur_infos; + private As.Store app_store; + private string locale; public signal void get_updates_finished (Updates updates); @@ -98,6 +100,20 @@ namespace Pamac { aur_search_results = new HashTable<string, Json.Array> (str_hash, str_equal); aur_infos = new HashTable<string, Json.Object> (str_hash, str_equal); refresh_handle (); + // init appstream + app_store = new As.Store (); + locale = Environ.get_variable (Environ.get (), "LANG"); + if (locale != null) { + // remove .UTF-8 from locale + locale = locale.split (".")[0]; + } else { + locale = "C"; + } + try { + app_store.load (As.StoreLoadFlags.APP_INFO_SYSTEM); + } catch (Error e) { + stderr.printf ("Error: %s\n", e.message); + } } public void refresh_handle () { @@ -156,10 +172,74 @@ namespace Pamac { return 0; } + private string get_localized_string (HashTable<string,string> hashtable) { + unowned string val; + if (!hashtable.lookup_extended (locale, null, out val)) { + // try with just the language + if (!hashtable.lookup_extended (locale.split ("_")[0], null, out val)) { + // try C locale + if (!hashtable.lookup_extended ("C", null, out val)) { + return ""; + } + } + } + return val; + } + + private string get_app_name (As.App app) { + return get_localized_string (app.get_names ()); + } + + private string get_app_summary (As.App app) { + return get_localized_string (app.get_comments ()); + } + + private string get_app_description (As.App app) { + return get_localized_string (app.get_descriptions ()); + } + + private string get_app_icon (As.App app, string dbname) { + string icon = ""; + app.get_icons ().foreach ((as_icon) => { + if (as_icon.get_kind () == As.IconKind.CACHED) { + if (as_icon.get_height () == 64) { + icon = "/usr/share/app-info/icons/archlinux-arch-%s/64x64/%s".printf (dbname, as_icon.get_name ()); + } + } + }); + return icon; + } + + private string get_app_screenshot (As.App app) { + string screenshot = ""; + app.get_screenshots ().foreach ((as_screenshot) => { + if (as_screenshot.get_kind () == As.ScreenshotKind.DEFAULT) { + As.Image? as_image = as_screenshot.get_source (); + if (as_image != null) { + screenshot = as_image.get_url (); + } + } + }); + return screenshot; + } + + private As.App[] get_pkgname_matching_apps (string pkgname) { + As.App[] matching_apps = {}; + app_store.get_apps ().foreach ((app) => { + if (app.get_pkgname_default () == pkgname) { + matching_apps += app; + } + }); + return matching_apps; + } + private AlpmPackage initialise_pkg_struct (Alpm.Package? alpm_pkg) { if (alpm_pkg != null) { string installed_version = ""; string repo_name = ""; + string desc = alpm_pkg.desc ?? ""; + string icon = ""; + string app_name = ""; if (alpm_pkg.origin == Alpm.Package.From.LOCALDB) { installed_version = alpm_pkg.version; unowned Alpm.Package? sync_pkg = get_syncpkg (alpm_pkg.name); @@ -173,34 +253,117 @@ namespace Pamac { } repo_name = alpm_pkg.db.name; } + if (repo_name != "") { + // find if pkgname provides only one app + As.App[] matching_apps = get_pkgname_matching_apps (alpm_pkg.name); + if (matching_apps.length == 1) { + As.App app = matching_apps[0]; + app_name = get_app_name (app); + desc = get_app_summary (app); + icon = get_app_icon (app, repo_name); + } + } return AlpmPackage () { name = alpm_pkg.name, + app_name = (owned) app_name, version = alpm_pkg.version, installed_version = (owned) installed_version, - // desc can be null - desc = alpm_pkg.desc ?? "", + desc = (owned) desc, repo = (owned) repo_name, size = alpm_pkg.isize, download_size = alpm_pkg.download_size, - origin = (uint) alpm_pkg.origin + origin = (uint) alpm_pkg.origin, + icon = (owned) icon }; } else { return AlpmPackage () { name = "", + app_name = "", version = "", installed_version = "", desc = "", - repo = "" + repo = "", + icon = "" }; } } + private AlpmPackage[] initialise_pkg_structs (Alpm.Package? alpm_pkg) { + AlpmPackage[] pkgs = {}; + if (alpm_pkg != null) { + string installed_version = ""; + string repo_name = ""; + if (alpm_pkg.origin == Alpm.Package.From.LOCALDB) { + installed_version = alpm_pkg.version; + unowned Alpm.Package? sync_pkg = get_syncpkg (alpm_pkg.name); + if (sync_pkg != null) { + repo_name = sync_pkg.db.name; + } + } else if (alpm_pkg.origin == Alpm.Package.From.SYNCDB) { + unowned Alpm.Package? local_pkg = alpm_handle.localdb.get_pkg (alpm_pkg.name); + if (local_pkg != null) { + installed_version = local_pkg.version; + } + repo_name = alpm_pkg.db.name; + } + if (repo_name != "") { + As.App[] apps = get_pkgname_matching_apps (alpm_pkg.name); + if (apps.length > 0) { + // alpm_pkg provide some apps + foreach (unowned As.App app in apps) { + pkgs += AlpmPackage () { + name = alpm_pkg.name, + app_name = get_app_name (app), + version = alpm_pkg.version, + installed_version = installed_version, + desc = get_app_summary (app), + repo = repo_name, + size = alpm_pkg.isize, + download_size = alpm_pkg.download_size, + origin = (uint) alpm_pkg.origin, + icon = get_app_icon (app, repo_name) + }; + } + } else { + pkgs += AlpmPackage () { + name = alpm_pkg.name, + app_name = "", + version = alpm_pkg.version, + installed_version = installed_version, + desc = alpm_pkg.desc ?? "", + repo = repo_name, + size = alpm_pkg.isize, + download_size = alpm_pkg.download_size, + origin = (uint) alpm_pkg.origin, + icon = "" + }; + } + } else { + pkgs += AlpmPackage () { + name = alpm_pkg.name, + app_name = "", + version = alpm_pkg.version, + installed_version = installed_version, + desc = alpm_pkg.desc ?? "", + repo = repo_name, + size = alpm_pkg.isize, + download_size = alpm_pkg.download_size, + origin = (uint) alpm_pkg.origin, + icon = "" + }; + } + } + return pkgs; + } + public async AlpmPackage[] get_installed_pkgs () { AlpmPackage[] pkgs = {}; unowned Alpm.List<unowned Alpm.Package> pkgcache = alpm_handle.localdb.pkgcache; while (pkgcache != null) { unowned Alpm.Package alpm_pkg = pkgcache.data; - pkgs += initialise_pkg_struct (alpm_pkg); + foreach (unowned AlpmPackage pkg in initialise_pkg_structs (alpm_pkg)) { + pkgs += pkg; + } pkgcache.next (); } return pkgs; @@ -212,7 +375,9 @@ namespace Pamac { while (pkgcache != null) { unowned Alpm.Package alpm_pkg = pkgcache.data; if (alpm_pkg.reason == Alpm.Package.Reason.EXPLICIT) { - pkgs += initialise_pkg_struct (alpm_pkg); + foreach (unowned AlpmPackage pkg in initialise_pkg_structs (alpm_pkg)) { + pkgs += pkg; + } } pkgcache.next (); } @@ -236,7 +401,9 @@ namespace Pamac { syncdbs.next (); } if (sync_found == false) { - pkgs += initialise_pkg_struct (alpm_pkg); + foreach (unowned AlpmPackage pkg in initialise_pkg_structs (alpm_pkg)) { + pkgs += pkg; + } } pkgcache.next (); } @@ -253,7 +420,9 @@ namespace Pamac { if (requiredby.length == 0) { Alpm.List<string> optionalfor = alpm_pkg.compute_optionalfor (); if (optionalfor.length == 0) { - pkgs += initialise_pkg_struct (alpm_pkg); + foreach (unowned AlpmPackage pkg in initialise_pkg_structs (alpm_pkg)) { + pkgs += pkg; + } } else { optionalfor.free_inner (GLib.free); } @@ -336,15 +505,17 @@ namespace Pamac { } public async AlpmPackage[] search_pkgs (string search_string) { - AlpmPackage[] result = {}; + AlpmPackage[] pkgs = {}; Alpm.List<unowned Alpm.Package> alpm_pkgs = search_all_dbs (search_string); unowned Alpm.List<unowned Alpm.Package> list = alpm_pkgs; while (list != null) { unowned Alpm.Package alpm_pkg = list.data; - result += initialise_pkg_struct (alpm_pkg); + foreach (unowned AlpmPackage pkg in initialise_pkg_structs (alpm_pkg)) { + pkgs += pkg; + } list.next (); } - return result; + return pkgs; } private AURPackage initialise_aur_struct (Json.Object json_object) { @@ -388,9 +559,9 @@ namespace Pamac { string packagebase = ""; string url = ""; string maintainer = ""; - int64 firstsubmitted = 0; - int64 lastmodified = 0; - int64 outofdate = 0; + string firstsubmitted = ""; + string lastmodified = ""; + string outofdate = ""; int64 numvotes = 0; string[] licenses = {}; string[] depends = {}; @@ -431,13 +602,16 @@ namespace Pamac { maintainer = node.get_string (); } // firstsubmitted - firstsubmitted = json_object.get_int_member ("FirstSubmitted"); + GLib.Time time = GLib.Time.local ((time_t) json_object.get_int_member ("FirstSubmitted")); + firstsubmitted = time.format ("%x"); // lastmodified - lastmodified = json_object.get_int_member ("LastModified"); + time = GLib.Time.local ((time_t) json_object.get_int_member ("LastModified")); + lastmodified = time.format ("%x"); // outofdate can be null node = json_object.get_member ("OutOfDate"); if (!node.is_null ()) { - outofdate = node.get_int (); + time = GLib.Time.local ((time_t) node.get_int ()); + outofdate = time.format ("%x"); } //numvotes numvotes = json_object.get_int_member ("NumVotes"); @@ -544,9 +718,13 @@ namespace Pamac { unowned Alpm.Package sync_pkg = pkgcache.data; unowned Alpm.Package? local_pkg = alpm_handle.localdb.get_pkg (sync_pkg.name); if (local_pkg != null) { - pkgs += initialise_pkg_struct (local_pkg); + foreach (unowned AlpmPackage pkg in initialise_pkg_structs (local_pkg)) { + pkgs += pkg; + } } else { - pkgs += initialise_pkg_struct (sync_pkg); + foreach (unowned AlpmPackage pkg in initialise_pkg_structs (sync_pkg)) { + pkgs += pkg; + } } pkgcache.next (); } @@ -619,12 +797,52 @@ namespace Pamac { unowned Alpm.List<unowned Alpm.Package> list = alpm_pkgs; while (list != null) { unowned Alpm.Package alpm_pkg = list.data; - pkgs += initialise_pkg_struct (alpm_pkg); + foreach (unowned AlpmPackage pkg in initialise_pkg_structs (alpm_pkg)) { + pkgs += pkg; + } list.next (); } return pkgs; } + public async AlpmPackage[] get_category_pkgs (string category) { + AlpmPackage[] pkgs = {}; + app_store.get_apps ().foreach ((app) => { + app.get_categories ().foreach ((cat_name) => { + if (cat_name == category) { + string pkgname = app.get_pkgname_default (); + string installed_version = ""; + string repo_name = ""; + uint origin; + unowned Alpm.Package? local_pkg = alpm_handle.localdb.get_pkg (pkgname); + unowned Alpm.Package? sync_pkg = get_syncpkg (pkgname); + if (sync_pkg != null) { + if (local_pkg == null) { + repo_name = sync_pkg.db.name; + origin = (uint) sync_pkg.origin; + } else { + installed_version = local_pkg.version; + origin = (uint) local_pkg.origin; + } + pkgs += AlpmPackage () { + name = sync_pkg.name, + app_name = get_app_name (app), + version = sync_pkg.version, + installed_version = (owned) installed_version, + desc = get_app_summary (app), + repo = (owned) repo_name, + size = sync_pkg.isize, + download_size = sync_pkg.download_size, + origin = origin, + icon = get_app_icon (app, sync_pkg.db.name) + }; + } + } + }); + }); + return pkgs; + } + public string[] get_pkg_uninstalled_optdeps (string pkgname) { string[] optdeps = {}; unowned Alpm.Package? alpm_pkg = alpm_handle.localdb.get_pkg (pkgname); @@ -644,11 +862,15 @@ namespace Pamac { return optdeps; } - public AlpmPackageDetails get_pkg_details (string pkgname) { + public AlpmPackageDetails get_pkg_details (string pkgname, string appname) { string name = ""; + string app_name = ""; string version = ""; string desc = ""; + string long_desc = ""; string url = ""; + string icon = ""; + string screenshot = ""; string repo = ""; string has_signature = ""; string reason = ""; @@ -667,8 +889,9 @@ namespace Pamac { string[] conflicts = {}; var details = AlpmPackageDetails (); unowned Alpm.Package? alpm_pkg = alpm_handle.localdb.get_pkg (pkgname); + unowned Alpm.Package? sync_pkg = get_syncpkg (pkgname); if (alpm_pkg == null) { - alpm_pkg = get_syncpkg (pkgname); + alpm_pkg = sync_pkg; } if (alpm_pkg != null) { // name @@ -679,6 +902,36 @@ namespace Pamac { if (alpm_pkg.desc != null) { desc = alpm_pkg.desc; } + if (sync_pkg != null) { + if (appname != "") { + app_store.get_apps ().foreach ((app) => { + if (get_app_name (app) == appname) { + app_name = appname; + try { + long_desc = As.markup_convert_simple (get_app_description (app)); + } catch (Error e) { + stderr.printf ("Error: %s\n", e.message); + } + icon = get_app_icon (app, sync_pkg.db.name); + screenshot = get_app_screenshot (app); + } + }); + } else { + // find if pkgname provides only one app + As.App[] matching_apps = get_pkgname_matching_apps (pkgname); + if (matching_apps.length == 1) { + As.App app = matching_apps[0]; + app_name = get_app_name (app); + try { + desc = As.markup_convert_simple (get_app_description (app)); + } catch (Error e) { + stderr.printf ("Error: %s\n", e.message); + } + icon = get_app_icon (app, sync_pkg.db.name); + screenshot = get_app_screenshot (app); + } + } + } details.origin = (uint) alpm_pkg.origin; // url can be null if (alpm_pkg.url != null) { @@ -700,11 +953,10 @@ namespace Pamac { } // build_date GLib.Time time = GLib.Time.local ((time_t) alpm_pkg.builddate); - builddate = time.format ("%a %d %b %Y %X %Z"); + builddate = time.format ("%x"); // local pkg if (alpm_pkg.origin == Alpm.Package.From.LOCALDB) { // repo - unowned Alpm.Package? sync_pkg = get_syncpkg (alpm_pkg.name); if (sync_pkg != null) { repo = sync_pkg.db.name; } @@ -718,7 +970,7 @@ namespace Pamac { } // install_date time = GLib.Time.local ((time_t) alpm_pkg.installdate); - installdate = time.format ("%a %d %b %Y %X %Z"); + installdate = time.format ("%x"); // backups list = alpm_pkg.backups; while (list != null) { @@ -780,10 +1032,14 @@ namespace Pamac { } } details.name = (owned) name; + details.app_name = (owned) app_name; details.version = (owned) version; details.desc = (owned) desc; + details.long_desc = (owned) long_desc; details.repo = (owned) repo; details.url = (owned) url; + details.icon = (owned) icon; + details.screenshot = (owned) screenshot; details.packager = (owned) packager; details.builddate = (owned) builddate; details.installdate = (owned) installdate; diff --git a/vapi/appstream-glib.vapi b/vapi/appstream-glib.vapi new file mode 100644 index 00000000..047209cd --- /dev/null +++ b/vapi/appstream-glib.vapi @@ -0,0 +1,2077 @@ +/* appstream-glib.vapi generated by vapigen, do not modify. */ + +[CCode (cprefix = "As", gir_namespace = "AppStreamGlib", gir_version = "1.0", lower_case_cprefix = "as__")] +namespace As { + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_app_get_type ()")] + public class App : GLib.Object { + [CCode (cname = "as_app_new", has_construct_function = false)] + [Version (since = "0.1.0")] + public App (); + [CCode (cname = "as_app_add_addon")] + [Version (since = "0.1.7")] + public void add_addon (As.App addon); + [CCode (cname = "as_app_add_arch")] + [Version (since = "0.1.1")] + public void add_arch (string arch); + [CCode (cname = "as_app_add_bundle")] + [Version (since = "0.3.5")] + public void add_bundle (As.Bundle bundle); + [CCode (cname = "as_app_add_category")] + [Version (since = "0.1.0")] + public void add_category (string category); + [CCode (cname = "as_app_add_compulsory_for_desktop")] + [Version (since = "0.1.0")] + public void add_compulsory_for_desktop (string compulsory_for_desktop); + [CCode (cname = "as_app_add_content_rating")] + [Version (since = "0.5.12")] + public void add_content_rating (As.ContentRating content_rating); + [CCode (cname = "as_app_add_extends")] + [Version (since = "0.1.7")] + public void add_extends (string extends); + [CCode (cname = "as_app_add_format")] + [Version (since = "0.6.9")] + public void add_format (As.Format format); + [CCode (cname = "as_app_add_icon")] + [Version (since = "0.3.1")] + public void add_icon (As.Icon icon); + [CCode (cname = "as_app_add_keyword")] + [Version (since = "0.3.0")] + public void add_keyword (string locale, string keyword); + [CCode (cname = "as_app_add_kudo")] + [Version (since = "0.2.2")] + public void add_kudo (string kudo); + [CCode (cname = "as_app_add_kudo_kind")] + [Version (since = "0.2.2")] + public void add_kudo_kind (As.KudoKind kudo_kind); + [CCode (cname = "as_app_add_language")] + [Version (since = "0.1.0")] + public void add_language (int percentage, string locale); + [CCode (cname = "as_app_add_launchable")] + [Version (since = "0.6.13")] + public void add_launchable (As.Launchable launchable); + [CCode (cname = "as_app_add_metadata")] + [Version (since = "0.1.0")] + public void add_metadata (string key, string value); + [CCode (cname = "as_app_add_mimetype")] + [Version (since = "0.1.0")] + public void add_mimetype (string mimetype); + [CCode (cname = "as_app_add_permission")] + [Version (since = "0.3.5")] + public void add_permission (string permission); + [CCode (cname = "as_app_add_pkgname")] + [Version (since = "0.1.0")] + public void add_pkgname (string pkgname); + [CCode (cname = "as_app_add_provide")] + [Version (since = "0.1.6")] + public void add_provide (As.Provide provide); + [CCode (cname = "as_app_add_quirk")] + [Version (since = "0.5.10")] + public void add_quirk (As.AppQuirk quirk); + [CCode (cname = "as_app_add_release")] + [Version (since = "0.1.0")] + public void add_release (As.Release release); + [CCode (cname = "as_app_add_require")] + [Version (since = "0.6.7")] + public void add_require (As.Require require); + [CCode (cname = "as_app_add_review")] + [Version (since = "0.6.1")] + public void add_review (As.Review review); + [CCode (cname = "as_app_add_screenshot")] + [Version (since = "0.1.0")] + public void add_screenshot (As.Screenshot screenshot); + [CCode (cname = "as_app_add_suggest")] + [Version (since = "0.6.1")] + public void add_suggest (As.Suggest suggest); + [CCode (cname = "as_app_add_translation")] + [Version (since = "0.5.8")] + public void add_translation (As.Translation translation); + [CCode (cname = "as_app_add_url")] + [Version (since = "0.1.0")] + public void add_url (As.UrlKind url_kind, string url); + [CCode (cname = "as_app_convert_icons")] + [Version (since = "0.3.1")] + public bool convert_icons (As.IconKind kind) throws GLib.Error; + [CCode (cname = "as_app_equal")] + [Version (since = "0.6.1")] + public bool equal (As.App app2); + [CCode (cname = "as_app_error_quark")] + [Version (since = "0.1.2")] + public static GLib.Quark error_quark (); + [CCode (cname = "as_app_get_addons")] + [Version (since = "0.1.7")] + public unowned GLib.GenericArray<As.App> get_addons (); + [CCode (cname = "as_app_get_architectures")] + [Version (since = "0.1.1")] + public unowned GLib.GenericArray<string> get_architectures (); + [CCode (cname = "as_app_get_branch")] + [Version (since = "0.6.1")] + public unowned string get_branch (); + [CCode (cname = "as_app_get_bundle_default")] + [Version (since = "0.3.5")] + public unowned As.Bundle get_bundle_default (); + [CCode (cname = "as_app_get_bundles")] + [Version (since = "0.3.5")] + public unowned GLib.GenericArray<As.Bundle> get_bundles (); + [CCode (cname = "as_app_get_categories")] + [Version (since = "0.1.0")] + public unowned GLib.GenericArray<string> get_categories (); + [CCode (cname = "as_app_get_comment")] + [Version (since = "0.1.0")] + public unowned string get_comment (string locale); + [CCode (cname = "as_app_get_comments")] + [Version (since = "0.1.6")] + public unowned GLib.HashTable<string,string> get_comments (); + [CCode (cname = "as_app_get_compulsory_for_desktops")] + [Version (since = "0.1.0")] + public unowned GLib.GenericArray<string> get_compulsory_for_desktops (); + [CCode (cname = "as_app_get_content_rating")] + [Version (since = "0.5.12")] + public unowned As.ContentRating get_content_rating (string kind); + [CCode (cname = "as_app_get_content_ratings")] + [Version (since = "0.5.12")] + public unowned GLib.GenericArray<As.ContentRating> get_content_ratings (); + [CCode (cname = "as_app_get_description")] + [Version (since = "0.1.0")] + public unowned string get_description (string locale); + [CCode (cname = "as_app_get_descriptions")] + [Version (since = "0.1.6")] + public unowned GLib.HashTable<string,string> get_descriptions (); + [CCode (cname = "as_app_get_developer_name")] + [Version (since = "0.1.8")] + public unowned string get_developer_name (string locale); + [CCode (cname = "as_app_get_developer_names")] + [Version (since = "0.1.8")] + public unowned GLib.HashTable<string,string> get_developer_names (); + [CCode (cname = "as_app_get_extends")] + [Version (since = "0.1.7")] + public unowned GLib.GenericArray<string> get_extends (); + [CCode (cname = "as_app_get_format_by_filename")] + [Version (since = "0.6.9")] + public unowned As.Format get_format_by_filename (string filename); + [CCode (cname = "as_app_get_format_by_kind")] + [Version (since = "0.6.9")] + public unowned As.Format get_format_by_kind (As.FormatKind kind); + [CCode (cname = "as_app_get_format_default")] + [Version (since = "0.6.9")] + public unowned As.Format get_format_default (); + [CCode (cname = "as_app_get_formats")] + [Version (since = "0.6.9")] + public unowned GLib.GenericArray<string> get_formats (); + [CCode (cname = "as_app_get_icon_default")] + [Version (since = "0.3.1")] + public unowned As.Icon get_icon_default (); + [CCode (cname = "as_app_get_icon_for_size")] + [Version (since = "0.3.1")] + public unowned As.Icon get_icon_for_size (uint width, uint height); + [CCode (cname = "as_app_get_icon_path")] + [Version (since = "0.1.0")] + public unowned string get_icon_path (); + [CCode (cname = "as_app_get_icons")] + [Version (since = "0.3.1")] + public unowned GLib.GenericArray<As.Icon> get_icons (); + [CCode (cname = "as_app_get_id")] + [Version (since = "0.1.0")] + public unowned string get_id (); + [CCode (cname = "as_app_get_id_filename")] + [Version (since = "0.3.0")] + public unowned string get_id_filename (); + [CCode (cname = "as_app_get_id_kind")] + [Version (since = "0.1.0")] + public As.IdKind get_id_kind (); + [CCode (cname = "as_app_get_id_no_prefix")] + [Version (since = "0.5.12")] + public unowned string get_id_no_prefix (); + [CCode (cname = "as_app_get_keywords")] + [Version (since = "0.3.0")] + public unowned GLib.GenericArray<string> get_keywords (string locale); + [CCode (cname = "as_app_get_kind")] + [Version (since = "0.5.10")] + public As.AppKind get_kind (); + [CCode (cname = "as_app_get_kudos")] + [Version (since = "0.2.2")] + public unowned GLib.GenericArray<string> get_kudos (); + [CCode (cname = "as_app_get_language")] + [Version (since = "0.1.0")] + public int get_language (string locale); + [CCode (cname = "as_app_get_languages")] + [Version (since = "0.1.0")] + public GLib.List<weak string> get_languages (); + [CCode (cname = "as_app_get_launchable_by_kind")] + [Version (since = "0.6.13")] + public unowned As.Launchable get_launchable_by_kind (As.LaunchableKind kind); + [CCode (cname = "as_app_get_launchable_default")] + [Version (since = "0.6.13")] + public unowned As.Launchable get_launchable_default (); + [CCode (cname = "as_app_get_launchables")] + [Version (since = "0.6.13")] + public unowned GLib.GenericArray<As.Launchable> get_launchables (); + [CCode (cname = "as_app_get_merge_kind")] + [Version (since = "0.6.1")] + public As.AppMergeKind get_merge_kind (); + [CCode (cname = "as_app_get_metadata")] + [Version (since = "0.1.6")] + public unowned GLib.HashTable<string,string> get_metadata (); + [CCode (cname = "as_app_get_metadata_item")] + [Version (since = "0.1.0")] + public unowned string get_metadata_item (string key); + [CCode (cname = "as_app_get_metadata_license")] + [Version (since = "0.1.4")] + public unowned string get_metadata_license (); + [CCode (cname = "as_app_get_mimetypes")] + [Version (since = "0.2.0")] + public unowned GLib.GenericArray<string> get_mimetypes (); + [CCode (cname = "as_app_get_name")] + [Version (since = "0.1.0")] + public unowned string get_name (string locale); + [CCode (cname = "as_app_get_names")] + [Version (since = "0.1.6")] + public unowned GLib.HashTable<string,string> get_names (); + [CCode (cname = "as_app_get_origin")] + [Version (since = "0.3.2")] + public unowned string get_origin (); + [CCode (cname = "as_app_get_permissions")] + [Version (since = "0.3.5")] + public unowned GLib.GenericArray<string> get_permissions (); + [CCode (cname = "as_app_get_pkgname_default")] + [Version (since = "0.2.0")] + public unowned string get_pkgname_default (); + [CCode (cname = "as_app_get_pkgnames")] + [Version (since = "0.1.0")] + public unowned GLib.GenericArray<string> get_pkgnames (); + [CCode (cname = "as_app_get_priority")] + [Version (since = "0.1.0")] + public int get_priority (); + [CCode (cname = "as_app_get_project_group")] + [Version (since = "0.1.0")] + public unowned string get_project_group (); + [CCode (cname = "as_app_get_project_license")] + [Version (since = "0.1.0")] + public unowned string get_project_license (); + [CCode (cname = "as_app_get_provides")] + [Version (since = "0.1.6")] + public unowned GLib.GenericArray<As.Provide> get_provides (); + [CCode (cname = "as_app_get_release")] + [Version (since = "0.3.5")] + public unowned As.Release get_release (string version); + [CCode (cname = "as_app_get_release_default")] + [Version (since = "0.3.5")] + public unowned As.Release get_release_default (); + [CCode (cname = "as_app_get_releases")] + [Version (since = "0.1.0")] + public unowned GLib.GenericArray<As.Release> get_releases (); + [CCode (cname = "as_app_get_require_by_value")] + [Version (since = "0.6.7")] + public unowned As.Require get_require_by_value (As.RequireKind kind, string value); + [CCode (cname = "as_app_get_requires")] + [Version (since = "0.6.7")] + public unowned GLib.GenericArray<As.Require> get_requires (); + [CCode (cname = "as_app_get_reviews")] + [Version (since = "0.6.1")] + public unowned GLib.GenericArray<As.Screenshot> get_reviews (); + [CCode (cname = "as_app_get_scope")] + [Version (since = "0.6.1")] + public As.AppScope get_scope (); + [CCode (cname = "as_app_get_screenshots")] + [Version (since = "0.1.0")] + public unowned GLib.GenericArray<As.Screenshot> get_screenshots (); + [CCode (cname = "as_app_get_search_match")] + [Version (since = "0.6.13")] + public As.AppSearchMatch get_search_match (); + [CCode (cname = "as_app_get_source_file")] + [Version (since = "0.2.2")] + public unowned string get_source_file (); + [CCode (cname = "as_app_get_source_kind")] + [Version (since = "0.1.4")] + public As.FormatKind get_source_kind (); + [CCode (cname = "as_app_get_source_pkgname")] + [Version (since = "0.2.4")] + public unowned string get_source_pkgname (); + [CCode (cname = "as_app_get_state")] + [Version (since = "0.2.2")] + public As.AppState get_state (); + [CCode (cname = "as_app_get_suggests")] + [Version (since = "0.6.1")] + public unowned GLib.GenericArray<As.Suggest> get_suggests (); + [CCode (cname = "as_app_get_translations")] + [Version (since = "0.5.8")] + public unowned GLib.GenericArray<As.Translation> get_translations (); + [CCode (cname = "as_app_get_trust_flags")] + [Version (since = "0.2.2")] + public As.AppTrustFlags get_trust_flags (); + [CCode (cname = "as_app_get_unique_id")] + [Version (since = "0.6.1")] + public unowned string get_unique_id (); + [CCode (cname = "as_app_get_update_contact")] + [Version (since = "0.1.4")] + public unowned string get_update_contact (); + [CCode (cname = "as_app_get_url_item")] + [Version (since = "0.1.0")] + public unowned string get_url_item (As.UrlKind url_kind); + [CCode (cname = "as_app_get_urls")] + [Version (since = "0.1.0")] + public unowned GLib.HashTable<string,string> get_urls (); + [CCode (cname = "as_app_get_vetos")] + [Version (since = "0.2.5")] + public unowned GLib.GenericArray<string> get_vetos (); + [CCode (cname = "as_app_guess_source_kind")] + [Version (since = "0.1.8")] + public static As.FormatKind guess_source_kind (string filename); + [CCode (cname = "as_app_has_category")] + [Version (since = "0.1.5")] + public bool has_category (string category); + [CCode (cname = "as_app_has_compulsory_for_desktop")] + [Version (since = "0.5.12")] + public bool has_compulsory_for_desktop (string desktop); + [CCode (cname = "as_app_has_kudo")] + [Version (since = "0.2.2")] + public bool has_kudo (string kudo); + [CCode (cname = "as_app_has_kudo_kind")] + [Version (since = "0.2.2")] + public bool has_kudo_kind (As.KudoKind kudo); + [CCode (cname = "as_app_has_permission")] + [Version (since = "0.3.5")] + public bool has_permission (string permission); + [CCode (cname = "as_app_has_quirk")] + [Version (since = "0.5.10")] + public bool has_quirk (As.AppQuirk quirk); + [CCode (cname = "as_app_kind_from_string")] + [Version (since = "0.5.10")] + public static As.AppKind kind_from_string (string kind); + [CCode (cname = "as_app_kind_to_string")] + [Version (since = "0.5.10")] + public static unowned string kind_to_string (As.AppKind kind); + [CCode (cname = "as_app_merge_kind_from_string")] + [Version (since = "0.6.1")] + public static As.AppMergeKind merge_kind_from_string (string merge_kind); + [CCode (cname = "as_app_merge_kind_to_string")] + [Version (since = "0.6.1")] + public static unowned string merge_kind_to_string (As.AppMergeKind merge_kind); + [CCode (cname = "as_app_parse_file")] + [Version (since = "0.1.2")] + public bool parse_file (string filename, As.AppParseFlags flags) throws GLib.Error; + [CCode (cname = "as_app_remove_category")] + [Version (since = "0.6.13")] + public void remove_category (string category); + [CCode (cname = "as_app_remove_format")] + [Version (since = "0.6.9")] + public void remove_format (As.Format format); + [CCode (cname = "as_app_remove_kudo")] + [Version (since = "0.6.13")] + public void remove_kudo (string kudo); + [CCode (cname = "as_app_remove_metadata")] + [Version (since = "0.1.0")] + public void remove_metadata (string key); + [CCode (cname = "as_app_remove_veto")] + [Version (since = "0.4.1")] + public void remove_veto (string description); + [CCode (cname = "as_app_scope_from_string")] + [Version (since = "0.6.1")] + public static As.AppScope scope_from_string (string scope); + [CCode (cname = "as_app_scope_to_string")] + [Version (since = "0.6.1")] + public static unowned string scope_to_string (As.AppScope scope); + [CCode (cname = "as_app_search_matches")] + [Version (since = "0.1.0")] + public uint search_matches (string search); + [CCode (cname = "as_app_search_matches_all")] + [Version (since = "0.1.3")] + public uint search_matches_all (string search); + [CCode (cname = "as_app_set_branch")] + [Version (since = "0.6.1")] + public void set_branch (string branch); + [CCode (cname = "as_app_set_comment")] + [Version (since = "0.1.0")] + public void set_comment (string locale, string comment); + [CCode (cname = "as_app_set_description")] + [Version (since = "0.1.0")] + public void set_description (string locale, string description); + [CCode (cname = "as_app_set_developer_name")] + [Version (since = "0.1.0")] + public void set_developer_name (string locale, string developer_name); + [CCode (cname = "as_app_set_icon_path")] + [Version (since = "0.1.0")] + public void set_icon_path (string icon_path); + [CCode (cname = "as_app_set_id")] + [Version (since = "0.1.0")] + public void set_id (string id); + [CCode (cname = "as_app_set_id_kind")] + [Version (since = "0.1.0")] + public void set_id_kind (As.IdKind id_kind); + [CCode (cname = "as_app_set_kind")] + [Version (since = "0.5.10")] + public void set_kind (As.AppKind kind); + [CCode (cname = "as_app_set_merge_kind")] + [Version (since = "0.6.1")] + public void set_merge_kind (As.AppMergeKind merge_kind); + [CCode (cname = "as_app_set_metadata_license")] + [Version (since = "0.1.4")] + public void set_metadata_license (string metadata_license); + [CCode (cname = "as_app_set_name")] + [Version (since = "0.1.0")] + public void set_name (string locale, string name); + [CCode (cname = "as_app_set_origin")] + [Version (since = "0.3.2")] + public void set_origin (string origin); + [CCode (cname = "as_app_set_priority")] + [Version (since = "0.1.0")] + public void set_priority (int priority); + [CCode (cname = "as_app_set_project_group")] + [Version (since = "0.1.0")] + public void set_project_group (string project_group); + [CCode (cname = "as_app_set_project_license")] + [Version (since = "0.1.0")] + public void set_project_license (string project_license); + [CCode (cname = "as_app_set_scope")] + [Version (since = "0.6.1")] + public void set_scope (As.AppScope scope); + [CCode (cname = "as_app_set_search_match")] + [Version (since = "0.6.13")] + public void set_search_match (As.AppSearchMatch search_match); + [CCode (cname = "as_app_set_source_file")] + [Version (since = "0.2.2")] + public void set_source_file (string source_file); + [CCode (cname = "as_app_set_source_kind")] + [Version (since = "0.1.4")] + public void set_source_kind (As.FormatKind source_kind); + [CCode (cname = "as_app_set_source_pkgname")] + [Version (since = "0.2.4")] + public void set_source_pkgname (string source_pkgname); + [CCode (cname = "as_app_set_state")] + [Version (since = "0.2.2")] + public void set_state (As.AppState state); + [CCode (cname = "as_app_set_trust_flags")] + [Version (since = "0.2.2")] + public void set_trust_flags (As.AppTrustFlags trust_flags); + [CCode (cname = "as_app_set_update_contact")] + [Version (since = "0.1.4")] + public void set_update_contact (string update_contact); + [CCode (cname = "as_app_source_kind_from_string")] + [Version (since = "0.2.2")] + public static As.FormatKind source_kind_from_string (string source_kind); + [CCode (cname = "as_app_source_kind_to_string")] + [Version (since = "0.2.2")] + public static unowned string source_kind_to_string (As.FormatKind source_kind); + [CCode (cname = "as_app_state_to_string")] + [Version (since = "0.2.2")] + public static unowned string state_to_string (As.AppState state); + [CCode (cname = "as_app_subsume")] + [Version (since = "0.1.0")] + public void subsume (As.App donor); + [CCode (cname = "as_app_subsume_full")] + [Version (since = "0.1.4")] + public void subsume_full (As.App donor, As.AppSubsumeFlags flags); + [CCode (cname = "as_app_to_file")] + [Version (since = "0.2.0")] + public bool to_file (GLib.File file, GLib.Cancellable? cancellable = null) throws GLib.Error; + [CCode (cname = "as_app_validate")] + [Version (since = "0.1.4")] + public GLib.GenericArray<weak As.Problem> validate (As.AppValidateFlags flags) throws GLib.Error; + } + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_bundle_get_type ()")] + public class Bundle : GLib.Object { + [CCode (cname = "as_bundle_new", has_construct_function = false)] + [Version (since = "0.3.5")] + public Bundle (); + [CCode (cname = "as_bundle_get_id")] + [Version (since = "0.3.5")] + public unowned string get_id (); + [CCode (cname = "as_bundle_get_kind")] + [Version (since = "0.3.5")] + public As.BundleKind get_kind (); + [CCode (cname = "as_bundle_get_runtime")] + [Version (since = "0.5.10")] + public unowned string get_runtime (); + [CCode (cname = "as_bundle_get_sdk")] + [Version (since = "0.5.10")] + public unowned string get_sdk (); + [CCode (cname = "as_bundle_kind_from_string")] + [Version (since = "0.3.5")] + public static As.BundleKind kind_from_string (string kind); + [CCode (cname = "as_bundle_kind_to_string")] + [Version (since = "0.3.5")] + public static unowned string kind_to_string (As.BundleKind kind); + [CCode (cname = "as_bundle_set_id")] + [Version (since = "0.3.5")] + public void set_id (string id); + [CCode (cname = "as_bundle_set_kind")] + [Version (since = "0.3.5")] + public void set_kind (As.BundleKind kind); + [CCode (cname = "as_bundle_set_runtime")] + [Version (since = "0.5.10")] + public void set_runtime (string runtime); + [CCode (cname = "as_bundle_set_sdk")] + [Version (since = "0.5.10")] + public void set_sdk (string sdk); + } + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_checksum_get_type ()")] + public class Checksum : GLib.Object { + [CCode (cname = "as_checksum_new", has_construct_function = false)] + [Version (since = "0.4.2")] + public Checksum (); + [CCode (cname = "as_checksum_get_filename")] + [Version (since = "0.4.2")] + public unowned string get_filename (); + [CCode (cname = "as_checksum_get_kind")] + [Version (since = "0.4.2")] + public GLib.ChecksumType get_kind (); + [CCode (cname = "as_checksum_get_target")] + [Version (since = "0.4.2")] + public As.ChecksumTarget get_target (); + [CCode (cname = "as_checksum_get_value")] + [Version (since = "0.4.2")] + public unowned string get_value (); + [CCode (cname = "as_checksum_set_filename")] + [Version (since = "0.4.2")] + public void set_filename (string filename); + [CCode (cname = "as_checksum_set_kind")] + [Version (since = "0.4.2")] + public void set_kind (GLib.ChecksumType kind); + [CCode (cname = "as_checksum_set_target")] + [Version (since = "0.4.2")] + public void set_target (As.ChecksumTarget target); + [CCode (cname = "as_checksum_set_value")] + [Version (since = "0.4.2")] + public void set_value (string value); + [CCode (cname = "as_checksum_target_from_string")] + [Version (since = "0.4.2")] + public static As.ChecksumTarget target_from_string (string target); + [CCode (cname = "as_checksum_target_to_string")] + [Version (since = "0.4.2")] + public static unowned string target_to_string (As.ChecksumTarget target); + } + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_content_rating_get_type ()")] + public class ContentRating : GLib.Object { + [CCode (cname = "as_content_rating_new", has_construct_function = false)] + [Version (since = "0.5.12")] + public ContentRating (); + [CCode (cname = "as_content_rating_get_kind")] + [Version (since = "0.5.12")] + public unowned string get_kind (); + [CCode (cname = "as_content_rating_get_minimum_age")] + [Version (since = "0.5.12")] + public uint get_minimum_age (); + [CCode (cname = "as_content_rating_get_value")] + [Version (since = "0.6.4")] + public As.ContentRatingValue get_value (string id); + [CCode (cname = "as_content_rating_set_kind")] + [Version (since = "0.5.12")] + public void set_kind (string kind); + [CCode (cname = "as_content_rating_value_from_string")] + [Version (since = "0.5.12")] + public static As.ContentRatingValue value_from_string (string value); + [CCode (cname = "as_content_rating_value_to_string")] + [Version (since = "0.5.12")] + public static unowned string value_to_string (As.ContentRatingValue value); + } + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_format_get_type ()")] + public class Format : GLib.Object { + [CCode (cname = "as_format_new", has_construct_function = false)] + [Version (since = "0.6.9")] + public Format (); + [CCode (cname = "as_format_equal")] + [Version (since = "0.6.9")] + public bool equal (As.Format format2); + [CCode (cname = "as_format_get_filename")] + [Version (since = "0.6.9")] + public unowned string get_filename (); + [CCode (cname = "as_format_get_kind")] + [Version (since = "0.6.9")] + public As.FormatKind get_kind (); + [CCode (cname = "as_format_guess_kind")] + [Version (since = "0.6.9")] + public static As.FormatKind guess_kind (string filename); + [CCode (cname = "as_format_kind_from_string")] + [Version (since = "0.6.9")] + public static As.FormatKind kind_from_string (string kind); + [CCode (cname = "as_format_kind_to_string")] + public static unowned string kind_to_string (As.FormatKind kind); + [CCode (cname = "as_format_set_filename")] + [Version (since = "0.6.9")] + public void set_filename (string filename); + [CCode (cname = "as_format_set_kind")] + [Version (since = "0.6.9")] + public void set_kind (As.FormatKind kind); + } + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_icon_get_type ()")] + public class Icon : GLib.Object { + [CCode (cname = "as_icon_new", has_construct_function = false)] + [Version (since = "0.3.1")] + public Icon (); + [CCode (cname = "as_icon_convert_to_kind")] + [Version (since = "0.3.1")] + public bool convert_to_kind (As.IconKind kind) throws GLib.Error; + [CCode (cname = "as_icon_error_quark")] + [Version (since = "0.3.1")] + public static GLib.Quark error_quark (); + [CCode (cname = "as_icon_get_filename")] + [Version (since = "0.3.2")] + public unowned string get_filename (); + [CCode (cname = "as_icon_get_height")] + [Version (since = "0.3.1")] + public uint get_height (); + [CCode (cname = "as_icon_get_kind")] + [Version (since = "0.3.1")] + public As.IconKind get_kind (); + [CCode (cname = "as_icon_get_name")] + [Version (since = "0.3.1")] + public unowned string get_name (); + [CCode (cname = "as_icon_get_prefix")] + [Version (since = "0.1.6")] + public unowned string get_prefix (); + [CCode (cname = "as_icon_get_scale")] + [Version (since = "0.6.13")] + public uint get_scale (); + [CCode (cname = "as_icon_get_url")] + [Version (since = "0.3.2")] + public unowned string get_url (); + [CCode (cname = "as_icon_get_width")] + [Version (since = "0.3.1")] + public uint get_width (); + [CCode (cname = "as_icon_kind_from_string")] + [Version (since = "0.1.0")] + public static As.IconKind kind_from_string (string icon_kind); + [CCode (cname = "as_icon_kind_to_string")] + [Version (since = "0.1.0")] + public static unowned string kind_to_string (As.IconKind icon_kind); + [CCode (cname = "as_icon_load")] + [Version (since = "0.3.1")] + public bool load (As.IconLoadFlags flags) throws GLib.Error; + [CCode (cname = "as_icon_set_filename")] + [Version (since = "0.3.2")] + public void set_filename (string filename); + [CCode (cname = "as_icon_set_height")] + [Version (since = "0.3.1")] + public void set_height (uint height); + [CCode (cname = "as_icon_set_kind")] + [Version (since = "0.3.1")] + public void set_kind (As.IconKind kind); + [CCode (cname = "as_icon_set_name")] + [Version (since = "0.3.1")] + public void set_name (string name); + [CCode (cname = "as_icon_set_prefix")] + [Version (since = "0.1.6")] + public void set_prefix (string prefix); + [CCode (cname = "as_icon_set_scale")] + [Version (since = "0.6.13")] + public void set_scale (uint scale); + [CCode (cname = "as_icon_set_url")] + [Version (since = "0.3.2")] + public void set_url (string url); + [CCode (cname = "as_icon_set_width")] + [Version (since = "0.3.1")] + public void set_width (uint width); + } + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_image_get_type ()")] + public class Image : GLib.Object { + [CCode (cname = "as_image_new", has_construct_function = false)] + [Version (since = "0.1.0")] + public Image (); + [CCode (cname = "as_image_equal")] + [Version (since = "0.5.7")] + public bool equal (As.Image image2); + [CCode (cname = "as_image_get_basename")] + [Version (since = "0.1.6")] + public unowned string get_basename (); + [CCode (cname = "as_image_get_height")] + [Version (since = "0.1.0")] + public uint get_height (); + [CCode (cname = "as_image_get_kind")] + [Version (since = "0.1.0")] + public As.ImageKind get_kind (); + [CCode (cname = "as_image_get_locale")] + [Version (since = "0.5.14")] + public unowned string get_locale (); + [CCode (cname = "as_image_get_md5")] + [Version (since = "0.1.6")] + public unowned string get_md5 (); + [CCode (cname = "as_image_get_url")] + [Version (since = "0.1.0")] + public unowned string get_url (); + [CCode (cname = "as_image_get_width")] + [Version (since = "0.1.0")] + public uint get_width (); + [CCode (cname = "as_image_kind_from_string")] + [Version (since = "0.1.0")] + public static As.ImageKind kind_from_string (string kind); + [CCode (cname = "as_image_kind_to_string")] + [Version (since = "0.1.0")] + public static unowned string kind_to_string (As.ImageKind kind); + [CCode (cname = "as_image_load_filename")] + [Version (since = "0.1.6")] + public bool load_filename (string filename) throws GLib.Error; + [CCode (cname = "as_image_load_filename_full")] + [Version (since = "0.5.6")] + public bool load_filename_full (string filename, uint dest_size, uint src_size_min, As.ImageLoadFlags flags) throws GLib.Error; + [CCode (cname = "as_image_save_filename")] + [Version (since = "0.1.6")] + public bool save_filename (string filename, uint width, uint height, As.ImageSaveFlags flags) throws GLib.Error; + [CCode (cname = "as_image_set_basename")] + [Version (since = "0.1.6")] + public void set_basename (string basename); + [CCode (cname = "as_image_set_height")] + [Version (since = "0.1.0")] + public void set_height (uint height); + [CCode (cname = "as_image_set_kind")] + [Version (since = "0.1.0")] + public void set_kind (As.ImageKind kind); + [CCode (cname = "as_image_set_locale")] + [Version (since = "0.5.14")] + public void set_locale (string locale); + [CCode (cname = "as_image_set_url")] + [Version (since = "0.1.0")] + public void set_url (string url); + [CCode (cname = "as_image_set_width")] + [Version (since = "0.1.0")] + public void set_width (uint width); + } + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_launchable_get_type ()")] + public class Launchable : GLib.Object { + [CCode (cname = "as_launchable_new", has_construct_function = false)] + [Version (since = "0.6.13")] + public Launchable (); + [CCode (cname = "as_launchable_get_kind")] + [Version (since = "0.6.13")] + public As.LaunchableKind get_kind (); + [CCode (cname = "as_launchable_get_value")] + [Version (since = "0.6.13")] + public unowned string get_value (); + [CCode (cname = "as_launchable_kind_from_string")] + [Version (since = "0.6.13")] + public static As.LaunchableKind kind_from_string (string kind); + [CCode (cname = "as_launchable_kind_to_string")] + [Version (since = "0.6.13")] + public static unowned string kind_to_string (As.LaunchableKind kind); + [CCode (cname = "as_launchable_set_kind")] + [Version (since = "0.6.13")] + public void set_kind (As.LaunchableKind kind); + [CCode (cname = "as_launchable_set_value")] + [Version (since = "0.6.13")] + public void set_value (string value); + } + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_problem_get_type ()")] + public class Problem : GLib.Object { + [CCode (cname = "as_problem_new", has_construct_function = false)] + [Version (since = "0.1.4")] + public Problem (); + [CCode (cname = "as_problem_get_kind")] + [Version (since = "0.1.4")] + public As.ProblemKind get_kind (); + [CCode (cname = "as_problem_get_line_number")] + [Version (since = "0.1.4")] + public uint get_line_number (); + [CCode (cname = "as_problem_get_message")] + [Version (since = "0.1.4")] + public unowned string get_message (); + [CCode (cname = "as_problem_kind_to_string")] + [Version (since = "0.1.4")] + public static unowned string kind_to_string (As.ProblemKind kind); + [CCode (cname = "as_problem_set_kind")] + [Version (since = "0.1.4")] + public void set_kind (As.ProblemKind kind); + [CCode (cname = "as_problem_set_line_number")] + [Version (since = "0.1.4")] + public void set_line_number (uint line_number); + [CCode (cname = "as_problem_set_message")] + [Version (since = "0.1.4")] + public void set_message (string message); + } + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_provide_get_type ()")] + public class Provide : GLib.Object { + [CCode (cname = "as_provide_new", has_construct_function = false)] + [Version (since = "0.1.6")] + public Provide (); + [CCode (cname = "as_provide_get_kind")] + [Version (since = "0.1.6")] + public As.ProvideKind get_kind (); + [CCode (cname = "as_provide_get_value")] + [Version (since = "0.1.6")] + public unowned string get_value (); + [CCode (cname = "as_provide_kind_from_string")] + [Version (since = "0.1.6")] + public static As.ProvideKind kind_from_string (string kind); + [CCode (cname = "as_provide_kind_to_string")] + [Version (since = "0.1.6")] + public static unowned string kind_to_string (As.ProvideKind kind); + [CCode (cname = "as_provide_set_kind")] + [Version (since = "0.1.6")] + public void set_kind (As.ProvideKind kind); + [CCode (cname = "as_provide_set_value")] + [Version (since = "0.1.6")] + public void set_value (string value); + } + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_release_get_type ()")] + public class Release : GLib.Object { + [CCode (cname = "as_release_new", has_construct_function = false)] + [Version (since = "0.1.0")] + public Release (); + [CCode (cname = "as_release_add_checksum")] + [Version (since = "0.4.2")] + public void add_checksum (As.Checksum checksum); + [CCode (cname = "as_release_add_location")] + [Version (since = "0.3.5")] + public void add_location (string location); + [CCode (cname = "as_release_get_blob")] + [Version (since = "0.5.2")] + public GLib.Bytes get_blob (string filename); + [CCode (cname = "as_release_get_checksum_by_fn")] + [Version (since = "0.4.2")] + public unowned As.Checksum get_checksum_by_fn (string fn); + [CCode (cname = "as_release_get_checksum_by_target")] + [Version (since = "0.4.2")] + public unowned As.Checksum get_checksum_by_target (As.ChecksumTarget target); + [CCode (cname = "as_release_get_checksums")] + [Version (since = "0.4.2")] + public unowned GLib.GenericArray<As.Checksum> get_checksums (); + [CCode (cname = "as_release_get_description")] + [Version (since = "0.1.0")] + public unowned string get_description (string locale); + [CCode (cname = "as_release_get_location_default")] + [Version (since = "0.3.5")] + public unowned string get_location_default (); + [CCode (cname = "as_release_get_locations")] + [Version (since = "0.3.5")] + public unowned GLib.GenericArray<string> get_locations (); + [CCode (cname = "as_release_get_size")] + [Version (since = "0.5.2")] + public uint64 get_size (As.SizeKind kind); + [CCode (cname = "as_release_get_state")] + [Version (since = "0.5.8")] + public As.ReleaseState get_state (); + [CCode (cname = "as_release_get_timestamp")] + [Version (since = "0.1.0")] + public uint64 get_timestamp (); + [CCode (cname = "as_release_get_urgency")] + [Version (since = "0.5.1")] + public As.UrgencyKind get_urgency (); + [CCode (cname = "as_release_get_version")] + [Version (since = "0.1.0")] + public unowned string get_version (); + [CCode (cname = "as_release_set_blob")] + [Version (since = "0.5.2")] + public void set_blob (string filename, GLib.Bytes blob); + [CCode (cname = "as_release_set_description")] + [Version (since = "0.1.0")] + public void set_description (string locale, string description); + [CCode (cname = "as_release_set_size")] + [Version (since = "0.5.2")] + public void set_size (As.SizeKind kind, uint64 size); + [CCode (cname = "as_release_set_state")] + [Version (since = "0.5.8")] + public void set_state (As.ReleaseState state); + [CCode (cname = "as_release_set_timestamp")] + [Version (since = "0.1.0")] + public void set_timestamp (uint64 timestamp); + [CCode (cname = "as_release_set_urgency")] + [Version (since = "0.5.1")] + public void set_urgency (As.UrgencyKind urgency); + [CCode (cname = "as_release_set_version")] + [Version (since = "0.1.0")] + public void set_version (string version); + [CCode (cname = "as_release_state_from_string")] + [Version (since = "0.6.6")] + public static As.ReleaseState state_from_string (string state); + [CCode (cname = "as_release_state_to_string")] + [Version (since = "0.6.6")] + public static unowned string state_to_string (As.ReleaseState state); + [CCode (cname = "as_release_vercmp")] + [Version (since = "0.4.2")] + public int vercmp (As.Release rel2); + } + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_require_get_type ()")] + public class Require : GLib.Object { + [CCode (cname = "as_require_new", has_construct_function = false)] + [Version (since = "0.6.7")] + public Require (); + [CCode (cname = "as_require_compare_from_string")] + [Version (since = "0.6.7")] + public static As.RequireCompare compare_from_string (string compare); + [CCode (cname = "as_require_compare_to_string")] + [Version (since = "0.6.7")] + public static unowned string compare_to_string (As.RequireCompare compare); + [CCode (cname = "as_require_get_compare")] + [Version (since = "0.6.7")] + public As.RequireCompare get_compare (); + [CCode (cname = "as_require_get_kind")] + [Version (since = "0.6.7")] + public As.RequireKind get_kind (); + [CCode (cname = "as_require_get_value")] + [Version (since = "0.6.7")] + public unowned string get_value (); + [CCode (cname = "as_require_get_version")] + [Version (since = "0.6.7")] + public unowned string get_version (); + [CCode (cname = "as_require_kind_from_string")] + [Version (since = "0.6.7")] + public static As.RequireKind kind_from_string (string kind); + [CCode (cname = "as_require_kind_to_string")] + [Version (since = "0.6.7")] + public static unowned string kind_to_string (As.RequireKind kind); + [CCode (cname = "as_require_set_compare")] + [Version (since = "0.6.7")] + public void set_compare (As.RequireCompare compare); + [CCode (cname = "as_require_set_kind")] + [Version (since = "0.6.7")] + public void set_kind (As.RequireKind kind); + [CCode (cname = "as_require_set_value")] + [Version (since = "0.6.7")] + public void set_value (string value); + [CCode (cname = "as_require_set_version")] + [Version (since = "0.6.7")] + public void set_version (string version); + [CCode (cname = "as_require_version_compare")] + [Version (since = "0.6.7")] + public bool version_compare (string version) throws GLib.Error; + } + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_review_get_type ()")] + public class Review : GLib.Object { + [CCode (cname = "as_review_new", has_construct_function = false)] + [Version (since = "0.6.1")] + public Review (); + [CCode (cname = "as_review_add_flags")] + [Version (since = "0.6.1")] + public void add_flags (As.ReviewFlags flags); + [CCode (cname = "as_review_add_metadata")] + [Version (since = "0.6.1")] + public void add_metadata (string key, string value); + [CCode (cname = "as_review_equal")] + [Version (since = "0.6.1")] + public bool equal (As.Review review2); + [CCode (cname = "as_review_get_date")] + [Version (since = "0.6.1")] + public unowned GLib.DateTime get_date (); + [CCode (cname = "as_review_get_description")] + [Version (since = "0.6.1")] + public unowned string get_description (); + [CCode (cname = "as_review_get_flags")] + [Version (since = "0.6.1")] + public As.ReviewFlags get_flags (); + [CCode (cname = "as_review_get_id")] + [Version (since = "0.6.1")] + public unowned string get_id (); + [CCode (cname = "as_review_get_locale")] + [Version (since = "0.6.1")] + public unowned string get_locale (); + [CCode (cname = "as_review_get_metadata_item")] + [Version (since = "0.6.1")] + public unowned string get_metadata_item (string key); + [CCode (cname = "as_review_get_priority")] + [Version (since = "0.6.1")] + public int get_priority (); + [CCode (cname = "as_review_get_rating")] + [Version (since = "0.6.1")] + public int get_rating (); + [CCode (cname = "as_review_get_reviewer_id")] + [Version (since = "0.6.1")] + public unowned string get_reviewer_id (); + [CCode (cname = "as_review_get_reviewer_name")] + [Version (since = "0.6.1")] + public unowned string get_reviewer_name (); + [CCode (cname = "as_review_get_summary")] + [Version (since = "0.6.1")] + public unowned string get_summary (); + [CCode (cname = "as_review_get_version")] + [Version (since = "0.6.1")] + public unowned string get_version (); + [CCode (cname = "as_review_set_date")] + [Version (since = "0.6.1")] + public void set_date (GLib.DateTime date); + [CCode (cname = "as_review_set_description")] + [Version (since = "0.6.1")] + public void set_description (string description); + [CCode (cname = "as_review_set_flags")] + [Version (since = "0.6.1")] + public void set_flags (As.ReviewFlags flags); + [CCode (cname = "as_review_set_id")] + [Version (since = "0.6.1")] + public void set_id (string id); + [CCode (cname = "as_review_set_locale")] + [Version (since = "0.6.1")] + public void set_locale (string locale); + [CCode (cname = "as_review_set_priority")] + [Version (since = "0.6.1")] + public void set_priority (int priority); + [CCode (cname = "as_review_set_rating")] + [Version (since = "0.6.1")] + public void set_rating (int rating); + [CCode (cname = "as_review_set_reviewer_id")] + [Version (since = "0.6.1")] + public void set_reviewer_id (string reviewer_id); + [CCode (cname = "as_review_set_reviewer_name")] + [Version (since = "0.6.1")] + public void set_reviewer_name (string reviewer_name); + [CCode (cname = "as_review_set_summary")] + [Version (since = "0.6.1")] + public void set_summary (string summary); + [CCode (cname = "as_review_set_version")] + [Version (since = "0.6.1")] + public void set_version (string version); + [NoAccessorMethod] + [Version (since = "0.6.1")] + public As.Review date { owned get; set construct; } + [NoAccessorMethod] + [Version (since = "0.6.1")] + public string description { owned get; set construct; } + [NoAccessorMethod] + [Version (since = "0.6.1")] + public uint64 flags { get; set construct; } + [NoAccessorMethod] + [Version (since = "0.6.1")] + public string id { owned get; set construct; } + [NoAccessorMethod] + [Version (since = "0.6.1")] + public string locale { owned get; set construct; } + [NoAccessorMethod] + [Version (since = "0.6.1")] + public int rating { get; set construct; } + [NoAccessorMethod] + [Version (since = "0.6.1")] + public string reviewer_id { owned get; set construct; } + [NoAccessorMethod] + [Version (since = "0.6.1")] + public string reviewer_name { owned get; set construct; } + [NoAccessorMethod] + [Version (since = "0.6.1")] + public string summary { owned get; set construct; } + [NoAccessorMethod] + [Version (since = "0.6.1")] + public string version { owned get; set construct; } + } + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_screenshot_get_type ()")] + public class Screenshot : GLib.Object { + [CCode (cname = "as_screenshot_new", has_construct_function = false)] + [Version (since = "0.1.0")] + public Screenshot (); + [CCode (cname = "as_screenshot_add_image")] + [Version (since = "0.1.0")] + public void add_image (As.Image image); + [CCode (cname = "as_screenshot_equal")] + [Version (since = "0.5.7")] + public bool equal (As.Screenshot screenshot2); + [CCode (cname = "as_screenshot_get_caption")] + [Version (since = "0.1.0")] + public unowned string get_caption (string locale); + [CCode (cname = "as_screenshot_get_image")] + [Version (since = "0.2.2")] + public unowned As.Image get_image (uint width, uint height); + [CCode (cname = "as_screenshot_get_image_for_locale")] + [Version (since = "0.5.14")] + public unowned As.Image get_image_for_locale (string locale, uint width, uint height); + [CCode (cname = "as_screenshot_get_images")] + [Version (since = "0.1.0")] + public unowned GLib.GenericArray<As.Image> get_images (); + [CCode (cname = "as_screenshot_get_images_for_locale")] + [Version (since = "0.5.14")] + public GLib.GenericArray<weak As.Image> get_images_for_locale (string locale); + [CCode (cname = "as_screenshot_get_kind")] + [Version (since = "0.1.0")] + public As.ScreenshotKind get_kind (); + [CCode (cname = "as_screenshot_get_priority")] + [Version (since = "0.3.1")] + public int get_priority (); + [CCode (cname = "as_screenshot_get_source")] + [Version (since = "0.1.6")] + public unowned As.Image get_source (); + [CCode (cname = "as_screenshot_kind_from_string")] + [Version (since = "0.1.0")] + public static As.ScreenshotKind kind_from_string (string kind); + [CCode (cname = "as_screenshot_kind_to_string")] + [Version (since = "0.1.0")] + public static unowned string kind_to_string (As.ScreenshotKind kind); + [CCode (cname = "as_screenshot_set_caption")] + [Version (since = "0.1.0")] + public void set_caption (string locale, string caption); + [CCode (cname = "as_screenshot_set_kind")] + [Version (since = "0.1.0")] + public void set_kind (As.ScreenshotKind kind); + [CCode (cname = "as_screenshot_set_priority")] + [Version (since = "0.3.1")] + public void set_priority (int priority); + } + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_store_get_type ()")] + public class Store : GLib.Object { + [CCode (cname = "as_store_new", has_construct_function = false)] + [Version (since = "0.1.0")] + public Store (); + [CCode (cname = "as_store_add_app")] + [Version (since = "0.1.0")] + public void add_app (As.App app); + [CCode (cname = "as_store_add_apps")] + [Version (since = "0.6.4")] + public void add_apps (GLib.GenericArray<As.App> apps); + [CCode (cname = "as_store_add_filter")] + [Version (since = "0.3.5")] + public void add_filter (As.AppKind kind); + [CCode (cname = "as_store_add_metadata_index")] + [Version (since = "0.3.0")] + public void add_metadata_index (string key); + [CCode (cname = "as_store_convert_icons")] + [Version (since = "0.3.1")] + public bool convert_icons (As.IconKind kind) throws GLib.Error; + [CCode (cname = "as_store_error_quark")] + [Version (since = "0.1.2")] + public static GLib.Quark error_quark (); + [CCode (cname = "as_store_from_bytes")] + [Version (since = "0.5.2")] + public bool from_bytes (GLib.Bytes bytes, GLib.Cancellable? cancellable = null) throws GLib.Error; + [CCode (cname = "as_store_from_file")] + [Version (since = "0.1.0")] + public bool from_file (GLib.File file, string icon_root, GLib.Cancellable? cancellable = null) throws GLib.Error; + [CCode (cname = "as_store_from_xml")] + [Version (since = "0.1.1")] + public bool from_xml (string data, string icon_root) throws GLib.Error; + [CCode (cname = "as_store_get_add_flags")] + [Version (since = "0.2.2")] + public As.StoreAddFlags get_add_flags (); + [CCode (cname = "as_store_get_api_version")] + [Version (since = "0.1.1")] + public double get_api_version (); + [CCode (cname = "as_store_get_app_by_id")] + [Version (since = "0.1.0")] + public unowned As.App get_app_by_id (string id); + [CCode (cname = "as_store_get_app_by_id_ignore_prefix")] + [Version (since = "0.5.12")] + public unowned As.App get_app_by_id_ignore_prefix (string id); + [CCode (cname = "as_store_get_app_by_id_with_fallbacks")] + [Version (since = "0.4.1")] + public unowned As.App get_app_by_id_with_fallbacks (string id); + [CCode (cname = "as_store_get_app_by_pkgname")] + [Version (since = "0.1.0")] + public unowned As.App get_app_by_pkgname (string pkgname); + [CCode (cname = "as_store_get_app_by_pkgnames")] + [Version (since = "0.4.1")] + public unowned As.App get_app_by_pkgnames (string pkgnames); + [CCode (cname = "as_store_get_app_by_provide")] + [Version (since = "0.5.0")] + public unowned As.App get_app_by_provide (As.ProvideKind kind, string value); + [CCode (cname = "as_store_get_app_by_unique_id")] + [Version (since = "0.6.1")] + public unowned As.App get_app_by_unique_id (string unique_id, As.StoreSearchFlags search_flags); + [CCode (cname = "as_store_get_apps")] + [Version (since = "0.1.0")] + public unowned GLib.GenericArray<As.App> get_apps (); + [CCode (cname = "as_store_get_apps_by_id")] + [Version (since = "0.5.12")] + public GLib.GenericArray<weak As.App> get_apps_by_id (string id); + [CCode (cname = "as_store_get_apps_by_metadata")] + [Version (since = "0.1.4")] + public GLib.GenericArray<weak As.App> get_apps_by_metadata (string key, string value); + [CCode (cname = "as_store_get_builder_id")] + [Version (since = "0.2.5")] + public unowned string get_builder_id (); + [CCode (cname = "as_store_get_destdir")] + [Version (since = "0.2.4")] + public unowned string get_destdir (); + [CCode (cname = "as_store_get_origin")] + [Version (since = "0.1.1")] + public unowned string get_origin (); + [CCode (cname = "as_store_get_search_match")] + [Version (since = "0.6.13")] + public As.AppSearchMatch get_search_match (); + [CCode (cname = "as_store_get_size")] + [Version (since = "0.1.0")] + public uint get_size (); + [CCode (cname = "as_store_get_watch_flags")] + [Version (since = "0.4.2")] + public As.StoreWatchFlags get_watch_flags (); + [CCode (cname = "as_store_load")] + [Version (since = "0.1.2")] + public bool load (As.StoreLoadFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error; + [CCode (cname = "as_store_load_path")] + [Version (since = "0.2.2")] + public bool load_path (string path, GLib.Cancellable? cancellable = null) throws GLib.Error; + [CCode (cname = "as_store_load_search_cache")] + [Version (since = "0.6.5")] + public void load_search_cache (); + [CCode (cname = "as_store_remove_all")] + [Version (since = "0.2.5")] + public void remove_all (); + [CCode (cname = "as_store_remove_app")] + [Version (since = "0.1.0")] + public void remove_app (As.App app); + [CCode (cname = "as_store_remove_app_by_id")] + [Version (since = "0.3.0")] + public void remove_app_by_id (string id); + [CCode (cname = "as_store_remove_apps_with_veto")] + [Version (since = "0.5.13")] + public void remove_apps_with_veto (); + [CCode (cname = "as_store_remove_filter")] + [Version (since = "0.3.5")] + public void remove_filter (As.AppKind kind); + [CCode (cname = "as_store_set_add_flags")] + [Version (since = "0.2.2")] + public void set_add_flags (As.StoreAddFlags add_flags); + [CCode (cname = "as_store_set_api_version")] + [Version (since = "0.1.1")] + public void set_api_version (double api_version); + [CCode (cname = "as_store_set_builder_id")] + [Version (since = "0.2.5")] + public void set_builder_id (string builder_id); + [CCode (cname = "as_store_set_destdir")] + [Version (since = "0.2.4")] + public void set_destdir (string destdir); + [CCode (cname = "as_store_set_origin")] + [Version (since = "0.1.1")] + public void set_origin (string origin); + [CCode (cname = "as_store_set_search_match")] + [Version (since = "0.6.5")] + public void set_search_match (As.AppSearchMatch search_match); + [CCode (cname = "as_store_set_watch_flags")] + [Version (since = "0.4.2")] + public void set_watch_flags (As.StoreWatchFlags watch_flags); + [CCode (cname = "as_store_to_file")] + [Version (since = "0.1.0")] + public bool to_file (GLib.File file, As.NodeToXmlFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error; + [CCode (cname = "as_store_to_xml")] + [Version (since = "0.1.0")] + public GLib.StringBuilder to_xml (As.NodeToXmlFlags flags); + [CCode (cname = "as_store_validate")] + [Version (since = "0.2.4")] + public GLib.GenericArray<weak As.Problem> validate (As.AppValidateFlags flags) throws GLib.Error; + [Version (since = "0.6.5")] + public virtual signal void app_added (As.App app); + [Version (since = "0.6.5")] + public virtual signal void app_changed (As.App app); + [Version (since = "0.6.5")] + public virtual signal void app_removed (As.App app); + [Version (since = "0.1.2")] + public virtual signal void changed (); + } + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_suggest_get_type ()")] + public class Suggest : GLib.Object { + [CCode (cname = "as_suggest_new", has_construct_function = false)] + [Version (since = "0.6.1")] + public Suggest (); + [CCode (cname = "as_suggest_add_id")] + [Version (since = "0.6.1")] + public void add_id (string id); + [CCode (cname = "as_suggest_get_ids")] + [Version (since = "0.6.1")] + public unowned GLib.GenericArray<string> get_ids (); + [CCode (cname = "as_suggest_get_kind")] + [Version (since = "0.6.1")] + public As.SuggestKind get_kind (); + [CCode (cname = "as_suggest_kind_from_string")] + [Version (since = "0.6.1")] + public static As.SuggestKind kind_from_string (string kind); + [CCode (cname = "as_suggest_kind_to_string")] + [Version (since = "0.6.1")] + public static unowned string kind_to_string (As.SuggestKind kind); + [CCode (cname = "as_suggest_set_kind")] + [Version (since = "0.6.1")] + public void set_kind (As.SuggestKind kind); + } + [CCode (cheader_filename = "appstream-glib.h", type_id = "as_translation_get_type ()")] + public class Translation : GLib.Object { + [CCode (cname = "as_translation_new", has_construct_function = false)] + [Version (since = "0.5.8")] + public Translation (); + [CCode (cname = "as_translation_get_id")] + [Version (since = "0.5.8")] + public unowned string get_id (); + [CCode (cname = "as_translation_get_kind")] + [Version (since = "0.5.8")] + public As.TranslationKind get_kind (); + [CCode (cname = "as_translation_kind_from_string")] + [Version (since = "0.5.8")] + public static As.TranslationKind kind_from_string (string kind); + [CCode (cname = "as_translation_kind_to_string")] + [Version (since = "0.5.8")] + public static unowned string kind_to_string (As.TranslationKind kind); + [CCode (cname = "as_translation_set_id")] + [Version (since = "0.5.8")] + public void set_id (string id); + [CCode (cname = "as_translation_set_kind")] + [Version (since = "0.5.8")] + public void set_kind (As.TranslationKind kind); + } + [CCode (cheader_filename = "appstream-glib.h")] + [SimpleType] + public struct ImageAlphaFlags : uint { + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_APP_ERROR_", has_type_id = false)] + public enum AppError { + FAILED, + INVALID_TYPE + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_APP_KIND_", has_type_id = false)] + public enum AppKind { + UNKNOWN, + DESKTOP, + FONT, + CODEC, + INPUT_METHOD, + WEB_APP, + SOURCE, + ADDON, + FIRMWARE, + RUNTIME, + GENERIC, + OS_UPDATE, + OS_UPGRADE, + SHELL_EXTENSION, + LOCALIZATION, + CONSOLE, + DRIVER + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_APP_MERGE_KIND_", has_type_id = false)] + public enum AppMergeKind { + UNKNOWN, + NONE, + REPLACE, + APPEND + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_APP_PARSE_FLAG_", has_type_id = false)] + [Flags] + public enum AppParseFlags { + NONE, + USE_HEURISTICS, + KEEP_COMMENTS, + CONVERT_TRANSLATABLE, + APPEND_DATA, + ALLOW_VETO, + USE_FALLBACKS, + ADD_ALL_METADATA, + ONLY_NATIVE_LANGS + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_APP_QUIRK_", has_type_id = false)] + [Flags] + public enum AppQuirk { + NONE, + PROVENANCE, + COMPULSORY, + HAS_SOURCE, + MATCH_ANY_PREFIX, + NEEDS_REBOOT, + NOT_REVIEWABLE, + HAS_SHORTCUT, + NOT_LAUNCHABLE, + NEEDS_USER_ACTION, + IS_PROXY, + REMOVABLE_HARDWARE + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_APP_SCOPE_", has_type_id = false)] + public enum AppScope { + UNKNOWN, + USER, + SYSTEM + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_APP_SEARCH_MATCH_", has_type_id = false)] + [Flags] + public enum AppSearchMatch { + NONE, + MIMETYPE, + PKGNAME, + DESCRIPTION, + COMMENT, + NAME, + KEYWORD, + ID, + ORIGIN + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_APP_STATE_", has_type_id = false)] + public enum AppState { + UNKNOWN, + INSTALLED, + AVAILABLE, + AVAILABLE_LOCAL, + UPDATABLE, + UNAVAILABLE, + QUEUED_FOR_INSTALL, + INSTALLING, + REMOVING, + UPDATABLE_LIVE, + PURCHASABLE, + PURCHASING + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_APP_SUBSUME_FLAG_", has_type_id = false)] + [Flags] + public enum AppSubsumeFlags { + NONE, + NO_OVERWRITE, + BOTH_WAYS, + REPLACE, + KIND, + STATE, + BUNDLES, + TRANSLATIONS, + RELEASES, + KUDOS, + CATEGORIES, + PERMISSIONS, + EXTENDS, + COMPULSORY, + SCREENSHOTS, + REVIEWS, + CONTENT_RATINGS, + PROVIDES, + ICONS, + MIMETYPES, + VETOS, + LANGUAGES, + NAME, + COMMENT, + DEVELOPER_NAME, + DESCRIPTION, + METADATA, + URL, + KEYWORDS, + FORMATS, + BRANCH, + ORIGIN, + METADATA_LICENSE, + PROJECT_LICENSE, + PROJECT_GROUP, + SOURCE_KIND, + SUGGESTS, + LAUNCHABLES + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_APP_TRUST_FLAG_", has_type_id = false)] + public enum AppTrustFlags { + COMPLETE, + CHECK_DUPLICATES, + CHECK_VALID_UTF8 + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_APP_VALIDATE_FLAG_", has_type_id = false)] + public enum AppValidateFlags { + NONE, + RELAX, + STRICT, + NO_NETWORK, + ALL_APPS + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_BUNDLE_KIND_", has_type_id = false)] + public enum BundleKind { + UNKNOWN, + LIMBA, + FLATPAK, + SNAP, + PACKAGE, + CABINET, + APPIMAGE + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_CHECKSUM_TARGET_", has_type_id = false)] + public enum ChecksumTarget { + UNKNOWN, + CONTAINER, + CONTENT + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_CONTENT_RATING_VALUE_", has_type_id = false)] + public enum ContentRatingValue { + UNKNOWN, + NONE, + MILD, + MODERATE, + INTENSE + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_FORMAT_KIND_", has_type_id = false)] + public enum FormatKind { + UNKNOWN, + APPSTREAM, + DESKTOP, + APPDATA, + METAINFO + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_ICON_ERROR_", has_type_id = false)] + public enum IconError { + FAILED + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_ICON_KIND_", has_type_id = false)] + public enum IconKind { + UNKNOWN, + STOCK, + CACHED, + REMOTE, + EMBEDDED, + LOCAL + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_ICON_LOAD_FLAG_", has_type_id = false)] + public enum IconLoadFlags { + NONE, + SEARCH_SIZE + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_ID_KIND_", has_type_id = false)] + public enum IdKind { + UNKNOWN, + DESKTOP, + FONT, + CODEC, + INPUT_METHOD, + WEB_APP, + SOURCE, + ADDON, + FIRMWARE, + RUNTIME, + GENERIC + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_IMAGE_KIND_", has_type_id = false)] + public enum ImageKind { + UNKNOWN, + SOURCE, + THUMBNAIL + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_IMAGE_LOAD_FLAG_", has_type_id = false)] + public enum ImageLoadFlags { + NONE, + SHARPEN, + SET_BASENAME, + SET_CHECKSUM, + ONLY_SUPPORTED + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_IMAGE_SAVE_FLAG_", has_type_id = false)] + public enum ImageSaveFlags { + NONE, + PAD_16_9, + SHARPEN, + BLUR + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_INF_LOAD_FLAG_", has_type_id = false)] + [Flags] + public enum InfLoadFlags { + NONE, + STRICT, + CASE_INSENSITIVE + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_KUDO_KIND_", has_type_id = false)] + public enum KudoKind { + UNKNOWN, + SEARCH_PROVIDER, + USER_DOCS, + APP_MENU, + MODERN_TOOLKIT, + NOTIFICATIONS, + HIGH_CONTRAST, + HI_DPI_ICON + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_LAUNCHABLE_KIND_", has_type_id = false)] + public enum LaunchableKind { + UNKNOWN, + DESKTOP_ID + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_MARKUP_CONVERT_FLAG_", has_type_id = false)] + [Flags] + public enum MarkupConvertFlag { + NONE, + IGNORE_ERRORS + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_MARKUP_CONVERT_FORMAT_", has_type_id = false)] + public enum MarkupConvertFormat { + SIMPLE, + MARKDOWN, + NULL, + APPSTREAM, + HTML + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_NODE_FROM_XML_FLAG_", has_type_id = false)] + [Flags] + public enum NodeFromXmlFlags { + NONE, + LITERAL_TEXT, + KEEP_COMMENTS, + ONLY_NATIVE_LANGS + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_NODE_INSERT_FLAG_", has_type_id = false)] + public enum NodeInsertFlags { + NONE, + PRE_ESCAPED, + SWAPPED, + NO_MARKUP, + DEDUPE_LANG, + MARK_TRANSLATABLE, + BASE64_ENCODED + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_NODE_TO_XML_FLAG_", has_type_id = false)] + public enum NodeToXmlFlags { + NONE, + ADD_HEADER, + FORMAT_MULTILINE, + FORMAT_INDENT, + INCLUDE_SIBLINGS, + SORT_CHILDREN + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_PROBLEM_KIND_", has_type_id = false)] + public enum ProblemKind { + UNKNOWN, + TAG_DUPLICATED, + TAG_MISSING, + TAG_INVALID, + ATTRIBUTE_MISSING, + ATTRIBUTE_INVALID, + MARKUP_INVALID, + STYLE_INCORRECT, + TRANSLATIONS_REQUIRED, + DUPLICATE_DATA, + VALUE_MISSING, + URL_NOT_FOUND, + FILE_INVALID, + ASPECT_RATIO_INCORRECT, + RESOLUTION_INCORRECT + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_PROVIDE_KIND_", has_type_id = false)] + public enum ProvideKind { + UNKNOWN, + LIBRARY, + BINARY, + FONT, + MODALIAS, + FIRMWARE_RUNTIME, + PYTHON2, + PYTHON3, + DBUS_SESSION, + DBUS_SYSTEM, + FIRMWARE_FLASHED + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_RELEASE_STATE_", has_type_id = false)] + public enum ReleaseState { + UNKNOWN, + INSTALLED, + AVAILABLE + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_REQUIRE_COMPARE_", has_type_id = false)] + public enum RequireCompare { + UNKNOWN, + EQ, + NE, + LT, + GT, + LE, + GE, + GLOB, + REGEX + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_REQUIRE_KIND_", has_type_id = false)] + public enum RequireKind { + UNKNOWN, + ID, + FIRMWARE + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_REVIEW_FLAG_", has_type_id = false)] + [Flags] + [Version (since = "0.6.1")] + public enum ReviewFlags { + NONE, + SELF, + VOTED + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_SCREENSHOT_KIND_", has_type_id = false)] + public enum ScreenshotKind { + UNKNOWN, + NORMAL, + DEFAULT + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_SIZE_KIND_", has_type_id = false)] + public enum SizeKind { + UNKNOWN, + INSTALLED, + DOWNLOAD + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_STORE_ADD_FLAG_", has_type_id = false)] + [Flags] + public enum StoreAddFlags { + NONE, + PREFER_LOCAL, + USE_UNIQUE_ID, + USE_MERGE_HEURISTIC, + ONLY_NATIVE_LANGS + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_STORE_ERROR_", has_type_id = false)] + public enum StoreError { + FAILED + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_STORE_LOAD_FLAG_", has_type_id = false)] + [Flags] + public enum StoreLoadFlags { + NONE, + APP_INFO_SYSTEM, + APP_INFO_USER, + APP_INSTALL, + APPDATA, + DESKTOP, + ALLOW_VETO, + FLATPAK_USER, + FLATPAK_SYSTEM, + IGNORE_INVALID, + ONLY_UNCOMPRESSED, + ONLY_MERGE_APPS + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_STORE_SEARCH_FLAG_", has_type_id = false)] + public enum StoreSearchFlags { + NONE, + USE_WILDCARDS + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_STORE_WATCH_FLAG_", has_type_id = false)] + public enum StoreWatchFlags { + NONE, + ADDED, + REMOVED + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_SUGGEST_KIND_", has_type_id = false)] + public enum SuggestKind { + UNKNOWN, + UPSTREAM, + HEURISTIC + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_TAG_", has_type_id = false)] + public enum Tag { + UNKNOWN, + COMPONENTS, + COMPONENT, + ID, + PKGNAME, + NAME, + SUMMARY, + DESCRIPTION, + URL, + ICON, + CATEGORIES, + CATEGORY, + KEYWORDS, + KEYWORD, + MIMETYPES, + MIMETYPE, + PROJECT_GROUP, + PROJECT_LICENSE, + SCREENSHOT, + SCREENSHOTS, + UPDATE_CONTACT, + IMAGE, + COMPULSORY_FOR_DESKTOP, + PRIORITY, + CAPTION, + LANGUAGES, + LANG, + METADATA, + VALUE, + RELEASES, + RELEASE, + ARCHITECTURES, + ARCH, + METADATA_LICENSE, + PROVIDES, + EXTENDS, + DEVELOPER_NAME, + KUDOS, + KUDO, + SOURCE_PKGNAME, + VETOS, + VETO, + BUNDLE, + PERMISSIONS, + PERMISSION, + LOCATION, + CHECKSUM, + SIZE, + TRANSLATION, + CONTENT_RATING, + CONTENT_ATTRIBUTE, + VERSION, + REVIEWS, + REVIEW, + REVIEWER_NAME, + REVIEWER_ID, + SUGGESTS, + REQUIRES, + CUSTOM, + LAUNCHABLE + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_TAG_FLAG_", has_type_id = false)] + public enum TagFlags { + NONE, + USE_FALLBACKS, + USE_TRANSLATED + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_TRANSLATION_KIND_", has_type_id = false)] + public enum TranslationKind { + UNKNOWN, + GETTEXT, + QT + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_URGENCY_KIND_", has_type_id = false)] + public enum UrgencyKind { + UNKNOWN, + LOW, + MEDIUM, + HIGH, + CRITICAL + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_URL_KIND_", has_type_id = false)] + public enum UrlKind { + UNKNOWN, + HOMEPAGE, + BUGTRACKER, + FAQ, + DONATION, + HELP, + MISSING, + TRANSLATE + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_UTILS_FIND_ICON_", has_type_id = false)] + [Flags] + public enum UtilsFindIconFlag { + NONE, + HI_DPI + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_UTILS_LOCATION_", has_type_id = false)] + public enum UtilsLocation { + SHARED, + CACHE, + USER + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_VERSION_PARSE_FLAG_", has_type_id = false)] + [Flags] + public enum VersionParseFlag { + NONE, + USE_TRIPLET + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_INF_ERROR_")] + public errordomain InfError { + FAILED, + INVALID_TYPE, + NOT_FOUND + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_NODE_ERROR_")] + public errordomain NodeError { + FAILED, + INVALID_MARKUP, + NO_SUPPORT + } + [CCode (cheader_filename = "appstream-glib.h", cprefix = "AS_UTILS_ERROR_")] + public errordomain UtilsError { + FAILED, + INVALID_TYPE + } + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_APP_SUBSUME_FLAG_DEDUPE")] + public const int APP_SUBSUME_FLAG_DEDUPE; + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_APP_SUBSUME_FLAG_MERGE")] + public const int APP_SUBSUME_FLAG_MERGE; + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_IMAGE_ALPHA_FLAG_BOTTOM")] + public const int IMAGE_ALPHA_FLAG_BOTTOM; + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_IMAGE_ALPHA_FLAG_INTERNAL")] + public const int IMAGE_ALPHA_FLAG_INTERNAL; + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_IMAGE_ALPHA_FLAG_LEFT")] + public const int IMAGE_ALPHA_FLAG_LEFT; + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_IMAGE_ALPHA_FLAG_NONE")] + public const int IMAGE_ALPHA_FLAG_NONE; + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_IMAGE_ALPHA_FLAG_RIGHT")] + public const int IMAGE_ALPHA_FLAG_RIGHT; + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_IMAGE_ALPHA_FLAG_TOP")] + public const int IMAGE_ALPHA_FLAG_TOP; + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_IMAGE_LARGE_HEIGHT")] + public const int IMAGE_LARGE_HEIGHT; + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_IMAGE_LARGE_WIDTH")] + public const int IMAGE_LARGE_WIDTH; + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_IMAGE_NORMAL_HEIGHT")] + public const int IMAGE_NORMAL_HEIGHT; + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_IMAGE_NORMAL_WIDTH")] + public const int IMAGE_NORMAL_WIDTH; + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_IMAGE_THUMBNAIL_HEIGHT")] + public const int IMAGE_THUMBNAIL_HEIGHT; + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_IMAGE_THUMBNAIL_WIDTH")] + public const int IMAGE_THUMBNAIL_WIDTH; + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_MAJOR_VERSION")] + public const int MAJOR_VERSION; + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_MICRO_VERSION")] + public const int MICRO_VERSION; + [CCode (cheader_filename = "appstream-glib.h", cname = "AS_MINOR_VERSION")] + public const int MINOR_VERSION; + [CCode (cheader_filename = "appstream-glib.h", cname = "as_id_kind_from_string")] + [Version (since = "0.1.0")] + public static As.IdKind id_kind_from_string (string id_kind); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_id_kind_to_string")] + [Version (since = "0.1.0")] + public static unowned string id_kind_to_string (As.IdKind id_kind); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_inf_error_quark")] + [Version (since = "0.3.7")] + public static GLib.Quark inf_error_quark (); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_inf_get_driver_version")] + [Version (since = "0.3.5")] + public static string inf_get_driver_version (GLib.KeyFile keyfile, uint64 timestamp) throws GLib.Error; + [CCode (cheader_filename = "appstream-glib.h", cname = "as_inf_load_data")] + [Version (since = "0.3.5")] + public static bool inf_load_data (GLib.KeyFile keyfile, string data, As.InfLoadFlags flags) throws GLib.Error; + [CCode (cheader_filename = "appstream-glib.h", cname = "as_inf_load_file")] + [Version (since = "0.3.5")] + public static bool inf_load_file (GLib.KeyFile keyfile, string filename, As.InfLoadFlags flags) throws GLib.Error; + [CCode (cheader_filename = "appstream-glib.h", cname = "as_kudo_kind_from_string")] + [Version (since = "0.2.2")] + public static As.KudoKind kudo_kind_from_string (string kudo_kind); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_kudo_kind_to_string")] + [Version (since = "0.2.2")] + public static unowned string kudo_kind_to_string (As.KudoKind kudo_kind); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_markup_convert")] + [Version (since = "0.3.5")] + public static string markup_convert (string markup, As.MarkupConvertFormat format) throws GLib.Error; + [CCode (cheader_filename = "appstream-glib.h", cname = "as_markup_convert_full")] + [Version (since = "0.3.5")] + public static string markup_convert_full (string markup, As.MarkupConvertFormat format, As.MarkupConvertFlag flags) throws GLib.Error; + [CCode (cheader_filename = "appstream-glib.h", cname = "as_markup_convert_simple")] + [Version (since = "0.1.0")] + public static string markup_convert_simple (string markup) throws GLib.Error; + [CCode (cheader_filename = "appstream-glib.h", cname = "as_markup_import")] + [Version (since = "0.5.11")] + public static string markup_import (string text, As.MarkupConvertFormat format) throws GLib.Error; + [CCode (array_length = false, array_null_terminated = true, cheader_filename = "appstream-glib.h", cname = "as_markup_strsplit_words")] + [Version (since = "0.3.5")] + public static string[] markup_strsplit_words (string text, uint line_len); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_markup_validate")] + [Version (since = "0.5.1")] + public static bool markup_validate (string markup) throws GLib.Error; + [CCode (cheader_filename = "appstream-glib.h", cname = "as_node_error_quark")] + [Version (since = "0.1.0")] + public static GLib.Quark node_error_quark (); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_node_get_attribute")] + [Version (since = "0.1.0")] + public static unowned string node_get_attribute (GLib.Node node, string key); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_node_get_attribute_as_int")] + [Version (since = "0.1.0")] + public static int node_get_attribute_as_int (GLib.Node node, string key); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_node_get_attribute_as_uint")] + [Version (since = "0.6.1")] + public static uint node_get_attribute_as_uint (GLib.Node node, string key); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_node_get_comment")] + [Version (since = "0.1.6")] + public static unowned string node_get_comment (GLib.Node node); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_node_get_data")] + [Version (since = "0.1.0")] + public static unowned string node_get_data (GLib.Node node); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_node_get_localized")] + [Version (since = "0.1.0")] + public static GLib.HashTable<string,string> node_get_localized (GLib.Node node, string key); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_node_get_localized_best")] + [Version (since = "0.1.0")] + public static unowned string node_get_localized_best (GLib.Node node, string key); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_node_get_localized_unwrap")] + [Version (since = "0.1.0")] + public static GLib.HashTable<string,string> node_get_localized_unwrap (GLib.Node node) throws GLib.Error; + [CCode (cheader_filename = "appstream-glib.h", cname = "as_node_get_name")] + [Version (since = "0.1.0")] + public static unowned string node_get_name (GLib.Node node); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_node_get_tag")] + [Version (since = "0.1.2")] + public static As.Tag node_get_tag (GLib.Node node); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_node_insert_hash")] + [Version (since = "0.1.0")] + public static void node_insert_hash (GLib.Node parent, string name, string attr_key, GLib.HashTable<string,string> hash, As.NodeInsertFlags insert_flags); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_node_insert_localized")] + [Version (since = "0.1.0")] + public static void node_insert_localized (GLib.Node parent, string name, GLib.HashTable<string,string> localized, As.NodeInsertFlags insert_flags); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_node_to_xml")] + [Version (since = "0.1.0")] + public static GLib.StringBuilder node_to_xml (GLib.Node node, As.NodeToXmlFlags flags); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_node_unref")] + [Version (since = "0.1.0")] + public static void node_unref (GLib.Node node); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_size_kind_from_string")] + [Version (since = "0.5.2")] + public static As.SizeKind size_kind_from_string (string size_kind); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_size_kind_to_string")] + [Version (since = "0.5.2")] + public static unowned string size_kind_to_string (As.SizeKind size_kind); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_tag_from_string")] + [Version (since = "0.1.0")] + public static As.Tag tag_from_string (string tag); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_tag_from_string_full")] + [Version (since = "0.1.2")] + public static As.Tag tag_from_string_full (string tag, As.TagFlags flags); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_tag_to_string")] + [Version (since = "0.1.0")] + public static unowned string tag_to_string (As.Tag tag); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_urgency_kind_from_string")] + [Version (since = "0.5.1")] + public static As.UrgencyKind urgency_kind_from_string (string urgency_kind); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_urgency_kind_to_string")] + [Version (since = "0.5.1")] + public static unowned string urgency_kind_to_string (As.UrgencyKind urgency_kind); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_url_kind_from_string")] + [Version (since = "0.1.0")] + public static As.UrlKind url_kind_from_string (string url_kind); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_url_kind_to_string")] + [Version (since = "0.1.0")] + public static unowned string url_kind_to_string (As.UrlKind url_kind); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_appstream_id_build")] + [Version (since = "0.6.4")] + public static string utils_appstream_id_build (string str); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_appstream_id_valid")] + [Version (since = "0.6.4")] + public static bool utils_appstream_id_valid (string str); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_error_quark")] + [Version (since = "0.3.7")] + public static GLib.Quark utils_error_quark (); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_find_icon_filename")] + [Version (since = "0.2.5")] + public static string utils_find_icon_filename (string destdir, string search) throws GLib.Error; + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_find_icon_filename_full")] + [Version (since = "0.3.1")] + public static string utils_find_icon_filename_full (string destdir, string search, As.UtilsFindIconFlag flags) throws GLib.Error; + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_guid_from_data")] + [Version (since = "0.6.13")] + public static string utils_guid_from_data (string namespace_id, uint8 data, size_t data_len) throws GLib.Error; + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_guid_from_string")] + [Version (since = "0.5.0")] + public static string utils_guid_from_string (string str); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_guid_is_valid")] + [Version (since = "0.5.0")] + public static bool utils_guid_is_valid (string guid); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_install_filename")] + [Version (since = "0.3.4")] + public static bool utils_install_filename (As.UtilsLocation location, string filename, string origin, string destdir) throws GLib.Error; + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_is_blacklisted_id")] + [Version (since = "0.2.2")] + public static bool utils_is_blacklisted_id (string desktop_id); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_is_category_id")] + [Version (since = "0.2.4")] + public static bool utils_is_category_id (string category_id); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_is_environment_id")] + [Version (since = "0.2.4")] + public static bool utils_is_environment_id (string environment_id); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_is_spdx_license")] + [Version (since = "0.2.5")] + public static bool utils_is_spdx_license (string license); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_is_spdx_license_id")] + [Version (since = "0.1.5")] + public static bool utils_is_spdx_license_id (string license_id); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_is_stock_icon_name")] + [Version (since = "0.1.3")] + public static bool utils_is_stock_icon_name (string name); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_license_to_spdx")] + [Version (since = "0.5.5")] + public static string utils_license_to_spdx (string license); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_search_token_valid")] + [Version (since = "0.3.4")] + public static bool utils_search_token_valid (string token); + [CCode (array_length = false, array_null_terminated = true, cheader_filename = "appstream-glib.h", cname = "as_utils_search_tokenize")] + [Version (since = "0.3.4")] + public static string[] utils_search_tokenize (string search); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_spdx_license_detokenize")] + [Version (since = "0.2.5")] + public static string utils_spdx_license_detokenize (string license_tokens); + [CCode (array_length = false, array_null_terminated = true, cheader_filename = "appstream-glib.h", cname = "as_utils_spdx_license_tokenize")] + [Version (since = "0.1.5")] + public static string[] utils_spdx_license_tokenize (string license); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_string_replace")] + [Version (since = "0.5.11")] + public static uint utils_string_replace (GLib.StringBuilder string, string search, string replace); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_unique_id_build")] + [Version (since = "0.6.1")] + public static string utils_unique_id_build (As.AppScope scope, As.BundleKind bundle_kind, string origin, As.AppKind kind, string id, string branch); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_unique_id_equal")] + [Version (since = "0.6.1")] + public static bool utils_unique_id_equal (string unique_id1, string unique_id2); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_unique_id_hash")] + [Version (since = "0.6.2")] + public static uint utils_unique_id_hash (string unique_id); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_unique_id_valid")] + [Version (since = "0.6.1")] + public static bool utils_unique_id_valid (string unique_id); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_vercmp")] + [Version (since = "0.3.5")] + public static int utils_vercmp (string version_a, string version_b); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_version_from_uint16")] + [Version (since = "0.5.2")] + public static string utils_version_from_uint16 (uint16 val, As.VersionParseFlag flags); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_version_from_uint32")] + [Version (since = "0.5.2")] + public static string utils_version_from_uint32 (uint32 val, As.VersionParseFlag flags); + [CCode (cheader_filename = "appstream-glib.h", cname = "as_utils_version_parse")] + [Version (since = "0.5.2")] + public static string utils_version_parse (string version); +} -- GitLab