sebastianrask / pocket-plays-for-twitch Goto Github PK
View Code? Open in Web Editor NEWOpen source Twitch client for Android
License: GNU General Public License v3.0
Open source Twitch client for Android
License: GNU General Public License v3.0
Hey, been using the app for a while and only have one suggestion. Whenever I get mentioned in chat I would like it to light up a different colour like red so I can see it a lot easier!
Thanks for the amazing app!
Currently the chat only displays the standard, new subscriber icon in front of a user's name. It would be nice for it to also support the streak icons (maybe this should wait until cumulative subscriptions are rolled out because they might change the api?)
Edit: Seems like the userstate API includes a badges paramater now that needs to be read for that info: https://dev.twitch.tv/docs/irc/tags#userstate-twitch-tags (and to get all the new badges like bits or twitchcon visitor)
Please add an option to disable subtitles. Unusable on streams that have subtitles.
https://i.imgur.com/lNOmV2q.jpg
Also, why are you doing so much pings/tracking in the background. Pocket Plays always use 2% of my battery even when i don't use it for a whole day:
https://i.imgur.com/2cS2Jgw.jpg
Hello,
I noticed that "my streams" are not loading currently when logged in. There is a similar issue with another 3rd party client as well, so I'm guessing it's an API issue or something along those lines.. or maybe it's just me.
Hello,
When I opened a stream the past couple days, its says stream not live and just shows chat. This fixed itself eventually but has been back for a some time now (over a day). Did twitch change something that causes this more now?
Used to be isolated to some games\streams, but it happens on my phone which always worked as well.
Thanks.
When viewing past broadcasts there's no option to use Chromecast to view the stream. If casting is enabled on the home screen and you start playing a broadcast the current cast session is terminated.
you start a stream, Pocket Plays now displays "Advertisement is playing" for 30 seconds. it's not a "real" advertisement, but a message you can't skip and you need to wait the 30 seconds till you can watch a stream. this is really annoying and everytime you click it away you need to wait again and again and again..
ublock origin and browser adblockers doesn't have that issue.. could you please fix it so it blocks again?
Hey Sebastian,
This is my daily Twitch driver since a while (and it rocks) but could definitely do with some extra love. There's a few bugs and features that I'd love to write and send PRs for.
Would you be able to provide some help with build instructions and buildability in general?
Some of the first barriers I've run into are:
google-services.json
com.sebastianrask.bettersubscription.misc.SecretKeys
Probably obvious why they are missing, but it also means building a development version isn't currently possible without some involved ripping out of Google's tendrils from the code.
Any help? Much appreciated!
Right now there are no buttons to jump back and forward something like 5sec, I would find this incredibly useful to have.
Can you please support Twitch emotes and badges from the FrankerFaceZ extension?
I actually thought that this app is a commercial, closed source app. It didn't say that it is a open-source app on Google Play either. I think it would be a great addition to the F-droid open source repository.
Yesterday my Android Studio got updated, now building results in the following found below.
Android issues:
Program type already present: com.afollestad.materialdialogs.folderselector.FileChooserDialog$FileCallback
Message{kind=ERROR, text=Program type already present: com.afollestad.materialdialogs.folderselector.FileChooserDialog$FileCallback, sources=[Unknown source file], tool name=Optional.of(D8)}
Full error output
java.lang.RuntimeException: com.android.build.api.transform.TransformException: Error while generating the main dex list:
Error while merging dex archives:
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Program type already present: com.afollestad.materialdialogs.folderselector.FileChooserDialog$FileCallback
at com.android.builder.profile.Recorder$Block.handleException(Recorder.java:55)
at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:104)
at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.android.build.api.transform.TransformException: Error while generating the main dex list:
Error while merging dex archives:
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Program type already present: com.afollestad.materialdialogs.folderselector.FileChooserDialog$FileCallback
at com.android.build.gradle.internal.transforms.D8MainDexListTransform.transform(D8MainDexListTransform.kt:147)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
... 51 more
Caused by: com.android.builder.multidex.D8MainDexList$MainDexListException: Error while merging dex archives:
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Program type already present: com.afollestad.materialdialogs.folderselector.FileChooserDialog$FileCallback
at com.android.builder.multidex.D8MainDexList.getExceptionToRethrow(D8MainDexList.java:107)
at com.android.builder.multidex.D8MainDexList.generate(D8MainDexList.java:95)
at com.android.build.gradle.internal.transforms.D8MainDexListTransform.transform(D8MainDexListTransform.kt:131)
... 54 more
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete
at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:70)
at com.android.tools.r8.utils.ExceptionUtils.withMainDexListHandler(ExceptionUtils.java:53)
at com.android.tools.r8.GenerateMainDexList.run(GenerateMainDexList.java:118)
at com.android.builder.multidex.D8MainDexList.generate(D8MainDexList.java:93)
... 55 more
Caused by: com.android.tools.r8.utils.AbortException: Error: Program type already present: com.afollestad.materialdialogs.folderselector.FileChooserDialog$FileCallback
at com.android.tools.r8.utils.Reporter.failIfPendingErrors(Reporter.java:116)
at com.android.tools.r8.utils.Reporter.fatalError(Reporter.java:74)
at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:64)
... 58 more
App doesn't have support for Picture in Picture like the normal Twitch app and many other video apps.
Just downloaded the app for the first time and the first stream I tried to watch failed with this message. Works fine in official app.
I want to create bridge twitch player with react-native can you help me with that.
The app should support the Chat Replay feature that allows users to view the chat from the live broadcast on VODs.
The video view is over the chat. I think it is caused by the navigation gestures of OnePlus. You have to add a margin for this devices without navigation bar but with gestures.
This follows me from the start and every next screen or whatever action. I don't have any of that installed and this app runs fine except of this annoying popup. Tested official Twitch app and it behaves the same. But can we fix this here please?
While casting to a v3 Chromecast, when I select a stream, the Chromecast briefly shows a loading screen for that stream, then returns to the home view (blue screen and Pocket Plays logo).
Other potentially relevant info:
Ads now play before a stream when previously (in all past versions of Pocket Plays) ads were bypassed. Restoring this feature would be greatly appreciated.
If you don't login use an offline account, that you can follow and see if someone is online or not
Currently it is not possible to have the app rotated to landscape mode when in chat only mode, it automatically rotates back do portrait when toggling it.
Seeing as twitch's own app sucks in landscape by wasting almost half of the screen on unhidable menu bars this would really be cool to have. (In my case I sometimes watch on my tv and want the chat on my phone in the (landscape) docking station)
Twitch added custom rooms that each streamer can create (basically additional chat channels) a while ago. They are able to get restricted to subscribers/moderators only or are commonly used for spoiler-chats.
The reference for this functionality can be found here:
https://dev.twitch.tv/docs/v5/reference/chat/#get-chat-rooms-by-channel
https://dev.twitch.tv/docs/irc/chat-rooms/
Hello. Maybe this problem isn't fixable because is caused in an old Tablet (Wondermedia AN10DG3 with Android 4.1.1), but maybe is something else interfering.
I can see VODs without problems, but when i began to see a live stream, it freezes 3-4 seconds after it start. These seconds the stream works perfectly smooth, it's like it isn't loading more. The chat keeps working.
To put in context, Impulse Twitch App seems to have exactly the same issue, tChat and Twitch Official App work perfectly (Well, with Twitch App the videos look awful, but that's another story).
Thanks in advance.
I just installed pocket plays on my me tablet and almost all the twitch emotes I see are big E. Doesn't seem to happen in my other 2 devices, but I haven't updated those yet.
It would be nice if the app allowed users to join the chat of streamers who are not currently broadcasting.
Hello,
Thanks for your hard work in fixing the emotes issue! I noticed someone else on the play store had an issue with playback on version 5 of android. I'm on 5.1.1 and it seems like certain streams just dont want to load. It says stream no longer live, but it connects to chat and I can watch it from twitch app. happens to a majority of streams, but some do still work.
Hope you can help again!
Thanks.
I'm trying to sign in but when I introduce my sms code it goes back to the app and just says to sign in. I hit it again and same Twitch login page.
Just downloaded the app for the first time and the first stream I tried to watch failed with this message. Works fine in official app.
Hi - thanks for this app, and i hope you are still developing it!
For a few days now, when you load a stream you get a 'Commercial Break' at the start and then (for me at least) the video freezes, but the audio is OK. Any chance you can update the app please?
Is there any feature which gets available after you donate? Or is it just supporting you?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.