def remove(self): try: _type = str( self.explorerTable.item(self.explorerTable.currentItem().row(), 0).text()) _file = str( self.explorerTable.item(self.explorerTable.currentItem().row(), 1).text()) warn = QMessageBox(QMessageBox.Question, self.moderat.MString('MEXPLORER_MSG_CONFIRM'), self.moderat.MString('MEXPLORER_MSG_DELETE')) warn.setStandardButtons(QMessageBox.Yes | QMessageBox.No) ans = warn.exec_() if ans == QMessageBox.Yes: if '<FILE>' in _type: self.send('del /Q "%s"' % _file) elif '<DIR>' in _type: self.send('rmdir /S /Q "%s"' % _file) self.callback = self.recv_content else: return except AttributeError: message.error(self.moderat.MString('MEXPLORER_MSG_ERROR'), self.moderat.MString('MEXPLORER_MSG_NO_FILE'))
def save_script(self): script_name, ok = QInputDialog.getText( self, self.moderat.MString('MSCRIPTING_PLUGIN_NAME'), self.moderat.MString('MSCRIPTING_PLUGIN_NAME'), QLineEdit.Normal) if ok: script_description, ok = QInputDialog.getText( self, self.moderat.MString('MSCRIPTING_PLUGIN_DESC'), self.moderat.MString('MSCRIPTING_PLUGIN_DESC'), QLineEdit.Normal) if ok: # Check if script_name exists if script_name in self.moderat.plugins.keys(): message.error( self.moderat.MString('MSCRIPTING_PLUGIN_EXISTS'), self.moderat.MString('MSCRIPTING_PLUGIN_EXISTS')) return with open( os.path.join(self.moderat.plugins_dir, str(script_name) + '.py'), 'w') as plugin_file: payload = 'plugin_name = r"""%s"""\n' % script_name payload += 'plugin_description = r"""%s"""\n' % script_description payload += 'plugin_type = r"""remote"""\n' payload += 'plugin_source = r"""%s"""\n' % self.editor.toPlainText( ) plugin_file.write(payload) message.info( self.moderat.MString('MSCRIPTING_PLUGIN_SAVED'), self.moderat.MString('MSCRIPTING_PLUGIN_SAVED'))
def check_mode(self, data): if type(data) is dict: if self.modes.has_key(data['mode']): self.modes[data['mode']](data) else: message.error( self.moderat, self.moderat.MString('MSGBOX_ERROR'), u'{} [{}]'.format(self.moderat.MString('UNKNOWN_MODE'), data['mode']))
def insert_plugin(self, plugin_name=None): if not plugin_name: plugin_name = str(self.pluginSearchLine.text()) if self.moderat.plugins.has_key(plugin_name): self.editor.clear() self.editor.insertPlainText( self.moderat.plugins[plugin_name]['source']) else: message.error(self.moderat.MString('MSCRIPTING_NO_PLUGIN'), self.moderat.MString('MSCRIPTING_NO_PLUGIN'))
def on_moderator_connect_fail(self, reason): ''' On Moderator Disconnected From Server :param reason: :return: ''' if not type(reason) is bool: message.error(self, self.MString('MSGBOX_ERROR'), str(reason.value)) self.connected = False self.action.disconnect()
def moderatorInitializing(self, data): ''' Initializing Moderator :param data: :return: ''' if data['payload'].startswith('loginSuccess '): self.moderat.onlineLoading.show() # Get Privileges self.moderat.privs = int(data['payload'].split()[-1]) self.moderat.ui.enable_administrator( ) if self.moderat.privs == 1 else self.moderat.ui.disable_administrator( ) # Start Client Checker self.moderat.clients_checker = QTimer() self.moderat.clients_checker.timeout.connect( self.moderat.check_clients) self.moderat.clients_checker.start(5000) if self.moderat.privs: self.moderat.moderators_checker = QTimer() self.moderat.moderators_checker.timeout.connect( self.moderat.get_moderators) self.moderat.moderators_checker.start(5000) # Update UI self.moderat.ui.on_moderator_connected() self.moderat.tray.info( self.moderat.MString('TRAY_CONNECTED'), u'{} {}:{}'.format(self.moderat.MString('TRAY_CONNECTED_TO'), self.moderat.settings.serverIpAddress, self.moderat.settings.serverPort)) else: # Update UI self.moderat.ui.on_moderator_not_connected() self.moderat.tray.warning( self.moderat.MString('TRAY_NOT_CONNECTED'), u'{} {}:{}'.format(self.moderat.MString('TRAY_CONNECTED_TO'), self.moderat.settings.serverIpAddress, self.moderat.settings.serverPort)) self.moderat.username = None # Warn Message message.error(self.moderat, self.moderat.MString('INCORRECT_CREDENTIALS'), self.moderat.MString('INCORRECT_CREDENTIALS'))
def recv_screenshot(self, data): webcam_dict = data['payload'] if webcam_dict == 'noWebcamError': message.error(self.moderat, self.moderat.MString('MSGBOX_ERROR'), self.moderat.MString('NOWEBCAM_ERROR')) return try: camera_info = ast.literal_eval(webcam_dict) im = Image.frombytes('RGB', (int(camera_info['width']), int(camera_info['height'])), zlib.decompress(camera_info['webcambits']), 'raw', 'BGR', 0, -1) camera_bits = im.convert('RGBA') self.cameraLabel.setPixmap(QPixmap.fromImage(ImageQt.ImageQt(camera_bits)).scaled( self.cameraLabel.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)) self.current_bits = camera_bits self.saveButton.setDisabled(False) self.clearButton.setDisabled(False) except SyntaxError: pass
def administrator_change_moderator_password(self): for moderator_args in self.current_client(): moderator = moderator_args ok, password = text.get_password( self.moderat.MString('ADMINISTRATION_INPUT_PASSWORD'), self.moderat.MString('ADMINISTRATION_PASSWORD'), self.moderat.MString('ADMINISTRATION_PASSWORD'), self.moderat.MString('DIALOG_OK'), self.moderat.MString('DIALOG_CANCEL')) if ok and len(str(password)) > 3: password1 = str(password) ok, password = text.get_password( self.moderat.MString('ADMINISTRATION_INPUT_PASSWORD'), self.moderat.MString('ADMINISTRATION_PASSWORD'), self.moderat.MString('ADMINISTRATION_PASSWORD'), self.moderat.MString('DIALOG_OK'), self.moderat.MString('DIALOG_CANCEL')) if ok and len(str(password)) > 3: password2 = str(password) if password1 == password2: self.moderat.moderator.send_msg( '%s %s' % (moderator, password1), 'changePassword', session_id=self.moderat.session_id) else: message.error( self.moderat.MString( 'ADMINISTRATION_PASSWORD_NOT_MATCH'), self.moderat.MString( 'ADMINISTRATION_PASSWORD_NOT_MATCH')) return # if not password else: message.error( self.moderat.MString( 'ADMINISTRATION_INCORRECT_PASSWORD'), self.moderat.MString( 'ADMINISTRATION_INCORRECT_PASSWORD')) return else: message.error( self.moderat.MString('ADMINISTRATION_INCORRECT_PASSWORD'), self.moderat.MString('ADMINISTRATION_INCORRECT_PASSWORD')) return
def administrator_create_moderator(self): # Get Username username, ok = QInputDialog.getText( self.moderat, self.moderat.MString('ADMINISTRATION_INPUT_USERNAME'), self.moderat.MString('ADMINISTRATION_USERNAME'), QLineEdit.Normal) if ok and len(str(username)) > 0: username = str(username) # Get Password password, ok = QInputDialog.getText( self.moderat, self.moderat.MString('ADMINISTRATION_INPUT_PASSWORD'), self.moderat.MString('ADMINISTRATION_PASSWORD'), QLineEdit.Password) if ok and len(str(password)) > 3: password = str(password) # Get Privileges privileges, ok = QInputDialog.getItem( self.moderat, self.moderat.MString('ADMINISTRATION_INPUT_PRIVS'), self.moderat.MString('ADMINISTRATION_PRIVS'), ('0', '1'), 0, False) admin = str(privileges) if ok and privileges: self.moderat.moderator.send_msg( '%s %s %s' % (username, password, admin), 'addModerator', session_id=self.moderat.session_id) else: message.error( self.moderat.MString( 'ADMINISTRATION_INCORRECT_PRIVILEGES'), self.moderat.MString( 'ADMINISTRATION_INCORRECT_PRIVILEGES')) return else: message.error( self.moderat.MString('ADMINISTRATION_INCORRECT_PASSWORD'), self.moderat.MString('ADMINISTRATION_INCORRECT_PASSWORD')) return else: message.error( self.moderat.MString('ADMINISTRATION_INCORRECT_USERNAME'), self.moderat.MString('ADMINISTRATION_INCORRECT_USERNAME')) return
def recv_content(self, data): # set remote path entry try: content = ast.literal_eval(data['payload']) except (SyntaxError, ValueError): message.error(self.moderat.MString('MEXPLORER_OPEN_FOLDER_ERROR'), self.moderat.MString('MEXPLORER_OPEN_FOLDER_ERROR')) return # Init Logical Drives self.comboInEditMode = True self.drivesCombo.clear() for drive_letter in content['logicalDrives'].keys(): self.drivesCombo.addItem(drive_letter) # Get active drive caption self.drivesCombo.setCurrentIndex( self.drivesCombo.findText(content['path'].split('\\')[0] + '\\', Qt.MatchFixedString)) # Initializing table self.explorerTable.clearContents() self.explorerTable.sortItems(0) self.pathLine.setText(content['path']) # Turn combo signal off self.comboInEditMode = False # set tables row count self.explorerTable.setRowCount(len(content) - 2) file_count = 0 folder_count = 0 # add content to table for index in content: if index == 'path' or index == 'logicalDrives': continue if content[index]['hidden']: file_color = QColor('#9b59b6') file_icon = os.path.join(self.moderat.assets, 'hidden_file.png') folder_color = QColor('#3498db') folder_icon = os.path.join(self.moderat.assets, 'hidden_folder.png') else: file_color = QColor('#ecf0f1') file_icon = os.path.join(self.moderat.assets, 'file.png') folder_color = QColor('#e67e22') folder_icon = os.path.join(self.moderat.assets, 'folder.png') # set content type item = QTableWidgetItem( '<FILE>') if content[index]['type'] else QTableWidgetItem( '<DIR>') if content[index]['type']: item.setTextColor(file_color) item.setSizeHint(QSize(50, 30)) file_count += 1 else: item.setTextColor(folder_color) item.setSizeHint(QSize(50, 30)) folder_count += 1 item.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.explorerTable.setItem(index, 0, item) # set content name item = QTableWidgetItem(content[index]['name']) if content[index]['type']: item.setTextColor(file_color) item.setIcon(QIcon(QPixmap(file_icon))) else: item.setTextColor(folder_color) item.setIcon(QIcon(QPixmap(folder_icon))) self.explorerTable.setItem(index, 1, item) # set content modified date item = QTableWidgetItem(content[index]['modified']) item.setTextAlignment(Qt.AlignCenter) item.setSizeHint(QSize(220, 30)) self.explorerTable.setItem(index, 2, item) # set file size item = QTableWidgetItem(self.sizeof_fmt( content[index] ['size'])) if content[index]['type'] else QTableWidgetItem('') item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) item.setTextColor(file_color) self.explorerTable.setItem(index, 3, item) # update table self.explorerTable.horizontalHeaderItem(3).setTextAlignment( Qt.AlignCenter) self.explorerTable.resizeColumnsToContents()
def p2pMode(self, data): if data['payload'] == 'p2pNotStarted': message.error(self.moderat, self.moderat.MString('MSGBOX_ERROR'), self.moderat.MString('P2P_ERROR'))