Search in sources :

Example 1 with Printable

use of io.wring.agents.Printable in project wring by yegor256.

the class BoCommit method text.

/**
 * Collect all important texts from the issue.
 * @param coords Coords
 * @return Body text
 * @throws IOException If fails
 * @checkstyle ExecutableStatementCountCheck (100 lines)
 */
@SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
public String text(final Coordinates coords) throws IOException {
    final Iterator<JsonObject> comments = new RtPagination<>(this.commit.repo().github().entry().uri().path("repos").path(coords.user()).path(coords.repo()).path("commits").path(this.commit.sha()).path("comments").back(), object -> object).iterator();
    final String self = this.commit.repo().github().users().self().login();
    int seen = this.seen();
    Logger.info(this, "Last seen comment in %s is #%d", this.commit.sha(), seen);
    final Pattern ptn = Pattern.compile(String.format(".*(?<![a-zA -Z0-9-])%s(?![a-zA-Z0-9-]).*", Pattern.quote(String.format("@%s", self))), Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
    final StringBuilder body = new StringBuilder();
    while (comments.hasNext()) {
        final JsonObject comment = comments.next();
        final int number = comment.getInt("id");
        if (number <= seen) {
            continue;
        }
        final String author = comment.getJsonObject("user").getString("login");
        if (author.equals(self)) {
            Logger.info(this, "%s/%d ignored since you're the author", this.commit.sha(), number);
            continue;
        }
        final String cmt = comment.getString("body");
        if (ptn.matcher(cmt).matches()) {
            body.append('@').append(author).append(" at [").append(comment.getString("updated_at")).append("](").append(comment.getString("html_url")).append("): ").append(StringEscapeUtils.escapeHtml4(cmt)).append("\n\n");
            Logger.info(this, "%s/%d accepted: %s", this.commit.sha(), number, new Printable(cmt));
        } else {
            Logger.info(this, "%s/%d ignored: %s", this.commit.sha(), number, new Printable(cmt));
        }
        seen = number;
    }
    this.base.vault().save(this.key(), Optional.of(Integer.toString(seen)));
    Logger.info(this, "Seen comment set to %d for %s", seen, this.commit.sha());
    return body.toString();
}
Also used : JsonObject(javax.json.JsonObject) Iterator(java.util.Iterator) Events(io.wring.model.Events) Printable(io.wring.agents.Printable) IOException(java.io.IOException) StringEscapeUtils(org.apache.commons.text.StringEscapeUtils) RtPagination(com.jcabi.github.RtPagination) Base(io.wring.model.Base) RepoCommit(com.jcabi.github.RepoCommit) Coordinates(com.jcabi.github.Coordinates) Optional(java.util.Optional) Logger(com.jcabi.log.Logger) Pattern(java.util.regex.Pattern) Pattern(java.util.regex.Pattern) JsonObject(javax.json.JsonObject) Printable(io.wring.agents.Printable)

Example 2 with Printable

use of io.wring.agents.Printable in project wring by yegor256.

the class BoIssue method text.

/**
 * Collect all important texts from the issue.
 * @return Body text
 * @throws IOException If fails
 * @checkstyle ExecutableStatementCountCheck (100 lines)
 */
@SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
public String text() throws IOException {
    final Iterator<Comment.Smart> comments = new Smarts<Comment.Smart>(new Bulk<>(this.issue.comments().iterate())).iterator();
    final String self = this.issue.repo().github().users().self().login();
    final Pattern ptn = Pattern.compile(String.format(".*(?<![a-zA -Z0-9-])%s(?![a-zA-Z0-9-]).*", Pattern.quote(String.format("@%s", self))), Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
    int seen = this.seen();
    Logger.info(this, "Last seen comment in %s#%d is #%d", this.issue.repo().coordinates(), this.issue.number(), seen);
    final StringBuilder body = new StringBuilder();
    while (comments.hasNext()) {
        final Comment.Smart comment = comments.next();
        if (comment.number() <= seen) {
            continue;
        }
        // @checkstyle MagicNumber (1 line)
        if (comment.number() < 188060467) {
            Logger.info(this, "%s#%d/%d ignored since too old", this.issue.repo().coordinates(), this.issue.number(), comment.number());
            continue;
        }
        if (comment.author().login().equals(self)) {
            Logger.info(this, "%s#%d/%d ignored since you're the author", this.issue.repo().coordinates(), this.issue.number(), comment.number());
            continue;
        }
        final String cmt = comment.body();
        if (ptn.matcher(cmt).matches()) {
            body.append('@').append(comment.author().login()).append(" at [").append(String.format("%te-%<tb-%<tY", comment.createdAt())).append("](").append(this.issue.htmlUrl()).append("#issuecomment-").append(comment.number()).append("): ").append(StringEscapeUtils.escapeHtml4(cmt)).append("\n\n");
            Logger.info(this, "%s#%d/%d accepted: %s", this.issue.repo().coordinates(), this.issue.number(), comment.number(), new Printable(cmt));
        } else {
            Logger.info(this, "%s#%d/%d ignored: %s", this.issue.repo().coordinates(), this.issue.number(), comment.number(), new Printable(cmt));
        }
        seen = comment.number();
    }
    this.base.vault().save(this.key(), Optional.of(Integer.toString(seen)));
    Logger.info(this, "Seen comment set to %d for %s#%d", seen, this.issue.repo().coordinates(), this.issue.number());
    return body.toString();
}
Also used : Pattern(java.util.regex.Pattern) Comment(com.jcabi.github.Comment) Printable(io.wring.agents.Printable) Bulk(com.jcabi.github.Bulk)

Aggregations

Printable (io.wring.agents.Printable)2 Pattern (java.util.regex.Pattern)2 Bulk (com.jcabi.github.Bulk)1 Comment (com.jcabi.github.Comment)1 Coordinates (com.jcabi.github.Coordinates)1 RepoCommit (com.jcabi.github.RepoCommit)1 RtPagination (com.jcabi.github.RtPagination)1 Logger (com.jcabi.log.Logger)1 Base (io.wring.model.Base)1 Events (io.wring.model.Events)1 IOException (java.io.IOException)1 Iterator (java.util.Iterator)1 Optional (java.util.Optional)1 JsonObject (javax.json.JsonObject)1 StringEscapeUtils (org.apache.commons.text.StringEscapeUtils)1