Merge pull request #625 from TeamNewPipe/commentsStreamPosition

Add streamPosition for comments
This commit is contained in:
Tobi 2021-06-08 11:03:15 +02:00 committed by GitHub
commit a27575021d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 49 additions and 4 deletions

View File

@ -20,6 +20,10 @@ public class CommentsInfoItem extends InfoItem {
private String textualLikeCount; private String textualLikeCount;
private boolean heartedByUploader; private boolean heartedByUploader;
private boolean pinned; private boolean pinned;
private int streamPosition;
public static final int NO_LIKE_COUNT = -1;
public static final int NO_STREAM_POSITION = -1;
public CommentsInfoItem(int serviceId, String url, String name) { public CommentsInfoItem(int serviceId, String url, String name) {
super(InfoType.COMMENT, serviceId, url, name); super(InfoType.COMMENT, serviceId, url, name);
@ -82,6 +86,10 @@ public class CommentsInfoItem extends InfoItem {
this.uploadDate = uploadDate; this.uploadDate = uploadDate;
} }
/**
* @return the comment's like count
* or {@link CommentsInfoItem#NO_LIKE_COUNT} if it is unavailable
*/
public int getLikeCount() { public int getLikeCount() {
return likeCount; return likeCount;
} }
@ -121,4 +129,17 @@ public class CommentsInfoItem extends InfoItem {
public boolean isUploaderVerified() { public boolean isUploaderVerified() {
return uploaderVerified; return uploaderVerified;
} }
public void setStreamPosition(final int streamPosition) {
this.streamPosition = streamPosition;
}
/**
* Get the playback position of the stream to which this comment belongs.
* This is not supported by all services.
* @return the playback position in seconds or {@link #NO_STREAM_POSITION} if not available
*/
public int getStreamPosition() {
return streamPosition;
}
} }

View File

@ -12,15 +12,20 @@ import javax.annotation.Nullable;
public interface CommentsInfoItemExtractor extends InfoItemExtractor { public interface CommentsInfoItemExtractor extends InfoItemExtractor {
/** /**
* Return the like count of the comment, or -1 if it's unavailable * Return the like count of the comment,
* or {@link CommentsInfoItem#NO_LIKE_COUNT} if it is unavailable.
*
* <br> * <br>
*
* NOTE: Currently only implemented for YT {@link YoutubeCommentsInfoItemExtractor#getLikeCount()} * NOTE: Currently only implemented for YT {@link YoutubeCommentsInfoItemExtractor#getLikeCount()}
* with limitations (only approximate like count is returned) * with limitations (only approximate like count is returned)
* *
* @see StreamExtractor#getLikeCount() * @see StreamExtractor#getLikeCount()
* @return the comment's like count
* or {@link CommentsInfoItem#NO_LIKE_COUNT} if it is unavailable
*/ */
default int getLikeCount() throws ParsingException { default int getLikeCount() throws ParsingException {
return -1; return CommentsInfoItem.NO_LIKE_COUNT;
} }
/** /**
@ -94,4 +99,12 @@ public interface CommentsInfoItemExtractor extends InfoItemExtractor {
default boolean isUploaderVerified() throws ParsingException { default boolean isUploaderVerified() throws ParsingException {
return false; return false;
} }
/**
* The playback position of the stream to which this comment belongs.
* @see CommentsInfoItem#getStreamPosition()
*/
default int getStreamPosition() throws ParsingException {
return CommentsInfoItem.NO_STREAM_POSITION;
}
} }

View File

@ -87,6 +87,12 @@ public class CommentsInfoItemsCollector extends InfoItemsCollector<CommentsInfoI
addError(e); addError(e);
} }
try {
resultItem.setStreamPosition(extractor.getStreamPosition());
} catch (Exception e) {
addError(e);
}
return resultItem; return resultItem;
} }

View File

@ -43,6 +43,11 @@ public class SoundcloudCommentsInfoItemExtractor implements CommentsInfoItemExtr
return json.getObject("user").getBoolean("verified"); return json.getObject("user").getBoolean("verified");
} }
@Override
public int getStreamPosition() throws ParsingException {
return json.getInt("timestamp") / 1000; // convert milliseconds to seconds
}
@Override @Override
public String getUploaderUrl() { public String getUploaderUrl() {
return json.getObject("user").getString("permalink_url"); return json.getObject("user").getString("permalink_url");
@ -65,7 +70,7 @@ public class SoundcloudCommentsInfoItemExtractor implements CommentsInfoItemExtr
} }
@Override @Override
public String getUrl() throws ParsingException { public String getUrl() {
return url; return url;
} }

View File

@ -184,7 +184,7 @@ public class YoutubeCommentsInfoItemExtractor implements CommentsInfoItemExtract
return json.has("pinnedCommentBadge"); return json.has("pinnedCommentBadge");
} }
public boolean isUploaderVerified() throws ParsingException { public boolean isUploaderVerified() {
// impossible to get this information from the mobile layout // impossible to get this information from the mobile layout
return false; return false;
} }