feat: save what Pokemon has been visited

main
Khiem Ton 2 years ago
parent 7c66e40b79
commit bfb6d83d06
Signed by: th4tkh13m
GPG Key ID: 4D9CF147DCADD05D

@ -19,10 +19,10 @@ class PokemonList:
def sort_by_name(self, reverse=False): def sort_by_name(self, reverse=False):
with Session(self.engine) as session: with Session(self.engine) as session:
if reverse: if reverse:
result = session.query(Pokemon).where(Pokemon.end_time > datetime.now() + self.timedelta)\ result = session.query(Pokemon).where(Pokemon.visited.is_(False), Pokemon.end_time > datetime.now() + self.timedelta)\
.order_by(desc(Pokemon.name)) .order_by(desc(Pokemon.name))
else: else:
result = session.query(Pokemon).where(Pokemon.end_time > datetime.now() + self.timedelta)\ result = session.query(Pokemon).where(Pokemon.visited.is_(False), Pokemon.end_time > datetime.now() + self.timedelta)\
.order_by(Pokemon.name) .order_by(Pokemon.name)
session.commit() session.commit()
session.close() session.close()
@ -31,10 +31,10 @@ class PokemonList:
def sort_by_cp(self, reverse=False): def sort_by_cp(self, reverse=False):
with Session(self.engine) as session: with Session(self.engine) as session:
if reverse: if reverse:
result = session.query(Pokemon).where(Pokemon.end_time > datetime.now() + self.timedelta) \ result = session.query(Pokemon).where(Pokemon.visited.is_(False), Pokemon.end_time > datetime.now() + self.timedelta) \
.order_by(desc(Pokemon.cp)) .order_by(desc(Pokemon.cp))
else: else:
result = session.query(Pokemon).where(Pokemon.end_time > datetime.now() + self.timedelta) \ result = session.query(Pokemon).where(Pokemon.visited.is_(False), Pokemon.end_time > datetime.now() + self.timedelta) \
.order_by(Pokemon.cp) .order_by(Pokemon.cp)
session.commit() session.commit()
session.close() session.close()
@ -43,10 +43,10 @@ class PokemonList:
def sort_by_level(self, reverse=False): def sort_by_level(self, reverse=False):
with Session(self.engine) as session: with Session(self.engine) as session:
if reverse: if reverse:
result = session.query(Pokemon).where(Pokemon.end_time > datetime.now() + self.timedelta) \ result = session.query(Pokemon).where(Pokemon.visited.is_(False), Pokemon.end_time > datetime.now() + self.timedelta) \
.order_by(desc(Pokemon.level)) .order_by(desc(Pokemon.level))
else: else:
result = session.query(Pokemon).where(Pokemon.end_time > datetime.now() + self.timedelta) \ result = session.query(Pokemon).where(Pokemon.visited.is_(False), Pokemon.end_time > datetime.now() + self.timedelta) \
.order_by(Pokemon.level) .order_by(Pokemon.level)
session.commit() session.commit()
session.close() session.close()
@ -54,14 +54,14 @@ class PokemonList:
def sort_by_distance(self, location: Location, reverse=False): def sort_by_distance(self, location: Location, reverse=False):
with Session(self.engine) as session: with Session(self.engine) as session:
result = session.query(Pokemon).where(Pokemon.end_time > datetime.now() + self.timedelta) result = session.query(Pokemon).where(Pokemon.visited.is_(False), Pokemon.end_time > datetime.now() + self.timedelta)
session.commit() session.commit()
session.close() session.close()
return sorted(result.all(), key=lambda pokemon: location.distance(pokemon.location), reverse=reverse) return sorted(result.all(), key=lambda pokemon: location.distance(pokemon.location), reverse=reverse)
def search_by_name(self, query: str): def search_by_name(self, query: str):
with Session(self.engine) as session: with Session(self.engine) as session:
result = session.query(Pokemon).where(Pokemon.end_time > datetime.now() + self.timedelta) result = session.query(Pokemon).where(Pokemon.visited.is_(False), Pokemon.end_time > datetime.now() + self.timedelta)
session.commit() session.commit()
session.close() session.close()
return list(filter(lambda pokemon: partial_ratio(query.lower(), pokemon.name) >= 80, result.all())) return list(filter(lambda pokemon: partial_ratio(query.lower(), pokemon.name) >= 80, result.all()))
@ -73,3 +73,13 @@ class PokemonList:
session.commit() session.commit()
session.close() session.close()
def visit_pokemon(self, pokemon: Pokemon):
with Session(self.engine) as session:
new_pokemon = session.query(Pokemon).where(Pokemon.name == pokemon.name,
Pokemon.location == pokemon.location,
Pokemon.start_time == pokemon.start_time,
Pokemon.end_time == pokemon.end_time).one()
new_pokemon.visited = True
session.commit()
session.close()

@ -1,7 +1,7 @@
from datetime import datetime from datetime import datetime
from sqlalchemy import Column, String, Integer, Boolean, DateTime, PrimaryKeyConstraint from sqlalchemy import Column, String, Integer, Boolean, DateTime, PrimaryKeyConstraint
from ispoof.spoofer.location import Location from ispoof.spoofer.location import Location
from sqlalchemy.orm import declarative_base from sqlalchemy.orm import declarative_base, Session
Base = declarative_base() Base = declarative_base()
@ -21,6 +21,7 @@ class Pokemon(Base):
start_time = Column(DateTime) start_time = Column(DateTime)
end_time = Column(DateTime) end_time = Column(DateTime)
country = Column(String(2)) country = Column(String(2))
visited = Column(Boolean, default=False)
PrimaryKeyConstraint(name, location, start_time, end_time, name="pokemon_pk", sqlite_on_conflict='IGNORE') PrimaryKeyConstraint(name, location, start_time, end_time, name="pokemon_pk", sqlite_on_conflict='IGNORE')
def __init__(self, name, number, location, def __init__(self, name, number, location,
@ -41,9 +42,7 @@ class Pokemon(Base):
self.end_time = end_time self.end_time = end_time
self.country = country self.country = country
super(Pokemon, self).__init__() def is_despawned(self):
def is_dispawned(self):
if datetime().now() > self.end_time: if datetime().now() > self.end_time:
return True return True
return False return False

Loading…
Cancel
Save