package com.fastaccess.provider.timeline;
import android.content.Context;
import android.graphics.Color;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.fastaccess.R;
import com.fastaccess.data.dao.LabelModel;
import com.fastaccess.data.dao.model.IssueEvent;
import com.fastaccess.data.dao.types.IssueEventType;
import com.fastaccess.helper.Logger;
import com.fastaccess.helper.ParseDateFormat;
import com.fastaccess.helper.ViewHelper;
import com.fastaccess.ui.widgets.SpannableBuilder;
import com.zzhoujay.markdown.style.CodeSpan;
import java.util.Date;
/**
* Created by Kosh on 20 Apr 2017, 7:18 PM
*/
public class TimelineProvider {
@NonNull public static SpannableBuilder getStyledEvents(@NonNull IssueEvent issueEventModel, @NonNull Context context, boolean isMerged) {
IssueEventType event = issueEventModel.getEvent();
SpannableBuilder spannableBuilder = SpannableBuilder.builder();
if (event != null) {
String to = context.getString(R.string.to);
String from = context.getString(R.string.from);
String thisString = context.getString(R.string.this_value);
String in = context.getString(R.string.in_value);
if (event == IssueEventType.labeled || event == IssueEventType.unlabeled) {
if (issueEventModel.getAssignee() != null && issueEventModel.getAssigner() != null) {
spannableBuilder.bold(issueEventModel.getAssigner().getLogin());
} else if (issueEventModel.getActor() != null) {
spannableBuilder.bold(issueEventModel.getActor().getLogin());
}
spannableBuilder.append(" ").append(event.name().replaceAll("_", " "));
LabelModel labelModel = issueEventModel.getLabel();
int color = Color.parseColor("#" + labelModel.getColor());
spannableBuilder.append(" ").append(" " + labelModel.getName() + " ", new CodeSpan(color, ViewHelper.generateTextColor(color), 5));
spannableBuilder.append(" ").append(getDate(issueEventModel.getCreatedAt()));
} else {
if (issueEventModel.getAssignee() != null && issueEventModel.getAssigner() != null) {
spannableBuilder.bold(issueEventModel.getAssigner().getLogin());
} else if (issueEventModel.getActor() != null) {
spannableBuilder.bold(issueEventModel.getActor().getLogin());
}
if (event == IssueEventType.closed) {
if (isMerged) {
spannableBuilder.append(" ").append(IssueEventType.merged.name());
} else {
spannableBuilder.append(" ").append(event.name().replaceAll("_", " "));
}
} else {
spannableBuilder.append(" ").append(event.name().replaceAll("_", " "));
}
if (event == IssueEventType.assigned || event == IssueEventType.unassigned) {
spannableBuilder
.append(" ")
.bold(issueEventModel.getAssignee().getLogin());
Logger.e("Hello: " + spannableBuilder);
} else if (event == IssueEventType.milestoned || event == IssueEventType.demilestoned) {
spannableBuilder.append(" ")
.append(event == IssueEventType.milestoned ? to : from)
.append(" ")
.bold(issueEventModel.getMilestone().getTitle());
} else if (event == IssueEventType.renamed) {
spannableBuilder
.append(" ")
.append(from)
.append(" ")
.bold(issueEventModel.getRename().getFromValue())
.append(to)
.append(" ")
.bold(issueEventModel.getRename().getToValue());
} else if (event == IssueEventType.referenced || event == IssueEventType.merged) {
spannableBuilder
.append(" ")
.append(thisString)
.append(" ")
.append(in)
.append(" ")
.url(substring(issueEventModel.getCommitId()));
} else if (event == IssueEventType.review_requested) {
spannableBuilder
.append(" ")
.append(from)
.append(" ")
.bold(issueEventModel.getRequestedReviewer().getLogin());
} else if (event == IssueEventType.closed || event == IssueEventType.reopened) {
if (issueEventModel.getCommitId() != null) {
spannableBuilder
.append(" ")
.append(thisString)
.append(" ")
.append(in)
.append(" ")
.url(substring(issueEventModel.getCommitId()));
}
}
spannableBuilder.append(" ").append(getDate(issueEventModel.getCreatedAt()));
}
}
return spannableBuilder;
}
@NonNull private static CharSequence getDate(@Nullable Date date) {
return ParseDateFormat.getTimeAgo(date);
}
@NonNull private static String substring(@Nullable String value) {
if (value == null) {
return "";
}
if (value.length() <= 7) return value;
else return value.substring(0, 7);
}
}