def search(s_query=None):
    if s_query is None:
        s_query = player.dialog_keyboard(heading="Поиск")

        if s_query is None:
            return

        if not s_query or s_query.strip() == "":
            player.dialog_ok("Kinoman.Uz", "Для поиска нужно ввести запрос")
            return

    if player.get_setting("search_history_status", "bool"):
        history = player.get_setting("_search_history", "list")

        if s_query in history:
            history.remove(s_query)

        history.append(s_query)

        if len(history) > 6:
            history = history[-6:]

        player.set_setting("_search_history", history)

    list_movies(query={"q": s_query})
def search_history():
    if not player.get_setting("search_history_status", "bool"):
        search_clear()

    search_icon = {"art": {"icon": "DefaultAddonsSearch.png"}}
    clear_icon = {"art": {"icon": "DefaultAddonNone.png"}}

    menu_items = [
        {
            "label": "Новый поиск",
            "path": path_for("search"),
            "video_data": search_icon,
            "is_folder": True,
        },
        {
            "label": "Очистить",
            "path": path_for("search_clear"),
            "video_data": clear_icon,
            "is_folder": True,
        },
    ]

    history = player.get_setting("_search_history", "list")

    for search_term in reversed(history):
        menu_items.append({
            "label":
            search_term,
            "path":
            path_for("search", path_vars={"s_query": search_term}),
            "is_folder":
            True,
        })

    player.print_items(menu_items)
def root():
    menu_items = []

    for label, query in kinoman_api.list_categories_video_menu():
        menu_items.append({
            "label": label,
            "path": path_for("list_movies", query=query),
            "is_folder": True,
        })

    search_icon = {"art": {"icon": "DefaultAddonsSearch.png"}}

    menu_items.append({
        "label": "Поиск по фильтру",
        "path": path_for("search_filter"),
        "video_data": search_icon,
        "is_folder": True,
    })

    if player.get_setting("search_history_status",
                          "bool") and player.get_setting(
                              "_search_history", "list"):
        search_endpoint = "search_history"
    else:
        search_endpoint = "search"

    menu_items.append({
        "label": "Поиск",
        "path": path_for(search_endpoint),
        "video_data": search_icon,
        "is_folder": True,
    })

    player.print_items(menu_items, cache=False)
def _kinoman_login(session):
    cookie = player.get_setting("_cookie")
    last_check = player.get_setting("_last_check", "int")

    if cookie:
        session.cookies.update(json.loads(cookie))

        if not last_check or time.time() - last_check > 300:
            try:
                page = session.get(
                    "https://www.kinoman.uz/api/v1/user/profile", verify=False)
            except (requests.ConnectionError, requests.Timeout):
                raise NetworkError

            try:
                response = _kinoman_login_check(page)
            except LoginError:
                pass
            else:
                _kinoman_login_save_cookies(session.cookies.get_dict(),
                                            response["user"]["user_id"])
                return True
        else:
            return True

    login_data = {
        "login": player.get_setting("username"),
        "password": player.get_setting("password"),
    }

    if not all(login_data.values()):
        raise LoginError("Не введены логин/пароль")

    try:
        page = session.post("https://www.kinoman.uz/api/v1/user/login",
                            json=login_data,
                            verify=False)
    except (requests.ConnectionError, requests.Timeout):
        raise NetworkError

    response = _kinoman_login_check(page)

    _kinoman_login_save_cookies(session.cookies.get_dict(),
                                response["user"]["user_id"])

    return True
def get_page(page_url, payload=None, user_id_required=False):
    session = requests.Session()
    session.headers.update({"User-Agent": SPOOF_USER_AGENT})

    _kinoman_login(session)

    try:
        if payload:
            if user_id_required:
                payload["user_id"] = player.get_setting("_user_id", "int")

            response = _json_loads_byteified(
                session.post(page_url, data=json.dumps(payload),
                             verify=False).text)
        else:
            response = _json_loads_byteified(
                session.get(page_url, verify=False).text)
    except (requests.ConnectionError, requests.Timeout):
        raise NetworkError

    session.close()

    return response
Beispiel #6
0
 def test_get_setting_str(self, mock_addon):
     mock_addon.getSetting.side_effect = (lambda key: "test"
                                          if key == "test_key" else None)
     self.assertEqual(player.get_setting("test_key"), "test")
Beispiel #7
0
 def test_exception_wrong_type(self):
     with self.assertRaisesRegexp(ValueError, r"Unknown setting type"):
         player.get_setting("test_key", "bad_type")
Beispiel #8
0
 def test_get_setting_list(self, mock_addon):
     mock_addon.getSetting.side_effect = (lambda key: "item1|item2"
                                          if key == "test_key" else None)
     self.assertEqual(player.get_setting("test_key", "list"),
                      ["item1", "item2"])
Beispiel #9
0
 def test_get_setting_bool(self, mock_addon):
     mock_addon.getSettingBool.side_effect = (
         lambda key: True if key == "test_key" else None)
     self.assertTrue(player.get_setting("test_key", "bool"))
Beispiel #10
0
 def test_get_setting_float(self, mock_addon):
     mock_addon.getSetting.side_effect = (lambda key: "100.10"
                                          if key == "test_key" else None)
     self.assertEqual(player.get_setting("test_key", "float"), 100.10)
Beispiel #11
0
 def test_get_setting_int(self, mock_addon):
     mock_addon.getSettingInt.side_effect = (lambda key: 100
                                             if key == "test_key" else None)
     self.assertEqual(player.get_setting("test_key", "int"), 100)