redo default home screen, show recently tipped memes
This commit is contained in:
parent
9ec4d37448
commit
be5bf5af76
|
@ -12,7 +12,7 @@ from suchwow import config
|
||||||
from suchwow.models import Post, Profile, Comment, Notification, db, Moderator
|
from suchwow.models import Post, Profile, Comment, Notification, db, Moderator
|
||||||
from suchwow.routes import auth, comment, post, profile, leaderboard, api
|
from suchwow.routes import auth, comment, post, profile, leaderboard, api
|
||||||
from suchwow.utils.decorators import login_required, moderator_required
|
from suchwow.utils.decorators import login_required, moderator_required
|
||||||
from suchwow.utils.helpers import post_webhook, get_activity
|
from suchwow.utils.helpers import post_webhook, get_latest_tipped_posts
|
||||||
from suchwow.reddit import make_post
|
from suchwow.reddit import make_post
|
||||||
from suchwow.discord import post_discord_webhook
|
from suchwow.discord import post_discord_webhook
|
||||||
from suchwow import wownero, filters
|
from suchwow import wownero, filters
|
||||||
|
@ -38,6 +38,14 @@ def index():
|
||||||
submitter = request.args.get("submitter", None)
|
submitter = request.args.get("submitter", None)
|
||||||
content = request.args.get("content", None)
|
content = request.args.get("content", None)
|
||||||
|
|
||||||
|
if content != 'feed':
|
||||||
|
posts = get_latest_tipped_posts()
|
||||||
|
return render_template(
|
||||||
|
"index.html",
|
||||||
|
posts=posts[0:30],
|
||||||
|
title="Latest Tipped Memes"
|
||||||
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
page = int(page)
|
page = int(page)
|
||||||
except:
|
except:
|
||||||
|
@ -54,9 +62,11 @@ def index():
|
||||||
"index.html",
|
"index.html",
|
||||||
posts=paginated_posts,
|
posts=paginated_posts,
|
||||||
page=page,
|
page=page,
|
||||||
total_pages=total_pages
|
total_pages=total_pages,
|
||||||
|
title="Latest Memes"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/mod")
|
@app.route("/mod")
|
||||||
@moderator_required
|
@moderator_required
|
||||||
def mod_queue():
|
def mod_queue():
|
||||||
|
|
|
@ -4,7 +4,13 @@
|
||||||
|
|
||||||
<div class="container" style="text-align:center;">
|
<div class="container" style="text-align:center;">
|
||||||
|
|
||||||
<h1 class="title">Latest Memes</h1>
|
<h1 class="title">{% if title %}{{ title }}{% else %}Latest Memes{% endif %}</h1>
|
||||||
|
|
||||||
|
{% if request.args.content != 'feed' %}
|
||||||
|
<a href="/?content=feed">View Latest Memes</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="/">View Latest Tipped Posts</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<section class="section">
|
<section class="section">
|
||||||
{% if posts %}
|
{% if posts %}
|
||||||
|
@ -25,7 +31,7 @@
|
||||||
<p class="title is-4">
|
<p class="title is-4">
|
||||||
<a href="{{ url_for('post.read', id=post.id) }}">{{ post.title }}</a>
|
<a href="{{ url_for('post.read', id=post.id) }}">{{ post.title }}</a>
|
||||||
</p>
|
</p>
|
||||||
<p class="subtitle is-6"><a href="/?submitter={{ post.submitter }}">{{ post.submitter }}</a></p>
|
<p class="subtitle is-6"><a href="/?content=feed&submitter={{ post.submitter }}">{{ post.submitter }}</a></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -50,7 +56,7 @@
|
||||||
<nav class="pagination is-centered pb-4" role="navigation" aria-label="pagination">
|
<nav class="pagination is-centered pb-4" role="navigation" aria-label="pagination">
|
||||||
<ul class="pagination-list">
|
<ul class="pagination-list">
|
||||||
{% for p in range(1, total_pages + 1) %}
|
{% for p in range(1, total_pages + 1) %}
|
||||||
<a href="{% if request.args.submitter %}/?submitter={{ request.args.submitter }}&{% else %}/?{% endif %}page={{ p }}" class="pagination-link {% if p == page %}current-page-btn{% endif %}">{{ p }}</a>
|
<a href="/?content=feed&{% if request.args.submitter %}submitter={{ request.args.submitter }}&{% endif %}page={{ p }}" class="pagination-link {% if p == page %}current-page-btn{% endif %}">{{ p }}</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
<a href="{{ url_for('post.approve', id=post.id) }}"><button type="button" name="button">Approve</button></a>
|
<a href="{{ url_for('post.approve', id=post.id) }}"><button type="button" name="button">Approve</button></a>
|
||||||
<a href="{{ url_for('post.delete', id=post.id) }}"><button type="button" name="button">Reject</button></a>
|
<a href="{{ url_for('post.delete', id=post.id) }}"><button type="button" name="button">Reject</button></a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<p>Submitted by <i><u><a href="/?submitter={{ post.submitter }}">{{ post.submitter }}</a></u></i> at <i>{{ post.timestamp }}</i></p>
|
<p>Submitted by <i><u><a href="/?content=feed&submitter={{ post.submitter }}">{{ post.submitter }}</a></u></i> at <i>{{ post.timestamp }}</i></p>
|
||||||
<img src="{{ url_for('post.uploaded_file', filename=post.image_name) }}" width=600/ style="border-radius:4px;">
|
<img src="{{ url_for('post.uploaded_file', filename=post.image_name) }}" width=600/ style="border-radius:4px;">
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -41,26 +41,36 @@ def post_webhook(msg):
|
||||||
except:
|
except:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def get_activity():
|
def get_latest_tipped_posts():
|
||||||
posts = Post.select()
|
key_name = 'latest_tips'
|
||||||
w = Wallet()
|
tipped_posts = rw_cache(key_name, None, 1200)
|
||||||
data = {}
|
|
||||||
for p in posts:
|
|
||||||
data[p.timestamp] = {'type': 'post', 'post': p}
|
|
||||||
for tx in w.incoming_transfers(p.account_index):
|
|
||||||
if 'timestamp' in tx:
|
|
||||||
data[tx['timestamp']] = {'type': 'tx', 'post': p}
|
|
||||||
|
|
||||||
dates = sorted(data, reverse=True)
|
if not tipped_posts:
|
||||||
new_data = []
|
new_data = []
|
||||||
for d in dates:
|
w = Wallet()
|
||||||
new_data.append(data[d]['post'])
|
data = {}
|
||||||
|
for acc in w.accounts():
|
||||||
|
txes = w.transfers(acc)
|
||||||
|
if 'in' in txes:
|
||||||
|
for tx in txes['in']:
|
||||||
|
p = Post.select().where(
|
||||||
|
Post.account_index==acc
|
||||||
|
).first()
|
||||||
|
if p:
|
||||||
|
data[tx['timestamp']] = p
|
||||||
|
|
||||||
return new_data[0:20]
|
dates = sorted(data, reverse=True)
|
||||||
|
for d in dates:
|
||||||
|
if not data[d] in new_data:
|
||||||
|
new_data.append(data[d])
|
||||||
|
|
||||||
|
tipped_posts = rw_cache(key_name, new_data, 1200)
|
||||||
|
|
||||||
|
return tipped_posts
|
||||||
|
|
||||||
|
|
||||||
# Use hacky filesystem cache since i dont feel like shipping redis
|
# Use hacky filesystem cache since i dont feel like shipping redis
|
||||||
def rw_cache(key_name, data=None):
|
def rw_cache(key_name, data=None, diff_seconds=3600):
|
||||||
pickle_file = path.join(config.DATA_FOLDER, f'{key_name}.pkl')
|
pickle_file = path.join(config.DATA_FOLDER, f'{key_name}.pkl')
|
||||||
try:
|
try:
|
||||||
if path.isfile(pickle_file):
|
if path.isfile(pickle_file):
|
||||||
|
@ -70,7 +80,7 @@ def rw_cache(key_name, data=None):
|
||||||
diff = now - mtime
|
diff = now - mtime
|
||||||
# If pickled data file is less than an hour old, load it and render page
|
# If pickled data file is less than an hour old, load it and render page
|
||||||
# Otherwise, determine balances, build json, store pickled data, and render page
|
# Otherwise, determine balances, build json, store pickled data, and render page
|
||||||
if diff.seconds < 3600:
|
if diff.seconds < diff_seconds:
|
||||||
print(f'unpickling {key_name}')
|
print(f'unpickling {key_name}')
|
||||||
with open(pickle_file, 'rb') as f:
|
with open(pickle_file, 'rb') as f:
|
||||||
pickled_data = pickle.load(f)
|
pickled_data = pickle.load(f)
|
||||||
|
|
|
@ -53,15 +53,8 @@ class Wallet(object):
|
||||||
return self.make_wallet_rpc('query_key', {'key_type': 'mnemonic'})['key']
|
return self.make_wallet_rpc('query_key', {'key_type': 'mnemonic'})['key']
|
||||||
|
|
||||||
def accounts(self):
|
def accounts(self):
|
||||||
accounts = []
|
|
||||||
_accounts = self.make_wallet_rpc('get_accounts')
|
_accounts = self.make_wallet_rpc('get_accounts')
|
||||||
idx = 0
|
return [i['account_index'] for i in _accounts['subaddress_accounts']]
|
||||||
self.master_address = _accounts['subaddress_accounts'][0]['base_address']
|
|
||||||
for _acc in _accounts['subaddress_accounts']:
|
|
||||||
assert idx == _acc['account_index']
|
|
||||||
accounts.append(_acc['account_index'])
|
|
||||||
idx += 1
|
|
||||||
return accounts
|
|
||||||
|
|
||||||
def new_account(self, label=None):
|
def new_account(self, label=None):
|
||||||
_account = self.make_wallet_rpc('create_account', {'label': label})
|
_account = self.make_wallet_rpc('create_account', {'label': label})
|
||||||
|
|
Loading…
Reference in New Issue