Compare commits
14 Commits
42c3f6b37d
...
v1.0
Author | SHA1 | Date | |
---|---|---|---|
a8279c146c | |||
3dd457c9dd | |||
03df28754a | |||
d383d416ce | |||
24a6dd1124 | |||
445387dd80 | |||
00881516b7 | |||
36533495e7 | |||
619427b81a | |||
7a92e2c65f | |||
e14bb51127 | |||
ac198c9cb0 | |||
61f535fce4 | |||
d39e9cfb62 |
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[submodule "terminal_menu"]
|
||||||
|
path = terminal_menu
|
||||||
|
url = git@git.chauvet.pro:starnakin/terminal_menu.git
|
@ -20,6 +20,7 @@ cd VLC_HTTP_LAUNCHER
|
|||||||
3. Install the dependencies:
|
3. Install the dependencies:
|
||||||
```bash
|
```bash
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
|
pip install -r terminal_menu/requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
@ -45,11 +45,19 @@ class Database():
|
|||||||
last_path = cookies.get("last_path")
|
last_path = cookies.get("last_path")
|
||||||
return (last_path)
|
return (last_path)
|
||||||
|
|
||||||
|
def get_last_cursor_pos(self):
|
||||||
|
cookies = self.get_cookies()
|
||||||
|
last_path = cookies.get("last_cursor_pos")
|
||||||
|
return (last_path)
|
||||||
|
|
||||||
def set_last_site(self, value):
|
def set_last_site(self, value):
|
||||||
self.cookies_table.update(set("last_site", value), self.query.id == "0")
|
self.cookies_table.update(set("last_site", value), self.query.id == "0")
|
||||||
|
|
||||||
def set_last_path(self, value):
|
def set_last_path(self, value):
|
||||||
self.cookies_table.update(set("last_path", value), self.query.id == "0")
|
self.cookies_table.update(set("last_path", value), self.query.id == "0")
|
||||||
|
|
||||||
|
def set_last_cursor_pos(self, value):
|
||||||
|
self.cookies_table.update(set("last_cursor_pos", value), self.query.id == "0")
|
||||||
|
|
||||||
def add_site(self, site):
|
def add_site(self, site):
|
||||||
self.sites_table.insert(site)
|
self.sites_table.insert(site)
|
||||||
|
49
main.py
49
main.py
@ -1,5 +1,6 @@
|
|||||||
from urllib.parse import unquote, quote
|
from urllib.parse import unquote, quote
|
||||||
from scrapper import get_uri, get_files
|
from scrapper import get_uri, get_files
|
||||||
|
from urllib.parse import quote, unquote
|
||||||
import player
|
import player
|
||||||
from database import Database
|
from database import Database
|
||||||
from utils import get_url
|
from utils import get_url
|
||||||
@ -10,20 +11,23 @@ def files_navigator(site: dict):
|
|||||||
path = database.get_last_path()
|
path = database.get_last_path()
|
||||||
else:
|
else:
|
||||||
path = '/'
|
path = '/'
|
||||||
|
database.set_last_site(site.get("id"))
|
||||||
while True:
|
while True:
|
||||||
|
pos = database.get_last_cursor_pos()
|
||||||
|
path = get_uri(get_url(site) + path)
|
||||||
database.set_last_path(path)
|
database.set_last_path(path)
|
||||||
file = menu.files(get_url(site) + path)
|
file = menu.files(site, path, database, pos)
|
||||||
if (file == None):
|
if (file == None):
|
||||||
return
|
return
|
||||||
elif (file == "../" and path == "/"):
|
elif (file == "../" and path == "/"):
|
||||||
return
|
return
|
||||||
if (not file.endswith("/")):
|
if (not file.endswith("/")):
|
||||||
player.play(get_url(site) + path + file, database)
|
player.play(get_url(site) + quote(path + file), database)
|
||||||
else:
|
else:
|
||||||
path = path + file
|
path = path + file
|
||||||
|
|
||||||
def add_site():
|
def add_site(database: Database):
|
||||||
site = menu.add_site()
|
site = menu.add_site(database)
|
||||||
database.add_site(site)
|
database.add_site(site)
|
||||||
|
|
||||||
def config_preview(site_name:str):
|
def config_preview(site_name:str):
|
||||||
@ -36,12 +40,11 @@ def config_preview(site_name:str):
|
|||||||
"""
|
"""
|
||||||
return (str)
|
return (str)
|
||||||
|
|
||||||
def sites_deleter():
|
def sites_deleter(database: Database):
|
||||||
lst = []
|
lst = []
|
||||||
for i in sites_table.all():
|
for i in database.get_sites():
|
||||||
lst.append(f"{str(i.get('id'))}: {i.get('name')}")
|
lst.append(f"{str(i.get('id'))}: {i.get('name')}")
|
||||||
terminal_menu = TerminalMenu(lst, show_search_hint=True, preview_title="delete", preview_command=config_preview)
|
choose = menu.site_deleter(lst, database)
|
||||||
choose = terminal_menu.show()
|
|
||||||
if (choose == None):
|
if (choose == None):
|
||||||
return (1)
|
return (1)
|
||||||
site_name = lst[choose]
|
site_name = lst[choose]
|
||||||
@ -51,20 +54,18 @@ def sites_deleter():
|
|||||||
database.set_last_path("")
|
database.set_last_path("")
|
||||||
database.set_last_site("")
|
database.set_last_site("")
|
||||||
|
|
||||||
def sites_editor(site_id: int):
|
def sites_editor(database: Database):
|
||||||
lst = []
|
lst = []
|
||||||
for i in database.get_sites():
|
for i in database.get_sites():
|
||||||
lst.append(f"{str(i.get('id'))}: {i.get('name')}")
|
lst.append(f"{str(i.get('id'))}: {i.get('name')}")
|
||||||
terminal_menu = TerminalMenu(lst, show_search_hint=True, preview_title="delete", preview_command=config_preview)
|
choose = menu.site_editor(lst, database)
|
||||||
choose = terminal_menu.show()
|
|
||||||
if (choose == None):
|
if (choose == None):
|
||||||
return (1)
|
return (1)
|
||||||
site_name = lst[choose]
|
site_name = lst[choose]
|
||||||
id = int(site_name.split(": ")[0])
|
id = int(site_name.split(": ")[0])
|
||||||
site = database.get_site_by_id(id)
|
site = database.get_site_by_id(id)
|
||||||
lst = [f"name: {site.get('name')}", f"url: {site.get('url')}", f"user: {site.get('user')}", f"password: {site.get('password')}"]
|
lst = [f"name: {site.get('name')}", f"url: {site.get('url')}", f"user: {site.get('user')}", f"password: {site.get('password')}"]
|
||||||
terminal_menu = TerminalMenu(lst)
|
choose = menu.param_editor(lst)
|
||||||
choose = terminal_menu.show()
|
|
||||||
if (choose == None):
|
if (choose == None):
|
||||||
return (1);
|
return (1);
|
||||||
for i in lst:
|
for i in lst:
|
||||||
@ -78,34 +79,32 @@ def sites_editor(site_id: int):
|
|||||||
elif (choose == 3):
|
elif (choose == 3):
|
||||||
sites_table.update(set("password", input("password: ")), query.id == id)
|
sites_table.update(set("password", input("password: ")), query.id == id)
|
||||||
|
|
||||||
def sites_navigator():
|
def sites_navigator(database: Database):
|
||||||
nb_site = database.get_sites_table_len()
|
nb_site = database.get_sites_table_len()
|
||||||
if (nb_site == 0):
|
if (nb_site == 0):
|
||||||
add_site()
|
add_site(database)
|
||||||
nb_site = 1
|
nb_site = 1
|
||||||
last_site = database.get_last_site()
|
last_site = database.get_last_site()
|
||||||
if (last_site != None):
|
if (last_site != None):
|
||||||
files_navigator(last_site)
|
files_navigator(last_site)
|
||||||
while True:
|
while True:
|
||||||
nb_site = database.get_sites_table_len()
|
nb_site = database.get_sites_table_len()
|
||||||
terminal_menu = TerminalMenu(get(database.get_sites(), "name") + ["", "add", "edit", "delete"], skip_empty_entries=True, show_search_hint=True)
|
choose = menu.sites(database.get_sites())
|
||||||
choose = terminal_menu.show()
|
|
||||||
if (choose == None):
|
if (choose == None):
|
||||||
return (1)
|
return (1)
|
||||||
if (choose == nb_site + 1):
|
if (choose == nb_site + 1):
|
||||||
add_site();
|
add_site(database);
|
||||||
elif (choose == nb_site + 2):
|
elif (choose == nb_site + 2):
|
||||||
sites_editor()
|
sites_editor(database)
|
||||||
elif (choose == nb_site + 3):
|
elif (choose == nb_site + 3):
|
||||||
sites_deleter()
|
sites_deleter(database)
|
||||||
sites_navigator()
|
sites_navigator(database)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
set_url(database.get_sites()[choose])
|
files_navigator(database.get_sites()[choose])
|
||||||
files_navigator()
|
|
||||||
|
|
||||||
database = Database()
|
database = Database()
|
||||||
|
|
||||||
if (database.get_cookies_table_len() == 0):
|
if (database.get_cookies_table_len() == 0):
|
||||||
database.add_cookies({"last_path": "", "last_site": "", "id": "0"})
|
database.add_cookies({"last_path": "", "last_site": "", "last_cursor_pos": 0, "id": "0"})
|
||||||
sites_navigator();
|
sites_navigator(database);
|
||||||
|
76
menu.py
76
menu.py
@ -1,8 +1,18 @@
|
|||||||
from simple_term_menu import TerminalMenu
|
|
||||||
from database import Database
|
from database import Database
|
||||||
from scrapper import get_files, get_uri
|
from scrapper import get_files, get_uri
|
||||||
|
from utils import get_url, get
|
||||||
|
import platform
|
||||||
|
from terminal_menu.Menu import Menu
|
||||||
|
|
||||||
url = ""
|
|
||||||
|
uri = ""
|
||||||
|
preview_site = {}
|
||||||
|
preview_database = ""
|
||||||
|
|
||||||
|
def get_user_choice_by_menu(options: list, title = None, preview_command=None, preview_size: float = 0.3, show_search_hint: bool = False, skip_empty_entries = False, cursor_pos: int = 0):
|
||||||
|
menu = Menu(options, title, preview_body_function=preview_command, preview_ratio=preview_size, skip_empty_option=skip_empty_entries, cursor_pos=cursor_pos
|
||||||
|
)
|
||||||
|
return (menu.show());
|
||||||
|
|
||||||
def add_site(database: Database) -> dict:
|
def add_site(database: Database) -> dict:
|
||||||
print("add a site:")
|
print("add a site:")
|
||||||
@ -10,35 +20,43 @@ def add_site(database: Database) -> dict:
|
|||||||
site.update({"url": input("url without protocol (ip:port):")})
|
site.update({"url": input("url without protocol (ip:port):")})
|
||||||
site.update({"user": input("user(leave blank):")})
|
site.update({"user": input("user(leave blank):")})
|
||||||
site.update({"password": input("password(leave blank):")})
|
site.update({"password": input("password(leave blank):")})
|
||||||
site.update({"id": str(database.get_sites_table_len())})
|
site.update({"id": database.get_sites_table_len()})
|
||||||
name = input(f"name[{str(len(sites_table.all()))}] :")
|
name = input(f"name[{str(database.get_sites_table_len())}]")
|
||||||
if (name == ""):
|
if (name == ""):
|
||||||
name = str(database.get_sites_table_len())
|
name = database.get_sites_table_len()
|
||||||
site.update({"name": name})
|
site.update({"name": name})
|
||||||
return (site)
|
return (site)
|
||||||
|
|
||||||
def files_preview(filename: str) -> str:
|
def files_preview(filename: str) -> str:
|
||||||
if (not filename.endswith("/")):
|
if (not filename.endswith("/")):
|
||||||
return (None)
|
return (None)
|
||||||
files = get_files(url + filename)
|
files = get_files(preview_site, uri + filename)
|
||||||
return ("\n".join(files))
|
return ("\n".join(files))
|
||||||
|
|
||||||
def files(base_url:str):
|
def files(site:dict, path:str, database:Database, pos:int):
|
||||||
global url
|
global uri
|
||||||
|
global preview_site
|
||||||
|
|
||||||
url = base_url
|
uri = path
|
||||||
files = get_files(base_url)
|
preview_site = site
|
||||||
terminal_menu = TerminalMenu(files,
|
files = get_files(site, path)
|
||||||
|
choose = get_user_choice_by_menu(files,
|
||||||
preview_command=files_preview,
|
preview_command=files_preview,
|
||||||
preview_size=0.3,
|
preview_size=0.3,
|
||||||
show_search_hint=True,
|
show_search_hint=True,
|
||||||
title=f"Index of {get_uri(url)}")
|
title=f"Index of {path}",
|
||||||
choose = terminal_menu.show()
|
cursor_pos = pos)
|
||||||
|
if (choose == None):
|
||||||
|
database.set_last_cursor_pos(0)
|
||||||
|
return (None)
|
||||||
|
database.set_last_cursor_pos(choose)
|
||||||
return (files[choose])
|
return (files[choose])
|
||||||
|
|
||||||
def config_preview(site_name:str):
|
def config_preview(site_name:str):
|
||||||
id = int(site_name.split(": ")[0])
|
id = int(site_name.split(": ")[0])
|
||||||
site = database.get_site_by_id(id)
|
site = preview_database.get_site_by_id(id)
|
||||||
|
if (site == None):
|
||||||
|
return
|
||||||
str = f"""
|
str = f"""
|
||||||
url: {site.get('url')}
|
url: {site.get('url')}
|
||||||
user: {site.get('user')}
|
user: {site.get('user')}
|
||||||
@ -46,21 +64,35 @@ def config_preview(site_name:str):
|
|||||||
"""
|
"""
|
||||||
return (str)
|
return (str)
|
||||||
|
|
||||||
def site_deleter(sites: list):
|
def site_deleter(sites, database: Database):
|
||||||
terminal_menu = TerminalMenu(sites,
|
global preview_database
|
||||||
|
|
||||||
|
preview_database = database
|
||||||
|
choose = get_user_choice_by_menu(sites,
|
||||||
show_search_hint=True,
|
show_search_hint=True,
|
||||||
preview_title="delete",
|
preview_title="delete",
|
||||||
preview_command=config_preview)
|
preview_command=config_preview)
|
||||||
choose = terminal_menu.show()
|
|
||||||
return (choose)
|
return (choose)
|
||||||
|
|
||||||
def site_editor(lst: list):
|
def param_editor(lst: list):
|
||||||
terminal_menu = TerminalMenu(lst + ["", "quit"],
|
choose = get_user_choice_by_menu(lst)
|
||||||
|
return (choose)
|
||||||
|
|
||||||
|
def site_editor(lst: list, database: Database):
|
||||||
|
global preview_database
|
||||||
|
|
||||||
|
preview_database = database
|
||||||
|
choose = get_user_choice_by_menu(lst + ["", "quit"],
|
||||||
skip_empty_entries=True,
|
skip_empty_entries=True,
|
||||||
show_search_hint=True,
|
show_search_hint=True,
|
||||||
preview_title="Edit",
|
title="Edit")
|
||||||
preview_command=config_preview)
|
|
||||||
choose = terminal_menu.show()
|
|
||||||
if (choose == len(lst) + 1):
|
if (choose == len(lst) + 1):
|
||||||
return (None)
|
return (None)
|
||||||
return (choose)
|
return (choose)
|
||||||
|
|
||||||
|
def sites(sites: list):
|
||||||
|
nb_site = len(sites)
|
||||||
|
choose = get_user_choice_by_menu(get(sites, "name") + ["", "add", "edit", "delete"],
|
||||||
|
skip_empty_entries=True,
|
||||||
|
show_search_hint=True)
|
||||||
|
return (choose)
|
||||||
|
22
player.py
22
player.py
@ -1,13 +1,13 @@
|
|||||||
from simple_term_menu import TerminalMenu
|
|
||||||
import vlc
|
|
||||||
from database import Database
|
from database import Database
|
||||||
|
import menu
|
||||||
|
from time import sleep
|
||||||
|
import os, subprocess
|
||||||
|
|
||||||
def play(url: str, database: Database):
|
def _play(url: str, database: Database):
|
||||||
start_pos = 0
|
start_pos = 0
|
||||||
viewing_data = database.get_viewing_data(url)
|
viewing_data = database.get_viewing_data(url)
|
||||||
if (viewing_data != None):
|
if (viewing_data != None):
|
||||||
menu = TerminalMenu([f"go back to {str(viewing_data.get('last_pos'))}", "restart from 0:00"])
|
response = menu.start_pos([f"go back to {str(viewing_data.get('last_pos'))}", "restart from 0:00"])
|
||||||
response = menu.show()
|
|
||||||
if (response == None):
|
if (response == None):
|
||||||
return (1);
|
return (1);
|
||||||
elif (response == 0):
|
elif (response == 0):
|
||||||
@ -17,3 +17,15 @@ def play(url: str, database: Database):
|
|||||||
media = vlc_instance.media_new(url)
|
media = vlc_instance.media_new(url)
|
||||||
player.set_media(media)
|
player.set_media(media)
|
||||||
player.play()
|
player.play()
|
||||||
|
sleep(1)
|
||||||
|
player.video_set_mouse_input(True)
|
||||||
|
player.set_position(start_pos / player.get_length())
|
||||||
|
player.set_fullscreen(True)
|
||||||
|
while True:
|
||||||
|
print("duration:", player.get_time(),":",player.get_length())
|
||||||
|
|
||||||
|
|
||||||
|
def play(url: str, database: Database):
|
||||||
|
with open(os.devnull, 'wb') as devnull:
|
||||||
|
subprocess.check_call(['vlc', url], stdout=devnull, stderr=subprocess.STDOUT)
|
||||||
|
|
||||||
|
@ -1,12 +1,7 @@
|
|||||||
beautifulsoup4==4.12.2
|
beautifulsoup4==4.12.2
|
||||||
bs4==0.0.1
|
bs4==0.0.1
|
||||||
certifi==2023.5.7
|
getch==1.0
|
||||||
charset-normalizer==3.1.0
|
|
||||||
enzyme==0.4.1
|
|
||||||
idna==3.4
|
|
||||||
install==1.3.5
|
|
||||||
requests==2.30.0
|
requests==2.30.0
|
||||||
simple-term-menu==1.6.1
|
|
||||||
soupsieve==2.4.1
|
soupsieve==2.4.1
|
||||||
tinydb==4.7.1
|
tinydb==4.7.1
|
||||||
urllib3==2.0.2
|
urllib3==2.0.2
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
from urllib.parse import quote, unquote
|
from urllib.parse import quote, unquote
|
||||||
|
from utils import get_url
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
def get_files(url: str) -> []:
|
def get_files(site:dict, path:str) -> []:
|
||||||
|
url = get_url(site) + quote(path)
|
||||||
if (url in ["/../", "../"]):
|
if (url in ["/../", "../"]):
|
||||||
return ([])
|
return ([])
|
||||||
response = requests.get(url)
|
response = requests.get(url)
|
||||||
|
1
terminal_menu
Submodule
1
terminal_menu
Submodule
Submodule terminal_menu added at 5c07857c79
6
utils.py
6
utils.py
@ -4,3 +4,9 @@ def get_url(site: dict):
|
|||||||
return (f"http://{site.get('url')}")
|
return (f"http://{site.get('url')}")
|
||||||
else:
|
else:
|
||||||
return (f"http://{site.get('user')}:{site.get('password')}@{site.get('url')}")
|
return (f"http://{site.get('user')}:{site.get('password')}@{site.get('url')}")
|
||||||
|
|
||||||
|
def get(dictionnarys: list, key: str):
|
||||||
|
lst = []
|
||||||
|
for dictionnary in dictionnarys:
|
||||||
|
lst.append(dictionnary.get(key))
|
||||||
|
return (lst)
|
||||||
|
Reference in New Issue
Block a user