class SyncDialog(QtGui.QDialog):
    def __init__(self, repo, name):
        QtGui.QDialog.__init__(self, config.iface.mainWindow(), QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
        self.repo = repo
        self.conflicts = False
        self.pushed = False
        self.pulled = False
        self.ui = Ui_SyncDialog()
        self.ui.setupUi(self)
        self.ui.pushButton.clicked.connect(lambda : self.push(True))
        self.ui.pullButton.clicked.connect(lambda : self.pull(True))
        self.ui.syncButton.clicked.connect(self.sync)
        self.ui.closeButton.clicked.connect(self.close)
        self.ui.manageRemotesButton.clicked.connect(self.manageRemotes)

        self.updateRemotesList()

    def updateRemotesList(self):
        self.ui.comboBox.clear()
        remotes = self.repo.remotes
        self.ui.comboBox.addItems(remotes.keys())
        self.ui.pullButton.setEnabled(len(remotes.keys()) > 0)
        self.ui.pushButton.setEnabled(len(remotes.keys()) > 0)
        self.ui.syncButton.setEnabled(len(remotes.keys()) > 0)


    def manageRemotes(self):
        dlg = RemotesDialog(self, self.repo)
        dlg.exec_()
        if dlg.changed:
            self.updateRemotesList()

    def pull(self, close):
        remote = self.ui.comboBox.currentText()
        try:
            head = self.repo.head.ref
            self.repo.pull(remote, head)
            if close:
                QtGui.QMessageBox.information(self, 'Pull',
                    "Local repository has been updated correctly.",
                    QtGui.QMessageBox.Ok)
                self.close()
            self.conflicts = False
            self.pulled = True
            return True
        except GeoGigConflictException:
            QtGui.QMessageBox.warning(self, 'Conflicts',
                    "There are some conflicted elements after updating the local repository\n."
                    + "Please solve the conflict and then commit the changes",
                    QtGui.QMessageBox.Ok)
            if close:
                self.close()
            self.conflicts = True
            self.pulled = False
            return False;
        except GeoGigException, e:
            if "FileNotFound" in unicode(e):
                raise GeoGigException("Remote repository '%s' does not exist." % remote)
            else:
                raise e
    def __init__(self, repo, name):
        QtGui.QDialog.__init__(
            self, config.iface.mainWindow(),
            QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
        self.repo = repo
        self.conflicts = False
        self.pushed = False
        self.pulled = False
        self.ui = Ui_SyncDialog()
        self.ui.setupUi(self)
        self.ui.pushButton.clicked.connect(lambda: self.push(True))
        self.ui.pullButton.clicked.connect(lambda: self.pull(True))
        self.ui.syncButton.clicked.connect(self.sync)
        self.ui.closeButton.clicked.connect(self.close)
        self.ui.manageRemotesButton.clicked.connect(self.manageRemotes)

        self.updateRemotesList()
    def __init__(self, repo, name):
        QtGui.QDialog.__init__(self, config.iface.mainWindow(), QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
        self.repo = repo
        self.conflicts = False
        self.pushed = False
        self.pulled = False
        self.ui = Ui_SyncDialog()
        self.ui.setupUi(self)
        self.ui.pushButton.clicked.connect(lambda : self.push(True))
        self.ui.pullButton.clicked.connect(lambda : self.pull(True))
        self.ui.syncButton.clicked.connect(self.sync)
        self.ui.closeButton.clicked.connect(self.close)
        self.ui.manageRemotesButton.clicked.connect(self.manageRemotes)

        self.updateRemotesList()
class SyncDialog(QtGui.QDialog):
    def __init__(self, repo, name):
        QtGui.QDialog.__init__(
            self, config.iface.mainWindow(),
            QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
        self.repo = repo
        self.conflicts = False
        self.pushed = False
        self.pulled = False
        self.ui = Ui_SyncDialog()
        self.ui.setupUi(self)
        self.ui.pushButton.clicked.connect(lambda: self.push(True))
        self.ui.pullButton.clicked.connect(lambda: self.pull(True))
        self.ui.syncButton.clicked.connect(self.sync)
        self.ui.closeButton.clicked.connect(self.close)
        self.ui.manageRemotesButton.clicked.connect(self.manageRemotes)

        self.updateRemotesList()

    def updateRemotesList(self):
        self.ui.comboBox.clear()
        remotes = self.repo.remotes
        self.ui.comboBox.addItems(remotes.keys())
        self.ui.pullButton.setEnabled(len(remotes.keys()) > 0)
        self.ui.pushButton.setEnabled(len(remotes.keys()) > 0)
        self.ui.syncButton.setEnabled(len(remotes.keys()) > 0)

    def manageRemotes(self):
        dlg = RemotesDialog(self, self.repo)
        dlg.exec_()
        if dlg.changed:
            self.updateRemotesList()

    def pull(self, close):
        remote = self.ui.comboBox.currentText()
        try:
            head = self.repo.head.ref
            self.repo.pull(remote, head)
            if close:
                QtGui.QMessageBox.information(
                    self, 'Pull',
                    "Local repository has been updated correctly.",
                    QtGui.QMessageBox.Ok)
                self.close()
            self.conflicts = False
            self.pulled = True
            return True
        except GeoGigConflictException:
            QtGui.QMessageBox.warning(
                self, 'Conflicts',
                "There are some conflicted elements after updating the local repository\n."
                + "Please solve the conflict and then commit the changes",
                QtGui.QMessageBox.Ok)
            if close:
                self.close()
            self.conflicts = True
            self.pulled = False
            return False
        except GeoGigException, e:
            if "FileNotFound" in unicode(e):
                raise GeoGigException(
                    "Remote repository '%s' does not exist." % remote)
            else:
                raise e