✨ Initial importer work done
This commit is contained in:
@@ -74,21 +74,30 @@ class Importer:
|
||||
# Scan sources in threads
|
||||
threads = []
|
||||
for source in self.sources:
|
||||
t = Thread(target=self.__import_source, args=tuple(source,)) # fmt: skip
|
||||
print(f"{source.full_name}, installed: {source.is_installed}") # ! DEBUG
|
||||
if not source.is_installed:
|
||||
continue
|
||||
t = Thread(target=self.__import_source, args=tuple([source])) # fmt: skip
|
||||
threads.append(t)
|
||||
t.start()
|
||||
|
||||
for t in threads:
|
||||
t.join()
|
||||
|
||||
# Save games
|
||||
for game in self.games:
|
||||
game.save()
|
||||
|
||||
self.close_dialog()
|
||||
|
||||
def __import_source(self, *args, **kwargs):
|
||||
"""Source import thread entry point"""
|
||||
# TODO error handling in source iteration
|
||||
# TODO add SGDB image (move to a game manager)
|
||||
source, *rest = args
|
||||
iterator = source.__iter__()
|
||||
with self.progress_lock:
|
||||
self.counts[source.id]["total"] = len(iterator)
|
||||
self.counts[source.id]["total"] = iterator.__len__()
|
||||
for game in iterator:
|
||||
with self.games_lock:
|
||||
self.games.add(game)
|
||||
@@ -96,5 +105,3 @@ class Importer:
|
||||
if not game.blacklisted:
|
||||
self.counts[source.id]["done"] += 1
|
||||
self.update_progressbar()
|
||||
# TODO add SGDB image (move to a game manager)
|
||||
exit(0)
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
from abc import abstractmethod
|
||||
from collections.abc import Iterable, Iterator
|
||||
from enum import IntEnum, auto
|
||||
from collections.abc import Iterable, Iterator, Sized
|
||||
|
||||
|
||||
class SourceIterator(Iterator):
|
||||
class SourceIterator(Iterator, Sized):
|
||||
"""Data producer for a source of games"""
|
||||
|
||||
source = None
|
||||
@@ -67,6 +66,12 @@ class Source(Iterable):
|
||||
"""The executable format used to construct game executables"""
|
||||
pass
|
||||
|
||||
@property
|
||||
@abstractmethod
|
||||
def is_installed(self):
|
||||
"""Whether the source is detected as installed"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def __iter__(self):
|
||||
"""Get the source's iterator, to use in for loops"""
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from functools import cached_property, cache
|
||||
from functools import cache
|
||||
from sqlite3 import connect
|
||||
from time import time
|
||||
|
||||
@@ -65,7 +65,6 @@ class LutrisSourceIterator(SourceIterator):
|
||||
raise e
|
||||
|
||||
# Create game
|
||||
row = self.__next_row()
|
||||
values = {
|
||||
"added": int(time()),
|
||||
"hidden": row[4],
|
||||
@@ -98,8 +97,18 @@ class LutrisSource(Source):
|
||||
def game_id_format(self):
|
||||
return super().game_id_format + "_{game_internal_id}"
|
||||
|
||||
def __init__(self, win):
|
||||
super().__init__(win)
|
||||
@property
|
||||
def is_installed(self):
|
||||
try:
|
||||
self.location
|
||||
self.cache_location
|
||||
except FileNotFoundError:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __iter__(self):
|
||||
return LutrisSourceIterator(source=self)
|
||||
@@ -110,13 +119,13 @@ class LutrisNativeSource(LutrisSource):
|
||||
|
||||
variant = "native"
|
||||
|
||||
@cached_property
|
||||
@property
|
||||
@replaced_by_schema_key("lutris-location")
|
||||
@replaced_by_path("~/.local/share/lutris/")
|
||||
def location(self):
|
||||
raise FileNotFoundError()
|
||||
|
||||
@cached_property
|
||||
@property
|
||||
@replaced_by_schema_key("lutris-cache-location")
|
||||
@replaced_by_path("~/.local/share/lutris/covers")
|
||||
def cache_location(self):
|
||||
@@ -128,13 +137,13 @@ class LutrisFlatpakSource(LutrisSource):
|
||||
|
||||
variant = "flatpak"
|
||||
|
||||
@cached_property
|
||||
@property
|
||||
@replaced_by_schema_key("lutris-flatpak-location")
|
||||
@replaced_by_path("~/.var/app/net.lutris.Lutris/data/lutris")
|
||||
def location(self):
|
||||
raise FileNotFoundError()
|
||||
|
||||
@cached_property
|
||||
@property
|
||||
@replaced_by_schema_key("lutris-flatpak-cache-location")
|
||||
@replaced_by_path("~/.var/app/net.lutris.Lutris/data/lutris/covers")
|
||||
def cache_location(self):
|
||||
|
||||
Reference in New Issue
Block a user