Skip to content

Commit 78986f3

Browse files
authored
Merge pull request #15 from mgerni/templesync
add import from temple sync
2 parents 94721c6 + 64e8e09 commit 78986f3

10 files changed

Lines changed: 246 additions & 33 deletions

File tree

static/js/task.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,24 @@ $(document).ready(function(){
373373
});
374374
});
375375

376+
$(document).ready(function(){
377+
$(document).on('click', '#importButton', function(){
378+
var input = document.getElementById('importInput');
379+
var username = input.value;
380+
var importConent = document.getElementById('importContent');
381+
382+
req = $.ajax({
383+
url : '/collectionlog_import/',
384+
type : 'POST',
385+
data : {username : username}
386+
});
387+
388+
req.done(function(data) {
389+
$(importConent).html(data)
390+
});
391+
});
392+
});
393+
376394
$(document).ready(function(){
377395
$('.task-image').mouseenter(function(){
378396
const tip = this.name;

static/styles.css

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -916,6 +916,16 @@ nav .rank-check::before {
916916
font-weight: 900;
917917
color: var(--complete-color);
918918
}
919+
920+
nav .temple-sync::before {
921+
font-family: "Font Awesome 5 Free";
922+
content: "\f021";
923+
display: inline-block;
924+
padding-right: 3px;
925+
vertical-align: middle;
926+
font-weight: 900;
927+
color: var(--complete-color);
928+
}
919929
nav svg {
920930
fill: var(--current-task-color)
921931
}
@@ -1457,4 +1467,11 @@ input:checked + .slider:before {
14571467
.recaptcha {
14581468
display: flex;
14591469
justify-content: center;
1470+
}
1471+
1472+
1473+
.center {
1474+
display: flex;
1475+
justify-content: center;
1476+
align-items: center;
14601477
}

task_database.py

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,6 @@ def __set_task_complete(username: str, tier: str, task_id: int, complete: bool):
262262
task_coll = mydb['taskLists']
263263
cleaned_tier = tier.replace("Tasks", "")
264264
if complete:
265-
print(f"tiers.{cleaned_tier}.completedTasks", task_id)
266265
result = task_coll.update_one(
267266
{"username": username},
268267
{
@@ -540,7 +539,6 @@ def get_task_lists(username):
540539
if completed_bossPet_ids:
541540
for id in completed_bossPet_ids:
542541
if boss_pet_task.id == id['taskId']:
543-
print(boss_pet_task)
544542
boss_pet_task.isCompleted = True
545543

546544
bossPets.append(boss_pet_task)
@@ -646,6 +644,51 @@ def manual_revert_tasks(username, tier, task_id):
646644
return task.name, task.asset_image, task.tip, task.wiki_link
647645

648646

647+
def update_imported_tasks(username: str, all_tasks: list, username2: str):
648+
coll = mydb['taskLists']
649+
include = {'easy', 'medium', 'hard', 'elite'}
650+
tasks_to_check = []
651+
for tier in include:
652+
current_task = get_taskCurrent_tier(username, tier)
653+
if current_task is not None:
654+
tasks_to_check.append(current_task[3])
655+
656+
all_task_ids = {task["taskId"] for group in all_tasks for task in group}
657+
found = [value for value in tasks_to_check if value in all_task_ids]
658+
exists_all = all(value in all_task_ids for value in tasks_to_check)
659+
if exists_all:
660+
# coll.update_one({'username': username}, {})
661+
for task in found:
662+
print(task)
663+
__set_current_task(username, 'easy', int(task), False)
664+
665+
coll.update_one({'username': username},
666+
{'$set': {'tiers.easy.completedTasks': [],
667+
'tiers.medium.completedTasks': [],
668+
'tiers.hard.completedTasks': [],
669+
'tiers.elite.completedTasks': [],
670+
# 'tiers.master.completedTasks': [],
671+
# 'tiers.passive.completedTasks': [],
672+
# 'tiers.extra.completedTasks': [],
673+
# 'tiers.bossPets.completedTasks': [],
674+
# 'tiers.skillPets.completedTasks': [],
675+
# 'tiers.otherPets.completedTasks': []
676+
}
677+
})
678+
coll.update_one({'username': username},
679+
{'$set': {'tiers.easy.completedTasks': all_tasks[0],
680+
'tiers.medium.completedTasks': all_tasks[1],
681+
'tiers.hard.completedTasks': all_tasks[2],
682+
'tiers.elite.completedTasks': all_tasks[3],
683+
# 'tiers.master.completedTasks': [],
684+
# 'tiers.passive.completedTasks': [],
685+
# 'tiers.extra.completedTasks': [],
686+
# 'tiers.bossPets.completedTasks': [],
687+
# 'tiers.skillPets.completedTasks': [],
688+
# 'tiers.otherPets.completedTasks': []
689+
}})
690+
coll.update_one({'username' : username}, {'$set' : {'ign': username2}})
691+
649692
'''
650693
import_spreadsheet:
651694

taskapp.py

Lines changed: 52 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
import tasklists
1010
from task_database import (get_taskCurrent, generate_task, complete_task, get_task_progress,
1111
get_task_lists, manual_complete_tasks, manual_revert_tasks,
12-
uncomplete_all_tasks, lms_status_change,
12+
uncomplete_all_tasks, lms_status_change, update_imported_tasks,
1313
official_status_change, username_change, official_icon, unofficial_icon, get_taskCurrent_tier, generate_task_for_tier,
1414
complete_task_unofficial_tier, get_user, get_leaderboard)
1515
import send_grid_email
1616
from rank_check import get_collection_log, check_collection_log
17-
from templesync import check_logs, read_json_file
17+
from templesync import check_logs, read_json_file, import_logs
1818

1919
app = Flask(__name__)
2020

@@ -446,34 +446,39 @@ def dashboard():
446446
def collection_log_check():
447447
form_data = request.form
448448
rs_username = form_data['username']
449-
easy_check = check_logs(rs_username, read_json_file('tasks/easy.json'))
450-
medium_check = check_logs(rs_username, read_json_file('tasks/medium.json'))
451-
hard_check = check_logs(rs_username, read_json_file('tasks/hard.json'))
452-
elite_check = check_logs(rs_username, read_json_file('tasks/elite.json'))
449+
easy_check = check_logs(rs_username, read_json_file('tasks/easy.json'), 'check')
450+
medium_check = check_logs(rs_username, read_json_file('tasks/medium.json'), 'check')
451+
hard_check = check_logs(rs_username, read_json_file('tasks/hard.json'), 'check')
452+
elite_check = check_logs(rs_username, read_json_file('tasks/elite.json'),'check')
453453

454454
return render_template('collection_log_check.html',
455455
rs_username = rs_username,
456456
easy_check = easy_check,
457457
medium_check = medium_check,
458458
hard_check = hard_check,
459459
elite_check= elite_check)
460-
log_data = get_collection_log(rs_username)
461-
if log_data[0] == 200:
462-
easy_check = check_collection_log(tasklists.easy, log_data[1])
463-
medium_check = check_collection_log(tasklists.medium, log_data[1])
464-
hard_check = check_collection_log(tasklists.hard, log_data[1])
465-
elite_check = check_collection_log(tasklists.elite, log_data[1])
466-
467-
return render_template('collection_log_check.html',
468-
rs_username = rs_username,
469-
easy_check= easy_check,
470-
medium_check= medium_check,
471-
hard_check = hard_check,
472-
elite_check = elite_check
473-
)
474-
else:
475-
print(log_data)
476-
return render_template('collection_log_check_error.html', rs_username=rs_username, error=log_data[1])
460+
461+
@app.route('/collectionlog_import/', methods = ['POST'])
462+
@login_required
463+
def collection_log_import():
464+
form_data = request.form
465+
rs_username = form_data['username']
466+
easy_import = check_logs('Gerni Task', read_json_file('tasks/easy.json'), 'import')
467+
medium_import = check_logs('Gerni Task', read_json_file('tasks/medium.json'), 'import')
468+
hard_import = check_logs('Gerni Task', read_json_file('tasks/hard.json'), 'import')
469+
elite_import = check_logs('Gerni Task', read_json_file('tasks/elite.json'), 'import')
470+
all_tasks = [easy_import, medium_import, hard_import, elite_import]
471+
update = update_imported_tasks(session['username'], all_tasks, form_data['username'])
472+
473+
return render_template('collection_log_import.html',
474+
rs_username = rs_username,
475+
easy = len(easy_import),
476+
medium = len(medium_import),
477+
hard = len(hard_import),
478+
elite = len(elite_import))
479+
480+
481+
return {'message': easy_import}
477482

478483
# AJAX route for generating a task.
479484
@app.route('/generate/', methods=['POST'])
@@ -838,7 +843,30 @@ def wall_of_pain():
838843
**context
839844
)
840845

841-
846+
@app.route('/sync-collection-logs/', methods=['GET'])
847+
@login_required
848+
def sync_collection_logs():
849+
user_info = BasePageInfo()
850+
progress = get_task_progress(user_info.username)
851+
context = {
852+
'easy': progress['easy']['percent_complete'],
853+
'medium': progress['medium']['percent_complete'],
854+
'hard': progress['hard']['percent_complete'],
855+
'elite': progress['elite']['percent_complete'],
856+
'master' : progress['master']['percent_complete'],
857+
'passive' : progress['passive']['percent_complete'],
858+
'extra' : progress['extra']['percent_complete'],
859+
'allPets' : progress['all_pets']['percent_complete'],
860+
}
861+
return render_template(
862+
'temple-sync.html',
863+
username=user_info.username,
864+
email_verify=user_info.email_bool,
865+
email_val=user_info.email_val,
866+
rank_icon=user_info.rank_icon,
867+
taskapp_email=taskapp_email,
868+
**context
869+
)
842870
#route for Rank Check Page
843871
@app.route('/rank-check/', methods=['GET'])
844872
@login_required

tasklists.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
def to_col_log_data(data: dict) -> ColLogData or None: # type: ignore
44
if data is None:
55
return None
6-
return ColLogData(category=data['category'],
7-
log_name=data['logName'],
6+
return ColLogData(category=data.get('category'),
7+
log_name=data.get('logName'),
88
exclude=data.get('exclude'),
99
include=data.get('include'),
1010
multi=data.get('multi'),

templates/base_updated.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
<a class="faq" href="/faq/">FAQ/Rules</a>
3030
<a class="wop" href="/wall-of-pain/">Wall Of Pain</a>
3131
<a class="rank-check" href="/rank-check/">Rank Check</a>
32+
<a class="temple-sync" href="/sync-collection-logs/">Import</a>
3233
<a class="profile" href="/profile/">{{username}}</a>
3334
<a class="logout" href="/logout/">Logout</a>
3435
</div>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<div>
2+
<div>
3+
<h3 class="center">Import Results For: <p class="incomplete">{{rs_username}}</p></h3>
4+
</div>
5+
6+
<div class="rank-results-row center">
7+
<p class="complete">Easy Tasks: <p class="incomplete">{{easy}}</p></p>
8+
</div>
9+
10+
<div class="rank-results-row center">
11+
<p class="complete">Medium Tasks: <p class="incomplete">{{medium}}</p></p>
12+
</div>
13+
14+
<div class="rank-results-row center">
15+
<p class="complete">Hard Tasks: <p class="incomplete">{{hard}}</p></p>
16+
</div>
17+
18+
<div class="rank-results-row center">
19+
<p class="complete">Elite Tasks: <p class="incomplete">{{elite}}</p></p>
20+
</div>
21+
<h5 class="center">Browse a task list to see what tasks you've completed already!</h3>
22+
</div>
23+
24+
25+

templates/temple-sync.html

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
{% extends "base_updated.html" %}
2+
{% block title %}
3+
- Temple Sync
4+
{% endblock %}
5+
{% block head %}
6+
{% endblock %}
7+
{% block context %}
8+
9+
<div class="container" style="margin-top: 5%;">
10+
<div class="main-content-rank-check">
11+
<div class="rect-large-register rsText">
12+
<div class="triangle-top-left">
13+
<div class="decoration-top-left shadow"></div>
14+
</div>
15+
<div class="triangle-top-right">
16+
<div class="decoration-top-right shadow"></div>
17+
</div>
18+
<div class="triangle-bottom-left">
19+
<div class="decoration-bottom-left shadow"></div>
20+
</div>
21+
<div class="triangle-bottom-right">
22+
<div class="decoration-bottom-right shadow"></div>
23+
</div>
24+
25+
<div id="importContent">
26+
<div class="rank-results-col center">
27+
<h3>Import from TempleOSRS</h3>
28+
<br>
29+
<p class="incomplete">Currently syncing Easy, Medium, Hard, and, Elite Tasks is supported.</p>
30+
<p class="incomplete">Using this feature will mark all tasks in a supported tier as incomplete.</p>
31+
<p class="incomplete">Only tasks imported from TempleOSRS will be completed.</p>
32+
<p class="complete">You must "link" your account to <a href="https://templeosrs.com">templeosrs.com</a></p>
33+
<br>
34+
35+
<p class="complete">If you have not linked your account, you can follow the steps below to do so:</p>
36+
<ol>
37+
<a target="_blank" href="https://templeosrs.com/faq.php#CATEGORY_06">Temple OSRS FAQ</a>
38+
</ol>
39+
40+
<p class="complete">Once you have ensured your TempleOSRS data is updated/sync'd, enter your Runescape Username and click Import.</p>
41+
<div class="import-input-section">
42+
<input class="rc-input" type="text" name="inputText" id="importInput" placeholder="RSN">
43+
<button id="importButton" class="rsText button-complete button-green">Import</button>
44+
</div>
45+
</div>
46+
</div>
47+
</div>
48+
</div>
49+
</div>
50+
51+
{% endblock %}

templesync.py

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,33 @@ def test():
1818
for item in data['data']['items']:
1919
print(item['name'])
2020

21-
def check_logs(username: str, site_tasks: list):
21+
def import_logs(player_name: str, site_tasks: list):
22+
player_data = temple_player_data(player_name)
23+
completed_tasks = list()
24+
for task in site_tasks:
25+
task_data = task.get('colLogData', None)
26+
if task_data:
27+
for item in task_data['include']:
28+
for log_slot in player_data['data']['items']:
29+
if item['id'] == log_slot['id']:
30+
completed_tasks.append(task['_id'])
31+
break
32+
return completed_tasks
33+
34+
35+
def check_logs(username: str, site_tasks: list, action: str):
36+
def format_completed_tasks(completed_tasks: set):
37+
# iterate over the completed tasks and create a list of dictionaries
38+
formatted_tasks = []
39+
for task_id in completed_tasks:
40+
formatted_tasks.append({
41+
'taskId': task_id,
42+
})
43+
return formatted_tasks
44+
2245
player_data = temple_player_data(username)
2346
missing_tasks = list()
47+
completed_tasks = set()
2448
for task in site_tasks:
2549
task_data = task.get('colLogData', None)
2650
if task_data:
@@ -30,7 +54,14 @@ def check_logs(username: str, site_tasks: list):
3054
if item['id'] == log_slot['id']:
3155
log_count += 1
3256
if log_count == task_data['logCount']:
57+
completed_tasks.add(int(task['_id']))
3358
break
34-
if log_count != task_data['logCount']:
35-
missing_tasks.append(task['name'])
36-
return missing_tasks
59+
if log_count != task_data['logCount']:
60+
missing_tasks.append(task['name'])
61+
62+
63+
if action == 'check':
64+
return missing_tasks
65+
else:
66+
67+
return format_completed_tasks(completed_tasks)

user_dao.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,6 @@ def convert_database_tier(tier: str) -> UserTaskList:
119119
completed_tasks = list(filter(lambda x: x.task_id in all_current_tier_ids, completed_tasks))
120120

121121
current = data.get('currentTask', None)
122-
print(current)
123122
if current:
124123
current = UserCurrentTask(task_id=current['taskId'])
125124
return UserTaskList(current_task=current,

0 commit comments

Comments
 (0)