summaryrefslogtreecommitdiffstats
path: root/app/src/main/java/fr/gouv/etalab/mastodon/jobs/ScheduledBoostsSyncJob.java
blob: 83c193a6d25c763abe51a0505b1a035c7720e5e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package fr.gouv.etalab.mastodon.jobs;
/* Copyright 2018 Thomas Schneider
 *
 * This file is a part of Mastalab
 *
 * This program is free software; you can redistribute it and/or modify it under the terms of the
 * GNU General Public License as published by the Free Software Foundation; either version 3 of the
 * License, or (at your option) any later version.
 *
 * Mastalab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 * Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with Mastalab; if not,
 * see <http://www.gnu.org/licenses>. */

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.support.annotation.NonNull;

import com.evernote.android.job.Job;
import com.evernote.android.job.JobRequest;

import java.util.Date;
import java.util.concurrent.TimeUnit;

import fr.gouv.etalab.mastodon.client.API;
import fr.gouv.etalab.mastodon.client.Entities.Account;
import fr.gouv.etalab.mastodon.client.Entities.Status;
import fr.gouv.etalab.mastodon.client.Entities.StoredStatus;
import fr.gouv.etalab.mastodon.helper.Helper;
import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
import fr.gouv.etalab.mastodon.sqlite.BoostScheduleDAO;
import fr.gouv.etalab.mastodon.sqlite.Sqlite;


/**
 * Created by Thomas on 09/12/2018.
 * Scheduled a boost a datetime
 */

public class ScheduledBoostsSyncJob extends Job {

    public static final String SCHEDULED_BOOST = "job_scheduled_boost";
    static {
        Helper.installProvider();
    }

    @NonNull
    @Override
    protected Result onRunJob(@NonNull Params params) {
        //Code refresh here
        int jobId = params.getId();
        SQLiteDatabase db = Sqlite.getInstance(getContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
        //Retrieves the stored status
        StoredStatus storedStatus = new BoostScheduleDAO(getContext(), db).getStatusScheduled(jobId);
        if( storedStatus != null){
            String userId = storedStatus.getUserId();
            String instance = storedStatus.getInstance();
            if( instance != null && userId != null){
                Account account = new AccountDAO(getContext(), db).getAccountByUserIDInstance(userId, instance);
                if( account != null){
                    //Retrieves the linked status to toot
                    Status status = storedStatus.getStatus();
                    if( status != null){
                        int statusCode = new API(getContext(), account.getInstance(), account.getToken()).statusAction(status);
                        //Toot was sent
                        if( statusCode == 200){
                            new BoostScheduleDAO(getContext(), db).updateScheduledDone(jobId, new Date());
                        }
                    }
                }
            }
        }
        return Result.SUCCESS;
    }


    public static int schedule(Context context, Status status, long id, long timestampScheduling){

        long startMs = (timestampScheduling -  new Date().getTime());
        long endMs = startMs + TimeUnit.MINUTES.toMillis(5);
        SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();

        int jobId = new  JobRequest.Builder(ScheduledBoostsSyncJob.SCHEDULED_BOOST)
                .setExecutionWindow(startMs, endMs)
                .setUpdateCurrent(false)
                .setRequiredNetworkType(JobRequest.NetworkType.METERED)
                .setRequirementsEnforced(false)
                .build()
                .schedule();
        new BoostScheduleDAO(context, db).insert(status, id, jobId, new Date(timestampScheduling));
        return jobId;
    }


}