2014-10-22 13:44:02 -03:00
/ *
* pamac - vala
*
2017-10-10 16:29:22 -03:00
* Copyright ( C ) 2017 Chris Cromer < cromer @ cromnix . org >
2017-01-03 05:43:19 -03:00
* Copyright ( C ) 2014 - 2017 Guillaume Benoit < guillaume @ manjaro . org >
2014-10-22 13:44:02 -03:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a get of the GNU General Public License
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
* /
namespace Pamac {
public class Installer : Gtk . Application {
Transaction transaction ;
2016-05-18 10:25:31 -04:00
ProgressDialog progress_dialog ;
bool important_details ;
2014-10-22 13:44:02 -03:00
public Installer ( ) {
2017-10-10 16:29:22 -03:00
application_id = " org.pamac.installer " ;
2014-10-22 13:44:02 -03:00
flags | = ApplicationFlags . HANDLES_OPEN ;
}
public override void startup ( ) {
// i18n
2019-07-06 20:28:51 -04:00
Intl . bindtextdomain ( Constants . GETTEXT_PACKAGE , Path . build_filename ( Constants . DATADIR , " locale " ) ) ;
2014-10-22 13:44:02 -03:00
Intl . setlocale ( LocaleCategory . ALL , " " ) ;
2019-07-06 20:28:51 -04:00
Intl . textdomain ( Constants . GETTEXT_PACKAGE ) ;
Intl . bind_textdomain_codeset ( Constants . GETTEXT_PACKAGE , " utf-8 " ) ;
2014-10-22 13:44:02 -03:00
base . startup ( ) ;
2017-11-11 23:06:04 -03:00
important_details = false ;
// integrate progress box and term widget
progress_dialog = new ProgressDialog ( ) ;
transaction = new Transaction ( progress_dialog as Gtk . ApplicationWindow ) ;
transaction . mode = Transaction . Mode . INSTALLER ;
transaction . finished . connect ( on_transaction_finished ) ;
transaction . important_details_outpout . connect ( on_important_details_outpout ) ;
progress_dialog . box . pack_start ( transaction . progress_box ) ;
progress_dialog . box . reorder_child ( transaction . progress_box , 0 ) ;
transaction . term_window . height_request = 200 ;
progress_dialog . expander . add ( transaction . term_window ) ;
progress_dialog . close_button . clicked . connect ( on_close_button_clicked ) ;
progress_dialog . close_button . visible = false ;
this . hold ( ) ;
2014-10-22 13:44:02 -03:00
}
public override void activate ( ) {
2017-11-11 23:06:04 -03:00
this . release ( ) ;
2014-10-22 13:44:02 -03:00
}
public override void open ( File [ ] files , string hint ) {
2017-11-11 23:06:04 -03:00
foreach ( unowned File file in files ) {
transaction . to_load . add ( file . get_path ( ) ) ;
2014-11-03 17:04:44 -03:00
}
2017-11-11 23:06:04 -03:00
progress_dialog . show ( ) ;
if ( transaction . get_lock ( ) ) {
transaction . run ( ) ;
} else {
Gtk . MessageDialog msg = new Gtk . MessageDialog ( this as Gtk . ApplicationWindow , Gtk . DialogFlags . MODAL , Gtk . MessageType . WARNING , Gtk . ButtonsType . OK , dgettext ( null , " Unable to lock database! " ) ) ;
msg . response . connect ( ( response_id ) = > {
msg . destroy ( ) ;
this . release ( ) ;
} ) ;
msg . show ( ) ;
2014-11-03 17:04:44 -03:00
}
2014-10-22 13:44:02 -03:00
}
2016-05-18 10:25:31 -04:00
void on_important_details_outpout ( bool must_show ) {
important_details = true ;
progress_dialog . expander . expanded = true ;
}
void on_close_button_clicked ( ) {
this . release ( ) ;
}
2016-02-26 06:37:26 -03:00
void on_transaction_finished ( ) {
2014-10-22 13:44:02 -03:00
transaction . stop_daemon ( ) ;
2016-05-18 10:25:31 -04:00
if ( important_details ) {
progress_dialog . close_button . visible = true ;
} else {
this . release ( ) ;
}
2014-10-22 13:44:02 -03:00
}
public static int main ( string [ ] args ) {
var installer = new Installer ( ) ;
return installer . run ( args ) ;
}
}
}