Giter VIP home page Giter VIP logo

pocket-plays-for-twitch's Introduction

Pocket Plays for Twitch

Pocket Plays is an open source, ad free Twitch browser and stream player for Android.

Get it on Google Play



Pocket Plays started as an Android learning project on my first semester of Computer Science. This means that quite a bit of the program has high coupling, low coherence and generally poorly written and structured code.
This will surely impact the way you navigate, understand and maybe contribute to the project.

I've done my best to rewrite the worst parts before making Pocket Plays open source.

Contributing

Development

Developers of any skill are more than welcome to contribute to the project. You can do so by forking the project and submit a pull request.

If you have any questions, feel free to send me an e-mail([email protected]) or drop me a message on Reddit.

Issues

Like any other project, some bugs are sure to be found, so it goes a long way if people document and submit bugs and other issues to the GitHub issue tracker, to make sure they get squashed.

Licensing

Pocket Plays is licensed under the GNU v3 Public License. I would also personally love to know if you use any of the code from this repository. Sharing is caring :)

pocket-plays-for-twitch's People

Contributors

dkacperski97 avatar sebastianrask avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pocket-plays-for-twitch's Issues

possible Twitch API change

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.

Ads now autoplay before streams

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.

Ads are now playing again

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?

Stream not playing

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.

Live freezes in 3-4 seconds since start

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.

Chat only mode does not support landscape

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)

Cannot sign in

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.

FrankerFaceZ Support

Can you please support Twitch emotes and badges from the FrankerFaceZ extension?

No longer blocking ad's

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?

E for emotes

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.

Support for subscribe streak icons/additional badges

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)

Follow without an account

If you don't login use an offline account, that you can follow and see if someone is online or not

Chat mention highlight

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!

Chromecasting broadcasts isn't available

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.

Building: Program type already present: com.afollestad.materialdialog

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

Chat width problem with OnePlus

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.

Should be added to F-droid.org repository.

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.

Chromecast isn't working

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:

  • Got the exact same behaviour on a different phone with an older version of Pocket Plays.
  • No ad-blocking enabled on my network.
  • Other apps continue to work with Chromecast

No Playback Android 5.x

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.

Build instructions

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:

  • Missing google-services.json
  • Missing class 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!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.