Skip to content

Commit

Permalink
feat: add steam importer to users.views.data
Browse files Browse the repository at this point in the history
  • Loading branch information
yao-yun committed Feb 9, 2025
1 parent 241f3e7 commit 8ae9c79
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 1 deletion.
3 changes: 2 additions & 1 deletion journal/importers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@
from .goodreads import GoodreadsImporter
from .letterboxd import LetterboxdImporter
from .opml import OPMLImporter
from .steam import SteamImporter

__all__ = ["LetterboxdImporter", "OPMLImporter", "DoubanImporter", "GoodreadsImporter"]
__all__ = ["LetterboxdImporter", "OPMLImporter", "DoubanImporter", "GoodreadsImporter", "SteamImporter"]
8 changes: 8 additions & 0 deletions journal/importers/steam.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,14 @@ def estimate_shelf_type(cls, playtime_forever: int, last_played: datetime, app_i
elif played_long_enough: return ShelfType.COMPLETE
else: return ShelfType.DROPPED

@classmethod
def validate_apikey(cls, steam_apikey: str) -> bool:
...

@classmethod
def validate_userid(cls, steam_id: str) -> bool:
...

# TODO: Implement get_how_long_to_beat:
# Such data are available in HowLongToBeat.com and igdb, however
# 1. time_to_beat can be considered a potential metadata of Game item,
Expand Down
36 changes: 36 additions & 0 deletions users/views/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
GoodreadsImporter,
LetterboxdImporter,
OPMLImporter,
SteamImporter
)
from journal.models import ShelfType, reset_journal_visibility_for_user
from social.models import reset_social_visibility_for_user
Expand Down Expand Up @@ -331,3 +332,38 @@ def import_opml(request):
else:
messages.add_message(request, messages.ERROR, _("Invalid file."))
return redirect(reverse("users:data"))

@login_required
def import_steam(request):
if request.method != "POST":
return redirect(reverse("users:data"))

steam_apikey = request.POST.get("steam_apikey")
steam_id = request.POST.get("steam_id")

if not SteamImporter.validate_apikey(steam_apikey):
messages.add_message(request, messages.ERROR, _("Invalid API key."))
return redirect(reverse("users:data"))
if not SteamImporter.validate_userid(steam_id):
messages.add_message(request, messages.ERROR, _("Invalid steam id."))
return redirect(reverse("users:data"))

fetch_wishlist = bool(request.POST.get("fetch_wishlist", True))
fetch_owned = bool(request.POST.get("fetch_owned", True))

if not (fetch_wishlist or fetch_owned):
messages.add_message(request, messages.ERROR, _("Nothing to fetch."))
return redirect(reverse("users:data"))

SteamImporter.create(
user=request.user,
shelf_type_reversion = bool(request.POST.get("shelf_type_reversion", False)),
fetch_wishlist = fetch_wishlist,
fetch_owned = fetch_owned,
last_play_to_ctime = bool(request.POST.get("last_play_to_ctime", True)),
visibility = int(request.POST.get("visibility", request.user.visibility)),
steam_apikey = steam_apikey,
steam_id = steam_id
).enqueue()
messages.add_message(request, messages.INFO, _("Import in progress."))
return redirect(reverse("users:data"))

0 comments on commit 8ae9c79

Please sign in to comment.