GithubHelp home page GithubHelp logo

bmlzootown / hydravion Goto Github PK

View Code? Open in Web Editor NEW
15.0 3.0 0.0 992 KB

Unofficial Floatplane client for Roku devices. This project is NOT associated with Floatplane Media (floatplane.com).

License: MIT License

Brightscript 78.45% Makefile 21.55%
floatplane floatplane-media roku-devices hydravion

hydravion's Introduction

hydravion's People

Contributors

bmlzootown avatar

Stargazers

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

Watchers

 avatar  avatar  avatar

hydravion's Issues

Look into implementing sails.io

Need to look into implementing sails.io support, which would allow livestream notifications/new videos to automagically be added to the video list w/o polling the API.

Relevant to both the Roku and AndroidTV variants. tvOS will have to wait until I get MacOS setup again.

Double Check Cookies

Cookies are currently stored in the registry, where they are used every session for authentication, but there's no checks in place for if/when they finally expire/fail to work.

Load More Videos

The current setup only loads the latest 20 videos from a channel. Need to either detect when the user highlights the last video, or add a "more" button to load the next 20.

Still not sure as to whether the first 20 should be scrapped when the next 20 have been loaded.

Fallback Video Resolution

Currently tries to grab the highest resolution video possible for your display/device. Sometimes Floatplane gets a little behind, though, and 1080 doesn't want to play while 720 works just fine (probably still being encoded or something). Need to set up some sort of fallback system.

Cannot select subscription other than LTT

I'm happy to have a floatplane channel on Roku (Thank you for your hard work in providing this!), but I am having a problem (on 1.5). On my Roku Ultra, I can open the app fine, and if I select the LTT subscription things work fine, but if I select the BitWit Ultra channel, it makes a bong sound and shows the checkmark to the left, but then nothing happens. I can arrow down and pick LTT, it makes the same sound, the checkmark moves, then it opens the LTT sub, but then if I go back, arrow back up to the BitWit Ultra sub and select it, it makes the sound and moves the checkmark, but again nothing else. Please let me know if there's anything I can provide for troubleshooting purposes.

Live Streams

The way the API currently works, you have to query the channel itself to see if there is a stream in progress or not. Polling the API repeatedly is a no-go, so a workaround needs to be found if this is ever to be implemented.

Map Out API

        uploadVideo: "/video/upload",
        submitVideo: "/video/submit",
        postVideoChunk: "/video/chunk/upload",
        checkVideoChunk: "/video/chunk/check",
        updateVideoInfo: "/video/update",
        uploadVideoThumbnail: "/video/upload/thumbnail",
        transcodeProgress: "/video/transcode/progress",
        listVideos: "/video/list",
        readyList: "/video/list/ready",
        transcodingList: "/video/list/transcode",
        deleteVideos: "/video/delete",
        updateLiveConfig: "/live/config/update",
        uploadLiveThumbnail: "/live/thumbnail/upload",
        listDiscordBots: "/discord/bot/list",
        unlinkDiscordBot: "/discord/bot/unlink",
        discordBotInfo: "/discord/bot/info",
        generateDiscordInviteLink: "/discord/bot/invite/generate",
        updateDiscordBot: "/discord/bot/update",
        createMultipartUpload: "/video/upload/s3/multipart",
        listParts: "/video/upload/s3/multipart",
        prepareUploadPart: "/video/upload/s3/multipart/sign",
        abortMultipartUpload: "/video/upload/s3/multipart/abort",
        completeMultipartUpload: "/video/upload/s3/multipart/complete",
        publishSubscriptionPlan: "/plan/publish",
        updateSubscriptionPlans: "/plan/update",
        listSubscriptionPlans: "/plan/list",
        updateSocialLinks: "/creator/social/update",
        getSocialLinks: "/creator/social/get",
        updateChannelInfo: "/creator/info/update",
        getChannelInfo: "/creator/info/get",
        updateChannelImage: "/api/creator/image/update",
        getSubscriptionPlanFeatureLevels: "/creatorplanfeaturelevel/list",
        calculateFeatureCost: "/creatorplanfeaturelevel/cost",
        getPlanFeatures: "plan/feature/list"

        info: "video/info",
        comments: "video/comments",
        commentReplies: "video/comment/replies",
        addComment: "video/comment",
        deleteComment: "video/comment/remove",
        setInteraction: "video/comment/interaction/set",
        clearInteraction: "video/comment/interaction/clear",
        playlistVideos: "playlist/videos",
        relatedVideos: "video/related",
        getVideoUrl: "video/url",
        getStreamingEdges: "edges",
        getDeliveryInfo: "cdn/delivery",
        moderateComment: "comment/moderate/"

        getBraintreeToken: "payment/braintree/token",
        getStripePK: "payment/stripe/pk",
        listAddresses: "payment/address/list",
        addAddress: "payment/address/add",
        updateAddress: "payment/address/update",
        deleteAddress: "payment/address/delete",
        setPrimaryAddress: "payment/address/set",
        listPaymentMethods: "payment/method/list",
        addPaymentMethod: "payment/method/add",
        deletePaymentMethod: "payment/method/delete",
        setPrimaryPaymentMethod: "payment/method/set",
        listInvoices: "payment/invoice/list",
        estimateTaxes: "payment/tax/estimate",
        purchaseSubscription: "payment/subscription/purchase",
        cancelSubscription: "payment/subscription/cancel"

        info: "creator/info",
        infoByName: "creator/named",
        videos: "creator/videos",
        playlists: "creator/playlists",
        list: "creator/list",
        subscription: "plan/info",
        discoverCreators: "creator/discover",
        listCreatorCategories: "creatorcategory/list"

        userList: "/acp/user/list",
        useDetails: "/acp/user/details",
        invoiceList: "/acp/invoice/list",
        invoiceDetails: "/acp/invoice/details",
        moderatorList: "/acp/moderator/list",
        creatorList: "/acp/creator/list",
        creatorDetails: "/acp/creator/details",
        dashboardSummary: "/acp/dashboard/summary",
        creatorSubscriptionPlansList: "/acp/creator/subscriptionplans/list",
        createAdmin: "/acp/user/admin/create",
        findUser: "/acp/user/find",
        createModerator: "/acp/moderator/create",
        usersubscriptionAdd: "/acp/user/usersubscription/add",
        usersubscriptionList: "/acp/user/usersubscription/list",
        usersubscriptionDelete: "/acp/user/usersubscription/delete",
        listUserInvoices: "/acp/user/payment/invoice/list",
        getPaymentProcessorData: "/acp/user/payment/processor/data",
        createCreator: "/acp/creator/create",
        checkEmailAvailable: "/acp/user/email/availability",
        checkUsernameAvailable: "/acp/user/username/availability",
        checkCreatorURLAvailable: "/acp/creator/urlname/availability",
        getCreatorCategory: "/acp/creator/category/list",
        uploadUserAvatar: "/acp/user/avatar/upload",
        updateUser: "/acp/user/update",
        updateAdministrator: "/acp/user/administrator/update",
        updateGlobalModerator: "/acp/moderator/globalupdate",
        removeCreatorModerator: "/acp/moderator/creator/remove",
        addCreatorModerator: "/acp/moderator/creator/add",
        getModeratorAvailableCreators: "/acp/moderator/creator/list",
        getModeratorCreators: "/acp/moderator/creators",
        sendPasswordReset: "/user/password/reset/request",
        getCreatorsTitles: "/acp/creator/list/title",
        searchUserForModeration: "/acp/user/list/notmoderator",
        updateCreator: "/acp/creator/update",
        updateCreatorSubscriontionPlan: "/acp/creator/subscriptionplan/update",
        beginUserSpoofing: "/auth/spoof/begin",
        endUserSpoofing: "/auth/spoof/end",
        getJobStatus: "acp/dashboard/job/status/",
        startJob: "acp/dashboard/job/start/",
        stopJob: "acp/dashboard/job/stop/",
        getFaqSections: "/acp/faq/sections",
        updateFaqSection: "/acp/faq/section/update",
        getFaqSectionDetails: "/acp/faq/section/details",
        updateFaqArticle: "/acp/faq/article/update",
        getFaqArticle: "/acp/faq/article/details",
        uploadFaqImage: "/acp/faq/image/upload",
        getFaqImages: "/acp/faq/image/list",
        saveNewFaqSection: "/acp/faq/section/new",
        saveNewFaqArticle: "/acp/faq/article/new",
        getVideoList: "/acp/transcoding/video/list",
        getVideo: "/acp/transcoding/video",
        getVideoUrl: "/acp/transcoding/video/url",
        getTimelineSpriteUrl: "/acp/transcoding/video/timeline",
        getOrderList: "/acp/transcoding/order/list",
        getOrder: "/acp/transcoding/order",
        restartOrder: "/acp/transcoding/order/restart",
        deleteOrder: "/acp/transcoding/order/delete",
        updateOrder: "/acp/transcoding/order/update",
        getUploadList: "/acp/transcoding/upload/list",
        getUpload: "/acp/transcoding/upload",
        copyUpload: "/acp/transcoding/upload/copy",
        renameUpload: "/acp/transcoding/upload/rename",
        deleteUploads: "/acp/transcoding/upload/delete",
        removeJob: "/acp/transcoding/job/remove",
        retryJob: "/acp/transcoding/job/retry",
        updateJobData: "/acp/transcoding/job/update",
        setTaskState: "/acp/transcoding/task/state",
        promoteJob: "/acp/transcoding/job/promote",
        getJobData: "/acp/transcoding/job/data",
        getTaskData: "/acp/transcoding/task/data",
        fixVideo: "/acp/transcoding/video/fix",
        runFfprobe: "/acp/transcoding/upload/probe",
        startTranscode: "/acp/transcoding/upload/transcode",
        getWorkers: "/acp/transcoding/worker/list",
        stopWorker: "/acp/transcoding/worker/stop",
        pauseWorker: "/acp/transcoding/worker/pause",
        continueWorker: "/acp/transcoding/worker/continue",
        getFeatureConfigs: "acp/feature/configs",
        saveFeatureLevel: "acp/feature/save",
        saveFeatureDependencies: "acp/feature/dependencies/save",
        saveFeatureCategory: "acp/feature/category/save",
        saveFeatureType: "acp/feature/type/save",
        saveFeatureResolution: "acp/feature/resolution/save"

        getSections: "/faq/sections",
        submitSupport: "/support/",
        creatorJoin: "/support/creatorJoin",
        getTicketTypes: "/support/ticket/types"

        getUserBanStatus: "/moderator/userBanStatus/",
        unhideComment: "/moderation/comment/unhide",
        unbanUser: "/moderation/user/unban",
        userInfo: "/moderation/user/info"

app.js

Video lagging behind audio

Whenever I play a video there is strange lag of the video playing behind the audio that gets worse as the video progresses.

This is on the beta channel

Can't bring up media bar/controls

As the title states, can't bring up media bar/controls once they disappear after inactivity at the start of the video. While the controls are up, I can navigate and use the functions and scrobble through the video just fine, but after it disappears I can't bring them up again.

There is only the DPad and select button to interact with foreground apps on the remote, so I'm at a loss on how else I'd bring up the control banner. Do let me know if I'm missing something obvious or if I can provide more information

Device: Chromecast with Google TV
Android TV version: 10
Running the latest version, sideloaded.

Cannot select/enter channel

Model: Hisense 6Seriee-58
Hardware ID: G205X
Software Version: 11.5.0 build 4312-HC
Channel: Hydration 2.1 build 4
Channel: Linus Tech Tips
Issue: Can login and see my channel subscriptions but nothing happens when I press Ok. Only * for the options works.

Redundant Subscriptions Shown

The subscription/creator selection screen, near the end of the subscription period, will show a creator's name twice (because the API provides it twice). Need to weed out the extra(s).

Only live stream archive playing

When I try to play anything other then a live stream archive it just shows the error.

Error -1

Video cannot be played! There was an error in the HTTP response. This could mean that malformed HTTP headers or an HTTP error code was returned.

New Issue Template

To help to more quickly diagnose and resolve bugs/issues, please provide the following information when creating a ticket:

  • Device Model
    • Settings --> System --> About, Model
  • OS Version
    • Settings --> System --> About, Software version
  • Channel Version
    • Highlight channel, access options (*) menu, see "version X.X build X"
  • Whom you are subscribed to?
    • Sometimes issues are subscription specific
  • What error you're seeing, if any
    • Be as specific as possible
      • Is the error/issue occurring on a specific channel only?
      • On only specific videos?
      • Does the issue still occur when trying to play the video at a different resolution? (Access the options menu when looking at the video description, "Select Resolution")

The following is an example issue:

Device Model: 4660X - Roku Ultra
OS Version: 11.5.0 build 4312-46
Channel Version: 2.1 build 3
Subscription(s): LTT, Garbage Time, Bitwit, Lvl1
Error/Issue: Navigating to my Lvl1 Techs subscription crashes the channel. There is no given error.

Here is a blank version of the example for those who want to quickly copy/paste:

Device Model:
OS Version:
Channel Version:
Subscription(s):
Error/Issue:

Please add feature to watch different video options

Sometimes floatplane has multiple video options, like last WAN show, but with the Hydravion app, only the first video option can be watched (which in this case, is NOT the full video).

Is it possible to add a choice option to watch multiple videos per video?

Scrollable Text Not Focusable on Non-Video Post

As the title implies, the scrollable text on the description screen isn't focusable on non-video posts due to movement between the bottom row of buttons and the text being handled only when the play button is focused.

Simple fix, will push a fix tomorrow as I work the rest of the day today.

TV-based Issue Loading Next Page

A friend has been having issues using after loading consecutive pages where the thumbnails, and subsequent information (title/description/etc.), does not load. They're using a TV with Roku's software built-in, latest software.

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.