package in.co.praveenkumar.mdroid.task;
import in.co.praveenkumar.mdroid.model.MDroidNotification;
import in.co.praveenkumar.mdroid.model.MoodleCourse;
import in.co.praveenkumar.mdroid.model.MoodleDiscussion;
import in.co.praveenkumar.mdroid.moodlerest.MoodleRestDiscussion;
import java.util.ArrayList;
import java.util.List;
public class DiscussionSyncTask {
String mUrl;
String token;
long siteid;
String error;
Boolean notification;
int notificationcount;
/**
*
* @param mUrl
* @param token
* @param siteid
*
* @author Praveen Kumar Pendyala (praveen@praveenkumar.co.in)
*/
public DiscussionSyncTask(String mUrl, String token, long siteid) {
this.mUrl = mUrl;
this.token = token;
this.siteid = siteid;
this.notification = false;
this.notificationcount = 0;
}
/**
*
* @param mUrl
* @param token
* @param siteid
* @param notification
* If true, sets notifications for new contents
*
* @author Praveen Kumar Pendyala (praveen@praveenkumar.co.in)
*/
public DiscussionSyncTask(String mUrl, String token, long siteid,
Boolean notification) {
this.mUrl = mUrl;
this.token = token;
this.siteid = siteid;
this.notification = notification;
this.notificationcount = 0;
}
/**
* Get the notifications count. Notifications should be enabled during
* Object instantiation.
*
* @return notificationcount
*/
public int getNotificationcount() {
return notificationcount;
}
/**
* Sync all the discussion topics of a forum.
*
* @return syncStatus
*
* @author Praveen Kumar Pendyala (praveen@praveenkumar.co.in)
*/
public Boolean syncDiscussions(int forumid) {
ArrayList<String> forumids = new ArrayList<>();
forumids.add(forumid + "");
return syncDiscussions(forumids);
}
/**
* Sync all the discussion topics in the list of forums.
*
* @return syncStatus
*
* @author Praveen Kumar Pendyala (praveen@praveenkumar.co.in)
*/
public Boolean syncDiscussions(ArrayList<String> forumids) {
MoodleRestDiscussion mrd = new MoodleRestDiscussion(mUrl, token);
ArrayList<MoodleDiscussion> mTopics = mrd.getDiscussions(forumids);
/** Error checking **/
// Some network or encoding issue.
if (mTopics == null) {
error = "Network issue!";
return false;
}
// Moodle exception
if (mTopics.isEmpty()) {
error = "No data received";
// No additional debug info as that needs context
return false;
}
List<MoodleDiscussion> dbTopics;
MoodleDiscussion topic = new MoodleDiscussion();
for (int i = 0; i < mTopics.size(); i++) {
topic = mTopics.get(i);
topic.setSiteid(siteid);
dbTopics = MoodleDiscussion.find(MoodleDiscussion.class,
"discussionid = ? and siteid = ?", String.valueOf(topic.getDiscussionid())
, String.valueOf(siteid));
if (!dbTopics.isEmpty())
topic.setId(dbTopics.get(0).getId());
// set notifications if enabled
else if (notification) {
List<MoodleCourse> dbCourses = MoodleCourse.find(
MoodleCourse.class, "courseid = ? and siteid = ?",
String.valueOf(siteid), String.valueOf(topic.getCourseid()));
MoodleCourse course = (dbCourses != null && !dbCourses.isEmpty()) ? dbCourses
.get(0) : null;
if (course != null) {
new MDroidNotification(siteid,
MDroidNotification.TYPE_FORUM_TOPIC,
"New forum topic in " + course.getShortname(),
topic.getName() + " started in course "
+ course.getFullname(), 1,
topic.getForumid()).save();
notificationcount++;
}
}
topic.save();
}
return true;
}
}