def sync(self, evt=None):
        # If not synced locally, choose a folder
        if not self.localRoot.GetValue():
            self.localRoot.browse()
        # If cancelled, return
        if not self.localRoot.GetValue():
            return
        self.project.localRoot = self.localRoot.GetValue()
        # Enable ctrl now that there is a local root
        self.localRoot.Enable()
        self.localRootLabel.Enable()
        # Show sync dlg (does sync)
        dlg = sync.SyncDialog(self, self.project)
        dlg.sync()
        functions.showCommitDialog(self, self.project, initMsg="", infoStream=dlg.status)
        # Update project
        self.project.refresh()
        # Update last sync date & show
        self.syncLbl.SetLabel(f"{self.project['last_activity_at']:%d %B %Y, %I:%M%p}")
        self.syncLbl.Show()
        self.syncLbl.Enable()
        # Switch buttons to show Sync rather than Download/Create
        self.createBtn.Hide()
        self.downloadBtn.Hide()
        self.syncBtn.Show()
        self.syncBtn.Enable()