Ejemplo n.º 1
0
    def __init__(self, parent):
        super().__init__(parent)
        self.config = Configuration()
        self.le_resourcedir = QLineEdit(self.config.cfg_resource_dir())

        self.le_resyncdir = QLineEdit(self.config.cfg_resync_dir())
        self.le_sourcedesc = QLineEdit(self.config.cfg_sourcedesc())
        self.le_urlprefix = QLineEdit(self.config.cfg_urlprefix())
        # self.language_choice = QLabel(_("Interface Language"), self)
        self.init_ui()
Ejemplo n.º 2
0
    def __init__(self):
        super().__init__()
        self.logger = logging.getLogger(__name__)
        self.config = Configuration()
        self.menubar = self.menuBar()
        self.create_menu()

        self.tabframe = TabbedFrame(self)
        self.setCentralWidget(self.tabframe)
        self.resize(self.config.window_width(), self.config.window_height())
        self.show()
Ejemplo n.º 3
0
    def test01_set_test_config(self):
        print("\n>>> Testing set_test_config")
        Configuration._set_configuration_filename(None)
        assert not Configuration._configuration_filename
        assert Configuration._get_configuration_filename() == "rsync.cfg"

        Configuration._set_configuration_filename("foo.bar")
        assert Configuration._get_configuration_filename() == "foo.bar"
        Configuration._set_configuration_filename(None)
        assert Configuration._get_configuration_filename() == "rsync.cfg"
Ejemplo n.º 4
0
    def test01_set_test_config(self):
        print("\n>>> Testing set_test_config")
        Configuration._set_configuration_filename(None)
        assert not Configuration._configuration_filename
        assert Configuration._get_configuration_filename() == "rsync.cfg"

        Configuration._set_configuration_filename("foo.bar")
        assert Configuration._get_configuration_filename() == "foo.bar"
        Configuration._set_configuration_filename(None)
        assert Configuration._get_configuration_filename() == "rsync.cfg"
Ejemplo n.º 5
0
    def test04_set_get_language(self):
        print("\n>>> Testing language")
        Configuration._set_configuration_filename("rsync_test.cfg")
        config1 = Configuration()

        print("current language: " + config1.settings_language())
        config1.set_settings_language("foo-BR")
        print("now the language is: " + config1.settings_language())
Ejemplo n.º 6
0
    def test03_read(self):
        print("\n>>> Testing read")
        Configuration._set_configuration_filename("rsync_test.cfg")
        config1 = Configuration()
        config2 = Configuration()

        assert config1.cfg_resource_dir() == "foo/bar/baz"
        assert config2.cfg_resource_dir() == "foo/bar/baz"
Ejemplo n.º 7
0
    def test04_set_get_language(self):
        print("\n>>> Testing language")
        Configuration._set_configuration_filename("rsync_test.cfg")
        config1 = Configuration()

        print("current language: " + config1.settings_language())
        config1.set_settings_language("foo-BR")
        print("now the language is: " + config1.settings_language())
Ejemplo n.º 8
0
    def test99_cleanup(self):
        print("\n>>> Cleaning up")
        Configuration._set_configuration_filename("rsync_test.cfg")
        config1 = Configuration()

        os.remove(config1.config_file)
        assert not os.path.exists(config1.config_file)
        config1._instance = None
        Configuration._set_configuration_filename(None)
Ejemplo n.º 9
0
    def __init__(self):
        super().__init__()
        self.logger = logging.getLogger(__name__)
        self.config = Configuration()
        self.menubar = self.menuBar()
        self.create_menu()

        self.tabframe = TabbedFrame(self)
        self.setCentralWidget(self.tabframe)
        self.resize(self.config.window_width(), self.config.window_height())
        self.show()
Ejemplo n.º 10
0
    def __init__(self, args):
        super().__init__(args)

        logger.info("Starting application")

        language = Configuration().settings_language()
        i18n.set_language(language)

        self.main_window = RsMainWindow()

        self.aboutToQuit.connect(self.__before_close__)

        sys.exit(self.exec_())
Ejemplo n.º 11
0
    def test03_read(self):
        print("\n>>> Testing read")
        Configuration._set_configuration_filename("rsync_test.cfg")
        config1 = Configuration()
        config2 = Configuration()

        assert config1.cfg_resource_dir() == "foo/bar/baz"
        assert config2.cfg_resource_dir() == "foo/bar/baz"
Ejemplo n.º 12
0
    def test99_cleanup(self):
        print("\n>>> Cleaning up")
        Configuration._set_configuration_filename("rsync_test.cfg")
        config1 = Configuration()

        os.remove(config1.config_file)
        assert not os.path.exists(config1.config_file)
        config1._instance = None
        Configuration._set_configuration_filename(None)
Ejemplo n.º 13
0
    def test02_instance(self):
        print("\n>>> Testing _instance")
        Configuration._set_configuration_filename("rsync_test.cfg")

        config1 = Configuration()
        config2 = Configuration()

        assert config1 == config2

        path1 = config1.config_path
        if platform.system() == "Darwin":
            assert path1 == os.path.expanduser("~") + "/.config/rsync"
        elif platform.system() == "Windows":
            path_expected = os.path.join(os.path.expanduser("~"), "AppData",
                                         "Local", "rsync")
            assert path1 == path_expected
        elif platform.system() == "Linux":
            assert path1 == os.path.expanduser("~") + "/.config/rsync"
        else:
            assert path1 == os.path.expanduser("~") + "/rsync"

        assert config1.get_cfg_resource_dir() == os.path.expanduser("~")
        config1.set_cfg_resource_dir("foo/bar/baz")
        assert config1.get_cfg_resource_dir() == "foo/bar/baz"

        config2.persist()
        config1 = None
        config2 = None
        Configuration._set_configuration_filename(None)
Ejemplo n.º 14
0
class ConfigFrame(QFrame):

    def __init__(self, parent):
        super().__init__(parent)
        self.config = Configuration()
        self.le_resourcedir = QLineEdit(self.config.cfg_resource_dir())

        self.le_resyncdir = QLineEdit(self.config.cfg_resync_dir())
        self.le_sourcedesc = QLineEdit(self.config.cfg_sourcedesc())
        self.le_urlprefix = QLineEdit(self.config.cfg_urlprefix())
        # self.language_choice = QLabel(_("Interface Language"), self)
        self.init_ui()

    def init_ui(self):
        # layout
        vert = QVBoxLayout(self)

        grid1 = QGridLayout()
        grid1.setContentsMargins(0, 0, 0, 0) # left, top, right, bottom

        self.pb_resourcedir = QPushButton(_("Browse"))
        self.pb_resourcedir.clicked.connect(self.pb_resourcedir_clicked)
        grid1.addWidget(QLabel(_("Resource directory")), 1, 1)
        grid1.addWidget(self.le_resourcedir, 1, 2)
        grid1.addWidget(self.pb_resourcedir, 1, 3)

        pb_resyncdir = QPushButton(_("Browse"))
        pb_resyncdir.clicked.connect(self.pb_resyncdir_clicked)
        grid1.addWidget(QLabel(_("Resync directory")), 2, 1)
        grid1.addWidget(self.le_resyncdir, 2, 2)
        grid1.addWidget(pb_resyncdir, 2, 3)

        # language_combo = QComboBox(self)
        # for dirname in i18n.get_languages():
        #     language_combo.addItem(dirname)
        # language_combo.activated[str].connect(self.cb_language_changed)
        # grid1.addWidget(self.language_choice, 3, 1)
        # grid1.addWidget(language_combo, 3, 2)

        self.le_sourcedesc.setToolTip(tt_sourcedesc)
        grid1.addWidget(QLabel(_("Source description")), 3, 1)
        grid1.addWidget(self.le_sourcedesc, 3, 2)
        grid1.addItem(QSpacerItem(87, 21), 3, 3)

        self.le_urlprefix.setToolTip(_("The url domain to be used in the resync_a files"))
        grid1.addWidget(QLabel(_("URL prefix")), 4, 1)
        grid1.addWidget(self.le_urlprefix, 4, 2)
        grid1.addItem(QSpacerItem(87, 21), 4, 3)

        vert.addLayout(grid1)

        strat_vert = QVBoxLayout()
        strat_vert.addWidget(QLabel(_("Strategy")))
        self.strat_group = QButtonGroup(strat_vert)

        strat_1 = QRadioButton(_("resourcelist"))
        strat_2 = QRadioButton(_("resourcelist + changelist"))

        self.strat_group.addButton(strat_1, 0)
        self.strat_group.addButton(strat_2, 1)
        self.strat_group.button(self.config.cfg_strategy()).setChecked(True)
        strat_vert.addWidget(strat_1)
        strat_vert.addWidget(strat_2)
        #self.strat_group.buttonToggled.connect(self.bg_strategy_toggled)
        vert.addLayout(strat_vert)


        vert.addStretch(1)

        # hbox = QHBoxLayout()
        # hbox.addStretch(1)
        #
        # vert.addLayout(hbox)

        self.setLayout(vert)

    def __persist_config__(self):
        self.config.set_cfg_resource_dir(self.le_resourcedir.text())
        self.config.set_cfg_resync_dir(self.le_resyncdir.text())
        self.config.set_cfg_sourcedesc(self.le_sourcedesc.text())
        self.config.set_cfg_urlprefix(self.le_urlprefix.text())
        self.config.set_cfg_strategy(self.strat_group.checkedId())
        self.config.persist()

    def pb_resourcedir_clicked(self):
        self.le_resourcedir.setFocus()
        # "Unable to simultaneously satisfy constraints:..." as warning is a QT bug:
        # https://bugreports.qt.io/browse/QTBUG-43248
        filename = QFileDialog.getExistingDirectory(self, _("Resource Directory"), self.le_resourcedir.text())
        if filename != "": # user cancelled
            self.le_resourcedir.setText(filename)

    def pb_resyncdir_clicked(self):
        self.le_resyncdir.setFocus()
        # "Unable to simultaneously satisfy constraints:..." as warning is a QT bug:
        # https://bugreports.qt.io/browse/QTBUG-43248
        filename = QFileDialog.getExistingDirectory(self, _("Resync Directory"), self.le_resyncdir.text())
        if filename != "": # user cancelled
            self.le_resyncdir.setText(filename)

    # def cb_language_changed(self, text):
    #     logger.debug(text)
    #     logger.debug(os.path.abspath(gettext.find(i18n.APP_NAME, localedir=i18n.LOCALE_DIR, languages=[text])))
    #     # gettext.translation(i18n.APP_NAME, localedir=i18n.LOCALE_DIR, languages=[text]).install()
    #     i18n.set_language(text)
    #     # repaint window application ??
    #     logger.debug(_("browse"))

    def hide(self):
        self.__persist_config__()

    def close(self):
        self.__persist_config__()
Ejemplo n.º 15
0
    def test02_instance(self):
        print("\n>>> Testing _instance")
        Configuration._set_configuration_filename("rsync_test.cfg")

        config1 = Configuration()
        config2 = Configuration()

        assert config1 == config2

        path1 = config1.config_path
        if platform.system() == "Darwin":
            assert path1 == os.path.expanduser("~") + "/.config/rsync"
        elif platform.system() == "Windows":
            path_expected = os.path.join(os.path.expanduser("~"), "AppData", "Local", "rsync")
            assert path1 == path_expected
        elif platform.system() == "Linux":
            assert path1 == os.path.expanduser("~") + "/.config/rsync"
        else:
            assert path1 == os.path.expanduser("~") + "/rsync"

        assert config1.cfg_resource_dir() == os.path.expanduser("~")
        config1.set_cfg_resource_dir("foo/bar/baz")
        assert config2.cfg_resource_dir() == "foo/bar/baz"

        config2.persist()
        config1 = None
        config2 = None
        Configuration._set_configuration_filename(None)
Ejemplo n.º 16
0
class ConfigFrame(QFrame):

    def __init__(self, parent):
        super().__init__(parent)
        self.config = Configuration()
        self.initUI()

    def initUI(self):
        # layout
        vert = QVBoxLayout(self)

        grid1 = QGridLayout()
        grid1.setContentsMargins(0, 0, 150, 0) # left, top, right, bottom

        self.le_resourcedir = QLineEdit(self.config.get_cfg_resource_dir())
        pb_resourcedir = QPushButton("browse")
        pb_resourcedir.clicked.connect(self.pb_resourcedir_clicked)
        grid1.addWidget(QLabel("resource dir:"), 1, 1)
        grid1.addWidget(self.le_resourcedir, 1, 2)
        grid1.addWidget(pb_resourcedir, 1, 3)

        self.le_resyncdir = QLineEdit(self.config.get_cfg_resync_dir())
        pb_resyncdir = QPushButton("browse")
        pb_resyncdir.clicked.connect(self.pb_resyncdir_clicked)
        grid1.addWidget(QLabel("resync dir:"), 2, 1)
        grid1.addWidget(self.le_resyncdir, 2, 2)
        grid1.addWidget(pb_resyncdir, 2, 3)

        vert.addLayout(grid1)

        grid2 = QGridLayout()
        grid2.setContentsMargins(0, 0, 150, 0) # left, top, right, bottom

        self.le_sourcedesc = QLineEdit(self.config.get_cfg_sourcedesc())
        self.le_sourcedesc.setToolTip(tt_sourcedesc)
        grid2.addWidget(QLabel("sourcedesc:"), 1, 1)
        grid2.addWidget(self.le_sourcedesc, 1, 2)

        self.le_urlprefix = QLineEdit(self.config.get_cfg_urlprefix())
        grid2.addWidget(QLabel("URL prefix:"), 2, 1)
        grid2.addWidget(self.le_urlprefix, 2, 2)

        vert.addLayout(grid2)

        vert.addStretch(1)

        # hbox = QHBoxLayout()
        # hbox.addStretch(1)
        #
        # vert.addLayout(hbox)

        self.setLayout(vert)

    def pb_resourcedir_clicked(self):
        # "Unable to simultaneously satisfy constraints:..." as warning is a QT bug:
        # https://bugreports.qt.io/browse/QTBUG-43248
        filename = QFileDialog.getExistingDirectory(self, "Resource Directory", self.le_resourcedir.text())
        if filename != "": # user cancelled
            self.le_resourcedir.setText(filename)

    def pb_resyncdir_clicked(self):
        # "Unable to simultaneously satisfy constraints:..." as warning is a QT bug:
        # https://bugreports.qt.io/browse/QTBUG-43248
        filename = QFileDialog.getExistingDirectory(self, "Resync Directory", self.le_resyncdir.text())
        if filename != "": # user cancelled
            self.le_resyncdir.setText(filename)

    def hide(self):
        self.config.set_cfg_resource_dir(self.le_resourcedir.text())
        self.config.set_cfg_resync_dir(self.le_resyncdir.text())
        self.config.set_cfg_source(self.le_sourcedesc.text())
        self.config.set_cfg_urlprefix(self.le_urlprefix.text())
        self.config.persist()
Ejemplo n.º 17
0
class RsMainWindow(QMainWindow):

    def __init__(self):
        super().__init__()
        self.logger = logging.getLogger(__name__)
        self.config = Configuration()
        self.menubar = self.menuBar()
        self.create_menu()

        self.tabframe = TabbedFrame(self)
        self.setCentralWidget(self.tabframe)
        self.resize(self.config.window_width(), self.config.window_height())
        self.show()

    def on_tab_choice(self, tabnr):
        self.tabframe.setCurrentIndex(tabnr)
        self.set_tab_menu_enabled(tabnr)

    def set_tab_menu_enabled(self, tabnr):
        for action in self.tab_actions:
            action.setEnabled(True)
        self.tab_actions[tabnr].setEnabled(False)

    def create_menu(self):

        exit_action = QAction(_("&Exit"), self)
        exit_action.setShortcut("Ctrl+Q")
        exit_action.setStatusTip(_("Exit application"))
        exit_action.triggered.connect(qApp.quit)

        show_configure_action = QAction(_("&Configure"), self)
        show_configure_action.setShortcut("Ctrl+C")
        show_configure_action.setStatusTip("Configure rsync")
        show_configure_action.triggered.connect(lambda: self.on_tab_choice(0))

        show_export_action = QAction(_("&Export"), self)
        show_export_action.setShortcut("Ctrl+E")
        show_export_action.setStatusTip(_("Export files"))
        show_export_action.triggered.connect(lambda: self.on_tab_choice(1))

        show_statistics_action = QAction(_("&Statistics"), self)
        show_statistics_action.setShortcut("Ctrl+S")
        show_statistics_action.setStatusTip(_("Statistics"))
        show_statistics_action.triggered.connect(lambda: self.on_tab_choice(2))

        show_man_sets_action = QAction(_("&Manual Sets"), self)
        show_man_sets_action.setShortcut("Ctrl+M")
        show_man_sets_action.setStatusTip(_("Manual Sets"))
        show_man_sets_action.triggered.connect(lambda: self.on_tab_choice(3))

        show_rule_based_sets_action = QAction(_("&Rule-based Sets"), self)
        show_rule_based_sets_action.setShortcut("Ctrl+R")
        show_rule_based_sets_action.setStatusTip(_("Rule-based Sets"))
        show_rule_based_sets_action.triggered.connect(lambda: self.on_tab_choice(4))


        self.menubar.setNativeMenuBar(True)

        self.fileMenu = self.menubar.addMenu(_("&File"))
        self.fileMenu.addAction(exit_action)             # on mac under [application] > Quit [application]

        self.viewMenu = self.menubar.addMenu(_("&View"))
        self.viewMenu.addAction(show_configure_action)   # on mac under [application] > Preverences
        self.viewMenu.addAction(show_export_action)
        self.viewMenu.addAction(show_statistics_action)
        self.viewMenu.addAction(show_man_sets_action)
        self.viewMenu.addAction(show_rule_based_sets_action)

        self.tab_actions = list()
        self.tab_actions.append(show_configure_action)      # 0
        self.tab_actions.append(show_export_action)         # 1
        self.tab_actions.append(show_statistics_action)     # 2
        self.tab_actions.append(show_man_sets_action)       # 3
        self.tab_actions.append(show_rule_based_sets_action) # 4

    def close(self):
        self.logger.debug("window closing")
        self.config.set_window_height(self.height())
        self.config.set_window_width(self.width())
        self.config.persist()
        self.tabframe.close()
Ejemplo n.º 18
0
class RsMainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.logger = logging.getLogger(__name__)
        self.config = Configuration()
        self.menubar = self.menuBar()
        self.create_menu()

        self.tabframe = TabbedFrame(self)
        self.setCentralWidget(self.tabframe)
        self.resize(self.config.window_width(), self.config.window_height())
        self.show()

    def on_tab_choice(self, tabnr):
        self.tabframe.setCurrentIndex(tabnr)
        self.set_tab_menu_enabled(tabnr)

    def set_tab_menu_enabled(self, tabnr):
        for action in self.tab_actions:
            action.setEnabled(True)
        self.tab_actions[tabnr].setEnabled(False)

    def create_menu(self):

        exit_action = QAction(_("&Exit"), self)
        exit_action.setShortcut("Ctrl+Q")
        exit_action.setStatusTip(_("Exit application"))
        exit_action.triggered.connect(qApp.quit)

        show_configure_action = QAction(_("&Configure"), self)
        show_configure_action.setShortcut("Ctrl+C")
        show_configure_action.setStatusTip("Configure rsync")
        show_configure_action.triggered.connect(lambda: self.on_tab_choice(0))

        show_export_action = QAction(_("&Export"), self)
        show_export_action.setShortcut("Ctrl+E")
        show_export_action.setStatusTip(_("Export files"))
        show_export_action.triggered.connect(lambda: self.on_tab_choice(1))

        show_statistics_action = QAction(_("&Statistics"), self)
        show_statistics_action.setShortcut("Ctrl+S")
        show_statistics_action.setStatusTip(_("Statistics"))
        show_statistics_action.triggered.connect(lambda: self.on_tab_choice(2))

        show_man_sets_action = QAction(_("&Manual Sets"), self)
        show_man_sets_action.setShortcut("Ctrl+M")
        show_man_sets_action.setStatusTip(_("Manual Sets"))
        show_man_sets_action.triggered.connect(lambda: self.on_tab_choice(3))

        show_rule_based_sets_action = QAction(_("&Rule-based Sets"), self)
        show_rule_based_sets_action.setShortcut("Ctrl+R")
        show_rule_based_sets_action.setStatusTip(_("Rule-based Sets"))
        show_rule_based_sets_action.triggered.connect(
            lambda: self.on_tab_choice(4))

        self.menubar.setNativeMenuBar(True)

        self.fileMenu = self.menubar.addMenu(_("&File"))
        self.fileMenu.addAction(
            exit_action)  # on mac under [application] > Quit [application]

        self.viewMenu = self.menubar.addMenu(_("&View"))
        self.viewMenu.addAction(
            show_configure_action)  # on mac under [application] > Preverences
        self.viewMenu.addAction(show_export_action)
        self.viewMenu.addAction(show_statistics_action)
        self.viewMenu.addAction(show_man_sets_action)
        self.viewMenu.addAction(show_rule_based_sets_action)

        self.tab_actions = list()
        self.tab_actions.append(show_configure_action)  # 0
        self.tab_actions.append(show_export_action)  # 1
        self.tab_actions.append(show_statistics_action)  # 2
        self.tab_actions.append(show_man_sets_action)  # 3
        self.tab_actions.append(show_rule_based_sets_action)  # 4

    def close(self):
        self.logger.debug("window closing")
        self.config.set_window_height(self.height())
        self.config.set_window_width(self.width())
        self.config.persist()
        self.tabframe.close()
Ejemplo n.º 19
0
 def __init__(self, parent):
     super().__init__(parent)
     self.config = Configuration()
     self.initUI()