New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Notify User When Corrupt Data Is Detected #68

Closed
billmeek opened this Issue May 26, 2015 · 51 comments

Comments

Projects
None yet
2 participants
@billmeek
Contributor

billmeek commented May 26, 2015

Known cases have been start/end times and today, missing hostname in Watch Videos.

@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 17, 2017

Contributor

@billmeek can you check that this is still an issue in the latest develop branch

Contributor

dmfrey commented Jan 17, 2017

@billmeek can you check that this is still an issue in the latest develop branch

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 19, 2017

Contributor

Tested with a NULL starttime. When the program is selected, there's
no artwork (there was before) and a toast? comes up saying: There
was an application error RETRY.

Good clue that something is amiss, but the end user would have no
idea what is wrong.

Contributor

billmeek commented Jan 19, 2017

Tested with a NULL starttime. When the program is selected, there's
no artwork (there was before) and a toast? comes up saying: There
was an application error RETRY.

Good clue that something is amiss, but the end user would have no
idea what is wrong.

@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 19, 2017

Contributor
Contributor

dmfrey commented Jan 19, 2017

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 19, 2017

Contributor

I'll suggest invalid start/end times and missing hostname.

In today's test case, when I set starttime to NULL, the duration
on the episode displays -69342 Min. NULL endtime displays
a positive 69342 Min.

Contributor

billmeek commented Jan 19, 2017

I'll suggest invalid start/end times and missing hostname.

In today's test case, when I set starttime to NULL, the duration
on the episode displays -69342 Min. NULL endtime displays
a positive 69342 Min.

@dmfrey dmfrey added this to the 3.0.2 milestone Jan 19, 2017

@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 20, 2017

Contributor

@billmeek by your description above, It looks like it was able to parse the data correctly, yet it bubbled up to the UI. So this is solely in data. I am thinking of floating an icon on the list item, then pop a dialog indicating what's wrong. If it couldn't parse the json, then the app and backend have bigger problems.

What do you think?

Contributor

dmfrey commented Jan 20, 2017

@billmeek by your description above, It looks like it was able to parse the data correctly, yet it bubbled up to the UI. So this is solely in data. I am thinking of floating an icon on the list item, then pop a dialog indicating what's wrong. If it couldn't parse the json, then the app and backend have bigger problems.

What do you think?

dmfrey added a commit that referenced this issue Jan 20, 2017

@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 20, 2017

Contributor

@billmeek pull branch feature/issue_68_alert_corupt_data and try it with your null StartTime entries and let me know the result.

Contributor

dmfrey commented Jan 20, 2017

@billmeek pull branch feature/issue_68_alert_corupt_data and try it with your null StartTime entries and let me know the result.

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 21, 2017

Contributor

I think your plan sounds good. But here's some
better of the issue...

When I NULL the starttime on the backend, this is the
returned info:

$ api --ho mc0 --endpoint Dvr/GetRecorded --rest RecordedId=7805|sed "s/', '/',\n'/g"
{'Program': {'ProgramId': '',
'Title': '',
'Airdate': '',
'FileSize': '0',
'CatType': '',
'Channel': {'FineTune': '0',
'SourceId': '0',
'ChanNum': '',
'DefaultAuth': '',
'CallSign': '',
'Visible': 'true',
'ChanFilters': '',
'ATSCMinorChan': '0',
'IconURL': '',
'Format': '',
'FrequencyId': '',
'MplexId': '0',
'ChannelName': '',
'ServiceId': '0',
'ChanId': '0',
'XMLTVID': '',
'Programs': [], 'UseEIT': 'false',
'InputId': '0',
'CommFree': 'false',
'ATSCMajorChan': '0'}, 'AudioProps': '0',
'Artwork': {'ArtworkInfos': []}, 'Repeat': 'false',
'Recording': {'EncoderId': '0',
'StartTs': '',
'PlayGroup': '',
'RecGroup': '',
'FileSize': '0',
'DupMethod': '1',
'RecordId': '0',
'LastModified': '',
'DupInType': '1',
'Profile': '',
'EndTs': '',
'Status': '0',
'StorageGroup': '',
'HostName': '',
'Priority': '0',
'RecordedId': '0',
'EncoderName': '',
'FileName': '',
'RecType': '0'},
'HostName': '',
'SubTitle': '',
'Category': '',
'Episode': '0',
'VideoProps': '0',
'Cast': {'CastMembers': []}, 'ProgramFlags': '0',
'EndTime': '2017-01-21T01:57:27Z',
'TotalEpisodes': '0',
'LastModified': '2017-01-21T01:57:27Z',
'Season': '0',
'Inetref': '',
'SeriesId': '',
'Stars': '0',
'StartTime': '2017-01-21T01:57:27Z',
'SubProps': '0',
'FileName': '',
'Description': ''}}

There is a nearly blank screen, but the "There was an application error"
message is still there, as before.

screenshot_20170120-200238

Contributor

billmeek commented Jan 21, 2017

I think your plan sounds good. But here's some
better of the issue...

When I NULL the starttime on the backend, this is the
returned info:

$ api --ho mc0 --endpoint Dvr/GetRecorded --rest RecordedId=7805|sed "s/', '/',\n'/g"
{'Program': {'ProgramId': '',
'Title': '',
'Airdate': '',
'FileSize': '0',
'CatType': '',
'Channel': {'FineTune': '0',
'SourceId': '0',
'ChanNum': '',
'DefaultAuth': '',
'CallSign': '',
'Visible': 'true',
'ChanFilters': '',
'ATSCMinorChan': '0',
'IconURL': '',
'Format': '',
'FrequencyId': '',
'MplexId': '0',
'ChannelName': '',
'ServiceId': '0',
'ChanId': '0',
'XMLTVID': '',
'Programs': [], 'UseEIT': 'false',
'InputId': '0',
'CommFree': 'false',
'ATSCMajorChan': '0'}, 'AudioProps': '0',
'Artwork': {'ArtworkInfos': []}, 'Repeat': 'false',
'Recording': {'EncoderId': '0',
'StartTs': '',
'PlayGroup': '',
'RecGroup': '',
'FileSize': '0',
'DupMethod': '1',
'RecordId': '0',
'LastModified': '',
'DupInType': '1',
'Profile': '',
'EndTs': '',
'Status': '0',
'StorageGroup': '',
'HostName': '',
'Priority': '0',
'RecordedId': '0',
'EncoderName': '',
'FileName': '',
'RecType': '0'},
'HostName': '',
'SubTitle': '',
'Category': '',
'Episode': '0',
'VideoProps': '0',
'Cast': {'CastMembers': []}, 'ProgramFlags': '0',
'EndTime': '2017-01-21T01:57:27Z',
'TotalEpisodes': '0',
'LastModified': '2017-01-21T01:57:27Z',
'Season': '0',
'Inetref': '',
'SeriesId': '',
'Stars': '0',
'StartTime': '2017-01-21T01:57:27Z',
'SubProps': '0',
'FileName': '',
'Description': ''}}

There is a nearly blank screen, but the "There was an application error"
message is still there, as before.

screenshot_20170120-200238

@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 21, 2017

Contributor
Contributor

dmfrey commented Jan 21, 2017

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 21, 2017

Contributor

There was, this is after drilling down to an individual
recording:

01-20 20:35:14.114 22577-22577/org.mythtv.android E/MediaItemDetailsPresenter: showErrorMessage : error
                                                                               java.lang.NullPointerException: Attempt to invoke virtual method 'int org.mythtv.android.domain.Media.ordinal()' on a null object reference
                                                                                   at org.mythtv.android.presentation.view.activity.phone.MediaItemDetailsActivity.loadBackdrop(MediaItemDetailsActivity.java:252)
                                                                                   at org.mythtv.android.presentation.view.activity.phone.MediaItemDetailsActivity.onMediaItemLoaded(MediaItemDetailsActivity.java:243)
                                                                                   at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment.renderMediaItem(MediaItemDetailsFragment.java:351)
                                                                                   at org.mythtv.android.presentation.presenter.phone.MediaItemDetailsPresenter.showDetailsInView(MediaItemDetailsPresenter.java:147)
                                                                                   at org.mythtv.android.presentation.presenter.phone.MediaItemDetailsPresenter.updateDetails(MediaItemDetailsPresenter.java:139)
                                                                                   at org.mythtv.android.presentation.presenter.phone.MediaItemDetailsPresenter.access$400(MediaItemDetailsPresenter.java:45)
                                                                                   at org.mythtv.android.presentation.presenter.phone.MediaItemDetailsPresenter$MediaItemDetailsSubscriber.onNext(MediaItemDetailsPresenter.java:179)
                                                                                   at org.mythtv.android.presentation.presenter.phone.MediaItemDetailsPresenter$MediaItemDetailsSubscriber.onNext(MediaItemDetailsPresenter.java:160)
                                                                                   at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:134)
                                                                                   at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.call(OperatorObserveOn.java:224)
                                                                                   at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:107)
                                                                                   at android.os.Handler.handleCallback(Handler.java:739)
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                   at android.os.Looper.loop(Looper.java:148)
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Contributor

billmeek commented Jan 21, 2017

There was, this is after drilling down to an individual
recording:

01-20 20:35:14.114 22577-22577/org.mythtv.android E/MediaItemDetailsPresenter: showErrorMessage : error
                                                                               java.lang.NullPointerException: Attempt to invoke virtual method 'int org.mythtv.android.domain.Media.ordinal()' on a null object reference
                                                                                   at org.mythtv.android.presentation.view.activity.phone.MediaItemDetailsActivity.loadBackdrop(MediaItemDetailsActivity.java:252)
                                                                                   at org.mythtv.android.presentation.view.activity.phone.MediaItemDetailsActivity.onMediaItemLoaded(MediaItemDetailsActivity.java:243)
                                                                                   at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment.renderMediaItem(MediaItemDetailsFragment.java:351)
                                                                                   at org.mythtv.android.presentation.presenter.phone.MediaItemDetailsPresenter.showDetailsInView(MediaItemDetailsPresenter.java:147)
                                                                                   at org.mythtv.android.presentation.presenter.phone.MediaItemDetailsPresenter.updateDetails(MediaItemDetailsPresenter.java:139)
                                                                                   at org.mythtv.android.presentation.presenter.phone.MediaItemDetailsPresenter.access$400(MediaItemDetailsPresenter.java:45)
                                                                                   at org.mythtv.android.presentation.presenter.phone.MediaItemDetailsPresenter$MediaItemDetailsSubscriber.onNext(MediaItemDetailsPresenter.java:179)
                                                                                   at org.mythtv.android.presentation.presenter.phone.MediaItemDetailsPresenter$MediaItemDetailsSubscriber.onNext(MediaItemDetailsPresenter.java:160)
                                                                                   at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:134)
                                                                                   at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.call(OperatorObserveOn.java:224)
                                                                                   at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:107)
                                                                                   at android.os.Handler.handleCallback(Handler.java:739)
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                   at android.os.Looper.loop(Looper.java:148)
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

dmfrey added a commit that referenced this issue Jan 21, 2017

@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 22, 2017

Contributor

@billmeek pull branch feature/issue_68_alert_corupt_data again and try it with your null StartTime entries and let me know the result.

Contributor

dmfrey commented Jan 22, 2017

@billmeek pull branch feature/issue_68_alert_corupt_data again and try it with your null StartTime entries and let me know the result.

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 22, 2017

Contributor

Getting the "Unforunately..." message with a NULL starttime on the backend.

Whole LogCat following the press on the episode:

1-21 19:06:19.845 24408-24408/org.mythtv.android I/MediaItemListFragment: onItemClicked : mediaItemModel=MediaItemModel{id=7805, media=PROGRAM, title='Yes Man', subTitle='', description='After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.', startDate=2016-12-01T19:00:00.000Z, programFlags=0, season=0, episode=0, studio='AMC', castMembers='null', characters='null', url='/Content/GetFile?FileName=2667_20161201190000.ts', fanartUrl='/Content/GetImageFile?StorageGroup=Fanart&FileName=/tmdb3.py_10201_fanart.jpg', coverartUrl='/Content/GetImageFile?StorageGroup=Coverart&FileName=/tmdb3.py_10201_coverart.jpg', bannerUrl='null', previewUrl='/Content/GetPreviewImage?RecordedId=7805', contentType='video/mp2t', duration=-73656, percentComplete=0, recording=false, liveStreamId=0, createHttpLiveStreamUrl='/Content/AddRecordingLiveStream?RecordedId=7805&Width=960', removeHttpLiveStreamUrl='null', getHttpLiveStreamUrl='null', watched=true, markWatchedUrl='/Dvr/UpdateRecordedWatchedStatus', updateSavedBookmarkUrl='/Dvr/SetSavedBookmark?RecordedId=78051', bookmark=0, validationErrors=[]}
01-21 19:06:19.845 24408-24408/org.mythtv.android I/MediaItemListPresenter: onMediaItemClicked : mediaItemModel=MediaItemModel{id=7805, media=PROGRAM, title='Yes Man', subTitle='', description='After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.', startDate=2016-12-01T19:00:00.000Z, programFlags=0, season=0, episode=0, studio='AMC', castMembers='null', characters='null', url='/Content/GetFile?FileName=2667_20161201190000.ts', fanartUrl='/Content/GetImageFile?StorageGroup=Fanart&FileName=/tmdb3.py_10201_fanart.jpg', coverartUrl='/Content/GetImageFile?StorageGroup=Coverart&FileName=/tmdb3.py_10201_coverart.jpg', bannerUrl='null', previewUrl='/Content/GetPreviewImage?RecordedId=7805', contentType='video/mp2t', duration=-73656, percentComplete=0, recording=false, liveStreamId=0, createHttpLiveStreamUrl='/Content/AddRecordingLiveStream?RecordedId=7805&Width=960', removeHttpLiveStreamUrl='null', getHttpLiveStreamUrl='null', watched=true, markWatchedUrl='/Dvr/UpdateRecordedWatchedStatus', updateSavedBookmarkUrl='/Dvr/SetSavedBookmark?RecordedId=78051', bookmark=0, validationErrors=[]}
01-21 19:06:19.845 24408-24408/org.mythtv.android D/MediaItemListFragment: viewMediaItem : enter
01-21 19:06:19.845 24408-24408/org.mythtv.android D/MediaItemListFragment: viewMediaItem : mediaItemModel=MediaItemModel{id=7805, media=PROGRAM, title='Yes Man', subTitle='', description='After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.', startDate=2016-12-01T19:00:00.000Z, programFlags=0, season=0, episode=0, studio='AMC', castMembers='null', characters='null', url='/Content/GetFile?FileName=2667_20161201190000.ts', fanartUrl='/Content/GetImageFile?StorageGroup=Fanart&FileName=/tmdb3.py_10201_fanart.jpg', coverartUrl='/Content/GetImageFile?StorageGroup=Coverart&FileName=/tmdb3.py_10201_coverart.jpg', bannerUrl='null', previewUrl='/Content/GetPreviewImage?RecordedId=7805', contentType='video/mp2t', duration=-73656, percentComplete=0, recording=false, liveStreamId=0, createHttpLiveStreamUrl='/Content/AddRecordingLiveStream?RecordedId=7805&Width=960', removeHttpLiveStreamUrl='null', getHttpLiveStreamUrl='null', watched=true, markWatchedUrl='/Dvr/UpdateRecordedWatchedStatus', updateSavedBookmarkUrl='/Dvr/SetSavedBookmark?RecordedId=78051', bookmark=0, validationErrors=[]}
01-21 19:06:19.845 24408-24408/org.mythtv.android D/SeriesListActivity: onMediaItemClicked : enter
01-21 19:06:19.845 24408-24408/org.mythtv.android D/SeriesListActivity: onMediaItemClicked : mediaItemModel=MediaItemModel{id=7805, media=PROGRAM, title='Yes Man', subTitle='', description='After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.', startDate=2016-12-01T19:00:00.000Z, programFlags=0, season=0, episode=0, studio='AMC', castMembers='null', characters='null', url='/Content/GetFile?FileName=2667_20161201190000.ts', fanartUrl='/Content/GetImageFile?StorageGroup=Fanart&FileName=/tmdb3.py_10201_fanart.jpg', coverartUrl='/Content/GetImageFile?StorageGroup=Coverart&FileName=/tmdb3.py_10201_coverart.jpg', bannerUrl='null', previewUrl='/Content/GetPreviewImage?RecordedId=7805', contentType='video/mp2t', duration=-73656, percentComplete=0, recording=false, liveStreamId=0, createHttpLiveStreamUrl='/Content/AddRecordingLiveStream?RecordedId=7805&Width=960', removeHttpLiveStreamUrl='null', getHttpLiveStreamUrl='null', watched=true, markWatchedUrl='/Dvr/UpdateRecordedWatchedStatus', updateSavedBookmarkUrl='/Dvr/SetSavedBookmark?RecordedId=78051', bookmark=0, validationErrors=[]}
01-21 19:06:19.845 24408-24408/org.mythtv.android D/PhoneNavigator: navigateToMediaItem : enter
01-21 19:06:19.845 24408-24408/org.mythtv.android D/PhoneNavigator: navigateToMediaItem : context != null
                                                                    
                                                                    --------- beginning of system
01-21 19:06:19.856 24408-24408/org.mythtv.android D/PhoneNavigator: navigateToMediaItem : exit
01-21 19:06:19.856 24408-24408/org.mythtv.android D/SeriesListActivity: onMediaItemClicked : exit
01-21 19:06:19.856 24408-24408/org.mythtv.android D/MediaItemListFragment: viewProgram : exit
01-21 19:06:19.856 24408-24408/org.mythtv.android D/MediaItemListFragment: onPause : enter
01-21 19:06:19.856 24408-24408/org.mythtv.android D/MediaItemListFragment: onPause : exit
01-21 19:06:19.857 24408-25241/org.mythtv.android V/FA: Recording user engagement, ms: 15143
01-21 19:06:19.857 24408-25241/org.mythtv.android V/FA: Using measurement service
01-21 19:06:19.857 24408-25241/org.mythtv.android V/FA: Connecting to remote service
01-21 19:06:19.867 24408-25241/org.mythtv.android V/FA: Activity paused, time: 347913064
01-21 19:06:19.870 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: onCreate : enter
01-21 19:06:19.873 24408-24408/org.mythtv.android V/FA: onActivityCreated
01-21 19:06:19.873 24408-25241/org.mythtv.android D/FA: Event not sent since app measurement is disabled
01-21 19:06:19.927 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: initializeActivity : enter
01-21 19:06:19.927 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: initializeActivity : savedInstanceState is null
01-21 19:06:19.927 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: initializeActivity : extras != null
01-21 19:06:19.928 24408-24408/org.mythtv.android V/AbstractBasePhoneActivity: addFragment : enter
01-21 19:06:19.929 24408-24408/org.mythtv.android V/AbstractBasePhoneActivity: addFragment : exit
01-21 19:06:19.929 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: initializeActivity : exit
01-21 19:06:19.929 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: initializeInjector : enter
01-21 19:06:19.929 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: initializeInjector : exit
01-21 19:06:19.929 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: onCreate : exit
01-21 19:06:19.930 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onAttach : enter
01-21 19:06:19.930 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onAttach : exit
01-21 19:06:19.930 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onCreateView : enter
01-21 19:06:19.945 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onCreateView : exit
01-21 19:06:19.946 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onActivityCreated : enter
01-21 19:06:19.946 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: initialize : enter
01-21 19:06:19.946 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: getComponent : enter
01-21 19:06:19.946 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: getComponent : exit
01-21 19:06:19.947 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: loadMediaItemDetails : enter
01-21 19:06:19.947 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: loadMediaItemDetails : presenter is not null
01-21 19:06:19.947 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: hideRetry : enter
01-21 19:06:19.947 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: hideRetry : exit
01-21 19:06:19.947 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: showLoading : enter
01-21 19:06:19.947 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: showLoading : exit
01-21 19:06:19.947 24408-24408/org.mythtv.android D/MediaItemDetailsPresenter: getDetails : enter
01-21 19:06:19.947 24408-24408/org.mythtv.android D/DvrDataRepository: recordedProgram : enter
01-21 19:06:19.948 24408-24408/org.mythtv.android D/DvrDataRepository: recordedProgram : recordedId=7805
01-21 19:06:19.948 24408-24408/org.mythtv.android D/DvrDataStoreFactory: createMasterBackendDataStore : enter
01-21 19:06:19.948 24408-24408/org.mythtv.android D/DvrDataStoreFactory: createMasterBackendDataStore : exit
01-21 19:06:19.948 24408-24408/org.mythtv.android D/ContentDataStoreFactory: createMasterBackendDataStore : enter
01-21 19:06:19.948 24408-24408/org.mythtv.android D/ContentDataStoreFactory: createMasterBackendDataStore : exit
01-21 19:06:19.948 24408-24408/org.mythtv.android D/MasterBackendDvrDataStore: recordedProgramEntityDetails : enter
01-21 19:06:19.948 24408-24408/org.mythtv.android D/MasterBackendDvrDataStore: recordedProgramEntityList : recordedId=7805
01-21 19:06:19.949 24408-24408/org.mythtv.android D/MasterBackendDvrDataStore: getBookmark : enter
01-21 19:06:19.949 24408-24408/org.mythtv.android D/MasterBackendDvrDataStore: getBookmark : recordedId=7805, offsetType=Duration
01-21 19:06:19.950 24408-24408/org.mythtv.android D/MediaItemDetailsPresenter: getDetails : exit
01-21 19:06:19.950 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: loadMediaItemDetails : exit
01-21 19:06:19.950 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: initialize : exit
01-21 19:06:19.950 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onActivityCreated : exit
01-21 19:06:19.951 24408-24459/org.mythtv.android D/DvrApiImpl: getMasterBackendUrl : masterBackend=http://mc0.home.local:6544
01-21 19:06:19.951 24408-24459/org.mythtv.android I/DvrApiImpl: getRecordedProgramDetailsFromApi : apiUrl=http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805
01-21 19:06:19.951 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : url=http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805
01-21 19:06:19.951 24408-24459/org.mythtv.android D/OkHttp: --> GET http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805 http/1.1
01-21 19:06:19.951 24408-24459/org.mythtv.android D/OkHttp: Accept: application/json
01-21 19:06:19.951 24408-24459/org.mythtv.android D/OkHttp: --> END GET
01-21 19:06:19.951 24408-25241/org.mythtv.android V/FA: Using measurement service
01-21 19:06:19.951 24408-25241/org.mythtv.android V/FA: Connection attempt already in progress
01-21 19:06:19.952 24408-25241/org.mythtv.android V/FA: Activity resumed, time: 347913158
01-21 19:06:19.952 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onResume : enter
01-21 19:06:19.952 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onResume : exit
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: <-- 200 OK http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805 (24ms)
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: Accept-Ranges: bytes
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: Cache-Control: no-cache="Ext", max-age = 7200
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: Connection: Keep-Alive
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: Content-Language: en-us
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: Content-Type: application/json
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: Date: Sun, 22 Jan 2017 01:06:24 GMT
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: ETag: "744ac73611e8e93965bec3ee6142a9c0caf64442"
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: Keep-Alive: timeout=10
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: Server: MythTV/29-pre-194-g2a1ccc0 Linux/3.13.0-107-generic UPnP/1.0
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: transferMode.dlna.org: Interactive
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: <-- END HTTP
01-21 19:06:19.976 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : cacheResponse - Response{protocol=http/1.1, code=200, message=OK, url=http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805}
01-21 19:06:19.977 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : networkResponse - Response{protocol=http/1.1, code=200, message=OK, url=http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805}
01-21 19:06:19.986 24408-24459/org.mythtv.android D/DvrApiImpl: getMasterBackendUrl : masterBackend=http://mc0.home.local:6544
01-21 19:06:19.987 24408-24459/org.mythtv.android I/DvrApiImpl: getRecordedProgramDetailsFromApi : apiUrl=http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805
01-21 19:06:19.989 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : url=http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805
01-21 19:06:19.989 24408-24459/org.mythtv.android D/OkHttp: --> GET http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805 http/1.1
01-21 19:06:19.989 24408-24459/org.mythtv.android D/OkHttp: Accept: application/json
01-21 19:06:19.989 24408-24459/org.mythtv.android D/OkHttp: --> END GET
01-21 19:06:20.001 24408-24459/org.mythtv.android D/OkHttp: <-- 200 OK http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805 (11ms)
01-21 19:06:20.001 24408-24459/org.mythtv.android D/OkHttp: Connection: Keep-Alive
01-21 19:06:20.001 24408-24459/org.mythtv.android D/OkHttp: Content-Language: en-us
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: Content-Type: application/json
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: Keep-Alive: timeout=10
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: transferMode.dlna.org: Interactive
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: Accept-Ranges: bytes
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: Cache-Control: no-cache="Ext", max-age = 7200
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: Date: Sun, 22 Jan 2017 01:06:24 GMT
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: ETag: "744ac73611e8e93965bec3ee6142a9c0caf64442"
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: Server: MythTV/29-pre-194-g2a1ccc0 Linux/3.13.0-107-generic UPnP/1.0
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: <-- END HTTP
01-21 19:06:20.002 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : cacheResponse - Response{protocol=http/1.1, code=200, message=OK, url=http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805}
01-21 19:06:20.003 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : networkResponse - Response{protocol=http/1.1, code=304, message=Not Modified, url=http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805}
01-21 19:06:20.007 24408-24459/org.mythtv.android D/MasterBackendContentDataStore: liveStreamInfoEntityList : enter
01-21 19:06:20.007 24408-24459/org.mythtv.android D/MasterBackendContentDataStore: liveStreamInfoEntityList : exit
01-21 19:06:20.007 24408-24459/org.mythtv.android D/ContentApiImpl: LiveStreamInfoEntityList.call : enter
01-21 19:06:20.008 24408-24459/org.mythtv.android D/ContentApiImpl: LiveStreamInfoEntityList.call : network is connected
01-21 19:06:20.008 24408-24459/org.mythtv.android D/ContentApiImpl: getMasterBackendUrl : masterBackend=http://mc0.home.local:6544
01-21 19:06:20.008 24408-24459/org.mythtv.android D/ContentApiImpl: getLiveStreamInfoEntitiesFromApi : url=http://mc0.home.local:6544/Content/GetLiveStreamList
01-21 19:06:20.009 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : url=http://mc0.home.local:6544/Content/GetLiveStreamList
01-21 19:06:20.009 24408-24459/org.mythtv.android D/OkHttp: --> GET http://mc0.home.local:6544/Content/GetLiveStreamList http/1.1
01-21 19:06:20.009 24408-24459/org.mythtv.android D/OkHttp: Accept: application/json
01-21 19:06:20.009 24408-24459/org.mythtv.android D/OkHttp: --> END GET
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: <-- 200 OK http://mc0.home.local:6544/Content/GetLiveStreamList (24ms)
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: Connection: Keep-Alive
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: Content-Language: en-us
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: Content-Type: application/json
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: Keep-Alive: timeout=10
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: transferMode.dlna.org: Interactive
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: Accept-Ranges: bytes
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: Cache-Control: no-cache="Ext", max-age = 7200
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: Date: Sun, 22 Jan 2017 01:06:24 GMT
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: ETag: "5a57da9517b5fef7bcb64e5f630d5d04410b1be1"
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: Server: MythTV/29-pre-194-g2a1ccc0 Linux/3.13.0-107-generic UPnP/1.0
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: <-- END HTTP
01-21 19:06:20.035 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : cacheResponse - Response{protocol=http/1.1, code=200, message=OK, url=http://mc0.home.local:6544/Content/GetLiveStreamList}
01-21 19:06:20.035 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : networkResponse - Response{protocol=http/1.1, code=304, message=Not Modified, url=http://mc0.home.local:6544/Content/GetLiveStreamList}
01-21 19:06:20.035 24408-24459/org.mythtv.android D/ContentApiImpl: LiveStreamInfoEntityList.call : retrieved LiveStream info entities
01-21 19:06:20.042 24408-24459/org.mythtv.android D/ContentApiImpl: LiveStreamInfoEntityList.call : exit
01-21 19:06:20.042 24408-24459/org.mythtv.android D/DvrApiImpl: getBookmark.call : enter
01-21 19:06:20.043 24408-24459/org.mythtv.android D/DvrApiImpl: getBookmark.call : network is connected
01-21 19:06:20.043 24408-24459/org.mythtv.android D/DvrApiImpl: getMasterBackendUrl : masterBackend=http://mc0.home.local:6544
01-21 19:06:20.044 24408-24459/org.mythtv.android I/DvrApiImpl: getBookmarkFromApi : apiUrl=http://mc0.home.local:6544/Dvr/GetSavedBookmark?RecordedId=7805&OffsetType=Duration
01-21 19:06:20.044 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : url=http://mc0.home.local:6544/Dvr/GetSavedBookmark?RecordedId=7805&OffsetType=Duration
01-21 19:06:20.045 24408-24459/org.mythtv.android D/OkHttp: --> GET http://mc0.home.local:6544/Dvr/GetSavedBookmark?RecordedId=7805&OffsetType=Duration http/1.1
01-21 19:06:20.045 24408-24459/org.mythtv.android D/OkHttp: Accept: application/json
01-21 19:06:20.045 24408-24459/org.mythtv.android D/OkHttp: --> END GET
01-21 19:06:20.047 24408-25241/org.mythtv.android D/FA: Connected to remote service
01-21 19:06:20.047 24408-25241/org.mythtv.android V/FA: Processing queued up service tasks: 2
01-21 19:06:20.059 24408-24459/org.mythtv.android D/OkHttp: <-- 200 OK http://mc0.home.local:6544/Dvr/GetSavedBookmark?RecordedId=7805&OffsetType=Duration (14ms)
01-21 19:06:20.059 24408-24459/org.mythtv.android D/OkHttp: Connection: Keep-Alive
01-21 19:06:20.059 24408-24459/org.mythtv.android D/OkHttp: Content-Language: en-us
01-21 19:06:20.059 24408-24459/org.mythtv.android D/OkHttp: Content-Type: application/json
01-21 19:06:20.060 24408-24459/org.mythtv.android D/OkHttp: Keep-Alive: timeout=10
01-21 19:06:20.060 24408-24459/org.mythtv.android D/OkHttp: transferMode.dlna.org: Interactive
01-21 19:06:20.060 24408-24459/org.mythtv.android D/OkHttp: Accept-Ranges: bytes
01-21 19:06:20.060 24408-24459/org.mythtv.android D/OkHttp: Cache-Control: no-cache="Ext", max-age = 7200
01-21 19:06:20.060 24408-24459/org.mythtv.android D/OkHttp: Date: Sun, 22 Jan 2017 01:06:24 GMT
01-21 19:06:20.060 24408-24459/org.mythtv.android D/OkHttp: ETag: "da39a3ee5e6b4b0d3255bfef95601890afd80709"
01-21 19:06:20.060 24408-24459/org.mythtv.android D/OkHttp: Server: MythTV/29-pre-194-g2a1ccc0 Linux/3.13.0-107-generic UPnP/1.0
01-21 19:06:20.060 24408-24459/org.mythtv.android D/OkHttp: <-- END HTTP
01-21 19:06:20.061 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : cacheResponse - Response{protocol=http/1.1, code=200, message=OK, url=http://mc0.home.local:6544/Dvr/GetSavedBookmark?RecordedId=7805&OffsetType=Duration}
01-21 19:06:20.061 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : networkResponse - Response{protocol=http/1.1, code=304, message=Not Modified, url=http://mc0.home.local:6544/Dvr/GetSavedBookmark?RecordedId=7805&OffsetType=Duration}
01-21 19:06:20.061 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : response=okhttp3.ResponseBody$BomAwareReader@64926bf
01-21 19:06:20.061 24408-24459/org.mythtv.android D/DvrApiImpl: getBookmark.call : retrieved status update
01-21 19:06:20.062 24408-24459/org.mythtv.android I/LongJsonMapper: transformLong : longJsonResponse=okhttp3.ResponseBody$BomAwareReader@64926bf
01-21 19:06:20.066 24408-24459/org.mythtv.android D/DvrDataRepository: recordedProgram : programEntity=ProgramEntity{startTime=2017-01-22T01:06:24.000Z, endTime=2017-01-22T01:06:24.000Z, title='', subTitle='', category='', catType='', repeat=false, videoProps=0, audioProps=0, subProps=0, seriesId='', programId='', stars=0.0, fileSize=0, lastModified=2017-01-22T01:06:24.000Z, programFlags=0, fileName='', hostName='', airdate=null, description='', inetref='', season=0, episode=0, totalEpisodes=0, channel=ChannelInfoEntity{chanId=0, chanNum='', callSign='', iconURL='', channelName='', mplexId=0, serviceId=0, aTSCMajorChan=0, aTSCMinorChan=0, format='', frequencyId='', fineTune=0, chanFilters='', sourceId=0, inputId=0, commFree=false, useEIT=false, visible=true, xMLTVID='', defaultAuth='', programs=[]}, recording=RecordingInfoEntity{recordedId=0, status=0, priority=0, startTs=null, endTs=null, recordId=0, recGroup='', playGroup='', storageGroup='', recType=0, dupInType=1, dupMethod=1, encoderId=0, encoderName='', profile=''}, artwork=ArtworkEntity{artworkInfos=[]}, cast=CastEntity{castMembers=[]}, liveStreamInfoEntity=LiveStreamInfoEntity{id=94, width=640, height=368, bitrate=800000, audioBitrate=64000, segmentSize=4, maxSegments=0, startSegment=1, currentSegment=480, segmentCount=480, percentComplete=100, created=2016-05-13T01:25:11.000Z, lastModified=2016-05-13T01:25:11.000Z, relativeUrl='/StorageGroup/Streaming/2632_20160511030000.ts.640x368_800kV_64kA.m3u8', fullUrl='http://fdf9:a66:2cd8:1::204:6544/StorageGroup/Streaming/2632_20160511030000.ts.640x368_800kV_64kA.m3u8', statusString='Completed', statusInt=3, statusMessage='Transcoding Completed', sourceFile='/srv/mythtv-3/recordings/2632_20160511030000.ts', sourceHost='mc0', sourceWidth=1920, sourceHeight=1088, audioOnlyBitrate=64000}, bookmark=140638167511878}
01-21 19:06:20.066 24408-24459/org.mythtv.android D/DvrApiImpl: getBookmark.call : exit
01-21 19:06:20.154 24408-24408/org.mythtv.android D/MediaItemDetailsPresenter: updateDetails : enter
01-21 19:06:20.154 24408-24408/org.mythtv.android D/MediaItemDetailsPresenter: showDetailsInView : enter
01-21 19:06:20.154 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: renderMediaItem : enter
01-21 19:06:20.154 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: renderMediaItem : mediaItem is not null, mediaItemModel=MediaItemModel{id=0, media=null, title='', subTitle='', description='', startDate=2017-01-22T01:06:24.000Z, programFlags=0, season=0, episode=0, studio='', castMembers='null', characters='null', url='null', fanartUrl='null', coverartUrl='null', bannerUrl='null', previewUrl='null', contentType='null', duration=0, percentComplete=0, recording=false, liveStreamId=94, createHttpLiveStreamUrl='/Content/AddRecordingLiveStream?RecordedId=0&Width=960', removeHttpLiveStreamUrl='/Content/RemoveLiveStream?Id=94', getHttpLiveStreamUrl='null', watched=false, markWatchedUrl='null', updateSavedBookmarkUrl='/Dvr/SetSavedBookmark?RecordedId=01', bookmark=140638167511878, validationErrors=[]}
01-21 19:06:20.154 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: onMediaItemLoaded : enter
01-21 19:06:20.154 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: loadBackdrop : enter
01-21 19:06:20.155 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: loadBackdrop : exit, media not set
01-21 19:06:20.155 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: onMediaItemLoaded : exit
01-21 19:06:20.160 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: renderMediaItem : exit
01-21 19:06:20.160 24408-24408/org.mythtv.android D/MediaItemDetailsPresenter: showDetailsInView : exit
01-21 19:06:20.160 24408-24408/org.mythtv.android D/MediaItemDetailsPresenter: updateDetails : exit
01-21 19:06:20.161 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: hideLoading : enter
01-21 19:06:20.161 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: hideLoading : exit
01-21 19:06:20.162 24408-25388/org.mythtv.android E/AutoLoadImageView: download : malformedexception
                                                                       java.net.MalformedURLException: java.lang.NumberFormatException: Invalid int: "6544null"
                                                                           at java.net.URL.<init>(URL.java:190)
                                                                           at java.net.URL.<init>(URL.java:125)
                                                                           at org.mythtv.android.presentation.view.component.AutoLoadImageView$ImageDownloader.download(AutoLoadImageView.java:330)
                                                                           at org.mythtv.android.presentation.view.component.AutoLoadImageView$1.run(AutoLoadImageView.java:134)
01-21 19:06:20.190 24408-24460/org.mythtv.android D/OpenGLRenderer: endAllStagingAnimators on 0x96e33000 (RippleDrawable) with handle 0x98784520
01-21 19:06:20.195 24408-24408/org.mythtv.android V/MediaItemDetailsFragment: onTick : enter
01-21 19:06:20.197 24408-24408/org.mythtv.android V/MediaItemDetailsFragment: onTick : enter
01-21 19:06:20.198 24408-25389/org.mythtv.android D/MediaItemDetailsFragment: doInBackground : mediaItemModel=MediaItemModel{id=0, media=null, title='', subTitle='', description='', startDate=2017-01-22T01:06:24.000Z, programFlags=0, season=0, episode=0, studio='', castMembers='null', characters='null', url='null', fanartUrl='null', coverartUrl='null', bannerUrl='null', previewUrl='null', contentType='null', duration=0, percentComplete=0, recording=false, liveStreamId=94, createHttpLiveStreamUrl='/Content/AddRecordingLiveStream?RecordedId=0&Width=960', removeHttpLiveStreamUrl='/Content/RemoveLiveStream?Id=94', getHttpLiveStreamUrl='null', watched=false, markWatchedUrl='null', updateSavedBookmarkUrl='/Dvr/SetSavedBookmark?RecordedId=01', bookmark=140638167511878, validationErrors=[]}
01-21 19:06:20.201 24408-25389/org.mythtv.android E/UncaughtException: java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                           at android.os.AsyncTask$3.done(AsyncTask.java:309)
                                                                           at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                                                                           at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                                                                           at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                           at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                                                                           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                           at java.lang.Thread.run(Thread.java:818)
                                                                        Caused by: java.lang.IllegalArgumentException: unexpected url: http://mc0.home.local:6544null
                                                                           at okhttp3.Request$Builder.url(Request.java:142)
                                                                           at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment$GetLiveStreamTask.doInBackground(MediaItemDetailsFragment.java:745)
                                                                           at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment$GetLiveStreamTask.doInBackground(MediaItemDetailsFragment.java:738)
                                                                           at android.os.AsyncTask$2.call(AsyncTask.java:295)
                                                                           at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                           at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                                                                           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                                                                           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                                                                           at java.lang.Thread.run(Thread.java:818) 
01-21 19:06:20.203 24408-25241/org.mythtv.android D/FA: Event not sent since app measurement is disabled
01-21 19:06:20.471 24408-24408/org.mythtv.android D/SeriesListActivity: onSaveInstanceState : enter
01-21 19:06:20.471 24408-24408/org.mythtv.android D/SeriesListActivity: onSaveInstanceState : outState is not null
01-21 19:06:20.471 24408-24408/org.mythtv.android D/SeriesListActivity: onSaveInstanceState : saving titleRegEx
01-21 19:06:20.472 24408-24408/org.mythtv.android D/SeriesListActivity: onSaveInstanceState : exit
                                                                        
                                                                        --------- beginning of crash
01-21 19:06:20.508 24408-25389/org.mythtv.android E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
                                                                    Process: org.mythtv.android, PID: 24408
                                                                    java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                        at android.os.AsyncTask$3.done(AsyncTask.java:309)
                                                                        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                                                                        at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                                                                        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                                                                        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                        at java.lang.Thread.run(Thread.java:818)
                                                                     Caused by: java.lang.IllegalArgumentException: unexpected url: http://mc0.home.local:6544null
                                                                        at okhttp3.Request$Builder.url(Request.java:142)
                                                                        at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment$GetLiveStreamTask.doInBackground(MediaItemDetailsFragment.java:745)
                                                                        at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment$GetLiveStreamTask.doInBackground(MediaItemDetailsFragment.java:738)
                                                                        at android.os.AsyncTask$2.call(AsyncTask.java:295)
                                                                        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                                                                        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                                                                        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                                                                        at java.lang.Thread.run(Thread.java:818) 
01-21 19:06:20.531 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onPause : enter
01-21 19:06:20.531 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onPause : exit
01-21 19:06:20.532 24408-25241/org.mythtv.android V/FA: Screen exposed for less than 1000 ms. Event not sent. time: 581
01-21 19:06:20.533 24408-25241/org.mythtv.android V/FA: Activity paused, time: 347913739
01-21 19:06:20.548 24408-24408/org.mythtv.android D/MediaItemListFragment: onResume : enter
01-21 19:06:20.548 24408-24408/org.mythtv.android D/MediaItemListFragment: loadMediaItemList : enter
01-21 19:06:20.548 24408-24408/org.mythtv.android D/MediaItemListFragment: showLoading : enter
01-21 19:06:20.549 24408-24408/org.mythtv.android D/MediaItemListFragment: showLoading : exit
01-21 19:06:20.549 24408-25241/org.mythtv.android V/FA: Activity resumed, time: 347913755
01-21 19:06:20.549 24408-24408/org.mythtv.android D/DvrDataRepository: recordedPrograms : enter
01-21 19:06:20.549 24408-24408/org.mythtv.android D/DvrDataRepository: recordedPrograms : descending=false, startIndex=-1, count=-1, titleRegEx=Yes Man, recGroup=null, storageGroup=null
01-21 19:06:20.549 24408-24408/org.mythtv.android D/DvrDataStoreFactory: createMasterBackendDataStore : enter
01-21 19:06:20.549 24408-24408/org.mythtv.android D/DvrDataStoreFactory: createMasterBackendDataStore : exit
01-21 19:06:20.549 24408-24408/org.mythtv.android D/ContentDataStoreFactory: createMasterBackendDataStore : enter
01-21 19:06:20.549 24408-24408/org.mythtv.android D/ContentDataStoreFactory: createMasterBackendDataStore : exit
01-21 19:06:20.549 24408-24408/org.mythtv.android D/MasterBackendDvrDataStore: recordedProgramEntityList : enter
01-21 19:06:20.549 24408-24408/org.mythtv.android D/MasterBackendDvrDataStore: recordedProgramEntityList : descending=false, startIndex=-1, count=-1, titleRegEx=Yes Man, recGroup=null, storageGroup=null
01-21 19:06:20.549 24408-24408/org.mythtv.android D/MasterBackendDvrDataStore: titleInfoEntityList : enter
01-21 19:06:20.549 24408-24408/org.mythtv.android D/DvrApiImpl: recordedProgramEntityList : enter
01-21 19:06:20.549 24408-24408/org.mythtv.android D/DvrApiImpl: recordedProgramEntityList : exit
01-21 19:06:20.549 24408-24408/org.mythtv.android D/MasterBackendContentDataStore: liveStreamInfoEntityList : enter
01-21 19:06:20.549 24408-24408/org.mythtv.android D/MasterBackendContentDataStore: liveStreamInfoEntityList : exit
01-21 19:06:20.549 24408-24408/org.mythtv.android D/MediaItemListFragment: loadMediaItemList : exit
01-21 19:06:20.549 24408-24408/org.mythtv.android D/MediaItemListFragment: onResume : exit
01-21 19:06:20.551 24408-24458/org.mythtv.android D/DvrApiImpl: recordedProgramEntityList.call : enter
01-21 19:06:20.551 24408-24458/org.mythtv.android D/DvrApiImpl: recordedProgramEntityList.call : network is connected
01-21 19:06:20.551 24408-24458/org.mythtv.android D/DvrApiImpl: getMasterBackendUrl : masterBackend=http://mc0.home.local:6544
01-21 19:06:20.552 24408-24458/org.mythtv.android I/DvrApiImpl: getRecordedProgramEntitiesFromApi : url=http://mc0.home.local:6544/Dvr/GetRecordedList?Descending=false&TitleRegEx=Yes+Man
01-21 19:06:20.552 24408-24458/org.mythtv.android D/ApiConnection: connectToApi : url=http://mc0.home.local:6544/Dvr/GetRecordedList?Descending=false&TitleRegEx=Yes+Man
01-21 19:06:20.552 24408-24458/org.mythtv.android D/OkHttp: --> GET http://mc0.home.local:6544/Dvr/GetRecordedList?Descending=false&TitleRegEx=Yes+Man http/1.1
01-21 19:06:20.552 24408-24458/org.mythtv.android D/OkHttp: Accept: application/json
01-21 19:06:20.552 24408-24458/org.mythtv.android D/OkHttp: --> END GET
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: <-- 200 OK http://mc0.home.local:6544/Dvr/GetRecordedList?Descending=false&TitleRegEx=Yes+Man (32ms)
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: Connection: Keep-Alive
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: Content-Language: en-us
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: Content-Type: application/json
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: Keep-Alive: timeout=10
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: transferMode.dlna.org: Interactive
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: Accept-Ranges: bytes
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: Cache-Control: no-cache="Ext", max-age = 7200
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: Date: Sun, 22 Jan 2017 01:06:24 GMT
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: ETag: "8b382a122e62b589725cba6d4b96d3a0c01027b7"
01-21 19:06:20.586 24408-24458/org.mythtv.android D/OkHttp: Server: MythTV/29-pre-194-g2a1ccc0 Linux/3.13.0-107-generic UPnP/1.0
01-21 19:06:20.586 24408-24458/org.mythtv.android D/OkHttp: <-- END HTTP
01-21 19:06:20.586 24408-24458/org.mythtv.android D/ApiConnection: connectToApi : cacheResponse - Response{protocol=http/1.1, code=200, message=OK, url=http://mc0.home.local:6544/Dvr/GetRecordedList?Descending=false&TitleRegEx=Yes+Man}
01-21 19:06:20.586 24408-24458/org.mythtv.android D/ApiConnection: connectToApi : networkResponse - Response{protocol=http/1.1, code=304, message=Not Modified, url=http://mc0.home.local:6544/Dvr/GetRecordedList?Descending=false&TitleRegEx=Yes+Man}
01-21 19:06:20.586 24408-24458/org.mythtv.android D/DvrApiImpl: recordedProgramEntityList.call : retrieved program entities
01-21 19:06:20.592 24408-24458/org.mythtv.android D/SearchDataStoreFactory: createWriteSearchDataStore : enter
01-21 19:06:20.592 24408-24458/org.mythtv.android D/SearchDataStoreFactory: createWriteSearchDataStore : exit
01-21 19:06:20.594 24408-24458/org.mythtv.android D/DbSearchDataStore: refreshRecordedProgramData : enter
01-21 19:06:20.594 24408-24458/org.mythtv.android D/DbSearchDataStore: refreshRecordedProgramData : mediaItemEntityCollection is not empty
01-21 19:06:20.601 24408-24458/org.mythtv.android D/DbSearchDataStore: refreshRecordedPrograms : deleting old recordings for title=Yes Man
01-21 19:06:20.671 24408-24458/org.mythtv.android D/DbSearchDataStore: refreshRecordedProgramData : exit
01-21 19:06:20.671 24408-24458/org.mythtv.android D/DvrApiImpl: recordedProgramEntityList.call : exit
01-21 19:06:20.671 24408-24458/org.mythtv.android D/ContentApiImpl: LiveStreamInfoEntityList.call : enter
01-21 19:06:20.672 24408-24458/org.mythtv.android D/ContentApiImpl: LiveStreamInfoEntityList.call : network is connected
01-21 19:06:20.674 24408-24458/org.mythtv.android D/ContentApiImpl: getMasterBackendUrl : masterBackend=http://mc0.home.local:6544
01-21 19:06:20.674 24408-24458/org.mythtv.android D/ContentApiImpl: getLiveStreamInfoEntitiesFromApi : url=http://mc0.home.local:6544/Content/GetLiveStreamList
01-21 19:06:20.674 24408-24458/org.mythtv.android D/ApiConnection: connectToApi : url=http://mc0.home.local:6544/Content/GetLiveStreamList
01-21 19:06:20.674 24408-24458/org.mythtv.android D/OkHttp: --> GET http://mc0.home.local:6544/Content/GetLiveStreamList http/1.1
01-21 19:06:20.674 24408-24458/org.mythtv.android D/OkHttp: Accept: application/json
01-21 19:06:20.675 24408-24458/org.mythtv.android D/OkHttp: --> END GET
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: <-- 200 OK http://mc0.home.local:6544/Content/GetLiveStreamList (27ms)
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: Connection: Keep-Alive
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: Content-Language: en-us
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: Content-Type: application/json
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: Keep-Alive: timeout=10
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: transferMode.dlna.org: Interactive
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: Accept-Ranges: bytes
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: Cache-Control: no-cache="Ext", max-age = 7200
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: Date: Sun, 22 Jan 2017 01:06:24 GMT
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: ETag: "5a57da9517b5fef7bcb64e5f630d5d04410b1be1"
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: Server: MythTV/29-pre-194-g2a1ccc0 Linux/3.13.0-107-generic UPnP/1.0
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: <-- END HTTP
01-21 19:06:20.703 24408-24458/org.mythtv.android D/ApiConnection: connectToApi : cacheResponse - Response{protocol=http/1.1, code=200, message=OK, url=http://mc0.home.local:6544/Content/GetLiveStreamList}
01-21 19:06:20.703 24408-24458/org.mythtv.android D/ApiConnection: connectToApi : networkResponse - Response{protocol=http/1.1, code=304, message=Not Modified, url=http://mc0.home.local:6544/Content/GetLiveStreamList}
01-21 19:06:20.703 24408-24458/org.mythtv.android D/ContentApiImpl: LiveStreamInfoEntityList.call : retrieved LiveStream info entities
01-21 19:06:20.711 24408-24458/org.mythtv.android D/ContentApiImpl: LiveStreamInfoEntityList.call : exit
01-21 19:06:20.711 24408-24408/org.mythtv.android D/MediaItemListFragment: renderMediaItemList : enter
01-21 19:06:20.711 24408-24408/org.mythtv.android D/MediaItemListFragment: renderMediaItemList : exit
01-21 19:06:20.711 24408-24408/org.mythtv.android D/MediaItemListFragment: hideLoading : enter
01-21 19:06:20.711 24408-24408/org.mythtv.android D/MediaItemListFragment: hideLoading : exit
01-21 19:06:20.723 24408-24408/org.mythtv.android I/MediaItemsAdapter: onBindViewHolder : mediaItemModel=MediaItemModel{id=7805, media=PROGRAM, title='Yes Man', subTitle='', description='After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.', startDate=2016-12-01T19:00:00.000Z, programFlags=0, season=0, episode=0, studio='AMC', castMembers='null', characters='null', url='/Content/GetFile?FileName=2667_20161201190000.ts', fanartUrl='/Content/GetImageFile?StorageGroup=Fanart&FileName=/tmdb3.py_10201_fanart.jpg', coverartUrl='/Content/GetImageFile?StorageGroup=Coverart&FileName=/tmdb3.py_10201_coverart.jpg', bannerUrl='null', previewUrl='/Content/GetPreviewImage?RecordedId=7805', contentType='video/mp2t', duration=-73656, percentComplete=0, recording=false, liveStreamId=0, createHttpLiveStreamUrl='/Content/AddRecordingLiveStream?RecordedId=7805&Width=960', removeHttpLiveStreamUrl='null', getHttpLiveStreamUrl='null', watched=true, markWatchedUrl='/Dvr/UpdateRecordedWatchedStatus', updateSavedBookmarkUrl='/Dvr/SetSavedBookmark?RecordedId=78051', bookmark=0, validationErrors=[]}
01-21 19:06:20.962 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onDestroyView : enter
01-21 19:06:20.962 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onDestroyView : exit
01-21 19:06:20.963 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onDestroy : enter
01-21 19:06:20.963 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onDestroy : exit
01-21 19:06:25.552 24408-25241/org.mythtv.android V/FA: Inactivity, disconnecting from the service
Contributor

billmeek commented Jan 22, 2017

Getting the "Unforunately..." message with a NULL starttime on the backend.

Whole LogCat following the press on the episode:

1-21 19:06:19.845 24408-24408/org.mythtv.android I/MediaItemListFragment: onItemClicked : mediaItemModel=MediaItemModel{id=7805, media=PROGRAM, title='Yes Man', subTitle='', description='After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.', startDate=2016-12-01T19:00:00.000Z, programFlags=0, season=0, episode=0, studio='AMC', castMembers='null', characters='null', url='/Content/GetFile?FileName=2667_20161201190000.ts', fanartUrl='/Content/GetImageFile?StorageGroup=Fanart&FileName=/tmdb3.py_10201_fanart.jpg', coverartUrl='/Content/GetImageFile?StorageGroup=Coverart&FileName=/tmdb3.py_10201_coverart.jpg', bannerUrl='null', previewUrl='/Content/GetPreviewImage?RecordedId=7805', contentType='video/mp2t', duration=-73656, percentComplete=0, recording=false, liveStreamId=0, createHttpLiveStreamUrl='/Content/AddRecordingLiveStream?RecordedId=7805&Width=960', removeHttpLiveStreamUrl='null', getHttpLiveStreamUrl='null', watched=true, markWatchedUrl='/Dvr/UpdateRecordedWatchedStatus', updateSavedBookmarkUrl='/Dvr/SetSavedBookmark?RecordedId=78051', bookmark=0, validationErrors=[]}
01-21 19:06:19.845 24408-24408/org.mythtv.android I/MediaItemListPresenter: onMediaItemClicked : mediaItemModel=MediaItemModel{id=7805, media=PROGRAM, title='Yes Man', subTitle='', description='After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.', startDate=2016-12-01T19:00:00.000Z, programFlags=0, season=0, episode=0, studio='AMC', castMembers='null', characters='null', url='/Content/GetFile?FileName=2667_20161201190000.ts', fanartUrl='/Content/GetImageFile?StorageGroup=Fanart&FileName=/tmdb3.py_10201_fanart.jpg', coverartUrl='/Content/GetImageFile?StorageGroup=Coverart&FileName=/tmdb3.py_10201_coverart.jpg', bannerUrl='null', previewUrl='/Content/GetPreviewImage?RecordedId=7805', contentType='video/mp2t', duration=-73656, percentComplete=0, recording=false, liveStreamId=0, createHttpLiveStreamUrl='/Content/AddRecordingLiveStream?RecordedId=7805&Width=960', removeHttpLiveStreamUrl='null', getHttpLiveStreamUrl='null', watched=true, markWatchedUrl='/Dvr/UpdateRecordedWatchedStatus', updateSavedBookmarkUrl='/Dvr/SetSavedBookmark?RecordedId=78051', bookmark=0, validationErrors=[]}
01-21 19:06:19.845 24408-24408/org.mythtv.android D/MediaItemListFragment: viewMediaItem : enter
01-21 19:06:19.845 24408-24408/org.mythtv.android D/MediaItemListFragment: viewMediaItem : mediaItemModel=MediaItemModel{id=7805, media=PROGRAM, title='Yes Man', subTitle='', description='After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.', startDate=2016-12-01T19:00:00.000Z, programFlags=0, season=0, episode=0, studio='AMC', castMembers='null', characters='null', url='/Content/GetFile?FileName=2667_20161201190000.ts', fanartUrl='/Content/GetImageFile?StorageGroup=Fanart&FileName=/tmdb3.py_10201_fanart.jpg', coverartUrl='/Content/GetImageFile?StorageGroup=Coverart&FileName=/tmdb3.py_10201_coverart.jpg', bannerUrl='null', previewUrl='/Content/GetPreviewImage?RecordedId=7805', contentType='video/mp2t', duration=-73656, percentComplete=0, recording=false, liveStreamId=0, createHttpLiveStreamUrl='/Content/AddRecordingLiveStream?RecordedId=7805&Width=960', removeHttpLiveStreamUrl='null', getHttpLiveStreamUrl='null', watched=true, markWatchedUrl='/Dvr/UpdateRecordedWatchedStatus', updateSavedBookmarkUrl='/Dvr/SetSavedBookmark?RecordedId=78051', bookmark=0, validationErrors=[]}
01-21 19:06:19.845 24408-24408/org.mythtv.android D/SeriesListActivity: onMediaItemClicked : enter
01-21 19:06:19.845 24408-24408/org.mythtv.android D/SeriesListActivity: onMediaItemClicked : mediaItemModel=MediaItemModel{id=7805, media=PROGRAM, title='Yes Man', subTitle='', description='After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.', startDate=2016-12-01T19:00:00.000Z, programFlags=0, season=0, episode=0, studio='AMC', castMembers='null', characters='null', url='/Content/GetFile?FileName=2667_20161201190000.ts', fanartUrl='/Content/GetImageFile?StorageGroup=Fanart&FileName=/tmdb3.py_10201_fanart.jpg', coverartUrl='/Content/GetImageFile?StorageGroup=Coverart&FileName=/tmdb3.py_10201_coverart.jpg', bannerUrl='null', previewUrl='/Content/GetPreviewImage?RecordedId=7805', contentType='video/mp2t', duration=-73656, percentComplete=0, recording=false, liveStreamId=0, createHttpLiveStreamUrl='/Content/AddRecordingLiveStream?RecordedId=7805&Width=960', removeHttpLiveStreamUrl='null', getHttpLiveStreamUrl='null', watched=true, markWatchedUrl='/Dvr/UpdateRecordedWatchedStatus', updateSavedBookmarkUrl='/Dvr/SetSavedBookmark?RecordedId=78051', bookmark=0, validationErrors=[]}
01-21 19:06:19.845 24408-24408/org.mythtv.android D/PhoneNavigator: navigateToMediaItem : enter
01-21 19:06:19.845 24408-24408/org.mythtv.android D/PhoneNavigator: navigateToMediaItem : context != null
                                                                    
                                                                    --------- beginning of system
01-21 19:06:19.856 24408-24408/org.mythtv.android D/PhoneNavigator: navigateToMediaItem : exit
01-21 19:06:19.856 24408-24408/org.mythtv.android D/SeriesListActivity: onMediaItemClicked : exit
01-21 19:06:19.856 24408-24408/org.mythtv.android D/MediaItemListFragment: viewProgram : exit
01-21 19:06:19.856 24408-24408/org.mythtv.android D/MediaItemListFragment: onPause : enter
01-21 19:06:19.856 24408-24408/org.mythtv.android D/MediaItemListFragment: onPause : exit
01-21 19:06:19.857 24408-25241/org.mythtv.android V/FA: Recording user engagement, ms: 15143
01-21 19:06:19.857 24408-25241/org.mythtv.android V/FA: Using measurement service
01-21 19:06:19.857 24408-25241/org.mythtv.android V/FA: Connecting to remote service
01-21 19:06:19.867 24408-25241/org.mythtv.android V/FA: Activity paused, time: 347913064
01-21 19:06:19.870 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: onCreate : enter
01-21 19:06:19.873 24408-24408/org.mythtv.android V/FA: onActivityCreated
01-21 19:06:19.873 24408-25241/org.mythtv.android D/FA: Event not sent since app measurement is disabled
01-21 19:06:19.927 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: initializeActivity : enter
01-21 19:06:19.927 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: initializeActivity : savedInstanceState is null
01-21 19:06:19.927 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: initializeActivity : extras != null
01-21 19:06:19.928 24408-24408/org.mythtv.android V/AbstractBasePhoneActivity: addFragment : enter
01-21 19:06:19.929 24408-24408/org.mythtv.android V/AbstractBasePhoneActivity: addFragment : exit
01-21 19:06:19.929 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: initializeActivity : exit
01-21 19:06:19.929 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: initializeInjector : enter
01-21 19:06:19.929 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: initializeInjector : exit
01-21 19:06:19.929 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: onCreate : exit
01-21 19:06:19.930 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onAttach : enter
01-21 19:06:19.930 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onAttach : exit
01-21 19:06:19.930 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onCreateView : enter
01-21 19:06:19.945 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onCreateView : exit
01-21 19:06:19.946 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onActivityCreated : enter
01-21 19:06:19.946 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: initialize : enter
01-21 19:06:19.946 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: getComponent : enter
01-21 19:06:19.946 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: getComponent : exit
01-21 19:06:19.947 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: loadMediaItemDetails : enter
01-21 19:06:19.947 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: loadMediaItemDetails : presenter is not null
01-21 19:06:19.947 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: hideRetry : enter
01-21 19:06:19.947 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: hideRetry : exit
01-21 19:06:19.947 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: showLoading : enter
01-21 19:06:19.947 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: showLoading : exit
01-21 19:06:19.947 24408-24408/org.mythtv.android D/MediaItemDetailsPresenter: getDetails : enter
01-21 19:06:19.947 24408-24408/org.mythtv.android D/DvrDataRepository: recordedProgram : enter
01-21 19:06:19.948 24408-24408/org.mythtv.android D/DvrDataRepository: recordedProgram : recordedId=7805
01-21 19:06:19.948 24408-24408/org.mythtv.android D/DvrDataStoreFactory: createMasterBackendDataStore : enter
01-21 19:06:19.948 24408-24408/org.mythtv.android D/DvrDataStoreFactory: createMasterBackendDataStore : exit
01-21 19:06:19.948 24408-24408/org.mythtv.android D/ContentDataStoreFactory: createMasterBackendDataStore : enter
01-21 19:06:19.948 24408-24408/org.mythtv.android D/ContentDataStoreFactory: createMasterBackendDataStore : exit
01-21 19:06:19.948 24408-24408/org.mythtv.android D/MasterBackendDvrDataStore: recordedProgramEntityDetails : enter
01-21 19:06:19.948 24408-24408/org.mythtv.android D/MasterBackendDvrDataStore: recordedProgramEntityList : recordedId=7805
01-21 19:06:19.949 24408-24408/org.mythtv.android D/MasterBackendDvrDataStore: getBookmark : enter
01-21 19:06:19.949 24408-24408/org.mythtv.android D/MasterBackendDvrDataStore: getBookmark : recordedId=7805, offsetType=Duration
01-21 19:06:19.950 24408-24408/org.mythtv.android D/MediaItemDetailsPresenter: getDetails : exit
01-21 19:06:19.950 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: loadMediaItemDetails : exit
01-21 19:06:19.950 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: initialize : exit
01-21 19:06:19.950 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onActivityCreated : exit
01-21 19:06:19.951 24408-24459/org.mythtv.android D/DvrApiImpl: getMasterBackendUrl : masterBackend=http://mc0.home.local:6544
01-21 19:06:19.951 24408-24459/org.mythtv.android I/DvrApiImpl: getRecordedProgramDetailsFromApi : apiUrl=http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805
01-21 19:06:19.951 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : url=http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805
01-21 19:06:19.951 24408-24459/org.mythtv.android D/OkHttp: --> GET http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805 http/1.1
01-21 19:06:19.951 24408-24459/org.mythtv.android D/OkHttp: Accept: application/json
01-21 19:06:19.951 24408-24459/org.mythtv.android D/OkHttp: --> END GET
01-21 19:06:19.951 24408-25241/org.mythtv.android V/FA: Using measurement service
01-21 19:06:19.951 24408-25241/org.mythtv.android V/FA: Connection attempt already in progress
01-21 19:06:19.952 24408-25241/org.mythtv.android V/FA: Activity resumed, time: 347913158
01-21 19:06:19.952 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onResume : enter
01-21 19:06:19.952 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onResume : exit
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: <-- 200 OK http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805 (24ms)
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: Accept-Ranges: bytes
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: Cache-Control: no-cache="Ext", max-age = 7200
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: Connection: Keep-Alive
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: Content-Language: en-us
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: Content-Type: application/json
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: Date: Sun, 22 Jan 2017 01:06:24 GMT
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: ETag: "744ac73611e8e93965bec3ee6142a9c0caf64442"
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: Keep-Alive: timeout=10
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: Server: MythTV/29-pre-194-g2a1ccc0 Linux/3.13.0-107-generic UPnP/1.0
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: transferMode.dlna.org: Interactive
01-21 19:06:19.976 24408-24459/org.mythtv.android D/OkHttp: <-- END HTTP
01-21 19:06:19.976 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : cacheResponse - Response{protocol=http/1.1, code=200, message=OK, url=http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805}
01-21 19:06:19.977 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : networkResponse - Response{protocol=http/1.1, code=200, message=OK, url=http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805}
01-21 19:06:19.986 24408-24459/org.mythtv.android D/DvrApiImpl: getMasterBackendUrl : masterBackend=http://mc0.home.local:6544
01-21 19:06:19.987 24408-24459/org.mythtv.android I/DvrApiImpl: getRecordedProgramDetailsFromApi : apiUrl=http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805
01-21 19:06:19.989 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : url=http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805
01-21 19:06:19.989 24408-24459/org.mythtv.android D/OkHttp: --> GET http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805 http/1.1
01-21 19:06:19.989 24408-24459/org.mythtv.android D/OkHttp: Accept: application/json
01-21 19:06:19.989 24408-24459/org.mythtv.android D/OkHttp: --> END GET
01-21 19:06:20.001 24408-24459/org.mythtv.android D/OkHttp: <-- 200 OK http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805 (11ms)
01-21 19:06:20.001 24408-24459/org.mythtv.android D/OkHttp: Connection: Keep-Alive
01-21 19:06:20.001 24408-24459/org.mythtv.android D/OkHttp: Content-Language: en-us
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: Content-Type: application/json
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: Keep-Alive: timeout=10
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: transferMode.dlna.org: Interactive
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: Accept-Ranges: bytes
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: Cache-Control: no-cache="Ext", max-age = 7200
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: Date: Sun, 22 Jan 2017 01:06:24 GMT
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: ETag: "744ac73611e8e93965bec3ee6142a9c0caf64442"
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: Server: MythTV/29-pre-194-g2a1ccc0 Linux/3.13.0-107-generic UPnP/1.0
01-21 19:06:20.002 24408-24459/org.mythtv.android D/OkHttp: <-- END HTTP
01-21 19:06:20.002 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : cacheResponse - Response{protocol=http/1.1, code=200, message=OK, url=http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805}
01-21 19:06:20.003 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : networkResponse - Response{protocol=http/1.1, code=304, message=Not Modified, url=http://mc0.home.local:6544/Dvr/GetRecorded?RecordedId=7805}
01-21 19:06:20.007 24408-24459/org.mythtv.android D/MasterBackendContentDataStore: liveStreamInfoEntityList : enter
01-21 19:06:20.007 24408-24459/org.mythtv.android D/MasterBackendContentDataStore: liveStreamInfoEntityList : exit
01-21 19:06:20.007 24408-24459/org.mythtv.android D/ContentApiImpl: LiveStreamInfoEntityList.call : enter
01-21 19:06:20.008 24408-24459/org.mythtv.android D/ContentApiImpl: LiveStreamInfoEntityList.call : network is connected
01-21 19:06:20.008 24408-24459/org.mythtv.android D/ContentApiImpl: getMasterBackendUrl : masterBackend=http://mc0.home.local:6544
01-21 19:06:20.008 24408-24459/org.mythtv.android D/ContentApiImpl: getLiveStreamInfoEntitiesFromApi : url=http://mc0.home.local:6544/Content/GetLiveStreamList
01-21 19:06:20.009 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : url=http://mc0.home.local:6544/Content/GetLiveStreamList
01-21 19:06:20.009 24408-24459/org.mythtv.android D/OkHttp: --> GET http://mc0.home.local:6544/Content/GetLiveStreamList http/1.1
01-21 19:06:20.009 24408-24459/org.mythtv.android D/OkHttp: Accept: application/json
01-21 19:06:20.009 24408-24459/org.mythtv.android D/OkHttp: --> END GET
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: <-- 200 OK http://mc0.home.local:6544/Content/GetLiveStreamList (24ms)
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: Connection: Keep-Alive
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: Content-Language: en-us
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: Content-Type: application/json
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: Keep-Alive: timeout=10
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: transferMode.dlna.org: Interactive
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: Accept-Ranges: bytes
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: Cache-Control: no-cache="Ext", max-age = 7200
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: Date: Sun, 22 Jan 2017 01:06:24 GMT
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: ETag: "5a57da9517b5fef7bcb64e5f630d5d04410b1be1"
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: Server: MythTV/29-pre-194-g2a1ccc0 Linux/3.13.0-107-generic UPnP/1.0
01-21 19:06:20.034 24408-24459/org.mythtv.android D/OkHttp: <-- END HTTP
01-21 19:06:20.035 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : cacheResponse - Response{protocol=http/1.1, code=200, message=OK, url=http://mc0.home.local:6544/Content/GetLiveStreamList}
01-21 19:06:20.035 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : networkResponse - Response{protocol=http/1.1, code=304, message=Not Modified, url=http://mc0.home.local:6544/Content/GetLiveStreamList}
01-21 19:06:20.035 24408-24459/org.mythtv.android D/ContentApiImpl: LiveStreamInfoEntityList.call : retrieved LiveStream info entities
01-21 19:06:20.042 24408-24459/org.mythtv.android D/ContentApiImpl: LiveStreamInfoEntityList.call : exit
01-21 19:06:20.042 24408-24459/org.mythtv.android D/DvrApiImpl: getBookmark.call : enter
01-21 19:06:20.043 24408-24459/org.mythtv.android D/DvrApiImpl: getBookmark.call : network is connected
01-21 19:06:20.043 24408-24459/org.mythtv.android D/DvrApiImpl: getMasterBackendUrl : masterBackend=http://mc0.home.local:6544
01-21 19:06:20.044 24408-24459/org.mythtv.android I/DvrApiImpl: getBookmarkFromApi : apiUrl=http://mc0.home.local:6544/Dvr/GetSavedBookmark?RecordedId=7805&OffsetType=Duration
01-21 19:06:20.044 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : url=http://mc0.home.local:6544/Dvr/GetSavedBookmark?RecordedId=7805&OffsetType=Duration
01-21 19:06:20.045 24408-24459/org.mythtv.android D/OkHttp: --> GET http://mc0.home.local:6544/Dvr/GetSavedBookmark?RecordedId=7805&OffsetType=Duration http/1.1
01-21 19:06:20.045 24408-24459/org.mythtv.android D/OkHttp: Accept: application/json
01-21 19:06:20.045 24408-24459/org.mythtv.android D/OkHttp: --> END GET
01-21 19:06:20.047 24408-25241/org.mythtv.android D/FA: Connected to remote service
01-21 19:06:20.047 24408-25241/org.mythtv.android V/FA: Processing queued up service tasks: 2
01-21 19:06:20.059 24408-24459/org.mythtv.android D/OkHttp: <-- 200 OK http://mc0.home.local:6544/Dvr/GetSavedBookmark?RecordedId=7805&OffsetType=Duration (14ms)
01-21 19:06:20.059 24408-24459/org.mythtv.android D/OkHttp: Connection: Keep-Alive
01-21 19:06:20.059 24408-24459/org.mythtv.android D/OkHttp: Content-Language: en-us
01-21 19:06:20.059 24408-24459/org.mythtv.android D/OkHttp: Content-Type: application/json
01-21 19:06:20.060 24408-24459/org.mythtv.android D/OkHttp: Keep-Alive: timeout=10
01-21 19:06:20.060 24408-24459/org.mythtv.android D/OkHttp: transferMode.dlna.org: Interactive
01-21 19:06:20.060 24408-24459/org.mythtv.android D/OkHttp: Accept-Ranges: bytes
01-21 19:06:20.060 24408-24459/org.mythtv.android D/OkHttp: Cache-Control: no-cache="Ext", max-age = 7200
01-21 19:06:20.060 24408-24459/org.mythtv.android D/OkHttp: Date: Sun, 22 Jan 2017 01:06:24 GMT
01-21 19:06:20.060 24408-24459/org.mythtv.android D/OkHttp: ETag: "da39a3ee5e6b4b0d3255bfef95601890afd80709"
01-21 19:06:20.060 24408-24459/org.mythtv.android D/OkHttp: Server: MythTV/29-pre-194-g2a1ccc0 Linux/3.13.0-107-generic UPnP/1.0
01-21 19:06:20.060 24408-24459/org.mythtv.android D/OkHttp: <-- END HTTP
01-21 19:06:20.061 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : cacheResponse - Response{protocol=http/1.1, code=200, message=OK, url=http://mc0.home.local:6544/Dvr/GetSavedBookmark?RecordedId=7805&OffsetType=Duration}
01-21 19:06:20.061 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : networkResponse - Response{protocol=http/1.1, code=304, message=Not Modified, url=http://mc0.home.local:6544/Dvr/GetSavedBookmark?RecordedId=7805&OffsetType=Duration}
01-21 19:06:20.061 24408-24459/org.mythtv.android D/ApiConnection: connectToApi : response=okhttp3.ResponseBody$BomAwareReader@64926bf
01-21 19:06:20.061 24408-24459/org.mythtv.android D/DvrApiImpl: getBookmark.call : retrieved status update
01-21 19:06:20.062 24408-24459/org.mythtv.android I/LongJsonMapper: transformLong : longJsonResponse=okhttp3.ResponseBody$BomAwareReader@64926bf
01-21 19:06:20.066 24408-24459/org.mythtv.android D/DvrDataRepository: recordedProgram : programEntity=ProgramEntity{startTime=2017-01-22T01:06:24.000Z, endTime=2017-01-22T01:06:24.000Z, title='', subTitle='', category='', catType='', repeat=false, videoProps=0, audioProps=0, subProps=0, seriesId='', programId='', stars=0.0, fileSize=0, lastModified=2017-01-22T01:06:24.000Z, programFlags=0, fileName='', hostName='', airdate=null, description='', inetref='', season=0, episode=0, totalEpisodes=0, channel=ChannelInfoEntity{chanId=0, chanNum='', callSign='', iconURL='', channelName='', mplexId=0, serviceId=0, aTSCMajorChan=0, aTSCMinorChan=0, format='', frequencyId='', fineTune=0, chanFilters='', sourceId=0, inputId=0, commFree=false, useEIT=false, visible=true, xMLTVID='', defaultAuth='', programs=[]}, recording=RecordingInfoEntity{recordedId=0, status=0, priority=0, startTs=null, endTs=null, recordId=0, recGroup='', playGroup='', storageGroup='', recType=0, dupInType=1, dupMethod=1, encoderId=0, encoderName='', profile=''}, artwork=ArtworkEntity{artworkInfos=[]}, cast=CastEntity{castMembers=[]}, liveStreamInfoEntity=LiveStreamInfoEntity{id=94, width=640, height=368, bitrate=800000, audioBitrate=64000, segmentSize=4, maxSegments=0, startSegment=1, currentSegment=480, segmentCount=480, percentComplete=100, created=2016-05-13T01:25:11.000Z, lastModified=2016-05-13T01:25:11.000Z, relativeUrl='/StorageGroup/Streaming/2632_20160511030000.ts.640x368_800kV_64kA.m3u8', fullUrl='http://fdf9:a66:2cd8:1::204:6544/StorageGroup/Streaming/2632_20160511030000.ts.640x368_800kV_64kA.m3u8', statusString='Completed', statusInt=3, statusMessage='Transcoding Completed', sourceFile='/srv/mythtv-3/recordings/2632_20160511030000.ts', sourceHost='mc0', sourceWidth=1920, sourceHeight=1088, audioOnlyBitrate=64000}, bookmark=140638167511878}
01-21 19:06:20.066 24408-24459/org.mythtv.android D/DvrApiImpl: getBookmark.call : exit
01-21 19:06:20.154 24408-24408/org.mythtv.android D/MediaItemDetailsPresenter: updateDetails : enter
01-21 19:06:20.154 24408-24408/org.mythtv.android D/MediaItemDetailsPresenter: showDetailsInView : enter
01-21 19:06:20.154 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: renderMediaItem : enter
01-21 19:06:20.154 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: renderMediaItem : mediaItem is not null, mediaItemModel=MediaItemModel{id=0, media=null, title='', subTitle='', description='', startDate=2017-01-22T01:06:24.000Z, programFlags=0, season=0, episode=0, studio='', castMembers='null', characters='null', url='null', fanartUrl='null', coverartUrl='null', bannerUrl='null', previewUrl='null', contentType='null', duration=0, percentComplete=0, recording=false, liveStreamId=94, createHttpLiveStreamUrl='/Content/AddRecordingLiveStream?RecordedId=0&Width=960', removeHttpLiveStreamUrl='/Content/RemoveLiveStream?Id=94', getHttpLiveStreamUrl='null', watched=false, markWatchedUrl='null', updateSavedBookmarkUrl='/Dvr/SetSavedBookmark?RecordedId=01', bookmark=140638167511878, validationErrors=[]}
01-21 19:06:20.154 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: onMediaItemLoaded : enter
01-21 19:06:20.154 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: loadBackdrop : enter
01-21 19:06:20.155 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: loadBackdrop : exit, media not set
01-21 19:06:20.155 24408-24408/org.mythtv.android D/MediaItemDetailsActivity: onMediaItemLoaded : exit
01-21 19:06:20.160 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: renderMediaItem : exit
01-21 19:06:20.160 24408-24408/org.mythtv.android D/MediaItemDetailsPresenter: showDetailsInView : exit
01-21 19:06:20.160 24408-24408/org.mythtv.android D/MediaItemDetailsPresenter: updateDetails : exit
01-21 19:06:20.161 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: hideLoading : enter
01-21 19:06:20.161 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: hideLoading : exit
01-21 19:06:20.162 24408-25388/org.mythtv.android E/AutoLoadImageView: download : malformedexception
                                                                       java.net.MalformedURLException: java.lang.NumberFormatException: Invalid int: "6544null"
                                                                           at java.net.URL.<init>(URL.java:190)
                                                                           at java.net.URL.<init>(URL.java:125)
                                                                           at org.mythtv.android.presentation.view.component.AutoLoadImageView$ImageDownloader.download(AutoLoadImageView.java:330)
                                                                           at org.mythtv.android.presentation.view.component.AutoLoadImageView$1.run(AutoLoadImageView.java:134)
01-21 19:06:20.190 24408-24460/org.mythtv.android D/OpenGLRenderer: endAllStagingAnimators on 0x96e33000 (RippleDrawable) with handle 0x98784520
01-21 19:06:20.195 24408-24408/org.mythtv.android V/MediaItemDetailsFragment: onTick : enter
01-21 19:06:20.197 24408-24408/org.mythtv.android V/MediaItemDetailsFragment: onTick : enter
01-21 19:06:20.198 24408-25389/org.mythtv.android D/MediaItemDetailsFragment: doInBackground : mediaItemModel=MediaItemModel{id=0, media=null, title='', subTitle='', description='', startDate=2017-01-22T01:06:24.000Z, programFlags=0, season=0, episode=0, studio='', castMembers='null', characters='null', url='null', fanartUrl='null', coverartUrl='null', bannerUrl='null', previewUrl='null', contentType='null', duration=0, percentComplete=0, recording=false, liveStreamId=94, createHttpLiveStreamUrl='/Content/AddRecordingLiveStream?RecordedId=0&Width=960', removeHttpLiveStreamUrl='/Content/RemoveLiveStream?Id=94', getHttpLiveStreamUrl='null', watched=false, markWatchedUrl='null', updateSavedBookmarkUrl='/Dvr/SetSavedBookmark?RecordedId=01', bookmark=140638167511878, validationErrors=[]}
01-21 19:06:20.201 24408-25389/org.mythtv.android E/UncaughtException: java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                           at android.os.AsyncTask$3.done(AsyncTask.java:309)
                                                                           at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                                                                           at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                                                                           at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                           at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                                                                           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                           at java.lang.Thread.run(Thread.java:818)
                                                                        Caused by: java.lang.IllegalArgumentException: unexpected url: http://mc0.home.local:6544null
                                                                           at okhttp3.Request$Builder.url(Request.java:142)
                                                                           at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment$GetLiveStreamTask.doInBackground(MediaItemDetailsFragment.java:745)
                                                                           at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment$GetLiveStreamTask.doInBackground(MediaItemDetailsFragment.java:738)
                                                                           at android.os.AsyncTask$2.call(AsyncTask.java:295)
                                                                           at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                           at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                                                                           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                                                                           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                                                                           at java.lang.Thread.run(Thread.java:818) 
01-21 19:06:20.203 24408-25241/org.mythtv.android D/FA: Event not sent since app measurement is disabled
01-21 19:06:20.471 24408-24408/org.mythtv.android D/SeriesListActivity: onSaveInstanceState : enter
01-21 19:06:20.471 24408-24408/org.mythtv.android D/SeriesListActivity: onSaveInstanceState : outState is not null
01-21 19:06:20.471 24408-24408/org.mythtv.android D/SeriesListActivity: onSaveInstanceState : saving titleRegEx
01-21 19:06:20.472 24408-24408/org.mythtv.android D/SeriesListActivity: onSaveInstanceState : exit
                                                                        
                                                                        --------- beginning of crash
01-21 19:06:20.508 24408-25389/org.mythtv.android E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
                                                                    Process: org.mythtv.android, PID: 24408
                                                                    java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                        at android.os.AsyncTask$3.done(AsyncTask.java:309)
                                                                        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                                                                        at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                                                                        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                                                                        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                        at java.lang.Thread.run(Thread.java:818)
                                                                     Caused by: java.lang.IllegalArgumentException: unexpected url: http://mc0.home.local:6544null
                                                                        at okhttp3.Request$Builder.url(Request.java:142)
                                                                        at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment$GetLiveStreamTask.doInBackground(MediaItemDetailsFragment.java:745)
                                                                        at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment$GetLiveStreamTask.doInBackground(MediaItemDetailsFragment.java:738)
                                                                        at android.os.AsyncTask$2.call(AsyncTask.java:295)
                                                                        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                                                                        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                                                                        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                                                                        at java.lang.Thread.run(Thread.java:818) 
01-21 19:06:20.531 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onPause : enter
01-21 19:06:20.531 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onPause : exit
01-21 19:06:20.532 24408-25241/org.mythtv.android V/FA: Screen exposed for less than 1000 ms. Event not sent. time: 581
01-21 19:06:20.533 24408-25241/org.mythtv.android V/FA: Activity paused, time: 347913739
01-21 19:06:20.548 24408-24408/org.mythtv.android D/MediaItemListFragment: onResume : enter
01-21 19:06:20.548 24408-24408/org.mythtv.android D/MediaItemListFragment: loadMediaItemList : enter
01-21 19:06:20.548 24408-24408/org.mythtv.android D/MediaItemListFragment: showLoading : enter
01-21 19:06:20.549 24408-24408/org.mythtv.android D/MediaItemListFragment: showLoading : exit
01-21 19:06:20.549 24408-25241/org.mythtv.android V/FA: Activity resumed, time: 347913755
01-21 19:06:20.549 24408-24408/org.mythtv.android D/DvrDataRepository: recordedPrograms : enter
01-21 19:06:20.549 24408-24408/org.mythtv.android D/DvrDataRepository: recordedPrograms : descending=false, startIndex=-1, count=-1, titleRegEx=Yes Man, recGroup=null, storageGroup=null
01-21 19:06:20.549 24408-24408/org.mythtv.android D/DvrDataStoreFactory: createMasterBackendDataStore : enter
01-21 19:06:20.549 24408-24408/org.mythtv.android D/DvrDataStoreFactory: createMasterBackendDataStore : exit
01-21 19:06:20.549 24408-24408/org.mythtv.android D/ContentDataStoreFactory: createMasterBackendDataStore : enter
01-21 19:06:20.549 24408-24408/org.mythtv.android D/ContentDataStoreFactory: createMasterBackendDataStore : exit
01-21 19:06:20.549 24408-24408/org.mythtv.android D/MasterBackendDvrDataStore: recordedProgramEntityList : enter
01-21 19:06:20.549 24408-24408/org.mythtv.android D/MasterBackendDvrDataStore: recordedProgramEntityList : descending=false, startIndex=-1, count=-1, titleRegEx=Yes Man, recGroup=null, storageGroup=null
01-21 19:06:20.549 24408-24408/org.mythtv.android D/MasterBackendDvrDataStore: titleInfoEntityList : enter
01-21 19:06:20.549 24408-24408/org.mythtv.android D/DvrApiImpl: recordedProgramEntityList : enter
01-21 19:06:20.549 24408-24408/org.mythtv.android D/DvrApiImpl: recordedProgramEntityList : exit
01-21 19:06:20.549 24408-24408/org.mythtv.android D/MasterBackendContentDataStore: liveStreamInfoEntityList : enter
01-21 19:06:20.549 24408-24408/org.mythtv.android D/MasterBackendContentDataStore: liveStreamInfoEntityList : exit
01-21 19:06:20.549 24408-24408/org.mythtv.android D/MediaItemListFragment: loadMediaItemList : exit
01-21 19:06:20.549 24408-24408/org.mythtv.android D/MediaItemListFragment: onResume : exit
01-21 19:06:20.551 24408-24458/org.mythtv.android D/DvrApiImpl: recordedProgramEntityList.call : enter
01-21 19:06:20.551 24408-24458/org.mythtv.android D/DvrApiImpl: recordedProgramEntityList.call : network is connected
01-21 19:06:20.551 24408-24458/org.mythtv.android D/DvrApiImpl: getMasterBackendUrl : masterBackend=http://mc0.home.local:6544
01-21 19:06:20.552 24408-24458/org.mythtv.android I/DvrApiImpl: getRecordedProgramEntitiesFromApi : url=http://mc0.home.local:6544/Dvr/GetRecordedList?Descending=false&TitleRegEx=Yes+Man
01-21 19:06:20.552 24408-24458/org.mythtv.android D/ApiConnection: connectToApi : url=http://mc0.home.local:6544/Dvr/GetRecordedList?Descending=false&TitleRegEx=Yes+Man
01-21 19:06:20.552 24408-24458/org.mythtv.android D/OkHttp: --> GET http://mc0.home.local:6544/Dvr/GetRecordedList?Descending=false&TitleRegEx=Yes+Man http/1.1
01-21 19:06:20.552 24408-24458/org.mythtv.android D/OkHttp: Accept: application/json
01-21 19:06:20.552 24408-24458/org.mythtv.android D/OkHttp: --> END GET
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: <-- 200 OK http://mc0.home.local:6544/Dvr/GetRecordedList?Descending=false&TitleRegEx=Yes+Man (32ms)
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: Connection: Keep-Alive
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: Content-Language: en-us
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: Content-Type: application/json
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: Keep-Alive: timeout=10
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: transferMode.dlna.org: Interactive
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: Accept-Ranges: bytes
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: Cache-Control: no-cache="Ext", max-age = 7200
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: Date: Sun, 22 Jan 2017 01:06:24 GMT
01-21 19:06:20.585 24408-24458/org.mythtv.android D/OkHttp: ETag: "8b382a122e62b589725cba6d4b96d3a0c01027b7"
01-21 19:06:20.586 24408-24458/org.mythtv.android D/OkHttp: Server: MythTV/29-pre-194-g2a1ccc0 Linux/3.13.0-107-generic UPnP/1.0
01-21 19:06:20.586 24408-24458/org.mythtv.android D/OkHttp: <-- END HTTP
01-21 19:06:20.586 24408-24458/org.mythtv.android D/ApiConnection: connectToApi : cacheResponse - Response{protocol=http/1.1, code=200, message=OK, url=http://mc0.home.local:6544/Dvr/GetRecordedList?Descending=false&TitleRegEx=Yes+Man}
01-21 19:06:20.586 24408-24458/org.mythtv.android D/ApiConnection: connectToApi : networkResponse - Response{protocol=http/1.1, code=304, message=Not Modified, url=http://mc0.home.local:6544/Dvr/GetRecordedList?Descending=false&TitleRegEx=Yes+Man}
01-21 19:06:20.586 24408-24458/org.mythtv.android D/DvrApiImpl: recordedProgramEntityList.call : retrieved program entities
01-21 19:06:20.592 24408-24458/org.mythtv.android D/SearchDataStoreFactory: createWriteSearchDataStore : enter
01-21 19:06:20.592 24408-24458/org.mythtv.android D/SearchDataStoreFactory: createWriteSearchDataStore : exit
01-21 19:06:20.594 24408-24458/org.mythtv.android D/DbSearchDataStore: refreshRecordedProgramData : enter
01-21 19:06:20.594 24408-24458/org.mythtv.android D/DbSearchDataStore: refreshRecordedProgramData : mediaItemEntityCollection is not empty
01-21 19:06:20.601 24408-24458/org.mythtv.android D/DbSearchDataStore: refreshRecordedPrograms : deleting old recordings for title=Yes Man
01-21 19:06:20.671 24408-24458/org.mythtv.android D/DbSearchDataStore: refreshRecordedProgramData : exit
01-21 19:06:20.671 24408-24458/org.mythtv.android D/DvrApiImpl: recordedProgramEntityList.call : exit
01-21 19:06:20.671 24408-24458/org.mythtv.android D/ContentApiImpl: LiveStreamInfoEntityList.call : enter
01-21 19:06:20.672 24408-24458/org.mythtv.android D/ContentApiImpl: LiveStreamInfoEntityList.call : network is connected
01-21 19:06:20.674 24408-24458/org.mythtv.android D/ContentApiImpl: getMasterBackendUrl : masterBackend=http://mc0.home.local:6544
01-21 19:06:20.674 24408-24458/org.mythtv.android D/ContentApiImpl: getLiveStreamInfoEntitiesFromApi : url=http://mc0.home.local:6544/Content/GetLiveStreamList
01-21 19:06:20.674 24408-24458/org.mythtv.android D/ApiConnection: connectToApi : url=http://mc0.home.local:6544/Content/GetLiveStreamList
01-21 19:06:20.674 24408-24458/org.mythtv.android D/OkHttp: --> GET http://mc0.home.local:6544/Content/GetLiveStreamList http/1.1
01-21 19:06:20.674 24408-24458/org.mythtv.android D/OkHttp: Accept: application/json
01-21 19:06:20.675 24408-24458/org.mythtv.android D/OkHttp: --> END GET
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: <-- 200 OK http://mc0.home.local:6544/Content/GetLiveStreamList (27ms)
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: Connection: Keep-Alive
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: Content-Language: en-us
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: Content-Type: application/json
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: Keep-Alive: timeout=10
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: transferMode.dlna.org: Interactive
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: Accept-Ranges: bytes
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: Cache-Control: no-cache="Ext", max-age = 7200
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: Date: Sun, 22 Jan 2017 01:06:24 GMT
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: ETag: "5a57da9517b5fef7bcb64e5f630d5d04410b1be1"
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: Server: MythTV/29-pre-194-g2a1ccc0 Linux/3.13.0-107-generic UPnP/1.0
01-21 19:06:20.702 24408-24458/org.mythtv.android D/OkHttp: <-- END HTTP
01-21 19:06:20.703 24408-24458/org.mythtv.android D/ApiConnection: connectToApi : cacheResponse - Response{protocol=http/1.1, code=200, message=OK, url=http://mc0.home.local:6544/Content/GetLiveStreamList}
01-21 19:06:20.703 24408-24458/org.mythtv.android D/ApiConnection: connectToApi : networkResponse - Response{protocol=http/1.1, code=304, message=Not Modified, url=http://mc0.home.local:6544/Content/GetLiveStreamList}
01-21 19:06:20.703 24408-24458/org.mythtv.android D/ContentApiImpl: LiveStreamInfoEntityList.call : retrieved LiveStream info entities
01-21 19:06:20.711 24408-24458/org.mythtv.android D/ContentApiImpl: LiveStreamInfoEntityList.call : exit
01-21 19:06:20.711 24408-24408/org.mythtv.android D/MediaItemListFragment: renderMediaItemList : enter
01-21 19:06:20.711 24408-24408/org.mythtv.android D/MediaItemListFragment: renderMediaItemList : exit
01-21 19:06:20.711 24408-24408/org.mythtv.android D/MediaItemListFragment: hideLoading : enter
01-21 19:06:20.711 24408-24408/org.mythtv.android D/MediaItemListFragment: hideLoading : exit
01-21 19:06:20.723 24408-24408/org.mythtv.android I/MediaItemsAdapter: onBindViewHolder : mediaItemModel=MediaItemModel{id=7805, media=PROGRAM, title='Yes Man', subTitle='', description='After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.', startDate=2016-12-01T19:00:00.000Z, programFlags=0, season=0, episode=0, studio='AMC', castMembers='null', characters='null', url='/Content/GetFile?FileName=2667_20161201190000.ts', fanartUrl='/Content/GetImageFile?StorageGroup=Fanart&FileName=/tmdb3.py_10201_fanart.jpg', coverartUrl='/Content/GetImageFile?StorageGroup=Coverart&FileName=/tmdb3.py_10201_coverart.jpg', bannerUrl='null', previewUrl='/Content/GetPreviewImage?RecordedId=7805', contentType='video/mp2t', duration=-73656, percentComplete=0, recording=false, liveStreamId=0, createHttpLiveStreamUrl='/Content/AddRecordingLiveStream?RecordedId=7805&Width=960', removeHttpLiveStreamUrl='null', getHttpLiveStreamUrl='null', watched=true, markWatchedUrl='/Dvr/UpdateRecordedWatchedStatus', updateSavedBookmarkUrl='/Dvr/SetSavedBookmark?RecordedId=78051', bookmark=0, validationErrors=[]}
01-21 19:06:20.962 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onDestroyView : enter
01-21 19:06:20.962 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onDestroyView : exit
01-21 19:06:20.963 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onDestroy : enter
01-21 19:06:20.963 24408-24408/org.mythtv.android D/MediaItemDetailsFragment: onDestroy : exit
01-21 19:06:25.552 24408-25241/org.mythtv.android V/FA: Inactivity, disconnecting from the service

dmfrey added a commit that referenced this issue Jan 22, 2017

Add checks to only perform tasks if the mediaItemModel is valid
This change prevents images from loading or further calls to the backend for status on HLS or marking an episode watched or unwatched.

Changes #68
@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 22, 2017

Contributor

@billmeek This looks to be a side effect of now validating the data. The model now has an isValid() method, which is a quick check on the data in the model. I wrapped this check around those other calls so that they do not get performed. So if the model isn't valid, it won't make these further calls.

Contributor

dmfrey commented Jan 22, 2017

@billmeek This looks to be a side effect of now validating the data. The model now has an isValid() method, which is a quick check on the data in the model. I wrapped this check around those other calls so that they do not get performed. So if the model isn't valid, it won't make these further calls.

dmfrey added a commit that referenced this issue Jan 22, 2017

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 22, 2017

Contributor

Added debug shows the URL:

Added this and got rid of the 1st caught exception above
but the other two still fire:

    void download( String imageUrl, Callback callback ) {
//      Log.d( TAG, "download : enter" );
      Log.d( TAG, "download : enter URL: " + imageUrl ); <---
      if ( imageUrl.endsWith("null") ) <---
        return; <---
Contributor

billmeek commented Jan 22, 2017

Added debug shows the URL:

Added this and got rid of the 1st caught exception above
but the other two still fire:

    void download( String imageUrl, Callback callback ) {
//      Log.d( TAG, "download : enter" );
      Log.d( TAG, "download : enter URL: " + imageUrl ); <---
      if ( imageUrl.endsWith("null") ) <---
        return; <---
@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 22, 2017

Contributor

@billmeek I think commit f0ebb62 addresses that issue. I am checking the isValid() method now before these types of calls are made.

Contributor

dmfrey commented Jan 22, 2017

@billmeek I think commit f0ebb62 addresses that issue. I am checking the isValid() method now before these types of calls are made.

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 22, 2017

Contributor

I tested the above on f0ebb62.

Contributor

billmeek commented Jan 22, 2017

I tested the above on f0ebb62.

@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 22, 2017

Contributor

@billmeek sorry, it was in commit 4ed7a44. at the top of the render method, it dumps out if the mediaItemModel isn't valid

Contributor

dmfrey commented Jan 22, 2017

@billmeek sorry, it was in commit 4ed7a44. at the top of the render method, it dumps out if the mediaItemModel isn't valid

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 23, 2017

Contributor

I'm up to date, so 4ed7a44 is applied too.

Contributor

billmeek commented Jan 23, 2017

I'm up to date, so 4ed7a44 is applied too.

@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 23, 2017

Contributor

hmm, and that didn't prevent the autoloadingimage from populating?

Contributor

dmfrey commented Jan 23, 2017

hmm, and that didn't prevent the autoloadingimage from populating?

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 23, 2017

Contributor

I don't believe so, that is, it tries to, but that results in the
http://mc0.home.local:6544null URL.

Contributor

billmeek commented Jan 23, 2017

I don't believe so, that is, it tries to, but that results in the
http://mc0.home.local:6544null URL.

@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 23, 2017

Contributor
Contributor

dmfrey commented Jan 23, 2017

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 23, 2017

Contributor

Sure:

01-22 20:09:39.916 3950-4637/org.mythtv.android E/AutoLoadImageView: download : malformedexception
                                                                     java.net.MalformedURLException: java.lang.NumberFormatException: Invalid int: "6544null"
                                                                         at java.net.URL.<init>(URL.java:190)
                                                                         at java.net.URL.<init>(URL.java:125)
                                                                         at org.mythtv.android.presentation.view.component.AutoLoadImageView$ImageDownloader.download(AutoLoadImageView.java:330)
                                                                         at org.mythtv.android.presentation.view.component.AutoLoadImageView$1.run(AutoLoadImageView.java:134)
01-22 20:09:39.921 3950-3950/org.mythtv.android V/MediaItemDetailsFragment: onTick : enter
01-22 20:09:39.923 3950-3950/org.mythtv.android V/MediaItemDetailsFragment: onTick : enter
01-22 20:09:39.926 3950-4638/org.mythtv.android D/GetLiveStreamTask: doInBackground : mediaItemModel=MediaItemModel{id=0, media=null, title='', subTitle='', description='', startDate=2017-01-23T02:09:45.000Z, programFlags=0, season=0, episode=0, studio='', castMembers='null', characters='null', url='null', fanartUrl='null', coverartUrl='null', bannerUrl='null', previewUrl='null', contentType='null', duration=0, percentComplete=0, recording=false, liveStreamId=94, createHttpLiveStreamUrl='/Content/AddRecordingLiveStream?RecordedId=0&Width=960', removeHttpLiveStreamUrl='/Content/RemoveLiveStream?Id=94', getHttpLiveStreamUrl='null', watched=false, markWatchedUrl='null', updateSavedBookmarkUrl='/Dvr/SetSavedBookmark?RecordedId=01', bookmark=140638167511878, inetref='', validationErrors=[]}
01-22 20:09:39.928 3950-4638/org.mythtv.android E/UncaughtException: java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                         at android.os.AsyncTask$3.done(AsyncTask.java:309)
                                                                         at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                                                                         at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                                                                         at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                                                                         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                         at java.lang.Thread.run(Thread.java:818)
                                                                      Caused by: java.lang.IllegalArgumentException: unexpected url: http://mc0.home.local:6544null
                                                                         at okhttp3.Request$Builder.url(Request.java:142)
                                                                         at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment$GetLiveStreamTask.doInBackground(MediaItemDetailsFragment.java:772)
                                                                         at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment$GetLiveStreamTask.doInBackground(MediaItemDetailsFragment.java:761)
                                                                         at android.os.AsyncTask$2.call(AsyncTask.java:295)
                                                                         at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                                                                         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                                                                         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                                                                         at java.lang.Thread.run(Thread.java:818) 
01-22 20:09:39.930 3950-3991/org.mythtv.android D/FA: Event not sent since app measurement is disabled
01-22 20:09:40.208 3950-4638/org.mythtv.android E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
                                                                  Process: org.mythtv.android, PID: 3950
                                                                  java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                      at android.os.AsyncTask$3.done(AsyncTask.java:309)
                                                                      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                                                                      at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                                                                      at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                                                                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                      at java.lang.Thread.run(Thread.java:818)
                                                                   Caused by: java.lang.IllegalArgumentException: unexpected url: http://mc0.home.local:6544null
                                                                      at okhttp3.Request$Builder.url(Request.java:142)
                                                                      at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment$GetLiveStreamTask.doInBackground(MediaItemDetailsFragment.java:772)
                                                                      at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment$GetLiveStreamTask.doInBackground(MediaItemDetailsFragment.java:761)
                                                                      at android.os.AsyncTask$2.call(AsyncTask.java:295)
                                                                      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                                                                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                                                                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                                                                      at java.lang.Thread.run(Thread.java:818) 
Contributor

billmeek commented Jan 23, 2017

Sure:

01-22 20:09:39.916 3950-4637/org.mythtv.android E/AutoLoadImageView: download : malformedexception
                                                                     java.net.MalformedURLException: java.lang.NumberFormatException: Invalid int: "6544null"
                                                                         at java.net.URL.<init>(URL.java:190)
                                                                         at java.net.URL.<init>(URL.java:125)
                                                                         at org.mythtv.android.presentation.view.component.AutoLoadImageView$ImageDownloader.download(AutoLoadImageView.java:330)
                                                                         at org.mythtv.android.presentation.view.component.AutoLoadImageView$1.run(AutoLoadImageView.java:134)
01-22 20:09:39.921 3950-3950/org.mythtv.android V/MediaItemDetailsFragment: onTick : enter
01-22 20:09:39.923 3950-3950/org.mythtv.android V/MediaItemDetailsFragment: onTick : enter
01-22 20:09:39.926 3950-4638/org.mythtv.android D/GetLiveStreamTask: doInBackground : mediaItemModel=MediaItemModel{id=0, media=null, title='', subTitle='', description='', startDate=2017-01-23T02:09:45.000Z, programFlags=0, season=0, episode=0, studio='', castMembers='null', characters='null', url='null', fanartUrl='null', coverartUrl='null', bannerUrl='null', previewUrl='null', contentType='null', duration=0, percentComplete=0, recording=false, liveStreamId=94, createHttpLiveStreamUrl='/Content/AddRecordingLiveStream?RecordedId=0&Width=960', removeHttpLiveStreamUrl='/Content/RemoveLiveStream?Id=94', getHttpLiveStreamUrl='null', watched=false, markWatchedUrl='null', updateSavedBookmarkUrl='/Dvr/SetSavedBookmark?RecordedId=01', bookmark=140638167511878, inetref='', validationErrors=[]}
01-22 20:09:39.928 3950-4638/org.mythtv.android E/UncaughtException: java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                         at android.os.AsyncTask$3.done(AsyncTask.java:309)
                                                                         at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                                                                         at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                                                                         at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                                                                         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                         at java.lang.Thread.run(Thread.java:818)
                                                                      Caused by: java.lang.IllegalArgumentException: unexpected url: http://mc0.home.local:6544null
                                                                         at okhttp3.Request$Builder.url(Request.java:142)
                                                                         at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment$GetLiveStreamTask.doInBackground(MediaItemDetailsFragment.java:772)
                                                                         at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment$GetLiveStreamTask.doInBackground(MediaItemDetailsFragment.java:761)
                                                                         at android.os.AsyncTask$2.call(AsyncTask.java:295)
                                                                         at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                                                                         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                                                                         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                                                                         at java.lang.Thread.run(Thread.java:818) 
01-22 20:09:39.930 3950-3991/org.mythtv.android D/FA: Event not sent since app measurement is disabled
01-22 20:09:40.208 3950-4638/org.mythtv.android E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
                                                                  Process: org.mythtv.android, PID: 3950
                                                                  java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                      at android.os.AsyncTask$3.done(AsyncTask.java:309)
                                                                      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                                                                      at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                                                                      at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                                                                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                      at java.lang.Thread.run(Thread.java:818)
                                                                   Caused by: java.lang.IllegalArgumentException: unexpected url: http://mc0.home.local:6544null
                                                                      at okhttp3.Request$Builder.url(Request.java:142)
                                                                      at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment$GetLiveStreamTask.doInBackground(MediaItemDetailsFragment.java:772)
                                                                      at org.mythtv.android.presentation.view.fragment.phone.MediaItemDetailsFragment$GetLiveStreamTask.doInBackground(MediaItemDetailsFragment.java:761)
                                                                      at android.os.AsyncTask$2.call(AsyncTask.java:295)
                                                                      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                                                                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                                                                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                                                                      at java.lang.Thread.run(Thread.java:818) 

dmfrey added a commit that referenced this issue Jan 23, 2017

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 24, 2017

Contributor

Could it be that the info is coming from the GetRecordedList
even though the GetRecorded?RecordedId=7805 is nearly
blank? Not sure I understand that StartTs being set to: xsi:nil="true"
in the GetRecordedList response doesn't cause the failure.

Contributor

billmeek commented Jan 24, 2017

Could it be that the info is coming from the GetRecordedList
even though the GetRecorded?RecordedId=7805 is nearly
blank? Not sure I understand that StartTs being set to: xsi:nil="true"
in the GetRecordedList response doesn't cause the failure.

@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 24, 2017

Contributor

hmm, can you compare the json from each and see if they show different results?

Contributor

dmfrey commented Jan 24, 2017

hmm, can you compare the json from each and see if they show different results?

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 24, 2017

Contributor

I'll do the whole thing if you like, but this is
the timestamp part.

GetRecordedList:

<Recording>
<RecordedId>7805</RecordedId>
<Status>Recorded</Status>
<Priority>0</Priority>
<StartTs xsi:nil="true"/>
<EndTs>2016-12-01T21:30:00Z</EndTs>

GetRecorded?RecordedId=7805

<Recording>
<RecordedId>0</RecordedId>
<Status>Unknown</Status>
<Priority>0</Priority>
<StartTs xsi:nil="true"/>
<EndTs xsi:nil="true"/>
Contributor

billmeek commented Jan 24, 2017

I'll do the whole thing if you like, but this is
the timestamp part.

GetRecordedList:

<Recording>
<RecordedId>7805</RecordedId>
<Status>Recorded</Status>
<Priority>0</Priority>
<StartTs xsi:nil="true"/>
<EndTs>2016-12-01T21:30:00Z</EndTs>

GetRecorded?RecordedId=7805

<Recording>
<RecordedId>0</RecordedId>
<Status>Unknown</Status>
<Priority>0</Priority>
<StartTs xsi:nil="true"/>
<EndTs xsi:nil="true"/>
@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 24, 2017

Contributor

Those are from the Recordinginfo. I have been checking the StartTime in <Program>.

Contributor

dmfrey commented Jan 24, 2017

Those are from the Recordinginfo. I have been checking the StartTime in <Program>.

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 24, 2017

Contributor

Ah, in , the times are for the scheduled time.
I think we want the times. The following is
from a recording I just made (at 47 minutes afte the hour):

<Recording>
<RecordedId>8331</RecordedId>
<Status>Recording</Status>
<Priority>0</Priority>
<StartTs>2017-01-24T03:47:00Z</StartTs>
<EndTs>2017-01-24T04:00:00Z</EndTs>
<FileSize>125366672</FileSize>
<FileName>2609_20170124034700.ts</FileName>

The file name contains the StartTs, but the
section has 2017-01-24T03:00:00Z
which is the scheduled start.

I believe this was critical when chanid/starttime (MythTV names)
were used to look up recordings and not with RecordedId.
Although the elapsed time should be of the actual recording, not the
scheduled time.

Contributor

billmeek commented Jan 24, 2017

Ah, in , the times are for the scheduled time.
I think we want the times. The following is
from a recording I just made (at 47 minutes afte the hour):

<Recording>
<RecordedId>8331</RecordedId>
<Status>Recording</Status>
<Priority>0</Priority>
<StartTs>2017-01-24T03:47:00Z</StartTs>
<EndTs>2017-01-24T04:00:00Z</EndTs>
<FileSize>125366672</FileSize>
<FileName>2609_20170124034700.ts</FileName>

The file name contains the StartTs, but the
section has 2017-01-24T03:00:00Z
which is the scheduled start.

I believe this was critical when chanid/starttime (MythTV names)
were used to look up recordings and not with RecordedId.
Although the elapsed time should be of the actual recording, not the
scheduled time.

@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 24, 2017

Contributor
Contributor

dmfrey commented Jan 24, 2017

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 24, 2017

Contributor

I don't believe so. Only important in a schedule/guide etc.

Contributor

billmeek commented Jan 24, 2017

I don't believe so. Only important in a schedule/guide etc.

@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 24, 2017

Contributor

@billmeek what does the JSON look like for GetRecordedList: and GetRecorded?RecordedId=7805?

Contributor

dmfrey commented Jan 24, 2017

@billmeek what does the JSON look like for GetRecordedList: and GetRecorded?RecordedId=7805?

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 24, 2017

Contributor

GetRecordedList (just for the 7805 recordedid):

<Programs>
<Program>
<StartTime>2016-12-01T19:00:00Z</StartTime>
<EndTime>2016-12-01T21:30:00Z</EndTime>
<Title>Yes Man</Title>
<SubTitle/>
<Category>Comedy</Category>
<CatType>movie</CatType>
<Repeat>false</Repeat>
<VideoProps>19</VideoProps>
<AudioProps>0</AudioProps>
<SubProps>1</SubProps>
<SeriesId/>
<ProgramId>MV002151300000</ProgramId>
<Stars>0.625</Stars>
<LastModified>2017-01-21T01:55:42Z</LastModified>
<ProgramFlags>543</ProgramFlags>
<Airdate>2008-01-01</Airdate>
<Description>
After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.
</Description>
<Inetref>tmdb3.py_10201</Inetref>
<Season>0</Season>
<Episode>0</Episode>
<TotalEpisodes>0</TotalEpisodes>
<FileSize>10845900480</FileSize>
<FileName>2667_20161201190000.ts</FileName>
<HostName>mc0</HostName>
<Channel>
<ChanId>2667</ChanId>
<ChanNum>667</ChanNum>
<CallSign>AMC</CallSign>
<IconURL>/Guide/GetChannelIcon?ChanId=2667</IconURL>
<ChannelName>AMC</ChannelName>
<MplexId>32767</MplexId>
<ServiceId>0</ServiceId>
<ATSCMajorChan>667</ATSCMajorChan>
<ATSCMinorChan>0</ATSCMinorChan>
<Format>Default</Format>
<FrequencyId>667</FrequencyId>
<FineTune>0</FineTune>
<ChanFilters/>
<SourceId>2</SourceId>
<InputId>0</InputId>
<CommFree>false</CommFree>
<UseEIT>false</UseEIT>
<Visible>true</Visible>
<XMLTVID>59337</XMLTVID>
<DefaultAuth/>
<Programs/>
</Channel>
<Recording>
<RecordedId>7805</RecordedId>
<Status>Recorded</Status>
<Priority>0</Priority>
<StartTs xsi:nil="true"/>
<EndTs>2016-12-01T21:30:00Z</EndTs>
<FileSize>10845900480</FileSize>
<FileName>2667_20161201190000.ts</FileName>
<HostName>mc0</HostName>
<LastModified>2017-01-21T01:55:42Z</LastModified>
<RecordId>2215</RecordId>
<RecGroup>Default</RecGroup>
<PlayGroup>Default</PlayGroup>
<StorageGroup>Default</StorageGroup>
<RecType>0</RecType>
<DupInType>0</DupInType>
<DupMethod>0</DupMethod>
<EncoderId>0</EncoderId>
<EncoderName/>
<Profile>Default</Profile>
</Recording>
<Artwork>
<ArtworkInfos>
<ArtworkInfo>
<URL>
/Content/GetImageFile?StorageGroup=Coverart&FileName=/tmdb3.py_10201_coverart.jpg
</URL>
<FileName>myth://Coverart@mc0/tmdb3.py_10201_coverart.jpg</FileName>
<StorageGroup>Coverart</StorageGroup>
<Type>coverart</Type>
</ArtworkInfo>
<ArtworkInfo>
<URL>
/Content/GetImageFile?StorageGroup=Fanart&FileName=/tmdb3.py_10201_fanart.jpg
</URL>
<FileName>myth://Fanart@mc0/tmdb3.py_10201_fanart.jpg</FileName>
<StorageGroup>Fanart</StorageGroup>
<Type>fanart</Type>
</ArtworkInfo>
</ArtworkInfos>
</Artwork>
<Cast>
<CastMembers>
<CastMember>
<Name>Danny Masterson</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Jamie Denbo</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Zooey Deschanel</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Fionnula Flanagan</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>John Cothran</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Jim Carrey</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Rhys Darby</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Bradley Cooper</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Terence Stamp</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Molly Sims</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Rocky Carroll</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Patrick Labyorteaux</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Sasha Alexander</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Spencer Garrett</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Brent Briscoe</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>John Michael Higgins</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Peyton Reed</Name>
<CharacterName/>
<Role>director</Role>
<TranslatedRole>Director</TranslatedRole>
</CastMember>
<CastMember>
<Name>David Heyman</Name>
<CharacterName/>
<Role>producer</Role>
<TranslatedRole>Producer</TranslatedRole>
</CastMember>
<CastMember>
<Name>Richard D. Zanuck</Name>
<CharacterName/>
<Role>producer</Role>
<TranslatedRole>Producer</TranslatedRole>
</CastMember>
<CastMember>
<Name>Dana Goldberg</Name>
<CharacterName/>
<Role>executive_producer</Role>
<TranslatedRole>Executive Producer</TranslatedRole>
</CastMember>
<CastMember>
<Name>Marty P. Ewing</Name>
<CharacterName/>
<Role>executive_producer</Role>
<TranslatedRole>Executive Producer</TranslatedRole>
</CastMember>
<CastMember>
<Name>Bruce Berman</Name>
<CharacterName/>
<Role>executive_producer</Role>
<TranslatedRole>Executive Producer</TranslatedRole>
</CastMember>
</CastMembers>
</Cast>
</Program>

And the whole thing for GetRecorded?RecordedId=7805:

<Program xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.11" serializerVersion="1.1">
<StartTime>2017-01-24T17:57:26Z</StartTime>
<EndTime>2017-01-24T17:57:26Z</EndTime>
<Title/>
<SubTitle/>
<Category/>
<CatType/>
<Repeat>false</Repeat>
<VideoProps>0</VideoProps>
<AudioProps>0</AudioProps>
<SubProps>0</SubProps>
<SeriesId/>
<ProgramId/>
<Stars>0</Stars>
<LastModified>2017-01-24T17:57:26Z</LastModified>
<ProgramFlags>0</ProgramFlags>
<Airdate/>
<Description/>
<Inetref/>
<Season>0</Season>
<Episode>0</Episode>
<TotalEpisodes>0</TotalEpisodes>
<FileSize>0</FileSize>
<FileName/>
<HostName/>
<Channel>
<ChanId>0</ChanId>
<ChanNum/>
<CallSign/>
<IconURL/>
<ChannelName/>
<MplexId>0</MplexId>
<ServiceId>0</ServiceId>
<ATSCMajorChan>0</ATSCMajorChan>
<ATSCMinorChan>0</ATSCMinorChan>
<Format/>
<FrequencyId/>
<FineTune>0</FineTune>
<ChanFilters/>
<SourceId>0</SourceId>
<InputId>0</InputId>
<CommFree>false</CommFree>
<UseEIT>false</UseEIT>
<Visible>true</Visible>
<XMLTVID/>
<DefaultAuth/>
<Programs/>
</Channel>
<Recording>
<RecordedId>0</RecordedId>
<Status>Unknown</Status>
<Priority>0</Priority>
<StartTs xsi:nil="true"/>
<EndTs xsi:nil="true"/>
<FileSize>0</FileSize>
<FileName/>
<HostName/>
<LastModified xsi:nil="true"/>
<RecordId>0</RecordId>
<RecGroup/>
<PlayGroup/>
<StorageGroup/>
<RecType>0</RecType>
<DupInType>1</DupInType>
<DupMethod>1</DupMethod>
<EncoderId>0</EncoderId>
<EncoderName/>
<Profile/>
</Recording>
<Artwork>
<ArtworkInfos/>
</Artwork>
<Cast>
<CastMembers/>
</Cast>
</Program>

Also GetRecordedList?Descending=false&TitleRegEx=Yes+Man

ProgramList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" serializerVersion="1.1">
<StartIndex>0</StartIndex>
<Count>1</Count>
<TotalAvailable>1</TotalAvailable>
<AsOf>2017-01-24T17:58:43Z</AsOf>
<Version>29.20160903-1</Version>
<ProtoVer>91</ProtoVer>
<Programs>
<Program>
<StartTime>2016-12-01T19:00:00Z</StartTime>
<EndTime>2016-12-01T21:30:00Z</EndTime>
<Title>Yes Man</Title>
<SubTitle/>
<Category>Comedy</Category>
<CatType>movie</CatType>
<Repeat>false</Repeat>
<VideoProps>19</VideoProps>
<AudioProps>0</AudioProps>
<SubProps>1</SubProps>
<SeriesId/>
<ProgramId>MV002151300000</ProgramId>
<Stars>0.625</Stars>
<LastModified>2017-01-21T01:55:42Z</LastModified>
<ProgramFlags>543</ProgramFlags>
<Airdate>2008-01-01</Airdate>
<Description>
After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.
</Description>
<Inetref>tmdb3.py_10201</Inetref>
<Season>0</Season>
<Episode>0</Episode>
<TotalEpisodes>0</TotalEpisodes>
<FileSize>10845900480</FileSize>
<FileName>2667_20161201190000.ts</FileName>
<HostName>mc0</HostName>
<Channel>
<ChanId>2667</ChanId>
<ChanNum>667</ChanNum>
<CallSign>AMC</CallSign>
<IconURL>/Guide/GetChannelIcon?ChanId=2667</IconURL>
<ChannelName>AMC</ChannelName>
<MplexId>32767</MplexId>
<ServiceId>0</ServiceId>
<ATSCMajorChan>667</ATSCMajorChan>
<ATSCMinorChan>0</ATSCMinorChan>
<Format>Default</Format>
<FrequencyId>667</FrequencyId>
<FineTune>0</FineTune>
<ChanFilters/>
<SourceId>2</SourceId>
<InputId>0</InputId>
<CommFree>false</CommFree>
<UseEIT>false</UseEIT>
<Visible>true</Visible>
<XMLTVID>59337</XMLTVID>
<DefaultAuth/>
<Programs/>
</Channel>
<Recording>
<RecordedId>7805</RecordedId>
<Status>Recorded</Status>
<Priority>0</Priority>
<StartTs xsi:nil="true"/>
<EndTs>2016-12-01T21:30:00Z</EndTs>
<FileSize>10845900480</FileSize>
<FileName>2667_20161201190000.ts</FileName>
<HostName>mc0</HostName>
<LastModified>2017-01-21T01:55:42Z</LastModified>
<RecordId>2215</RecordId>
<RecGroup>Default</RecGroup>
<PlayGroup>Default</PlayGroup>
<StorageGroup>Default</StorageGroup>
<RecType>0</RecType>
<DupInType>0</DupInType>
<DupMethod>0</DupMethod>
<EncoderId>0</EncoderId>
<EncoderName/>
<Profile>Default</Profile>
</Recording>
<Artwork>
<ArtworkInfos>
<ArtworkInfo>
<URL>
/Content/GetImageFile?StorageGroup=Coverart&FileName=/tmdb3.py_10201_coverart.jpg
</URL>
<FileName>myth://Coverart@mc0/tmdb3.py_10201_coverart.jpg</FileName>
<StorageGroup>Coverart</StorageGroup>
<Type>coverart</Type>
</ArtworkInfo>
<ArtworkInfo>
<URL>
/Content/GetImageFile?StorageGroup=Fanart&FileName=/tmdb3.py_10201_fanart.jpg
</URL>
<FileName>myth://Fanart@mc0/tmdb3.py_10201_fanart.jpg</FileName>
<StorageGroup>Fanart</StorageGroup>
<Type>fanart</Type>
</ArtworkInfo>
</ArtworkInfos>
</Artwork>
<Cast>
<CastMembers>
<CastMember>
<Name>Danny Masterson</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Jamie Denbo</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Zooey Deschanel</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Fionnula Flanagan</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>John Cothran</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Jim Carrey</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Rhys Darby</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Bradley Cooper</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Terence Stamp</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Molly Sims</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Rocky Carroll</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Patrick Labyorteaux</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Sasha Alexander</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Spencer Garrett</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Brent Briscoe</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>John Michael Higgins</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Peyton Reed</Name>
<CharacterName/>
<Role>director</Role>
<TranslatedRole>Director</TranslatedRole>
</CastMember>
<CastMember>
<Name>David Heyman</Name>
<CharacterName/>
<Role>producer</Role>
<TranslatedRole>Producer</TranslatedRole>
</CastMember>
<CastMember>
<Name>Richard D. Zanuck</Name>
<CharacterName/>
<Role>producer</Role>
<TranslatedRole>Producer</TranslatedRole>
</CastMember>
<CastMember>
<Name>Dana Goldberg</Name>
<CharacterName/>
<Role>executive_producer</Role>
<TranslatedRole>Executive Producer</TranslatedRole>
</CastMember>
<CastMember>
<Name>Marty P. Ewing</Name>
<CharacterName/>
<Role>executive_producer</Role>
<TranslatedRole>Executive Producer</TranslatedRole>
</CastMember>
<CastMember>
<Name>Bruce Berman</Name>
<CharacterName/>
<Role>executive_producer</Role>
<TranslatedRole>Executive Producer</TranslatedRole>
</CastMember>
</CastMembers>
</Cast>
</Program>
</Programs>
</ProgramList>
Contributor

billmeek commented Jan 24, 2017

GetRecordedList (just for the 7805 recordedid):

<Programs>
<Program>
<StartTime>2016-12-01T19:00:00Z</StartTime>
<EndTime>2016-12-01T21:30:00Z</EndTime>
<Title>Yes Man</Title>
<SubTitle/>
<Category>Comedy</Category>
<CatType>movie</CatType>
<Repeat>false</Repeat>
<VideoProps>19</VideoProps>
<AudioProps>0</AudioProps>
<SubProps>1</SubProps>
<SeriesId/>
<ProgramId>MV002151300000</ProgramId>
<Stars>0.625</Stars>
<LastModified>2017-01-21T01:55:42Z</LastModified>
<ProgramFlags>543</ProgramFlags>
<Airdate>2008-01-01</Airdate>
<Description>
After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.
</Description>
<Inetref>tmdb3.py_10201</Inetref>
<Season>0</Season>
<Episode>0</Episode>
<TotalEpisodes>0</TotalEpisodes>
<FileSize>10845900480</FileSize>
<FileName>2667_20161201190000.ts</FileName>
<HostName>mc0</HostName>
<Channel>
<ChanId>2667</ChanId>
<ChanNum>667</ChanNum>
<CallSign>AMC</CallSign>
<IconURL>/Guide/GetChannelIcon?ChanId=2667</IconURL>
<ChannelName>AMC</ChannelName>
<MplexId>32767</MplexId>
<ServiceId>0</ServiceId>
<ATSCMajorChan>667</ATSCMajorChan>
<ATSCMinorChan>0</ATSCMinorChan>
<Format>Default</Format>
<FrequencyId>667</FrequencyId>
<FineTune>0</FineTune>
<ChanFilters/>
<SourceId>2</SourceId>
<InputId>0</InputId>
<CommFree>false</CommFree>
<UseEIT>false</UseEIT>
<Visible>true</Visible>
<XMLTVID>59337</XMLTVID>
<DefaultAuth/>
<Programs/>
</Channel>
<Recording>
<RecordedId>7805</RecordedId>
<Status>Recorded</Status>
<Priority>0</Priority>
<StartTs xsi:nil="true"/>
<EndTs>2016-12-01T21:30:00Z</EndTs>
<FileSize>10845900480</FileSize>
<FileName>2667_20161201190000.ts</FileName>
<HostName>mc0</HostName>
<LastModified>2017-01-21T01:55:42Z</LastModified>
<RecordId>2215</RecordId>
<RecGroup>Default</RecGroup>
<PlayGroup>Default</PlayGroup>
<StorageGroup>Default</StorageGroup>
<RecType>0</RecType>
<DupInType>0</DupInType>
<DupMethod>0</DupMethod>
<EncoderId>0</EncoderId>
<EncoderName/>
<Profile>Default</Profile>
</Recording>
<Artwork>
<ArtworkInfos>
<ArtworkInfo>
<URL>
/Content/GetImageFile?StorageGroup=Coverart&FileName=/tmdb3.py_10201_coverart.jpg
</URL>
<FileName>myth://Coverart@mc0/tmdb3.py_10201_coverart.jpg</FileName>
<StorageGroup>Coverart</StorageGroup>
<Type>coverart</Type>
</ArtworkInfo>
<ArtworkInfo>
<URL>
/Content/GetImageFile?StorageGroup=Fanart&FileName=/tmdb3.py_10201_fanart.jpg
</URL>
<FileName>myth://Fanart@mc0/tmdb3.py_10201_fanart.jpg</FileName>
<StorageGroup>Fanart</StorageGroup>
<Type>fanart</Type>
</ArtworkInfo>
</ArtworkInfos>
</Artwork>
<Cast>
<CastMembers>
<CastMember>
<Name>Danny Masterson</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Jamie Denbo</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Zooey Deschanel</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Fionnula Flanagan</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>John Cothran</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Jim Carrey</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Rhys Darby</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Bradley Cooper</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Terence Stamp</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Molly Sims</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Rocky Carroll</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Patrick Labyorteaux</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Sasha Alexander</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Spencer Garrett</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Brent Briscoe</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>John Michael Higgins</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Peyton Reed</Name>
<CharacterName/>
<Role>director</Role>
<TranslatedRole>Director</TranslatedRole>
</CastMember>
<CastMember>
<Name>David Heyman</Name>
<CharacterName/>
<Role>producer</Role>
<TranslatedRole>Producer</TranslatedRole>
</CastMember>
<CastMember>
<Name>Richard D. Zanuck</Name>
<CharacterName/>
<Role>producer</Role>
<TranslatedRole>Producer</TranslatedRole>
</CastMember>
<CastMember>
<Name>Dana Goldberg</Name>
<CharacterName/>
<Role>executive_producer</Role>
<TranslatedRole>Executive Producer</TranslatedRole>
</CastMember>
<CastMember>
<Name>Marty P. Ewing</Name>
<CharacterName/>
<Role>executive_producer</Role>
<TranslatedRole>Executive Producer</TranslatedRole>
</CastMember>
<CastMember>
<Name>Bruce Berman</Name>
<CharacterName/>
<Role>executive_producer</Role>
<TranslatedRole>Executive Producer</TranslatedRole>
</CastMember>
</CastMembers>
</Cast>
</Program>

And the whole thing for GetRecorded?RecordedId=7805:

<Program xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.11" serializerVersion="1.1">
<StartTime>2017-01-24T17:57:26Z</StartTime>
<EndTime>2017-01-24T17:57:26Z</EndTime>
<Title/>
<SubTitle/>
<Category/>
<CatType/>
<Repeat>false</Repeat>
<VideoProps>0</VideoProps>
<AudioProps>0</AudioProps>
<SubProps>0</SubProps>
<SeriesId/>
<ProgramId/>
<Stars>0</Stars>
<LastModified>2017-01-24T17:57:26Z</LastModified>
<ProgramFlags>0</ProgramFlags>
<Airdate/>
<Description/>
<Inetref/>
<Season>0</Season>
<Episode>0</Episode>
<TotalEpisodes>0</TotalEpisodes>
<FileSize>0</FileSize>
<FileName/>
<HostName/>
<Channel>
<ChanId>0</ChanId>
<ChanNum/>
<CallSign/>
<IconURL/>
<ChannelName/>
<MplexId>0</MplexId>
<ServiceId>0</ServiceId>
<ATSCMajorChan>0</ATSCMajorChan>
<ATSCMinorChan>0</ATSCMinorChan>
<Format/>
<FrequencyId/>
<FineTune>0</FineTune>
<ChanFilters/>
<SourceId>0</SourceId>
<InputId>0</InputId>
<CommFree>false</CommFree>
<UseEIT>false</UseEIT>
<Visible>true</Visible>
<XMLTVID/>
<DefaultAuth/>
<Programs/>
</Channel>
<Recording>
<RecordedId>0</RecordedId>
<Status>Unknown</Status>
<Priority>0</Priority>
<StartTs xsi:nil="true"/>
<EndTs xsi:nil="true"/>
<FileSize>0</FileSize>
<FileName/>
<HostName/>
<LastModified xsi:nil="true"/>
<RecordId>0</RecordId>
<RecGroup/>
<PlayGroup/>
<StorageGroup/>
<RecType>0</RecType>
<DupInType>1</DupInType>
<DupMethod>1</DupMethod>
<EncoderId>0</EncoderId>
<EncoderName/>
<Profile/>
</Recording>
<Artwork>
<ArtworkInfos/>
</Artwork>
<Cast>
<CastMembers/>
</Cast>
</Program>

Also GetRecordedList?Descending=false&TitleRegEx=Yes+Man

ProgramList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" serializerVersion="1.1">
<StartIndex>0</StartIndex>
<Count>1</Count>
<TotalAvailable>1</TotalAvailable>
<AsOf>2017-01-24T17:58:43Z</AsOf>
<Version>29.20160903-1</Version>
<ProtoVer>91</ProtoVer>
<Programs>
<Program>
<StartTime>2016-12-01T19:00:00Z</StartTime>
<EndTime>2016-12-01T21:30:00Z</EndTime>
<Title>Yes Man</Title>
<SubTitle/>
<Category>Comedy</Category>
<CatType>movie</CatType>
<Repeat>false</Repeat>
<VideoProps>19</VideoProps>
<AudioProps>0</AudioProps>
<SubProps>1</SubProps>
<SeriesId/>
<ProgramId>MV002151300000</ProgramId>
<Stars>0.625</Stars>
<LastModified>2017-01-21T01:55:42Z</LastModified>
<ProgramFlags>543</ProgramFlags>
<Airdate>2008-01-01</Airdate>
<Description>
After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.
</Description>
<Inetref>tmdb3.py_10201</Inetref>
<Season>0</Season>
<Episode>0</Episode>
<TotalEpisodes>0</TotalEpisodes>
<FileSize>10845900480</FileSize>
<FileName>2667_20161201190000.ts</FileName>
<HostName>mc0</HostName>
<Channel>
<ChanId>2667</ChanId>
<ChanNum>667</ChanNum>
<CallSign>AMC</CallSign>
<IconURL>/Guide/GetChannelIcon?ChanId=2667</IconURL>
<ChannelName>AMC</ChannelName>
<MplexId>32767</MplexId>
<ServiceId>0</ServiceId>
<ATSCMajorChan>667</ATSCMajorChan>
<ATSCMinorChan>0</ATSCMinorChan>
<Format>Default</Format>
<FrequencyId>667</FrequencyId>
<FineTune>0</FineTune>
<ChanFilters/>
<SourceId>2</SourceId>
<InputId>0</InputId>
<CommFree>false</CommFree>
<UseEIT>false</UseEIT>
<Visible>true</Visible>
<XMLTVID>59337</XMLTVID>
<DefaultAuth/>
<Programs/>
</Channel>
<Recording>
<RecordedId>7805</RecordedId>
<Status>Recorded</Status>
<Priority>0</Priority>
<StartTs xsi:nil="true"/>
<EndTs>2016-12-01T21:30:00Z</EndTs>
<FileSize>10845900480</FileSize>
<FileName>2667_20161201190000.ts</FileName>
<HostName>mc0</HostName>
<LastModified>2017-01-21T01:55:42Z</LastModified>
<RecordId>2215</RecordId>
<RecGroup>Default</RecGroup>
<PlayGroup>Default</PlayGroup>
<StorageGroup>Default</StorageGroup>
<RecType>0</RecType>
<DupInType>0</DupInType>
<DupMethod>0</DupMethod>
<EncoderId>0</EncoderId>
<EncoderName/>
<Profile>Default</Profile>
</Recording>
<Artwork>
<ArtworkInfos>
<ArtworkInfo>
<URL>
/Content/GetImageFile?StorageGroup=Coverart&FileName=/tmdb3.py_10201_coverart.jpg
</URL>
<FileName>myth://Coverart@mc0/tmdb3.py_10201_coverart.jpg</FileName>
<StorageGroup>Coverart</StorageGroup>
<Type>coverart</Type>
</ArtworkInfo>
<ArtworkInfo>
<URL>
/Content/GetImageFile?StorageGroup=Fanart&FileName=/tmdb3.py_10201_fanart.jpg
</URL>
<FileName>myth://Fanart@mc0/tmdb3.py_10201_fanart.jpg</FileName>
<StorageGroup>Fanart</StorageGroup>
<Type>fanart</Type>
</ArtworkInfo>
</ArtworkInfos>
</Artwork>
<Cast>
<CastMembers>
<CastMember>
<Name>Danny Masterson</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Jamie Denbo</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Zooey Deschanel</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Fionnula Flanagan</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>John Cothran</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Jim Carrey</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Rhys Darby</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Bradley Cooper</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Terence Stamp</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Molly Sims</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Rocky Carroll</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Patrick Labyorteaux</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Sasha Alexander</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Spencer Garrett</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Brent Briscoe</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>John Michael Higgins</Name>
<CharacterName/>
<Role>actor</Role>
<TranslatedRole>Actors</TranslatedRole>
</CastMember>
<CastMember>
<Name>Peyton Reed</Name>
<CharacterName/>
<Role>director</Role>
<TranslatedRole>Director</TranslatedRole>
</CastMember>
<CastMember>
<Name>David Heyman</Name>
<CharacterName/>
<Role>producer</Role>
<TranslatedRole>Producer</TranslatedRole>
</CastMember>
<CastMember>
<Name>Richard D. Zanuck</Name>
<CharacterName/>
<Role>producer</Role>
<TranslatedRole>Producer</TranslatedRole>
</CastMember>
<CastMember>
<Name>Dana Goldberg</Name>
<CharacterName/>
<Role>executive_producer</Role>
<TranslatedRole>Executive Producer</TranslatedRole>
</CastMember>
<CastMember>
<Name>Marty P. Ewing</Name>
<CharacterName/>
<Role>executive_producer</Role>
<TranslatedRole>Executive Producer</TranslatedRole>
</CastMember>
<CastMember>
<Name>Bruce Berman</Name>
<CharacterName/>
<Role>executive_producer</Role>
<TranslatedRole>Executive Producer</TranslatedRole>
</CastMember>
</CastMembers>
</Cast>
</Program>
</Programs>
</ProgramList>
@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 24, 2017

Contributor
Contributor

dmfrey commented Jan 24, 2017

dmfrey added a commit that referenced this issue Jan 24, 2017

Use Recording StartTs and EndTs to calculate duration and validation
Added some tests to verify the data maps correctly with invalid data, also verify the validation errors gets populated correctly.

Changes #68
@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 24, 2017

Contributor

Sorry about that, let me try again...

GetRecordedList (for Yes Man only)

{'ProgramList': {'Programs': [{'SeriesId': '',
'Title': 'Yes Man',
'LastModified': '2017-01-21T01:55:42Z',
'TotalEpisodes': '0',
'Season': '0',
'Episode': '0',
'Stars': '0.625',
'Category': 'Comedy',
'Airdate': '2008-01-01',
'ProgramFlags': '543',
'FileSize': '10845900480',
'ProgramId': 'MV002151300000',
'Cast': {'CastMembers': [{'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Danny Masterson'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Jamie Denbo'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Zooey Deschanel'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Fionnula Flanagan'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'John Cothran'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Jim Carrey'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Rhys Darby'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Bradley Cooper'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Terence Stamp'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Molly Sims'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Rocky Carroll'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Patrick Labyorteaux'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Sasha Alexander'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Spencer Garrett'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Brent Briscoe'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'John Michael Higgins'}, {'CharacterName': '',
'TranslatedRole': 'Director',
'Role': 'director',
'Name': 'Peyton Reed'}, {'CharacterName': '',
'TranslatedRole': 'Producer',
'Role': 'producer',
'Name': 'David Heyman'}, {'CharacterName': '',
'TranslatedRole': 'Producer',
'Role': 'producer',
'Name': 'Richard D. Zanuck'}, {'CharacterName': '',
'TranslatedRole': 'Executive Producer',
'Role': 'executive_producer',
'Name': 'Dana Goldberg'}, {'CharacterName': '',
'TranslatedRole': 'Executive Producer',
'Role': 'executive_producer',
'Name': 'Marty P. Ewing'}, {'CharacterName': '',
'TranslatedRole': 'Executive Producer',
'Role': 'executive_producer',
'Name': 'Bruce Berman'}]}, 'VideoProps': '19',
'SubProps': '1',
'HostName': 'mc0',
'StartTime': '2016-12-01T19:00:00Z',
'Description': 'After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.',
'AudioProps': '0',
'Recording': {'Status': '-3',
'FileName': '2667_20161201190000.ts',
'PlayGroup': 'Default',
'LastModified': '2017-01-21T01:55:42Z',
'HostName': 'mc0',
'Profile': 'Default',
'EncoderId': '0',
'DupInType': '0',
'RecType': '0',
'EndTs': '2016-12-01T21:30:00Z',
'StartTs': '',
'RecGroup': 'Default',
'StorageGroup': 'Default',
'EncoderName': '',
'FileSize': '10845900480',
'RecordId': '2215',
'DupMethod': '0',
'Priority': '0',
'RecordedId': '7805'}, 'FileName': '2667_20161201190000.ts',
'Repeat': 'false',
'Artwork': {'ArtworkInfos': [{'FileName': 'myth://Coverart@mc0/tmdb3.py_10201_coverart.jpg',
'URL': '/Content/GetImageFile?StorageGroup=Coverart&FileName=/tmdb3.py_10201_coverart.jpg',
'Type': 'coverart',
'StorageGroup': 'Coverart'}, {'FileName': 'myth://Fanart@mc0/tmdb3.py_10201_fanart.jpg',
'URL': '/Content/GetImageFile?StorageGroup=Fanart&FileName=/tmdb3.py_10201_fanart.jpg',
'Type': 'fanart',
'StorageGroup': 'Fanart'}]}, 'SubTitle': '',
'Inetref': 'tmdb3.py_10201',
'Channel': {'CommFree': 'false',
'ChannelName': 'AMC',
'ATSCMinorChan': '0',
'SourceId': '2',
'Visible': 'true',
'ChanId': '2667',
'ATSCMajorChan': '667',
'Format': 'Default',
'ChanFilters': '',
'FrequencyId': '667',
'FineTune': '0',
'ServiceId': '0',
'Programs': [], 'ChanNum': '667',
'InputId': '0',
'DefaultAuth': '',
'XMLTVID': '59337',
'IconURL': '/Guide/GetChannelIcon?ChanId=2667',
'MplexId': '32767',
'CallSign': 'AMC',
'UseEIT': 'false'}, 'CatType': 'movie',
'EndTime': '2016-12-01T21:30:00Z'}

GetRecorded?RecordedId=7805

{'Program': {'Title': '',
'Inetref': '',
'EndTime': '2017-01-24T18:33:54Z',
'AudioProps': '0',
'Recording': {'RecType': '0',
'EncoderId': '0',
'DupInType': '1',
'StorageGroup': '',
'RecordedId': '0',
'FileName': '',
'PlayGroup': '',
'FileSize': '0',
'Status': '0',
'Priority': '0',
'Profile': '',
'EndTs': '',
'RecordId': '0',
'LastModified': '',
'DupMethod': '1',
'StartTs': '',
'EncoderName': '',
'RecGroup': '',
'HostName': ''}, 'TotalEpisodes': '0',
'StartTime': '2017-01-24T18:33:54Z',
'ProgramFlags': '0',
'LastModified': '2017-01-24T18:33:54Z',
'Cast': {'CastMembers': []}, 'Airdate': '',
'Artwork': {'ArtworkInfos': []}, 'Channel': {'ChanNum': '',
'UseEIT': 'false',
'FrequencyId': '',
'ServiceId': '0',
'ATSCMinorChan': '0',
'XMLTVID': '',
'Format': '',
'ChanId': '0',
'MplexId': '0',
'InputId': '0',
'DefaultAuth': '',
'Programs': [], 'CommFree': 'false',
'FineTune': '0',
'ATSCMajorChan': '0',
'IconURL': '',
'SourceId': '0',
'ChanFilters': '',
'ChannelName': '',
'Visible': 'true',
'CallSign': ''}, 'HostName': '',
'Category': '',
'Stars': '0',
'VideoProps': '0',
'Season': '0',
'FileName': '',
'FileSize': '0',
'Repeat': 'false',
'SubTitle': '',
'CatType': '',
'Description': '',
'Episode': '0',
'SubProps': '0',
'ProgramId': '',
'SeriesId': ''}}
Contributor

billmeek commented Jan 24, 2017

Sorry about that, let me try again...

GetRecordedList (for Yes Man only)

{'ProgramList': {'Programs': [{'SeriesId': '',
'Title': 'Yes Man',
'LastModified': '2017-01-21T01:55:42Z',
'TotalEpisodes': '0',
'Season': '0',
'Episode': '0',
'Stars': '0.625',
'Category': 'Comedy',
'Airdate': '2008-01-01',
'ProgramFlags': '543',
'FileSize': '10845900480',
'ProgramId': 'MV002151300000',
'Cast': {'CastMembers': [{'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Danny Masterson'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Jamie Denbo'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Zooey Deschanel'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Fionnula Flanagan'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'John Cothran'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Jim Carrey'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Rhys Darby'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Bradley Cooper'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Terence Stamp'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Molly Sims'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Rocky Carroll'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Patrick Labyorteaux'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Sasha Alexander'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Spencer Garrett'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'Brent Briscoe'}, {'CharacterName': '',
'TranslatedRole': 'Actors',
'Role': 'actor',
'Name': 'John Michael Higgins'}, {'CharacterName': '',
'TranslatedRole': 'Director',
'Role': 'director',
'Name': 'Peyton Reed'}, {'CharacterName': '',
'TranslatedRole': 'Producer',
'Role': 'producer',
'Name': 'David Heyman'}, {'CharacterName': '',
'TranslatedRole': 'Producer',
'Role': 'producer',
'Name': 'Richard D. Zanuck'}, {'CharacterName': '',
'TranslatedRole': 'Executive Producer',
'Role': 'executive_producer',
'Name': 'Dana Goldberg'}, {'CharacterName': '',
'TranslatedRole': 'Executive Producer',
'Role': 'executive_producer',
'Name': 'Marty P. Ewing'}, {'CharacterName': '',
'TranslatedRole': 'Executive Producer',
'Role': 'executive_producer',
'Name': 'Bruce Berman'}]}, 'VideoProps': '19',
'SubProps': '1',
'HostName': 'mc0',
'StartTime': '2016-12-01T19:00:00Z',
'Description': 'After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.',
'AudioProps': '0',
'Recording': {'Status': '-3',
'FileName': '2667_20161201190000.ts',
'PlayGroup': 'Default',
'LastModified': '2017-01-21T01:55:42Z',
'HostName': 'mc0',
'Profile': 'Default',
'EncoderId': '0',
'DupInType': '0',
'RecType': '0',
'EndTs': '2016-12-01T21:30:00Z',
'StartTs': '',
'RecGroup': 'Default',
'StorageGroup': 'Default',
'EncoderName': '',
'FileSize': '10845900480',
'RecordId': '2215',
'DupMethod': '0',
'Priority': '0',
'RecordedId': '7805'}, 'FileName': '2667_20161201190000.ts',
'Repeat': 'false',
'Artwork': {'ArtworkInfos': [{'FileName': 'myth://Coverart@mc0/tmdb3.py_10201_coverart.jpg',
'URL': '/Content/GetImageFile?StorageGroup=Coverart&FileName=/tmdb3.py_10201_coverart.jpg',
'Type': 'coverart',
'StorageGroup': 'Coverart'}, {'FileName': 'myth://Fanart@mc0/tmdb3.py_10201_fanart.jpg',
'URL': '/Content/GetImageFile?StorageGroup=Fanart&FileName=/tmdb3.py_10201_fanart.jpg',
'Type': 'fanart',
'StorageGroup': 'Fanart'}]}, 'SubTitle': '',
'Inetref': 'tmdb3.py_10201',
'Channel': {'CommFree': 'false',
'ChannelName': 'AMC',
'ATSCMinorChan': '0',
'SourceId': '2',
'Visible': 'true',
'ChanId': '2667',
'ATSCMajorChan': '667',
'Format': 'Default',
'ChanFilters': '',
'FrequencyId': '667',
'FineTune': '0',
'ServiceId': '0',
'Programs': [], 'ChanNum': '667',
'InputId': '0',
'DefaultAuth': '',
'XMLTVID': '59337',
'IconURL': '/Guide/GetChannelIcon?ChanId=2667',
'MplexId': '32767',
'CallSign': 'AMC',
'UseEIT': 'false'}, 'CatType': 'movie',
'EndTime': '2016-12-01T21:30:00Z'}

GetRecorded?RecordedId=7805

{'Program': {'Title': '',
'Inetref': '',
'EndTime': '2017-01-24T18:33:54Z',
'AudioProps': '0',
'Recording': {'RecType': '0',
'EncoderId': '0',
'DupInType': '1',
'StorageGroup': '',
'RecordedId': '0',
'FileName': '',
'PlayGroup': '',
'FileSize': '0',
'Status': '0',
'Priority': '0',
'Profile': '',
'EndTs': '',
'RecordId': '0',
'LastModified': '',
'DupMethod': '1',
'StartTs': '',
'EncoderName': '',
'RecGroup': '',
'HostName': ''}, 'TotalEpisodes': '0',
'StartTime': '2017-01-24T18:33:54Z',
'ProgramFlags': '0',
'LastModified': '2017-01-24T18:33:54Z',
'Cast': {'CastMembers': []}, 'Airdate': '',
'Artwork': {'ArtworkInfos': []}, 'Channel': {'ChanNum': '',
'UseEIT': 'false',
'FrequencyId': '',
'ServiceId': '0',
'ATSCMinorChan': '0',
'XMLTVID': '',
'Format': '',
'ChanId': '0',
'MplexId': '0',
'InputId': '0',
'DefaultAuth': '',
'Programs': [], 'CommFree': 'false',
'FineTune': '0',
'ATSCMajorChan': '0',
'IconURL': '',
'SourceId': '0',
'ChanFilters': '',
'ChannelName': '',
'Visible': 'true',
'CallSign': ''}, 'HostName': '',
'Category': '',
'Stars': '0',
'VideoProps': '0',
'Season': '0',
'FileName': '',
'FileSize': '0',
'Repeat': 'false',
'SubTitle': '',
'CatType': '',
'Description': '',
'Episode': '0',
'SubProps': '0',
'ProgramId': '',
'SeriesId': ''}}

dmfrey added a commit that referenced this issue Jan 24, 2017

dmfrey added a commit that referenced this issue Jan 24, 2017

Handle where RecordedId is an empty string
Since this is an integer, it should really be returning null from the server, but it is returning an empty string.  So the data model has been changed to make RecordedId a String, but provides suitable translation to integer.

Changes #68
@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 24, 2017

Contributor

@billmeek give this a try again. Now that there is adequate unit testing in there, i think it should be good.

Contributor

dmfrey commented Jan 24, 2017

@billmeek give this a try again. Now that there is adequate unit testing in there, i think it should be good.

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 25, 2017

Contributor

isValid is still true and I'm able to get to the last page (no
icon on the list page either.)

I deleted the app after clearing the data too, just in case something
stale was laying around.

Sending the JSON again for GetRecordedList
using curl (as you requested) not my api tool :

{"ProgramList": {"StartIndex": "0", "Count": "255", "TotalAvailable": "255", "AsOf": "2017-01-25T01:34:44Z", "Version": "29.20160903-1", "ProtoVer": "91", "Programs": [{"StartTime": "2016-12-01T19:00:00Z", "EndTime": "2016-12-01T21:30:00Z", "Title": "Yes Man", "SubTitle": "", "Category": "Comedy", "CatType": "movie", "Repeat": "false", "VideoProps": "19", "AudioProps": "0", "SubProps": "1", "SeriesId": "", "ProgramId": "MV002151300000", "Stars": "0.625", "LastModified": "2017-01-21T01:55:42Z", "ProgramFlags": "543", "Airdate": "2008-01-01", "Description": "After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.", "Inetref": "tmdb3.py_10201", "Season": "0", "Episode": "0", "TotalEpisodes": "0", "FileSize": "10845900480", "FileName": "2667_20161201190000.ts", "HostName": "mc0", "Channel": {"ChanId": "2667", "ChanNum": "667", "CallSign": "AMC", "IconURL": "\/Guide\/GetChannelIcon?ChanId=2667", "ChannelName": "AMC", "MplexId": "32767", "ServiceId": "0", "ATSCMajorChan": "667", "ATSCMinorChan": "0", "Format": "Default", "FrequencyId": "667", "FineTune": "0", "ChanFilters": "", "SourceId": "2", "InputId": "0", "CommFree": "false", "UseEIT": "false", "Visible": "true", "XMLTVID": "59337", "DefaultAuth": "", "Programs": []}, "Recording": {"RecordedId": "7805", "Status": "-3", "Priority": "0", "StartTs": "", "EndTs": "2016-12-01T21:30:00Z", "FileSize": "10845900480", "FileName": "2667_20161201190000.ts", "HostName": "mc0", "LastModified": "2017-01-21T01:55:42Z", "RecordId": "2215", "RecGroup": "Default", "PlayGroup": "Default", "StorageGroup": "Default", "RecType": "0", "DupInType": "0", "DupMethod": "0", "EncoderId": "0", "EncoderName": "", "Profile": "Default"}, "Artwork": {"ArtworkInfos": [{"URL": "\/Content\/GetImageFile?StorageGroup=Coverart&FileName=\/tmdb3.py_10201_coverart.jpg", "FileName": "myth:\/\/Coverart@mc0\/tmdb3.py_10201_coverart.jpg", "StorageGroup": "Coverart", "Type": "coverart"},{"URL": "\/Content\/GetImageFile?StorageGroup=Fanart&FileName=\/tmdb3.py_10201_fanart.jpg", "FileName": "myth:\/\/Fanart@mc0\/tmdb3.py_10201_fanart.jpg", "StorageGroup": "Fanart", "Type": "fanart"}]}, "Cast": {"CastMembers": [{"Name": "Danny Masterson", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Jamie Denbo", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Zooey Deschanel", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Fionnula Flanagan", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "John Cothran", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Jim Carrey", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Rhys Darby", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Bradley Cooper", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Terence Stamp", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Molly Sims", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Rocky Carroll", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Patrick Labyorteaux", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Sasha Alexander", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Spencer Garrett", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Brent Briscoe", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "John Michael Higgins", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Peyton Reed", "CharacterName": "", "Role": "director", "TranslatedRole": "Director"},{"Name": "David Heyman", "CharacterName": "", "Role": "producer", "TranslatedRole": "Producer"},{"Name": "Richard D. Zanuck", "CharacterName": "", "Role": "producer", "TranslatedRole": "Producer"},{"Name": "Dana Goldberg", "CharacterName": "", "Role": "executive_producer", "TranslatedRole": "Executive Producer"},{"Name": "Marty P. Ewing", "CharacterName": "", "Role": "executive_producer", "TranslatedRole": "Executive Producer"},{"Name": "Bruce Berman", "CharacterName": "", "Role": "executive_producer", "TranslatedRole": "Executive Producer"}]}}

curl -H "Accept:application/json" mc0:6544/Dvr/GetRecorded?RecordedId=7805

{"Program": {"StartTime": "2017-01-25T01:29:38Z", "EndTime": "2017-01-25T01:29:38Z", "Title": "", "SubTitle": "", "Category": "", "CatType": "", "Repeat": "false", "VideoProps": "0", "AudioProps": "0", "SubProps": "0", "SeriesId": "", "ProgramId": "", "Stars": "0", "LastModified": "2017-01-25T01:29:38Z", "ProgramFlags": "0", "Airdate": "", "Description": "", "Inetref": "", "Season": "0", "Episode": "0", "TotalEpisodes": "0", "FileSize": "0", "FileName": "", "HostName": "", "Channel": {"ChanId": "0", "ChanNum": "", "CallSign": "", "IconURL": "", "ChannelName": "", "MplexId": "0", "ServiceId": "0", "ATSCMajorChan": "0", "ATSCMinorChan": "0", "Format": "", "FrequencyId": "", "FineTune": "0", "ChanFilters": "", "SourceId": "0", "InputId": "0", "CommFree": "false", "UseEIT": "false", "Visible": "true", "XMLTVID": "", "DefaultAuth": "", "Programs": []}, "Recording": {"RecordedId": "0", "Status": "0", "Priority": "0", "StartTs": "", "EndTs": "", "FileSize": "0", "FileName": "", "HostName": "", "LastModified": "", "RecordId": "0", "RecGroup": "", "PlayGroup": "", "StorageGroup": "", "RecType": "0", "DupInType": "1", "DupMethod": "1", "EncoderId": "0", "EncoderName": "", "Profile": ""}, "Artwork": {"ArtworkInfos": []}, "Cast": {"CastMembers": []}}}
Contributor

billmeek commented Jan 25, 2017

isValid is still true and I'm able to get to the last page (no
icon on the list page either.)

I deleted the app after clearing the data too, just in case something
stale was laying around.

Sending the JSON again for GetRecordedList
using curl (as you requested) not my api tool :

{"ProgramList": {"StartIndex": "0", "Count": "255", "TotalAvailable": "255", "AsOf": "2017-01-25T01:34:44Z", "Version": "29.20160903-1", "ProtoVer": "91", "Programs": [{"StartTime": "2016-12-01T19:00:00Z", "EndTime": "2016-12-01T21:30:00Z", "Title": "Yes Man", "SubTitle": "", "Category": "Comedy", "CatType": "movie", "Repeat": "false", "VideoProps": "19", "AudioProps": "0", "SubProps": "1", "SeriesId": "", "ProgramId": "MV002151300000", "Stars": "0.625", "LastModified": "2017-01-21T01:55:42Z", "ProgramFlags": "543", "Airdate": "2008-01-01", "Description": "After attending a self-help seminar, a negative-thinking man (Jim Carrey) brings about an amazing change in his life by saying yes to everything.", "Inetref": "tmdb3.py_10201", "Season": "0", "Episode": "0", "TotalEpisodes": "0", "FileSize": "10845900480", "FileName": "2667_20161201190000.ts", "HostName": "mc0", "Channel": {"ChanId": "2667", "ChanNum": "667", "CallSign": "AMC", "IconURL": "\/Guide\/GetChannelIcon?ChanId=2667", "ChannelName": "AMC", "MplexId": "32767", "ServiceId": "0", "ATSCMajorChan": "667", "ATSCMinorChan": "0", "Format": "Default", "FrequencyId": "667", "FineTune": "0", "ChanFilters": "", "SourceId": "2", "InputId": "0", "CommFree": "false", "UseEIT": "false", "Visible": "true", "XMLTVID": "59337", "DefaultAuth": "", "Programs": []}, "Recording": {"RecordedId": "7805", "Status": "-3", "Priority": "0", "StartTs": "", "EndTs": "2016-12-01T21:30:00Z", "FileSize": "10845900480", "FileName": "2667_20161201190000.ts", "HostName": "mc0", "LastModified": "2017-01-21T01:55:42Z", "RecordId": "2215", "RecGroup": "Default", "PlayGroup": "Default", "StorageGroup": "Default", "RecType": "0", "DupInType": "0", "DupMethod": "0", "EncoderId": "0", "EncoderName": "", "Profile": "Default"}, "Artwork": {"ArtworkInfos": [{"URL": "\/Content\/GetImageFile?StorageGroup=Coverart&FileName=\/tmdb3.py_10201_coverart.jpg", "FileName": "myth:\/\/Coverart@mc0\/tmdb3.py_10201_coverart.jpg", "StorageGroup": "Coverart", "Type": "coverart"},{"URL": "\/Content\/GetImageFile?StorageGroup=Fanart&FileName=\/tmdb3.py_10201_fanart.jpg", "FileName": "myth:\/\/Fanart@mc0\/tmdb3.py_10201_fanart.jpg", "StorageGroup": "Fanart", "Type": "fanart"}]}, "Cast": {"CastMembers": [{"Name": "Danny Masterson", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Jamie Denbo", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Zooey Deschanel", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Fionnula Flanagan", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "John Cothran", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Jim Carrey", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Rhys Darby", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Bradley Cooper", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Terence Stamp", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Molly Sims", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Rocky Carroll", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Patrick Labyorteaux", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Sasha Alexander", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Spencer Garrett", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Brent Briscoe", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "John Michael Higgins", "CharacterName": "", "Role": "actor", "TranslatedRole": "Actors"},{"Name": "Peyton Reed", "CharacterName": "", "Role": "director", "TranslatedRole": "Director"},{"Name": "David Heyman", "CharacterName": "", "Role": "producer", "TranslatedRole": "Producer"},{"Name": "Richard D. Zanuck", "CharacterName": "", "Role": "producer", "TranslatedRole": "Producer"},{"Name": "Dana Goldberg", "CharacterName": "", "Role": "executive_producer", "TranslatedRole": "Executive Producer"},{"Name": "Marty P. Ewing", "CharacterName": "", "Role": "executive_producer", "TranslatedRole": "Executive Producer"},{"Name": "Bruce Berman", "CharacterName": "", "Role": "executive_producer", "TranslatedRole": "Executive Producer"}]}}

curl -H "Accept:application/json" mc0:6544/Dvr/GetRecorded?RecordedId=7805

{"Program": {"StartTime": "2017-01-25T01:29:38Z", "EndTime": "2017-01-25T01:29:38Z", "Title": "", "SubTitle": "", "Category": "", "CatType": "", "Repeat": "false", "VideoProps": "0", "AudioProps": "0", "SubProps": "0", "SeriesId": "", "ProgramId": "", "Stars": "0", "LastModified": "2017-01-25T01:29:38Z", "ProgramFlags": "0", "Airdate": "", "Description": "", "Inetref": "", "Season": "0", "Episode": "0", "TotalEpisodes": "0", "FileSize": "0", "FileName": "", "HostName": "", "Channel": {"ChanId": "0", "ChanNum": "", "CallSign": "", "IconURL": "", "ChannelName": "", "MplexId": "0", "ServiceId": "0", "ATSCMajorChan": "0", "ATSCMinorChan": "0", "Format": "", "FrequencyId": "", "FineTune": "0", "ChanFilters": "", "SourceId": "0", "InputId": "0", "CommFree": "false", "UseEIT": "false", "Visible": "true", "XMLTVID": "", "DefaultAuth": "", "Programs": []}, "Recording": {"RecordedId": "0", "Status": "0", "Priority": "0", "StartTs": "", "EndTs": "", "FileSize": "0", "FileName": "", "HostName": "", "LastModified": "", "RecordId": "0", "RecGroup": "", "PlayGroup": "", "StorageGroup": "", "RecType": "0", "DupInType": "1", "DupMethod": "1", "EncoderId": "0", "EncoderName": "", "Profile": ""}, "Artwork": {"ArtworkInfos": []}, "Cast": {"CastMembers": []}}}

dmfrey added a commit that referenced this issue Jan 25, 2017

Feature/issue 231 connectivity check (#235)
* prepare for 2.0.3

* Bugfix/issue 122 (#133)

* fixes #122

added back legacy attributes for older android sdk

* fixes #128

* fixes #122

* Fixes #122

* fixes #135 (#136)

* Update versions for release

* Update screenshots for release

* Update changelog for release

* Update version for release

* Update resources for release

* german translation of 2.1.1 changelog (#183)

* Fix search results on Android TV

Search results were failing to render due to not having the
appropriate leanback theme applied to the search results
activity. Once reapplied, it was found that search results
were not unique. Fixing how the search result db cleaned up
the existing entries resolved this. The latest leanback support
library was also applied, as was setting the search button
color to the defined accent color. Also, a merge issue was
identified which prevented search history from displaying and
was resolved.

fixes #184

* Prepare for release

* Prepare for release

* Prepare for release v2.2.1

* Update versions for release

changes #210

* Update screenshots and changelog for release

changes #210

* Update build options for release

changes #210

* Prepare for release

* Prepare for release

* Refactor duplicate code to a common base class

Changes #231

* Add Connection Troubleshooter

The troubleshootter is accessible from the navigation drawer, from the menu when viewing a media item details, or from a snackbar whenever a connection issue is reported.

Changes #231

* Add timing delays and animations to indicate progress

Changes #68

* Add timing delays and animations to indicate progress

Changes #231

* Add Backend Language Verification

MythTV uses UTF-8. It has previously been reported by users that they were having difficulting displaying the data and the result was their character encoding was not in UTF-8. This will help to diagnose this issue.

Fixes #231

* Add minimum mythtv version check

Changes #231

* Update Airplane Mode text

* Reword Troubleshooting text (again.)

dmfrey added a commit that referenced this issue Jan 25, 2017

dmfrey added a commit that referenced this issue Jan 26, 2017

dmfrey added a commit that referenced this issue Jan 26, 2017

dmfrey added a commit that referenced this issue Jan 26, 2017

Feature/issue 231 connectivity check (#236)
* prepare for 2.0.3

* Bugfix/issue 122 (#133)

* fixes #122

added back legacy attributes for older android sdk

* fixes #128

* fixes #122

* Fixes #122

* fixes #135 (#136)

* Update versions for release

* Update screenshots for release

* Update changelog for release

* Update version for release

* Update resources for release

* german translation of 2.1.1 changelog (#183)

* Fix search results on Android TV

Search results were failing to render due to not having the
appropriate leanback theme applied to the search results
activity. Once reapplied, it was found that search results
were not unique. Fixing how the search result db cleaned up
the existing entries resolved this. The latest leanback support
library was also applied, as was setting the search button
color to the defined accent color. Also, a merge issue was
identified which prevented search history from displaying and
was resolved.

fixes #184

* Prepare for release

* Prepare for release

* Prepare for release v2.2.1

* Update versions for release

changes #210

* Update screenshots and changelog for release

changes #210

* Update build options for release

changes #210

* Prepare for release

* Prepare for release

* Refactor duplicate code to a common base class

Changes #231

* Add Connection Troubleshooter

The troubleshootter is accessible from the navigation drawer, from the menu when viewing a media item details, or from a snackbar whenever a connection issue is reported.

Changes #231

* Add timing delays and animations to indicate progress

Changes #68

* Add timing delays and animations to indicate progress

Changes #231

* Add Backend Language Verification

MythTV uses UTF-8. It has previously been reported by users that they were having difficulting displaying the data and the result was their character encoding was not in UTF-8. This will help to diagnose this issue.

Fixes #231

* Add minimum mythtv version check

Changes #231

* Update Airplane Mode text

* Reword Troubleshooting text (again.)

* Add JsonSyntexException handler for old versions of MythTV that do not have this url

Fixes #231

* Add JsonSyntexException handler for old versions of MythTV that do not have this url

Fixes #231
@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 26, 2017

Contributor

@billmeek Give this a test again when you get a chance.

Contributor

dmfrey commented Jan 26, 2017

@billmeek Give this a test again when you get a chance.

dmfrey added a commit that referenced this issue Jan 26, 2017

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 26, 2017

Contributor

Looks good. I get the circled ! in the episode list and pressing
the episode generates the "Thus episode has corrupt data: StartTs".
Minor typo (Thus not This.) I can fix that, but...

How 'bout saying ...has corrupt backend data... just to make it
clear that the app has detected a fault there, not with the app?

Looking at the code, it appears that the messages aren't translatable.
Guessing that this is temporary while the feature is getting working.

Contributor

billmeek commented Jan 26, 2017

Looks good. I get the circled ! in the episode list and pressing
the episode generates the "Thus episode has corrupt data: StartTs".
Minor typo (Thus not This.) I can fix that, but...

How 'bout saying ...has corrupt backend data... just to make it
clear that the app has detected a fault there, not with the app?

Looking at the code, it appears that the messages aren't translatable.
Guessing that this is temporary while the feature is getting working.

dmfrey added a commit that referenced this issue Jan 26, 2017

@dmfrey

This comment has been minimized.

Show comment
Hide comment
@dmfrey

dmfrey Jan 26, 2017

Contributor
Contributor

dmfrey commented Jan 26, 2017

@billmeek

This comment has been minimized.

Show comment
Hide comment
@billmeek

billmeek Jan 26, 2017

Contributor

The messages look great now. To answer your email question,
I believe you've designed this so that fields could be added in
the future, if required. I don't see adding any new ones now.

I reviewed the fields in MediaItemModel too and assume that
would be the 'list' of fields available for validation.

Contributor

billmeek commented Jan 26, 2017

The messages look great now. To answer your email question,
I believe you've designed this so that fields could be added in
the future, if required. I don't see adding any new ones now.

I reviewed the fields in MediaItemModel too and assume that
would be the 'list' of fields available for validation.

@billmeek billmeek closed this Jan 26, 2017

dmfrey added a commit that referenced this issue Jan 26, 2017

Feature/issue 68 alert corrupt data (#238)
* prepare for 2.0.3

* Bugfix/issue 122 (#133)

* fixes #122

added back legacy attributes for older android sdk

* fixes #128

* fixes #122

* Fixes #122

* fixes #135 (#136)

* Update versions for release

* Update screenshots for release

* Update changelog for release

* Update version for release

* Update resources for release

* german translation of 2.1.1 changelog (#183)

* Fix search results on Android TV

Search results were failing to render due to not having the
appropriate leanback theme applied to the search results
activity. Once reapplied, it was found that search results
were not unique. Fixing how the search result db cleaned up
the existing entries resolved this. The latest leanback support
library was also applied, as was setting the search button
color to the defined accent color. Also, a merge issue was
identified which prevented search history from displaying and
was resolved.

fixes #184

* Prepare for release

* Prepare for release

* Prepare for release v2.2.1

* Update versions for release

changes #210

* Update screenshots and changelog for release

changes #210

* Update build options for release

changes #210

* Prepare for release

* Prepare for release

* Fix Mark Watched status web service calls

Fixes #225

* merge from develop (#230)

* Master (#228)

* prepare for 2.0.3

* Bugfix/issue 122 (#133)

* fixes #122

added back legacy attributes for older android sdk

* fixes #128

* fixes #122

* Fixes #122

* fixes #135 (#136)

* Update versions for release

* Update screenshots for release

* Update changelog for release

* Update version for release

* Update resources for release

* german translation of 2.1.1 changelog (#183)

* Fix search results on Android TV

Search results were failing to render due to not having the
appropriate leanback theme applied to the search results
activity. Once reapplied, it was found that search results
were not unique. Fixing how the search result db cleaned up
the existing entries resolved this. The latest leanback support
library was also applied, as was setting the search button
color to the defined accent color. Also, a merge issue was
identified which prevented search history from displaying and
was resolved.

fixes #184

* Prepare for release

* Prepare for release

* Prepare for release v2.2.1

* Update versions for release

changes #210

* Update screenshots and changelog for release

changes #210

* Update build options for release

changes #210

* Prepare for release

* Prepare for release

* Bugfix/issue 225 (#227)

* prepare for 2.0.3

* Bugfix/issue 122 (#133)

* fixes #122

added back legacy attributes for older android sdk

* fixes #128

* fixes #122

* Fixes #122

* fixes #135 (#136)

* Update versions for release

* Update screenshots for release

* Update changelog for release

* Update version for release

* Update resources for release

* german translation of 2.1.1 changelog (#183)

* Fix search results on Android TV

Search results were failing to render due to not having the
appropriate leanback theme applied to the search results
activity. Once reapplied, it was found that search results
were not unique. Fixing how the search result db cleaned up
the existing entries resolved this. The latest leanback support
library was also applied, as was setting the search button
color to the defined accent color. Also, a merge issue was
identified which prevented search history from displaying and
was resolved.

fixes #184

* Prepare for release

* Prepare for release

* Prepare for release v2.2.1

* Update versions for release

changes #210

* Update screenshots and changelog for release

changes #210

* Update build options for release

changes #210

* Prepare for release

* Prepare for release

* Fix Mark Watched status web service calls

Fixes #225

* Update README.md (#229)

* Add field validation messages

Changes #68

* Add check for when media type cannot be determined

Changes #68

* Add checks to only perform tasks if the mediaItemModel is valid

This change prevents images from loading or further calls to the backend for status on HLS or marking an episode watched or unwatched.

Changes #68

* Prevent playback if MediaItemModel is invalid

Changes #68

* Fix isValid() check

Fixes #68

* Show snackbar when data is not valid

Fixes #68

* Add status of isValid to toString

Changes #68

* Use Recording StartTs and EndTs to calculate duration and validation

Added some tests to verify the data maps correctly with invalid data, also verify the validation errors gets populated correctly.

Changes #68

* Fix Test Case

Changes #68

* Handle where RecordedId is an empty string

Since this is an integer, it should really be returning null from the server, but it is returning an empty string.  So the data model has been changed to make RecordedId a String, but provides suitable translation to integer.

Changes #68

* Fix merge issue

Changes #68

* Add test case with backend data from @billmeek

Changes #68

* Fix check for RecordedId

Changes #68

* Fix corupt data snackbars not displaying

Changes #68

* Externalize string values to strings.xml

Changes #68

* Add test for Upcoming not getting marked valid

Programs and videos each get converted to MediaItems.  The same validations were present across all types. Upcoming is just a flag on the Program entries. The RecordedId needed to be ignored for Upcoming programs as one has not been assigned to the programs yet.

Fixes #237
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment