Esempio n. 1
0
class MxTool:
    def __init__(self, server, user, token):
        self.matrix_server = server
        self.matrix_user = user
        self.access_token = token
        self.quit = False
        self.settings = EasySettings("matrixtool.conf")

    async def run_tool(self):
        if not self.matrix_user:  # Not read from env, try settings..
            self.access_token = self.settings.get('MATRIX_ACCESS_TOKEN')
            self.matrix_server = self.settings.get('MATRIX_SERVER')
            self.matrix_user = self.settings.get('MATRIX_USER')

        if self.access_token:
            print('\nUsing access token to authenticate..')
            self.client = AsyncClient(self.matrix_server, self.matrix_user)
            self.client.access_token = self.access_token

        while not self.access_token:
            print('\nLogin to your matrix account\n')
            answers = prompt(login_questions)
            self.matrix_server = answers['server']
            self.matrix_user = answers['user']
            self.client = AsyncClient(self.matrix_server, self.matrix_user)
            print('\nLogging in..')
            res = await self.client.login(answers['password'])
            if type(res) == LoginResponse:
                self.access_token = self.client.access_token
                self.settings.set('MATRIX_USER', self.matrix_user)
                self.settings.set('MATRIX_SERVER', self.matrix_server)
                self.settings.set('MATRIX_ACCESS_TOKEN', self.access_token)
                self.settings.save()
            else:
                print(res)

        while not self.quit:
            await self.client.sync()
            print('\nWelcome, ', self.matrix_user, '\n\n')
            answers = prompt(tool_select)
            if 'tool' in answers:
                if (answers['tool'] == 'quit'):
                    self.quit = True
                if (answers['tool'] == 'plumb ircnet'):
                    await self.plumb_ircnet()
                if (answers['tool'] == 'leave rooms'):
                    await self.leave_rooms()
                if (answers['tool'] == 'irc channel tools'):
                    await self.irc_channel_tools()

        await self.close()

    async def close(self):
        await self.client.close()

    async def wait_until_user_joined(self, user, room):
        while True:
            await self.client.sync()
            for croomid in self.client.rooms:
                if croomid == room:
                    print('Checking if', user, 'is in', room)
                    roomobj = self.client.rooms[croomid]
                    for roomuser in roomobj.users:
                        if roomuser == user:
                            print('Yes!')
                            return

    async def plumb_ircnet(self):
        answers = prompt(plumb_questions)
        channel = answers['channel']
        opnick = answers['opnick']

        room_select[0]['choices'] = []
        network = irc_networks[0]

        for croomid in self.client.rooms:
            roomobj = self.client.rooms[croomid]
            choice = {'value': croomid, 'name': roomobj.display_name}
            room_select[0]['choices'].append(choice)
        print('Choose a room to plumb:\n')
        answers = prompt(room_select)
        plumbroom = answers['room']
        bot = network['bot']
        print('Inviting', bot, 'to', plumbroom)
        rir = await self.client.room_invite(plumbroom, bot)
        if type(rir) != RoomInviteResponse:
            print(
                'Room invite seemed to fail - press ctrl-c to abort if you want to do so now: ',
                rir)
            input("Press Enter to continue...")
        await self.wait_until_user_joined(bot, plumbroom)
        print('Bot joined, please give it PL100 in the Matrix room')

        input("Press Enter to continue...")

        # self.client.room_put_state(plumbroom, ) # TODO: figure out how to set PL

        url = network['provision_url']
        post_data = {
            "remote_room_server": network['server'],
            "remote_room_channel": channel,
            "matrix_room_id": plumbroom,
            "op_nick": opnick,
            "user_id": self.matrix_user
        }
        headers = {'content-type': 'application/json'}
        print('POST', json.dumps(post_data))
        res = requests.post(url, data=json.dumps(post_data), headers=headers)
        if res.status_code != 200:
            print('Plumbing failed:', res.text)
        else:
            print('Almost finished! IRC user', opnick,
                  'must now reply to the bot to finish plumbing.')
        input("Press Enter")

    async def leave_rooms(self):
        leave_questions[0]['choices'] = []
        for croomid in self.client.rooms:
            roomobj = self.client.rooms[croomid]
            choice = {'value': croomid, 'name': roomobj.display_name}
            leave_questions[0]['choices'].append(choice)
        answers = prompt(leave_questions)
        for roomid in answers['rooms']:
            roomname = self.client.rooms[roomid].display_name
            print('Leaving room', roomname, '..')
            rlr = await self.client.room_leave(roomid)
            if type(rlr) != RoomLeaveResponse:
                print(rlr)
        print(
            '\nNote: due to bug #46 in nio library, the rooms do not appear to be left until you restart the tool.\n'
        )

    def pick_room(self):
        room_select[0]['choices'] = []
        for croomid in self.client.rooms:
            roomobj = self.client.rooms[croomid]
            choice = {'value': croomid, 'name': roomobj.display_name}
            room_select[0]['choices'].append(choice)
        answer = prompt(room_select)
        return answer['room'], self.client.rooms[answer['room']]

    async def irc_channel_tools(self):
        network = irc_networks[0]  # Hardcoded ..

        botroomid = self.find_chat_with(network['bot'])
        if not botroomid:
            print('Please start chat with', network['bot'], 'first!')
            return

        roomid, roomobj = self.pick_room()
        print('Chose room', roomobj.display_name)
        if not self.user_is_in_room(network['bot'], roomid):
            print(network['bot'],
                  'is not in this room - is it really a IRC room?')
            return

        print('Bot room:', botroomid,
              self.client.rooms[botroomid].display_name, network['name'])

        print('TODO: Figure out how to read this automatrically.\n')
        ircchannel = input(
            'Enter IRC channel name of this room (example: #example): ')

        if len(ircchannel) == 0:
            return

        answer = prompt(irc_channel_tool_select)
        if (answer['tool'] == 'main menu'):
            return

        if (answer['tool'] == 'op' or answer['tool'] == 'deop'):
            users = self.select_users_in_room(roomobj)
            for user in users:
                res = re.compile(network['mxid2nick']).search(user)
                if res:
                    nick = res.group(1)
                    if len(nick) > 0:
                        print('Opping', user, '..')
                        cmd = f'!cmd MODE {ircchannel} +o {nick}'
                        if answer['tool'] == 'deop':
                            cmd = f'!cmd MODE {ircchannel} -o {nick}'
                        print(cmd)
                        await self.send_text(botroomid, cmd)
                else:
                    print('Cannot figure out irc nick for', user)

    def find_chat_with(self, mxid):
        for croomid in self.client.rooms:
            roomobj = self.client.rooms[croomid]
            if len(roomobj.users) == 2:
                for user in roomobj.users:
                    if user == mxid:
                        return croomid
        return None

    def user_is_in_room(self, mxid, roomid):
        roomobj = self.client.rooms[roomid]
        for user in roomobj.users:
            if user == mxid:
                return True
        return False

    def select_users_in_room(self, roomobj):
        users_select[0]['choices'] = []
        for user in roomobj.users:
            choice = {'value': user, 'name': roomobj.user_name(user)}
            users_select[0]['choices'].append(choice)
        answers = prompt(users_select)
        return answers['users']

    async def send_text(self, roomid, body):
        msg = {
            "body": body,
            "msgtype": "m.text",
        }
        await self.client.room_send(roomid, 'm.room.message', msg)
Esempio n. 2
0
import locale
from easysettings import EasySettings

settings = EasySettings("../resources/settings.conf")
if not settings.has_option('Language'):
    if locale.getdefaultlocale() == "fa_IR":
        settings.set("Language", "Persian")
    else:
        settings.set("Language", "English")
    settings.save()
if settings.get('Language') == 'Persian':
    nameOfProgram = "Movie Sorter"
    chooseFileName = "انتخاب فایل"
    quitText = 'خروج'
    startText = 'شروع دسته بندی'
    folderForEpisodes = 'فولدر سازی برای قسمت ها'
    putYearInBrackets = 'قرار دادن سال ساخت داخل پرانتز'
    moviesText = 'فیلم ها'
    seriesText = 'سریال ها'
    unfolderString = 'درووردن فایل ها از فولدر ها'
    infoText = 'درباره ما'
    nameFormat = ':فرمت اسم فایل'
    settingsText = ':تنظیمات'
    formatsText = ':فرمت ها'
    getAncher = 'e'
    first = 'right'
    last = 'left'
    chooseDirText = 'انتخاب فولدر مورد نظر'
    completeMessage = "دسته بندی انجام شد"
    nameChange = "هم اسم کردن فیلم و زیرنویس"
    changeLanguage = "English"
Esempio n. 3
0
class MainWindow(QtWidgets.QWidget):
    def __init__(self, queue, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        self.setWindowTitle(appname)
        self.shortcutName = appname
        self.appIcon = QtGui.QIcon(os.path.join(working_directory, 'icon.ico'))
        self.setWindowIcon(self.appIcon)
        self.setFixedSize(550, 300)
        self.center()
        self.queue = queue

        self.config = EasySettings('config.conf')

        self.layout = QVBoxLayout()
        self.layout.setContentsMargins(0, 0, 0, 0)

        self.titleLayout = QHBoxLayout()
        self.titleLayout.setContentsMargins(0, 0, 0, 0)

        self.title = QLabel(appname)
        self.title.setFixedSize(200, 20)
        self.title.setAlignment(QtCore.Qt.AlignCenter)
        self.title.setObjectName("windowTitle")

        self.btn_close = QPushButton("x")
        self.btn_close.clicked.connect(self.close_window)
        self.btn_close.setFixedSize(25, 20)
        self.btn_close.setObjectName("closeBtn")
        self.btn_close.setFocusPolicy(QtCore.Qt.NoFocus)
        self.btn_closeLay = QVBoxLayout()
        self.btn_closeLay.addWidget(self.btn_close)
        self.btn_closeLay.addStretch(1)

        self.btn_minimise = QPushButton("-")
        self.btn_minimise.clicked.connect(self.btn_minimise_clicked)
        self.btn_minimise.setFixedSize(25, 20)
        self.btn_minimise.setObjectName("minimiseBtn")
        self.btn_minimise.setFocusPolicy(QtCore.Qt.NoFocus)
        self.btn_minimiseLay = QVBoxLayout()
        self.btn_minimiseLay.addWidget(self.btn_minimise)
        self.btn_minimiseLay.addStretch(1)

        self.infoBtn = QPushButton('?')
        self.infoBtn.setObjectName('infoBtn')
        self.infoBtn.setFocusPolicy(QtCore.Qt.NoFocus)
        self.infoBtn.clicked.connect(self.openInfoWebpage)
        self.infoBtnLay = QVBoxLayout()
        self.infoBtnLay.addWidget(self.infoBtn)

        self.titleLayout.addLayout(self.btn_closeLay)
        self.titleLayout.addStretch(1)
        self.titleLayout.addWidget(self.title)
        self.titleLayout.addSpacing(-43)
        self.titleLayout.addLayout(self.infoBtnLay)
        self.titleLayout.addSpacing(43)
        self.titleLayout.addStretch(1)
        self.titleLayout.addLayout(self.btn_minimiseLay)

        # --------------------------------------------------------------------------------------------------------------
        global onoffLabel
        onoffLabel = QLabel("OFF")
        onoffLabel.setObjectName("onoffLabel")
        onoffLabel.setFixedWidth(65)
        onoffLabel.setAlignment(QtCore.Qt.AlignCenter)

        self.currentOnOffShortcutLabel = QLabel("On/Off Keyboard Shortcut")
        self.currentOnOffShortcutLabel.setObjectName("currentShortcutLabel")
        self.currentOnOffShortcutLabel.setFixedWidth(200)
        self.currentOnOffShortcutLabel.setToolTip(
            "Note: The shortcut does not support combinations!")
        self.currentOnOffShortcutLabel.setToolTipDuration(4000)

        global currentOnOffShortcutKeyLabel
        with open(
                os.path.join(working_directory, 'shortcutRegisters',
                             'OnOff_Shortcut_Key.txt'), 'r') as file:
            on_off_shortcut_key_name = file.readlines()[1]
        currentOnOffShortcutKeyLabel = QLabel(on_off_shortcut_key_name)
        currentOnOffShortcutKeyLabel.setObjectName("currentShortcutKeyLabel")
        currentOnOffShortcutKeyLabel.setAlignment(QtCore.Qt.AlignCenter)
        currentOnOffShortcutKeyLabel.setFixedWidth(140)

        global recordOnOffShortcut
        recordOnOffShortcut = QPushButton("Record New")
        recordOnOffShortcut.setObjectName("recordOnOffshortcutButton")
        recordOnOffShortcut.pressed.connect(self.disableBotWhileRecording)
        recordOnOffShortcut.released.connect(self.set_OnOff_shortcut_key)
        recordOnOffShortcut.setFixedSize(80, 26)
        recordOnOffShortcut.setStyleSheet(
            "QPushButton#recordOnOffshortcutButton{color: white; border: 1px solid grey;}QPushButton#recordOnOffshortcutButton:hover{border: 1px solid khaki;color: grey;}"
        )
        recordOnOffShortcut.setFocusPolicy(QtCore.Qt.NoFocus)

        self.onoffLay = QHBoxLayout()
        self.onoffLay.addSpacing(10)
        self.onoffLay.addWidget(onoffLabel)
        self.onoffLay.addSpacing(5)
        self.onoffLay.addWidget(self.currentOnOffShortcutLabel)
        self.onoffLay.addWidget(currentOnOffShortcutKeyLabel)
        self.onoffLay.addStretch(1)
        self.onoffLay.addWidget(recordOnOffShortcut)
        self.onoffLay.addSpacing(30)
        # --------------------------------------------------------------------------------------------------------------

        # --------------------------------------------------------------------------------------------------------------
        global onoffButton
        onoffButton = OnOffslideButton(self, 0)
        onoffButton.setObjectName("onoffSlideButton")

        self.currentShootShortcutLabel = QLabel("Game Shoot Keybind")
        self.currentShootShortcutLabel.setObjectName("currentShortcutLabel")
        self.currentShootShortcutLabel.setFixedWidth(200)
        self.currentShootShortcutLabel.setAlignment(QtCore.Qt.AlignCenter)

        global currentShootShortcutKeyLabel
        with open(
                os.path.join(working_directory, 'shortcutRegisters',
                             'Game_Shoot_Shortcut_Key.txt'), 'r') as file:
            shoot_shortcut_key_name = file.readlines()[1]
        currentShootShortcutKeyLabel = QLabel(shoot_shortcut_key_name)
        currentShootShortcutKeyLabel.setObjectName("currentShortcutKeyLabel")
        currentShootShortcutKeyLabel.setAlignment(QtCore.Qt.AlignCenter)
        currentShootShortcutKeyLabel.setFixedWidth(140)

        global recordShootShortcut
        recordShootShortcut = QPushButton("Record New")
        recordShootShortcut.setObjectName("recordShootshortcutButton")
        recordShootShortcut.pressed.connect(self.disableBotWhileRecording)
        recordShootShortcut.released.connect(self.set_Shoot_shortcut_key)
        recordShootShortcut.setFixedSize(80, 26)
        recordShootShortcut.setStyleSheet(
            "QPushButton#recordShootshortcutButton{color: white; border: 1px solid grey;}QPushButton#recordShootshortcutButton:hover{border: 1px solid khaki;color: grey;}"
        )
        recordShootShortcut.setFocusPolicy(QtCore.Qt.NoFocus)

        self.keybindLay = QHBoxLayout()
        self.keybindLay.addSpacing(10)
        self.keybindLay.addWidget(onoffButton)
        self.keybindLay.addSpacing(50)
        self.keybindLay.addWidget(self.currentShootShortcutLabel)
        self.keybindLay.addWidget(currentShootShortcutKeyLabel)
        self.keybindLay.addStretch(1)
        self.keybindLay.addWidget(recordShootShortcut)
        self.keybindLay.addSpacing(30)
        # --------------------------------------------------------------------------------------------------------------
        global messageBox
        messageBox = QLabel()
        messageBox.setObjectName('messageBoxLabel')
        self.messageBoxLay = QHBoxLayout()
        self.messageBoxLay.addSpacing(20)
        self.messageBoxLay.addWidget(messageBox)
        # --------------------------------------------------------------------------------------------------------------
        self.startOnStartupCheckBox = QCheckBox("Start On Boot")
        self.startOnStartupCheckBox.clicked.connect(self.setStartOnStartup)
        self.startOnStartupCheckBox.setObjectName("checkboxes")
        self.startOnStartupCheckBox.setChecked(self.config.get('startOnBoot'))
        self.startOnStartupCheckBox.setFocusPolicy(QtCore.Qt.NoFocus)

        self.startActiveCheckBox = QCheckBox("Start Active")
        self.startActiveCheckBox.clicked.connect(self.setStartActive)
        self.startActiveCheckBox.setObjectName("checkboxes")
        self.startActiveCheckBox.setChecked(self.config.get('startActive'))
        self.startActiveCheckBox.setFocusPolicy(QtCore.Qt.NoFocus)

        self.overlayCheckBox = QCheckBox("Show Overlay")
        self.overlayCheckBox.clicked.connect(self.setShowOverlay)
        self.overlayCheckBox.setObjectName("checkboxes")
        self.overlayCheckBox.setChecked(self.config.get('showOverlay'))
        self.overlayCheckBox.setFocusPolicy(QtCore.Qt.NoFocus)

        self.gamesOnlyCheckBox = QCheckBox("Active InGame Only")
        self.gamesOnlyCheckBox.clicked.connect(self.setGamesOnly)
        self.gamesOnlyCheckBox.setToolTip(
            "If checked, bot works only in games (when the mouse icon is hidden)."
        )
        self.gamesOnlyCheckBox.setToolTipDuration(4000)
        self.gamesOnlyCheckBox.setObjectName("checkboxes")
        self.gamesOnlyCheckBox.setChecked(self.config.get('gamesOnly'))
        self.gamesOnlyCheckBox.setFocusPolicy(QtCore.Qt.NoFocus)

        self.checkBoxLay = QHBoxLayout()

        self.checkBoxLay.addSpacing(10)
        self.checkBoxLay.addStretch(1)
        self.checkBoxLay.addWidget(self.overlayCheckBox)
        self.checkBoxLay.addSpacing(5)
        self.checkBoxLay.addWidget(self.startOnStartupCheckBox)
        self.checkBoxLay.addSpacing(5)
        self.checkBoxLay.addWidget(self.startActiveCheckBox)
        self.checkBoxLay.addSpacing(5)
        self.checkBoxLay.addWidget(self.gamesOnlyCheckBox)
        self.checkBoxLay.addStretch(1)
        self.checkBoxLay.addSpacing(10)
        # --------------------------------------------------------------------------------------------------------------

        self.layout.addLayout(self.titleLayout)
        self.layout.addSpacing(20)
        self.layout.addLayout(self.onoffLay)
        self.layout.addSpacing(5)
        self.layout.addLayout(self.keybindLay)
        self.layout.addSpacing(20)
        self.layout.addLayout(self.messageBoxLay)
        self.layout.addStretch(1)
        self.layout.addLayout(self.checkBoxLay)
        self.layout.addSpacing(10)

        self.setLayout(self.layout)
        self.oldPos = self.pos()

        menu = QMenu()
        menu.setStyleSheet(
            open(
                os.path.join(working_directory, 'systemTray',
                             'system_tray_menu_stylesheet.css')).read())

        showAction = menu.addAction("Show")
        showAction.triggered.connect(self.show_window)
        try:
            showAction.setIcon(
                QtGui.QIcon(
                    os.path.join(working_directory, 'systemTray',
                                 'tray_menu_show_app_icon.png')))
        except Exception as e:
            print("Error: " + e)

        exitAction = menu.addAction("Exit")
        exitAction.triggered.connect(self.close_window)
        try:
            exitAction.setIcon(
                QtGui.QIcon(
                    os.path.join(working_directory, 'systemTray',
                                 'tray_menu_exit_app_icon.png')))
        except Exception as e:
            print("Error:" + e)

        self.tray = QSystemTrayIcon()
        self.tray_icon = QtGui.QIcon(
            os.path.join(working_directory, 'systemTray', 'tray_icon.png'))
        self.tray.setIcon(self.tray_icon)
        self.tray.setToolTip(appname)
        self.tray.setVisible(1)
        self.tray.setContextMenu(menu)
        self.tray.activated.connect(
            self.system_tray_icon_clicked_or_doubleclicked)

        global overlayStatus
        overlayStatus = self.config.get("showOverlay")
        global work_on_games_with_hidden_mouse_only
        work_on_games_with_hidden_mouse_only = self.config.get('gamesOnly')
        if self.config.get("startActive"):
            onoffButton.click()
            if not onoffButton.isChecked():
                self.turnBotOn()
            else:
                self.turnBotOff()

    def turnBotOn(self):
        onoffLabel.setText("ON")
        print("Set Bot: Active")
        self.queue.put([1, overlayStatus])
        global bot_active
        bot_active = 1

    def turnBotOff(self):
        onoffLabel.setText("OFF")
        print("Set Bot: Disabled")
        self.queue.put([0, overlayStatus])
        global bot_active
        bot_active = 0

    def setStartOnStartup(self):
        checked = self.startOnStartupCheckBox.isChecked()
        self.config.set("startOnBoot", checked)
        self.config.save()
        if checked:
            self.addToStartUp()
        else:
            self.removeFromStartup()

    def setStartActive(self):
        checked = self.startActiveCheckBox.isChecked()
        self.config.set("startActive", checked)
        self.config.save()

    def setShowOverlay(self):
        checked = self.overlayCheckBox.isChecked()
        self.config.set("showOverlay", checked)
        self.config.save()
        global overlayStatus
        if checked:
            overlayStatus = 1
            self.queue.put([int(not onoffButton.isChecked()), overlayStatus])
        else:
            overlayStatus = 0
            self.queue.put([2, overlayStatus])

    def setGamesOnly(self):
        checked = self.gamesOnlyCheckBox.isChecked()
        self.config.set("gamesOnly", checked)
        self.config.save()
        global work_on_games_with_hidden_mouse_only
        work_on_games_with_hidden_mouse_only = checked

    def addToStartUp(self):
        self.exe_name = os.path.basename(sys.argv[0])
        self.target_exe = (os.path.abspath(sys.argv[0]))
        self.working_directory = (os.path.abspath(
            sys.argv[0])).split("\\" + self.exe_name)[0]

        print("Add to startup" + str(self.exe_name) + str(self.target_exe) +
              str(self.working_directory))

        try:
            windowsStartupFolder = winshell.startup()
            shell = win32com.client.Dispatch('WScript.Shell')
            shortcut = shell.CreateShortCut(windowsStartupFolder +
                                            '\%s.lnk' % self.shortcutName)
            shortcut.Targetpath = r'%s' % self.target_exe
            shortcut.WorkingDirectory = r'%s' % self.working_directory
            shortcut.save()
        except Exception as error:
            print("Error adding shortcut to startup folder. --> " + str(error))

    def removeFromStartup(self):
        windowsStartupFolder = winshell.startup()
        try:
            if os.path.exists(windowsStartupFolder +
                              '\%s.lnk' % self.shortcutName):
                os.remove(windowsStartupFolder + '\%s.lnk' % self.shortcutName)
                print("--------------> Successfully removed from startup")
            else:
                pass
        except Exception as error:
            print("Error removing shortcut from startup folder. --> " +
                  str(error))

    def disableBotWhileRecording(self):
        global bot_active
        bot_active = 0

    def set_OnOff_shortcut_key(self):
        recordShootShortcut.setDisabled(1)
        onoffButton.setDisabled(1)
        recordOnOffShortcut.setText("Recording")
        recordOnOffShortcut.setStyleSheet(
            "QPushButton#recordOnOffshortcutButton{color: red; border: 1px solid grey;}QPushButton#recordOnOffshortcutButton:hover{border: 1px solid khaki;color: grey;}"
        )
        print('--------------> Recording OnOff Shortcut...')
        global Shortcut_Function
        Shortcut_Function = 'OnOff_Shortcut_Key'
        global onoff_recording_step
        onoff_recording_step = 0

    def set_Shoot_shortcut_key(self):
        recordOnOffShortcut.setDisabled(1)
        onoffButton.setDisabled(1)
        recordShootShortcut.setText("Recording")
        recordShootShortcut.setStyleSheet(
            "QPushButton#recordShootshortcutButton{color: red; border: 1px solid grey;}QPushButton#recordShootshortcutButton:hover{border: 1px solid khaki;color: grey;}"
        )
        print('--------------> Recording Shoot Shortcut...')
        global Shortcut_Function
        Shortcut_Function = 'Game_Shoot_Shortcut_Key'

    def system_tray_icon_clicked_or_doubleclicked(self, reason):
        if reason == QSystemTrayIcon.Trigger or reason == QSystemTrayIcon.DoubleClick:
            self.show_window()

    def show_window(self):
        self.show()
        self.tray.show()
        self.activateWindow()
        self.center()

    def openInfoWebpage(self):
        webbrowser.open('https://github.com/omega0verride/AutoShoot-Bot')

    def btn_minimise_clicked(self):
        self.hide()

    def close_window(self):
        self.close()

    def center(self):
        qr = self.frameGeometry()
        cp = QtWidgets.QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def mousePressEvent(self, event):
        self.oldPos = event.globalPos()

    def mouseMoveEvent(self, event):
        delta = QtCore.QPoint(event.globalPos() - self.oldPos)
        self.move(self.x() + delta.x(), self.y() + delta.y())
        self.oldPos = event.globalPos()
Esempio n. 4
0
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath('.'), relative_path)


guifile = resource_path("./gui/main.ui")
logo = resource_path("./gui/logo.png")
userfold = str(pathlib.Path.home())
config = EasySettings(userfold + "/imageconverter.conf")
configGui = resource_path("./gui/config.ui")

try:
    saveLocation = config.get("saveLocation")
    saveAs = config.get("saveFormat")
    if saveLocation or saveAs == "":
        saveLocation = userfold + '/Pictures/'
        config.set("saveLocation", str(saveLocation))
        config.set("saveFormat", 'jpeg')
        config.save()
except FileNotFoundError:
    pass


class GUI(QMainWindow):
    """main window used by the application"""
    def __init__(self):
        super(GUI, self).__init__()
        UIFile = QFile(guifile)
        UIFile.open(QFile.ReadOnly)
        uic.loadUi(UIFile, self)
        UIFile.close()
Esempio n. 5
0
class Settings:
    """
    Class which handles saving values to a preferences file.
    """

    def __init__(self):
        filepath = file_utils.settings_path

        self._settings = EasySettings(filepath)

    def get_recent_files(self) -> List[str]:
        files = self._settings.get(_key_recent_files)

        if files and isinstance(files, str):
            return []

        return files or []

    def add_recent_file(self, new_file: str):
        files = self.get_recent_files()

        if new_file:
            if new_file in files:
                files.remove(new_file)

            files.insert(0, new_file)

        self._settings.set(_key_recent_files, files)
        self._settings.save()

    def get_recent_freq(self) -> List[float]:
        freq = self._settings.get(_key_recent_frequencies)
        return freq or []

    def add_recent_freq(self, new_freq: float):
        freq = self.get_recent_freq()

        if new_freq is not None:
            if new_freq in freq:
                freq.remove(new_freq)

            freq.insert(0, new_freq)

        self._settings.set(_key_recent_frequencies, freq)
        self._settings.save()

    def is_runtime_warning_enabled(self) -> bool:
        return self._settings.get(_key_runtime_warning, True)

    def set_runtime_warning_enabled(self, enabled: bool) -> None:
        self._settings.set(_key_runtime_warning, enabled)
        self._settings.save()

    def get_latest_commits(self) -> Optional[Dict]:
        """
        :returns a dictionary containing the latest commit hash for each branch.
        """
        out = self._settings.get(_key_latest_commit, None)
        branch = self.get_update_branch()

        # In older versions, this is a string rather than a dict.
        if isinstance(out, str):
            out = {branch: out}

        return out or {}

    def get_latest_commit_on_branch(self) -> Optional[str]:
        """
        :returns the latest commit on the branch which is selected as the update source.
        """
        return self.get_latest_commits().get(self.get_update_branch())

    def set_latest_commit(self, latest_commit: str) -> None:
        """
        Sets the latest commit hash for the current update branch.

        :param latest_commit: the latest commit hash
        """
        commits = self.get_latest_commits()
        commits[self.get_update_branch()] = latest_commit

        self._settings.set(_key_latest_commit, latest_commit)
        self._settings.save()

    def set_update_available(self, value: bool) -> None:
        available: Dict = self.get_update_available()
        available[self.get_update_branch()] = value

        self._settings.set(_key_update_available, available)
        self._settings.save()

    def get_update_available_on_branch(self) -> bool:
        return self.get_update_available().get(self.get_update_branch())

    def get_update_available(self) -> Optional[Dict]:
        out = self._settings.get(_key_update_available, False)
        branch = self.get_update_branch()

        if isinstance(out, bool):
            out = {branch: out}

        return out

    def should_check_updates(self) -> bool:
        return time.time() - self._settings.get(_key_last_update_check, 0.0) > 3600 * 6

    def get_last_update_check(self) -> float:
        return self._settings.get(_key_last_update_check, 0)

    def set_last_update_check(self, time: float) -> None:
        self._settings.set(_key_last_update_check, time)
        self._settings.save()

    def set_update_source(self, branch: str) -> None:
        self._settings.set(_key_update_source, branch)
        self._settings.save()

    def get_update_branch(self) -> str:
        return self._settings.get(_key_update_source, "release").lower()

    def get_save_directory(self) -> str:
        return self._settings.get(_key_save_dir, os.getcwd())

    def set_save_directory(self, save_dir: str) -> None:
        self._settings.set(_key_save_dir, save_dir)
        self._settings.save()

    def get_pymodalib_cache(self) -> Optional[str]:
        return self._settings.get(_key_pymodalib_cache, None)

    def set_pymodalib_cache(self, location: str) -> None:
        self._settings.set(_key_pymodalib_cache, location)
        self._settings.save()
        self._settings.reload_file()

    def set_update_in_progress(self, updating: bool) -> None:
        self._settings.set(_key_updating, updating)
        self._settings.save()

    def get_update_in_progress(self) -> bool:
        return self._settings.get(_key_updating, False)

    def get_pymoda_version(self) -> str:
        return self._settings.get(_key_version, None)

    def set_pymoda_version(self, version: str) -> None:
        current = self._settings.get(_key_version)

        if not current or is_version_newer(new=version, old=current):
            self._settings.set(_key_version, version)
            self._settings.save()
        else:
            logging.error(
                f"Trying to set PyMODA version to {version}, but the current value is {current}"
            )

    def set_last_opened_directory(self, directory: str) -> None:
        self._settings.set(_key_directory, directory)
        self._settings.save()

    def get_last_opened_directory(self) -> str:
        return self._settings.get(_key_directory, None)
Esempio n. 6
0
class Settings:
    """
    Class which handles saving values to a preferences file.
    """
    def __init__(self):
        location = Path(os.getcwd()).parent
        filepath = path.join(location, "settings.conf")

        self._settings = EasySettings(filepath)

    def get_recent_files(self) -> List[str]:
        files = self._settings.get(_key_recent_files)
        return files or []

    def add_recent_file(self, new_file: str):
        files = self.get_recent_files()

        if new_file:
            if new_file in files:
                files.remove(new_file)

            files.insert(0, new_file)

        self._settings.set(_key_recent_files, files)
        self._settings.save()

    def get_recent_freq(self) -> List[float]:
        freq = self._settings.get(_key_recent_frequencies)
        return freq or []

    def add_recent_freq(self, new_freq: float):
        freq = self.get_recent_freq()

        if new_freq is not None:
            if new_freq in freq:
                freq.remove(new_freq)

            freq.insert(0, new_freq)

        self._settings.set(_key_recent_frequencies, freq)
        self._settings.save()

    def is_runtime_warning_enabled(self) -> bool:
        return self._settings.get(_key_runtime_warning, True)

    def set_runtime_warning_enabled(self, enabled: bool) -> None:
        self._settings.set(_key_runtime_warning, enabled)
        self._settings.save()

    def get_latest_commit(self) -> Optional[str]:
        return self._settings.get(_key_latest_commit, None)

    def set_latest_commit(self, latest_commit: str) -> None:
        self._settings.set(_key_latest_commit, latest_commit)
        self._settings.save()

    def set_update_available(self, value: bool) -> None:
        self._settings.set(_key_update_available, value)
        self._settings.save()

    def get_update_available(self) -> bool:
        return self._settings.get(_key_update_available, False)

    def should_check_updates(self) -> bool:
        return time.time() - self._settings.get(_key_last_update_check,
                                                0.0) > 3600 * 6

    def set_last_update_check(self, time: float) -> None:
        self._settings.set(_key_last_update_check, time)
        self._settings.save()
Esempio n. 7
0
def main():
    global settings
    global client

    try:
        logging.basicConfig(filename='SprinklrClient.log', level=logging.DEBUG)
        logging.debug("Starting SprinklrClientTest with " +
                      str(len(sys.argv) - 1) + " actual parameters")

        settings = EasySettings("Sprinklr.conf")
        key = settings.get('key')
        path = settings.get('path')
        access_token = settings.get('access_token')

        if len(path) == 0:
            path = None

        # If using a differnent enviornment other that Prod, set path to that value (like 'prod2')
        client = sc.SprinklrClient(key=key,
                                   access_token=access_token,
                                   path=path)

        if len(sys.argv) > 1:
            command = str(sys.argv[1]).upper()

            if command == 'ADDCOMMENTTOCASE':
                add_comment_to_case(sys.argv[2], sys.argv[3])
            elif command == 'AUTHORIZE':
                if len(sys.argv) > 5:
                    print(
                        "Invalid command line - Usage: SprinklrClientTest Authorize {apikey} {redirect_uri} [environment]"
                    )
                else:
                    key = sys.argv[2]
                    redirect_uri = sys.argv[3]
                    if len(sys.argv) == 5:
                        path = sys.argv[4]
                    else:
                        path = None
                    client = sc.SprinklrClient(key)
                    authorize(key, redirect_uri, path)
            elif command == "CUSTOMFIELDADDOPTION":
                custom_field_add_option(sys.argv[2], sys.argv[3])
            elif command == "CUSTOMFIELDDELETEOPTION":
                custom_field_delete_option(sys.argv[2], sys.argv[3])
            elif command == 'FETCHALLDASHBOARDS':
                fetch_all_dashboards()
            elif command == 'FETCHACCESSTOKEN':
                if len(sys.argv) != 6:
                    print(
                        "Invalid command line - Usage: SprinklrClientTest GetAccessToken {path} {apikey} {secret} "
                        "{code} {redirect URI}")
                else:
                    path = sys.argv[2]
                    key = sys.argv[3]
                    secret = sys.argv[4]
                    code = sys.argv[5]
                    redirect = sys.argv[6]

                    client = sc.SprinklrClient(key, path)
                    success = client.fetch_access_token(secret=secret,
                                                        code=code,
                                                        redirect_uri=redirect)

                    if success:
                        settings.set('access_token', client.access_token)
                        settings.set('refresh_token', client.refresh_token)
                        settings.set('redirect_uri', redirect)
                        settings.set('key', key)
                        settings.set('secret', secret)
                        settings.set('path', path),
                        settings.save()
                        print("Success")
                    else:
                        print(client.result)

                    key = settings.get('key')
                    access_token = settings.get('access_token')
                    client = sc.SprinklrClient(key=key,
                                               access_token=access_token)
            elif command == 'FETCHACCESSIBLEUSERS':
                fetch_accessible_users()
            elif command == 'FETCHACCOUNT':
                fetch_account(sys.argv[2], sys.argv[3])
            elif command == 'FETCHACCOUNTCUSTOMFIELDS':
                fetch_account_custom_fields()
            elif command == 'FETCHARCHIVEDCASES':
                fetch_archived_cases()
            elif command == "FETCHCASEBYNUMBER":
                fetch_case_by_number(sys.argv[2])
            elif command == "FETCHCASECOMMENT":
                fetch_case_comment(sys.argv[2], sys.argv[3])
            elif command == "FETCHCASECOMMENTS":
                fetch_case_comments(sys.argv[2])
            elif command == "FETCHCASEMESSAGESBYID":
                fetch_case_messages(sys.argv[2])
            elif command == "FETCHCLIENTS":
                fetch_clients()
            elif command == 'FETCHCLIENTPROFILELISTS':
                fetch_client_profile_lists()
            elif command == "FETCHCLIENTURLSHORTNERS":
                fetch_client_url_shortners()
            elif command == 'FETCHCLIENTQUEUES':
                fetch_client_queues()
            elif command == 'FETCHCLIENTUSERS':
                fetch_client_users()
            elif command == 'FETCHDASHBOARDBYNAME':
                if len(sys.argv) != 3:
                    print(
                        "Invalid command line - Usage: SprinklrClientTest GetDashboardByName {name}"
                    )
                else:
                    fetch_dashboard_by_name(sys.argv[2])
            elif command == 'FETCHDASHBOARDSTREAM':
                fetch_dashboard_stream(sys.argv[2], sys.argv[3], sys.argv[4])
            elif command == 'FETCHINBOUNDCUSTOMFIELDS':
                fetch_inbound_custom_fields()
            elif command == 'FETCHLISTENINGTOPICS':
                fetch_listening_topics()
            elif command == 'FETCHLISTENINGSTREAM':
                if len(sys.argv) == 5:
                    fetch_listening_stream(sys.argv[2], sys.argv[3],
                                           sys.argv[4])
                elif len(sys.argv) == 6:
                    fetch_listening_stream(sys.argv[2],
                                           sys.argv[3],
                                           sys.argv[4],
                                           echo_request=sys.argv[5])
            elif command == 'FETCHMACROS':
                fetch_macros()
            elif command == 'FETCHMEDIAASSETCUSTOMFIELDS':
                fetch_media_asset_custom_fields()
            elif command == 'FETCHMESSAGEBYUMID':
                fetch_message_by_umid(sys.argv[2])
            elif command == 'FETCHOUTBOUNDCUSTOMFIELDS':
                fetch_outbound_custom_fields()
            elif command == 'FETCHPARTNERACCOUNTGROUPS':
                fetch_partner_account_groups()
            elif command == 'FETCHPARTNERACCOUNTS':
                fetch_partner_accounts()
            elif command == 'FETCHPARTNERCAMPAIGNS':
                fetch_partner_campaigns()
            elif command == 'FETCHPARTNERQUEUES':
                fetch_partner_queues()
            elif command == 'FETCHPARTNERUSERS':
                fetch_partner_users()
            elif command == 'FETCHPERMISSIONS':
                fetch_permissions()
            elif command == 'FETCHPROFILECUSTOMFIELDS':
                fetch_profile_custom_fields()
            elif command == "FETCHREPORTBYFILE":
                fetch_report_by_file(sys.argv[2])
            elif command == 'FETCHRESOURCES':
                fetch_resources(sys.argv[2])
            elif command == 'FETCHUSER':
                fetch_user()
            elif command == 'FETCHUSERBYID':
                fetch_user_by_id(sys.argv[2])
            elif command == 'FETCHUMPRIORITIES':
                fetch_um_priorities()
            elif command == 'FETCHUMSTATUSES':
                fetch_um_statuses()
            elif command == "FETCHUSERGROUPS":
                fetch_user_groups()
            elif command == "FETCHWEBHOOKTYPES":
                fetch_webhook_types()
            elif command == "REFRESHACCESSTOKEN":
                key = settings.get('key')
                secret = settings.get('secret')
                redirect = settings.get('redirect_uri')
                refresh_access_token = settings.get('refresh_token')
                path = settings.get('path')

                client = sc.SprinklrClient(key)

                success = client.refresh_access_token(secret, redirect,
                                                      refresh_access_token)

                if success:
                    settings.set('access_token', client.access_token)
                    settings.set('refresh_token', client.refresh_token)
                    settings.set('redirect_uri', redirect)
                    settings.set('key', key)
                    settings.set('secret', secret)
                    settings.save()
                    print("Success")
                else:
                    print(client.result)
            elif command == "SENDEMAIL":
                send_email(sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5])
            else:
                print_usage()
        else:
            print_usage()
    except Exception as ex:
        print("Error:" + str(ex))
        print_usage()
def main():
    print("Number of args:", len(sys.argv))
    if len(sys.argv) > 6 or len(sys.argv) < 5:
        print(
            "Usage: FetchAccessToken {apikey} {secret} {code} {redirect URI} [path]"
        )
    else:
        path = None
        key = sys.argv[1]
        secret = sys.argv[2]
        code = sys.argv[3]
        redirect = sys.argv[4]

        if len(sys.argv) == 6:
            path = sys.argv[5]

        settings = EasySettings("Sprinklr.conf")
        client = sc.SprinklrClient(key, path)

        success = client.fetch_access_token(secret=secret,
                                            code=code,
                                            redirect_uri=redirect)

        if success:
            settings.set('access_token', client.access_token)
            settings.set('refresh_token', client.refresh_token)
            settings.set('redirect_uri', redirect)
            settings.set('key', key)
            settings.set('secret', secret)
            settings.set('path', path),
            settings.save()
            print(
                "Successfully retrieved and stored access tokens to Sprinklr.conf"
            )
        else:
            print("Access Token NOT retrieved or stored. API call result:")
            print(client.result)