(self)
| 213 | None, 0.0) |
| 214 | |
| 215 | def fill_menu(self): |
| 216 | menu = self.menu |
| 217 | menu.removeAllItems() |
| 218 | |
| 219 | def additem(name, func, obj): |
| 220 | it = menu.addItemWithTitle_action_keyEquivalent_(name, None, "") |
| 221 | it.setRepresentedObject_(obj) |
| 222 | it.setTarget_(self) |
| 223 | it.setAction_(func) |
| 224 | def addnote(name): |
| 225 | additem(name, None, None) |
| 226 | |
| 227 | any_inprogress = None |
| 228 | any_conn = None |
| 229 | any_err = None |
| 230 | if len(self.servers): |
| 231 | for i in self.servers: |
| 232 | host = i.host() |
| 233 | title = i.title() |
| 234 | want = i.wantConnect() |
| 235 | connected = i.connected() |
| 236 | numnets = len(list(i.nets())) |
| 237 | if not host: |
| 238 | additem('Connect Untitled', None, i) |
| 239 | elif i.autoNets() == models.NET_MANUAL and not numnets: |
| 240 | additem('Connect %s (no routes)' % host, None, i) |
| 241 | elif want: |
| 242 | any_conn = i |
| 243 | additem('Disconnect %s' % title, self.cmd_disconnect, i) |
| 244 | else: |
| 245 | additem('Connect %s' % title, self.cmd_connect, i) |
| 246 | if not want: |
| 247 | msg = 'Off' |
| 248 | elif i.error(): |
| 249 | msg = 'ERROR - try reconnecting' |
| 250 | any_err = i |
| 251 | elif connected: |
| 252 | msg = 'Connected' |
| 253 | else: |
| 254 | msg = 'Connecting...' |
| 255 | any_inprogress = i |
| 256 | addnote(' State: %s' % msg) |
| 257 | else: |
| 258 | addnote('No servers defined yet') |
| 259 | |
| 260 | menu.addItem_(NSMenuItem.separatorItem()) |
| 261 | additem('Preferences...', self.cmd_show, None) |
| 262 | additem('Quit Sshuttle VPN', self.cmd_quit, None) |
| 263 | |
| 264 | if any_err: |
| 265 | self.statusitem.setImage_(self.img_err) |
| 266 | self.statusitem.setTitle_('Error!') |
| 267 | elif any_conn: |
| 268 | self.statusitem.setImage_(self.img_running) |
| 269 | if any_inprogress: |
| 270 | self.statusitem.setTitle_('Connecting...') |
| 271 | else: |
| 272 | self.statusitem.setTitle_('') |
no test coverage detected