This commit is contained in:
lda committed 2025-12-17 20:24:49 +07:00
1 parent c557ca01e7
commit e1c88ac774
8 files changed
+221 -12

No files matched your search

+2 -4
View File
@@ -1,6 +1,4 @@
def main():
print("Hello from qrcode-from-onetab!")
import uvicorn
if __name__ == "__main__":
main()
uvicorn.run("uhhhhup:app", host="0.0.0.0", port=2222, reload=True)
+168
View File
@@ -0,0 +1,168 @@
:root {
--bg-color: #121212;
--text-color: #e0e0e0;
--primary-color: #bb86fc;
--secondary-color: #03dac6;
--error-color: #cf6679;
--surface-color: #1e1e1e;
--border-radius: 8px;
}
body {
background-color: var(--bg-color);
color: var(--text-color);
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
margin: 0;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
min-height: 100vh;
}
a {
color: var(--primary-color);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
button,
input[type="submit"],
.btn {
background-color: var(--surface-color);
color: var(--primary-color);
border: 1px solid var(--primary-color);
padding: 10px 20px;
border-radius: var(--border-radius);
cursor: pointer;
font-size: 1rem;
transition: background-color 0.2s, color 0.2s;
margin: 5px;
display: inline-block;
text-align: center;
text-decoration: none;
}
button:hover,
input[type="submit"]:hover,
.btn:hover {
background-color: var(--primary-color);
color: var(--bg-color);
text-decoration: none;
}
textarea {
background-color: var(--surface-color);
color: var(--text-color);
border: 1px solid #333;
border-radius: var(--border-radius);
padding: 10px;
width: 100%;
max-width: 800px;
font-family: monospace;
}
form {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
max-width: 800px;
gap: 10px;
}
ol {
list-style: none;
padding: 0;
width: 100%;
max-width: 800px;
}
li {
background-color: var(--surface-color);
margin-bottom: 10px;
padding: 15px;
border-radius: var(--border-radius);
word-break: break-all;
}
li a {
display: flex;
flex-direction: column;
gap: 10px;
}
.qrcode {
margin-top: 10px;
background-color: white;
padding: 10px;
border-radius: 4px;
width: fit-content;
}
/* Specifics for reader */
#b {
font-size: 1.5rem;
padding: 20px 40px;
margin-top: 20px;
}
/* Specifics for index */
.hero {
display: flex;
flex-wrap: wrap;
gap: 20px;
justify-content: center;
width: 100%;
max-width: 1000px;
margin-bottom: 40px;
}
.card {
background-color: var(--surface-color);
padding: 30px;
border-radius: var(--border-radius);
flex: 1;
min-width: 300px;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
border: 1px solid #333;
}
.card h2 {
color: var(--secondary-color);
margin-top: 0;
}
.card p {
margin-bottom: 20px;
color: #aaa;
}
.card .actions {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 10px;
}
.route-list {
display: grid;
gap: 10px;
width: 100%;
max-width: 600px;
}
.route-item {
background-color: var(--surface-color);
padding: 15px;
border-radius: var(--border-radius);
display: flex;
justify-content: space-between;
align-items: center;
}
+37 -6
View File
@@ -4,15 +4,46 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<link
rel="stylesheet"
href="{{ url_for('static', path='style.css') }}"
/>
</head>
<body>
{% macro this(route) %}
<h1>Queue Manager</h1>
<div class="hero">
<div class="card">
<h2>Input (PC)</h2>
<p>
<a href="{{ url_for(route.name) }}"
>{{ route.name }}: {{ route.path }}</a
>
Paste your OneTab export or list of links here to add them
to the queue.
</p>
{% endmacro %} {% for route in routes if "GET" in route.methods %} {{
this(route) }} {% endfor %}
<div class="actions">
<a href="/queuein" class="btn">Add Links</a>
</div>
</div>
<div class="card">
<h2>Output (Mobile)</h2>
<p>Open these on your phone to consume the queue.</p>
<div class="actions">
<a href="/q" class="btn">Reader (QR)</a>
<a href="/t" class="btn">Trail (Focus)</a>
<a href="/r" class="btn">Next Link</a>
</div>
</div>
</div>
<h3>System Routes</h3>
<div class="route-list">
{% macro this(route) %}
<div class="route-item">
<a href="{{ route.path }}">{{ route.name }}</a>
<span>{{ route.path }}</span>
</div>
{% endmacro %} {% for route in routes %} {{ this(route) }} {% endfor
%}
</div>
</body>
</html>
+4
View File
@@ -4,6 +4,10 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Queue Input</title>
<link
rel="stylesheet"
href="{{ url_for('static', path='style.css') }}"
/>
</head>
<body>
<form method="POST" action="/queuein">
+1
View File
@@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Queue Reader</title>
<link rel="stylesheet" href="{{ url_for('static', path='style.css') }}">
</head>
<body>
{% from 'macros.html' import magic_link %} {% if current_link %}
+1
View File
@@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Trail</title>
<link rel="stylesheet" href="{{ url_for('static', path='style.css') }}">
</head>
<body>
{% if queue_length > 0 %}
+2
View File
@@ -1,3 +1,5 @@
"why outdated"
from collections import deque
import flask
+6 -2
View File
@@ -6,11 +6,13 @@ from itertools import islice
import uvicorn
from fastapi import FastAPI, Form, Request
from fastapi.responses import HTMLResponse, RedirectResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="templates")
queue: deque[str] = deque() # lifo ahh
queue: deque[str] = deque() # fifo ahh
def link_extract_from_onetab(line):
@@ -57,7 +59,9 @@ async def redir(request: Request):
@app.get("/m", response_class=HTMLResponse)
async def mlti(request: Request):
"request first new style"
"""request first new style.
js still breaking (on mobile. they dont like mass popups) im so sad
"""
return templates.TemplateResponse(request, "multi.html")