mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 15:23:00 +00:00 
			
		
		
		
	Merge branch 'dev' into preferredTabState
This commit is contained in:
		| @@ -46,7 +46,7 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { | ||||
|             if(hours != null) timestamp += (Integer.parseInt(hours.replace(":", ""))*3600); | ||||
|             if(minutes != null) timestamp += (Integer.parseInt(minutes.replace(":", ""))*60); | ||||
|             if(seconds != null) timestamp += (Integer.parseInt(seconds)); | ||||
|             return streamUrl + url.replace(match.group(0), "&t=" + String.valueOf(timestamp)); | ||||
|             return streamUrl + url.replace(match.group(0), "#timestamp=" + String.valueOf(timestamp)); | ||||
|         } | ||||
|     }; | ||||
|  | ||||
| @@ -93,15 +93,14 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { | ||||
|  | ||||
|         streamUrl = item.getUrl(); | ||||
|  | ||||
|         itemContentView.setMaxLines(commentDefaultLines); | ||||
|         itemContentView.setLines(commentDefaultLines); | ||||
|         commentText = item.getCommentText(); | ||||
|         itemContentView.setText(commentText); | ||||
|         linkify(); | ||||
|         itemContentView.setOnTouchListener(CommentTextOnTouchListener.INSTANCE); | ||||
|  | ||||
|         if(itemContentView.getLineCount() == 0){ | ||||
|         if (itemContentView.getLineCount() == 0) { | ||||
|             itemContentView.post(() -> ellipsize()); | ||||
|         }else{ | ||||
|         } else { | ||||
|             ellipsize(); | ||||
|         } | ||||
|  | ||||
| @@ -121,15 +120,17 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { | ||||
|     private void ellipsize() { | ||||
|         if (itemContentView.getLineCount() > commentDefaultLines){ | ||||
|             int endOfLastLine = itemContentView.getLayout().getLineEnd(commentDefaultLines - 1); | ||||
|             String newVal = itemContentView.getText().subSequence(0, endOfLastLine - 3) + "..."; | ||||
|             int end = itemContentView.getText().toString().lastIndexOf(' ', endOfLastLine -2); | ||||
|             if(end == -1) end = Math.max(endOfLastLine -2, 0); | ||||
|             String newVal = itemContentView.getText().subSequence(0, end) + " …"; | ||||
|             itemContentView.setText(newVal); | ||||
|             linkify(); | ||||
|         } | ||||
|         linkify(); | ||||
|     } | ||||
|  | ||||
|     private void toggleEllipsize() { | ||||
|         if (itemContentView.getText().toString().equals(commentText)) { | ||||
|             ellipsize(); | ||||
|             if (itemContentView.getLineCount() > commentDefaultLines) ellipsize(); | ||||
|         } else { | ||||
|             expand(); | ||||
|         } | ||||
|   | ||||
| @@ -269,6 +269,18 @@ public abstract class BasePlayer implements | ||||
|         final boolean playbackSkipSilence = intent.getBooleanExtra(PLAYBACK_SKIP_SILENCE, | ||||
|                 getPlaybackSkipSilence()); | ||||
|  | ||||
|         // seek to timestamp if stream is already playing | ||||
|         if (simpleExoPlayer != null | ||||
|                 && queue.size() == 1 | ||||
|                 && playQueue != null | ||||
|                 && playQueue.getItem() != null | ||||
|                 && queue.getItem().getUrl().equals(playQueue.getItem().getUrl()) | ||||
|                 && queue.getItem().getRecoveryPosition() != PlayQueueItem.RECOVERY_UNSET | ||||
|                 ) { | ||||
|             simpleExoPlayer.seekTo(playQueue.getIndex(), queue.getItem().getRecoveryPosition()); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // Good to go... | ||||
|         initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence, | ||||
|                 /*playOnInit=*/true); | ||||
|   | ||||
| @@ -16,6 +16,11 @@ public final class SinglePlayQueue extends PlayQueue { | ||||
|         super(0, Collections.singletonList(new PlayQueueItem(info))); | ||||
|     } | ||||
|  | ||||
|     public SinglePlayQueue(final StreamInfo info, final long startPosition) { | ||||
|         super(0, Collections.singletonList(new PlayQueueItem(info))); | ||||
|         getItem().setRecoveryPosition(startPosition); | ||||
|     } | ||||
|  | ||||
|     public SinglePlayQueue(final List<StreamInfoItem> items, final int index) { | ||||
|         super(index, playQueueItemsOf(items)); | ||||
|     } | ||||
|   | ||||
| @@ -31,7 +31,7 @@ public class CommentTextOnTouchListener implements View.OnTouchListener { | ||||
|  | ||||
|     public static final CommentTextOnTouchListener INSTANCE = new CommentTextOnTouchListener(); | ||||
|  | ||||
|     private static final Pattern timestampPattern = Pattern.compile(".*&t=(\\d+)"); | ||||
|     private static final Pattern timestampPattern = Pattern.compile("(.*)#timestamp=(\\d+)"); | ||||
|  | ||||
|     @Override | ||||
|     public boolean onTouch(View v, MotionEvent event) { | ||||
| @@ -86,6 +86,12 @@ public class CommentTextOnTouchListener implements View.OnTouchListener { | ||||
|  | ||||
|     private boolean handleUrl(Context context, URLSpan urlSpan) { | ||||
|         String url = urlSpan.getURL(); | ||||
|         int seconds = -1; | ||||
|         Matcher matcher = timestampPattern.matcher(url); | ||||
|         if(matcher.matches()){ | ||||
|             url = matcher.group(1); | ||||
|             seconds = Integer.parseInt(matcher.group(2)); | ||||
|         } | ||||
|         StreamingService service; | ||||
|         StreamingService.LinkType linkType; | ||||
|         try { | ||||
| @@ -97,9 +103,7 @@ public class CommentTextOnTouchListener implements View.OnTouchListener { | ||||
|         if(linkType == StreamingService.LinkType.NONE){ | ||||
|             return false; | ||||
|         } | ||||
|         Matcher matcher = timestampPattern.matcher(url); | ||||
|         if(linkType == StreamingService.LinkType.STREAM && matcher.matches()){ | ||||
|             int seconds = Integer.parseInt(matcher.group(1)); | ||||
|         if(linkType == StreamingService.LinkType.STREAM && seconds != -1){ | ||||
|             return playOnPopup(context, url, service, seconds); | ||||
|         }else{ | ||||
|             NavigationHelper.openRouterActivity(context, url); | ||||
| @@ -119,9 +123,8 @@ public class CommentTextOnTouchListener implements View.OnTouchListener { | ||||
|         single.subscribeOn(Schedulers.io()) | ||||
|                 .observeOn(AndroidSchedulers.mainThread()) | ||||
|                 .subscribe(info -> { | ||||
|                     PlayQueue playQueue = new SinglePlayQueue((StreamInfo) info); | ||||
|                     ((StreamInfo) info).setStartPosition(seconds); | ||||
|                     NavigationHelper.enqueueOnPopupPlayer(context, playQueue, true); | ||||
|                     PlayQueue playQueue = new SinglePlayQueue((StreamInfo) info, seconds*1000); | ||||
|                     NavigationHelper.playOnPopupPlayer(context, playQueue); | ||||
|                 }); | ||||
|         return true; | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Tobias Groza
					Tobias Groza