diff options
Diffstat (limited to 'app/jobs')
-rw-r--r-- | app/jobs/pokeviewer/extract_save_data_job.rb | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/app/jobs/pokeviewer/extract_save_data_job.rb b/app/jobs/pokeviewer/extract_save_data_job.rb new file mode 100644 index 0000000..193bd73 --- /dev/null +++ b/app/jobs/pokeviewer/extract_save_data_job.rb | |||
@@ -0,0 +1,88 @@ | |||
1 | module Pokeviewer | ||
2 | class ExtractSaveDataJob < ApplicationJob | ||
3 | queue_as :default | ||
4 | |||
5 | def perform(args) | ||
6 | game = Trainer.find_or_create_by!( | ||
7 | name: args["playerName"], | ||
8 | number: args["playerId"]) do |r| | ||
9 | case args["gameId"].to_i | ||
10 | when 1 | ||
11 | r.game = :ruby | ||
12 | when 2 | ||
13 | r.game = :sapphire | ||
14 | when 3 | ||
15 | r.game = :firered | ||
16 | when 4 | ||
17 | r.game = :leafgreen | ||
18 | when 5 | ||
19 | r.game = :emerald | ||
20 | else | ||
21 | # Invalid, so just leave the field nil | ||
22 | end | ||
23 | end | ||
24 | |||
25 | pokemons = args["pokemon"].map do |param| | ||
26 | pk = Pokemon.find_or_create_by!(key: param["key"]) do |r| | ||
27 | r.species_id = param["species"] | ||
28 | r.ot_name = param["otName"] | ||
29 | r.ot_number = param["otId"] | ||
30 | r.met_type = :normal | ||
31 | r.met_level = param["metLevel"] | ||
32 | r.shiny = param["shiny"] | ||
33 | r.nature = Pokemon.nature.values[param["nature"]] | ||
34 | r.gender = param["gender"] | ||
35 | r.second_ability = param["secondAbility"] | ||
36 | |||
37 | # Handle Unown form | ||
38 | if r.species_id == 201 | ||
39 | r.unown_letter = Pokemon.unown_letter.values[param["unownLetter"]] | ||
40 | end | ||
41 | end | ||
42 | |||
43 | rev = Revision.new(pokemon: pk) | ||
44 | rev.nickname = param["nickname"] | ||
45 | rev.experience = param["experience"] | ||
46 | rev.level = param["level"] | ||
47 | rev.hp = param["hp"] | ||
48 | rev.attack = param["attack"] | ||
49 | rev.defense = param["defense"] | ||
50 | rev.special_attack = param["spAttack"] | ||
51 | rev.special_defense = param["spDefense"] | ||
52 | rev.speed = param["speed"] | ||
53 | rev.coolness = param["coolness"] | ||
54 | rev.beauty = param["beauty"] | ||
55 | rev.cuteness = param["cuteness"] | ||
56 | rev.smartness = param["smartness"] | ||
57 | rev.toughness = param["toughness"] | ||
58 | rev.sheen = param["sheen"] | ||
59 | rev.hold_item = param["heldItem"] | ||
60 | rev.move_1_id = param["moves"][0]["id"] | ||
61 | rev.move_1_pp_bonuses = param["moves"][0]["ppBonuses"] | ||
62 | |||
63 | if param["moves"].length >= 2 | ||
64 | rev.move_2_id = param["moves"][1]["id"] | ||
65 | rev.move_2_pp_bonuses = param["moves"][1]["ppBonuses"] | ||
66 | end | ||
67 | |||
68 | if param["moves"].length >= 3 | ||
69 | rev.move_3_id = param["moves"][2]["id"] | ||
70 | rev.move_3_pp_bonuses = param["moves"][2]["ppBonuses"] | ||
71 | end | ||
72 | |||
73 | if param["moves"].length == 4 | ||
74 | rev.move_4_id = param["moves"][3]["id"] | ||
75 | rev.move_4_pp_bonuses = param["moves"][3]["ppBonuses"] | ||
76 | end | ||
77 | |||
78 | if pk.revisions.empty? or rev.diff?(pk.revisions.last) | ||
79 | rev.save! | ||
80 | end | ||
81 | |||
82 | pk | ||
83 | end | ||
84 | |||
85 | game.pokemon = pokemons | ||
86 | end | ||
87 | end | ||
88 | end | ||