novi fajli za imporatnje in prikazovanje linkov
parent
db037c62fa
commit
be6a3242f9
|
@ -0,0 +1,63 @@
|
||||||
|
from flask import (
|
||||||
|
Blueprint, render_template, request, session, flash
|
||||||
|
)
|
||||||
|
from create_db import Card, get_session
|
||||||
|
from link_handler import check_response
|
||||||
|
|
||||||
|
|
||||||
|
bp = Blueprint('import_link', __name__, url_prefix='/import_link')
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route("/", methods=["GET", "POST"])
|
||||||
|
def index():
|
||||||
|
username = session["username"]
|
||||||
|
return render_template("import_link.html", username=username)
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route('/import', methods = ('GET', 'POST'))
|
||||||
|
def import_link():
|
||||||
|
username = session['username']
|
||||||
|
user_id = session['user_id']
|
||||||
|
if request.method == 'POST':
|
||||||
|
import_type = request.form.get("import_type", False)
|
||||||
|
print(import_type)
|
||||||
|
if import_type == "import_txt":
|
||||||
|
print("!2313232321")
|
||||||
|
else:
|
||||||
|
link = request.form.get("link", False)
|
||||||
|
if check_response(link) == 1:
|
||||||
|
print(link, 'is ok')
|
||||||
|
commit_link(link=link, user_id=user_id)
|
||||||
|
else:
|
||||||
|
print(link, 'is not ok')
|
||||||
|
|
||||||
|
return render_template("import_link.html", user_id=user_id, username=username)
|
||||||
|
|
||||||
|
|
||||||
|
def commit_link(link, user_id):
|
||||||
|
dbsession = get_session()
|
||||||
|
|
||||||
|
existing_link = dbsession.query(Card).filter_by(owner_id=user_id, item_location=link).first()
|
||||||
|
if existing_link:
|
||||||
|
flash(f"{link} has already been imported.")
|
||||||
|
else:
|
||||||
|
#add card
|
||||||
|
#TODO ni razlike med title in vsebino urlja ??
|
||||||
|
card = Card(title=link,
|
||||||
|
interest_rate=-1.0,
|
||||||
|
owner_id=user_id,
|
||||||
|
item_location=link,
|
||||||
|
last_review=None,
|
||||||
|
card_type="URL",
|
||||||
|
share_id=0)
|
||||||
|
dbsession.add(card)
|
||||||
|
dbsession.commit()
|
||||||
|
flash(f"{link} imported successfully")
|
||||||
|
|
||||||
|
dbsession.close()
|
||||||
|
|
||||||
|
|
||||||
|
def import_list_of_links(list_of_links, user_id):
|
||||||
|
#TODO nekak bi bilo dobro, da pokaže kateri so failali....
|
||||||
|
for link in list_of_links:
|
||||||
|
commit_link(link, user_id)
|
|
@ -0,0 +1,63 @@
|
||||||
|
import requests
|
||||||
|
import re
|
||||||
|
from flask import render_template
|
||||||
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
|
|
||||||
|
def check_response(link):
|
||||||
|
"""
|
||||||
|
responds 1 if link is ok
|
||||||
|
2 if there's conncetion error
|
||||||
|
3 if link is invalid (no "http" for example)
|
||||||
|
"""
|
||||||
|
parsed_url = urlparse(link)
|
||||||
|
if parsed_url.scheme and parsed_url.netloc:
|
||||||
|
try:
|
||||||
|
response = requests.head(link)
|
||||||
|
if response.status_code == 200:
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
#TODO drugi statusi code?
|
||||||
|
return "WEIRD"
|
||||||
|
except requests.exceptions.RequestException:
|
||||||
|
print("conncetion error")
|
||||||
|
return 2
|
||||||
|
else:
|
||||||
|
print("link not valid (https:// missing??)")
|
||||||
|
return 3
|
||||||
|
|
||||||
|
|
||||||
|
# kako vse možne linke embeddat?
|
||||||
|
def render_embed_link(cm_username, card, maybe_in, no_in):
|
||||||
|
url = card.item_location
|
||||||
|
if re.match(r'^https?://(www\.)?twitter\.com/.*/status/\d+$', url):
|
||||||
|
tweet_id = url.split("/")[-1]
|
||||||
|
return render_template("embed_link/twitter_embed.html",
|
||||||
|
card=card,
|
||||||
|
tweet_id=tweet_id,
|
||||||
|
username=cm_username,
|
||||||
|
maybe_in=maybe_in,
|
||||||
|
no_in=no_in)
|
||||||
|
|
||||||
|
elif re.match(r'^https?://(www\.)?youtube\.com/watch\?.*v=([-\w]+)', url):
|
||||||
|
youtube_id = re.search(r'v=([-\w]+)', url).group(1)
|
||||||
|
return render_template("embed_link/youtube_embed.html",
|
||||||
|
youtube_id=youtube_id,
|
||||||
|
card=card,
|
||||||
|
username=cm_username,
|
||||||
|
maybe_in=maybe_in,
|
||||||
|
no_in=no_in)
|
||||||
|
|
||||||
|
#TODO kill me wtf about the instances.........
|
||||||
|
elif re.match(r'^https?://(www\.)?mastodon\.social/@[a-zA-Z0-9]+/\d+', url):
|
||||||
|
username, post_id = url.split("/")[-3:-1]
|
||||||
|
return render_template("embed_link/mastodon_embed.html", username=username, post_id=post_id)
|
||||||
|
|
||||||
|
else:
|
||||||
|
#TODO what if iframe fails
|
||||||
|
return render_template("embed_link/iframe_embed.html",
|
||||||
|
url=url,
|
||||||
|
card=card,
|
||||||
|
username=cm_username,
|
||||||
|
maybe_in=maybe_in,
|
||||||
|
no_in=no_in)
|
|
@ -0,0 +1,5 @@
|
||||||
|
{% extends 'link.html' %}
|
||||||
|
|
||||||
|
{% block link %}
|
||||||
|
<iframe src="{{ card.item_location }}" width="100%" height="600px"></iframe>
|
||||||
|
{% endblock %}
|
|
@ -0,0 +1,11 @@
|
||||||
|
{% extends 'link.html' %}
|
||||||
|
|
||||||
|
{% block link %}
|
||||||
|
<div class="embed">
|
||||||
|
<blockquote class="twitter-tweet" data-dnt="true">
|
||||||
|
<a href="https://twitter.com/twitter/status/{{ tweet_id }}"></a>
|
||||||
|
</blockquote>
|
||||||
|
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
{% extends 'link.html' %}
|
||||||
|
|
||||||
|
{% block link %}
|
||||||
|
<iframe width="560" height="315" src="https://www.youtube.com/embed/{{ youtube_id }}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
|
||||||
|
{% endblock %}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
{% extends 'partials/base.html' %}
|
||||||
|
|
||||||
|
{% block name %}upload{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<main>
|
||||||
|
<form method="post" enctype="multipart/form-data" action="/import_link/import">
|
||||||
|
<ol>
|
||||||
|
<li> <input placeholder="insert link" type="link" name="import_type"/></li>
|
||||||
|
<li> <button name="import_type" type="submit" value="import_txt">.txt file list of links</button></li>
|
||||||
|
<li> <button name="import_type" type="submit" value="import_twitter_bookmarks">import twitter bookmarks</button></li>
|
||||||
|
<li> <button name="import_type" type="submit" value="import_raindrop_links">import links from raindrop.io</button></li>
|
||||||
|
</ol>
|
||||||
|
</form>
|
||||||
|
</main>
|
||||||
|
{% endblock %}
|
|
@ -0,0 +1,14 @@
|
||||||
|
{% extends 'partials/base.html' %}
|
||||||
|
|
||||||
|
{% block name %}import{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<main>
|
||||||
|
<form class="dropzone dropzone-form" method="post" enctype="multipart/form-data" action="/upload/uploader">
|
||||||
|
<span id="dropzone-txt" class="dropzone-txt">Drop file here or click to upload.</span>
|
||||||
|
<input class="dropzone-input" type="file" name="file" runat="server" accept=".txt" multiple >
|
||||||
|
</form>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<script src="{{ url_for('static', filename='js/dropzone.js') }}"></script>
|
||||||
|
{% endblock %}
|
|
@ -0,0 +1,26 @@
|
||||||
|
|
||||||
|
{% extends 'partials/base.html' %}
|
||||||
|
|
||||||
|
{% block name %}deck{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<main>
|
||||||
|
<article>
|
||||||
|
{% block link %}{% endblock %}
|
||||||
|
<footer>
|
||||||
|
<form method="post">
|
||||||
|
<input type="hidden" name="card_id" value="{{ card['id'] }}">
|
||||||
|
<!-- <span id="buttonContainer" style="display: flex; justify-content: space-around;"> -->
|
||||||
|
<span id="buttonContainer">
|
||||||
|
<button type="submit" name="rate" value="Yes" accesskey="1">Yes (1)</button> <!--ti keyi so alt+shit+key...-->
|
||||||
|
<button type="submit" name="rate" value="Maybe" accesskey="2">Maybe ({{maybe_in}})</button>
|
||||||
|
<button type="submit" name="rate" value="No" accesskey="3">No ({{no_in}})</button>
|
||||||
|
<button type="submit" name="rate" value="Delete" accesskey="d">Delete</button>
|
||||||
|
<button type="submit" name="share" value="Share" accesskey="s">Share</button>
|
||||||
|
</span>
|
||||||
|
</form>
|
||||||
|
</footer>
|
||||||
|
</article>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue