sync model

This commit is contained in:
Luke Pulverenti 2015-03-30 14:18:45 -04:00
parent 6f910007d6
commit 424be1953d
27 changed files with 814 additions and 272 deletions

497
.idea/workspace.xml generated
View File

@ -7,11 +7,67 @@
</component>
<component name="ChangeListManager">
<list default="true" id="5b626835-6518-4586-bf6c-5bbba32974d2" name="Default" comment="">
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\AndroidApiClient$1.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\AndroidApiClient.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\AndroidConnectionManager.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\AndroidCredentialProvider.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\AndroidDevice.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\AndroidNetworkConnection.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\FindServersRunnable.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\GsonJsonSerializer.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\OkHttpStack.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\UploadFileRunnable.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\VolleyErrorListener.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\VolleyHttpClient.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\VolleyStringListener.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\VolleyStringRequest.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\images\DiskLruImageCache.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\images\ImageCacheManager$1.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\images\ImageCacheManager$CacheType.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\images\ImageCacheManager.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\images\LruBitmapCache.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\profiles\AndroidProfile.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\profiles\Api16Builder.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\profiles\Api21Builder.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\sync\Authenticator.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\sync\AuthenticatorService.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\sync\ISyncLoggerFactory.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\sync\MediaContentProvider.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\sync\MediaSyncAdapter.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\sync\MediaSyncService.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\sync\MultiServerSyncProgress.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\sync\OnDemandSync.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\sync\PeriodicSync.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\sync\data\AndroidAssetManager.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\sync\data\AndroidFileRepository.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\sync\data\AndroidImageFileRepository.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\sync\data\ItemRepository.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\sync\data\UserActionRepository.class" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\MediaBrowser.ApiClient.Java\out\classes\Production\android\mediabrowser\apiinteraction\android\sync\data\UserRepository.class" afterPath="" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/out/artifacts/jar/emby.apiclient.android.jar" afterPath="$PROJECT_DIR$/out/artifacts/jar/emby.apiclient.android.jar" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/out/artifacts/jar/emby.apiclient.jar" afterPath="$PROJECT_DIR$/out/artifacts/jar/emby.apiclient.jar" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/apiinteraction/ApiClient.java" afterPath="$PROJECT_DIR$/src/mediabrowser/apiinteraction/ApiClient.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/dlna/ConditionProcessor.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/dlna/ConditionProcessor.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/dlna/DeviceProfile.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/dlna/DeviceProfile.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/configuration/EncodingOptions.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/configuration/EncodingOptions.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/GetPlaybackInfoResponse.java" afterPath="$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/GetPlaybackInfoResponse.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/sync/LocalItem.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/sync/LocalItem.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/dto/MediaSourceInfo.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/dto/MediaSourceInfo.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/dto/MediaSourceType.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/dto/MediaSourceType.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/entities/MediaStream.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/entities/MediaStream.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/mediainfo/PlaybackInfoRequest.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/mediainfo/PlaybackInfoRequest.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/mediainfo/PlaybackInfoResponse.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/mediainfo/PlaybackInfoResponse.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/PlaybackManager.java" afterPath="$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/PlaybackManager.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamInfoSorterComparator.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamInfoSorterComparator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/session/PlaybackProgressInfo.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/session/PlaybackProgressInfo.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/session/PlaybackStopInfo.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/session/PlaybackStopInfo.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/dlna/ProfileConditionValue.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/dlna/ProfileConditionValue.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/ReportPlaybackStopResponse.java" afterPath="$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/ReportPlaybackStopResponse.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/StopTranscodingResponse.java" afterPath="$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/StopTranscodingResponse.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamBuilder.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamBuilder.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamInfo.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamInfo.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/dlna/SubtitleProfile.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/dlna/SubtitleProfile.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/model/dlna/SubtitleStreamInfo.java" afterPath="$PROJECT_DIR$/src/mediabrowser/model/dlna/SubtitleStreamInfo.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/server/mediasync/SyncDataInnerResponse.java" afterPath="$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/server/mediasync/SyncDataInnerResponse.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
</list>
<ignored path="MediaBrowser.ApiClient.Java.iws" />
@ -39,41 +95,104 @@
</component>
<component name="FileEditorManager">
<leaf>
<file leaf-file-name="StreamInfoSorter.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamInfoSorter.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="391">
<caret line="13" column="0" selection-start-line="13" selection-start-column="0" selection-end-line="13" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="PlaybackManager.java" pinned="false" current-in-tab="true">
<file leaf-file-name="PlaybackManager.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/PlaybackManager.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.6686047" vertical-offset="1605" max-vertical-offset="3638">
<caret line="157" column="0" selection-start-line="157" selection-start-column="0" selection-end-line="157" selection-end-column="0" />
<state vertical-scroll-proportion="-15.344828" vertical-offset="2530" max-vertical-offset="3842">
<caret line="197" column="33" selection-start-line="197" selection-start-column="33" selection-end-line="197" selection-end-column="33" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="StopTranscodingResponse.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/StopTranscodingResponse.java">
<file leaf-file-name="StreamBuilder.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamBuilder.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="901">
<caret line="20" column="11" selection-start-line="20" selection-start-column="11" selection-end-line="20" selection-end-column="11" />
<state vertical-scroll-proportion="0.0" vertical-offset="10090" max-vertical-offset="15742">
<caret line="623" column="38" selection-start-line="623" selection-start-column="38" selection-end-line="623" selection-end-column="38" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="StreamInfo.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamInfo.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="3834" max-vertical-offset="11101">
<caret line="440" column="24" selection-start-line="440" selection-start-column="24" selection-end-line="440" selection-end-column="24" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ReportPlaybackStopResponse.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/ReportPlaybackStopResponse.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="935">
<caret line="36" column="82" selection-start-line="36" selection-start-column="82" selection-end-line="36" selection-end-column="82" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="MediaSync.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/server/mediasync/MediaSync.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="616" max-vertical-offset="8721">
<caret line="534" column="9" selection-start-line="534" selection-start-column="9" selection-end-line="534" selection-end-column="9" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="SecondSyncDataResponse.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/server/mediasync/SecondSyncDataResponse.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="595">
<caret line="10" column="13" selection-start-line="10" selection-start-column="13" selection-end-line="10" selection-end-column="13" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="MediaSyncProgress.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/server/mediasync/MediaSyncProgress.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="680">
<caret line="8" column="13" selection-start-line="8" selection-start-column="13" selection-end-line="8" selection-end-column="13" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="SyncDataInnerResponse.java" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/server/mediasync/SyncDataInnerResponse.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.3813495" vertical-offset="7" max-vertical-offset="1326">
<caret line="39" column="15" selection-start-line="39" selection-start-column="15" selection-end-line="39" selection-end-column="15" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="LocalItem.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/sync/LocalItem.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1309">
<caret line="96" column="50" selection-start-line="96" selection-start-column="50" selection-end-line="96" selection-end-column="50" />
<folding>
<element signature="e#1818#1819#0" expanded="true" />
<element signature="e#1847#1848#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="GetPlaybackInfoResponse.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/GetPlaybackInfoResponse.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1020">
<caret line="24" column="43" selection-start-line="24" selection-start-column="43" selection-end-line="24" selection-end-column="43" />
<state vertical-scroll-proportion="0.0" vertical-offset="816" max-vertical-offset="1020">
<caret line="48" column="63" selection-start-line="48" selection-start-column="63" selection-end-line="48" selection-end-column="63" />
<folding>
<element signature="imports" expanded="true" />
</folding>
@ -81,42 +200,6 @@
</provider>
</entry>
</file>
<file leaf-file-name="ChainedComparator.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/dlna/ChainedComparator.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="578">
<caret line="6" column="13" selection-start-line="6" selection-start-column="13" selection-end-line="6" selection-end-column="13" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="StreamInfoSorterComparator.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamInfoSorterComparator.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1037">
<caret line="20" column="54" selection-start-line="20" selection-start-column="54" selection-end-line="20" selection-end-column="54" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#271#272#0" expanded="true" />
<element signature="e#296#297#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="BaseStreamInfoSorter.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/dlna/BaseStreamInfoSorter.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="323">
<caret line="4" column="22" selection-start-line="4" selection-start-column="22" selection-end-line="4" selection-end-column="22" />
<folding />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="Git.Settings">
@ -125,13 +208,10 @@
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/ReportPlaybackStopResponse.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/IConnectionManager.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/connectionmanager/DeviceResumeFromSleepObservable.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/connectionmanager/ConnectionManager.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/data/comparators/NameComparator.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/data/comparators/SortNameComparator.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/StopTranscodingResponse.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/model/results/ReadySyncItemsResult.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/data/ILocalAssetManager.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/data/NullAssetManager.java" />
@ -162,11 +242,8 @@
<option value="$PROJECT_DIR$/src/mediabrowser/model/tasks/TaskTriggerInfo.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/model/dto/BaseItemDto.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/data/LocalAssetManager.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamBuilder.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/model/dlna/profiles/DefaultProfile.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/model/apiclient/ServerInfo.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamInfo.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/ApiClient.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/model/apiclient/ServerCredentials.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/model/dlna/BaseStreamInfoSorter.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/model/dlna/ChainedComparator.java" />
@ -174,8 +251,14 @@
<option value="$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamInfoSorter.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamInfoSorterComparator.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/Video.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/StopTranscodingResponse.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/GetPlaybackInfoResponse.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/server/mediasync/SyncDataInnerResponse.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/ApiClient.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/PlaybackManager.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamBuilder.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/ReportPlaybackStopResponse.java" />
<option value="$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamInfo.java" />
</list>
</option>
</component>
@ -282,6 +365,96 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="MediaBrowser.ApiClient.Java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="MediaBrowser.ApiClient.Java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="mediabrowser" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="apiinteraction" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="sync" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="MediaBrowser.ApiClient.Java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="MediaBrowser.ApiClient.Java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="mediabrowser" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="apiinteraction" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="sync" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="server" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="MediaBrowser.ApiClient.Java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="MediaBrowser.ApiClient.Java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="mediabrowser" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="apiinteraction" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="sync" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="server" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="mediasync" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="MediaBrowser.ApiClient.Java" />
@ -569,7 +742,7 @@
</component>
<component name="ToolWindowManager">
<frame x="54" y="-8" width="2514" height="1456" extended-state="0" />
<editor active="false" />
<editor active="true" />
<layout>
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
@ -581,20 +754,20 @@
<window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.19135308" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.21306607" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.21306607" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
</layout>
</component>
<component name="Vcs.Log.UiProperties">
@ -624,41 +797,6 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/android/src/mediabrowser/apiinteraction/android/images/DiskLruImageCache.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="2635">
<caret line="112" column="0" selection-start-line="112" selection-start-column="0" selection-end-line="112" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/data/IItemRepository.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="527">
<caret line="12" column="21" selection-start-line="12" selection-start-column="14" selection-end-line="12" selection-end-column="21" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/tangible/DotNetToJavaStringHelper.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.3328279" vertical-offset="71" max-vertical-offset="5865">
<caret line="33" column="25" selection-start-line="33" selection-start-column="25" selection-end-line="33" selection-end-column="25" />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/AppData/Local/Android/sdk/sources/android-21/java/util/ArrayList.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.3328279" vertical-offset="7857" max-vertical-offset="10863">
<caret line="515" column="29" selection-start-line="515" selection-start-column="29" selection-end-line="515" selection-end-column="29" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/sync/LocalItemQuery.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.025777103" vertical-offset="0" max-vertical-offset="1319">
<caret line="2" column="13" selection-start-line="2" selection-start-column="13" selection-end-line="2" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/sync/LocalItemInfo.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.025777103" vertical-offset="0" max-vertical-offset="1319">
@ -757,13 +895,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/server/mediasync/MediaSync.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.02868217" vertical-offset="4791" max-vertical-offset="7667">
<caret line="381" column="51" selection-start-line="381" selection-start-column="51" selection-end-line="381" selection-end-column="51" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/data/NullAssetManager.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="2074">
@ -775,7 +906,6 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1309">
<caret line="43" column="0" selection-start-line="43" selection-start-column="0" selection-end-line="43" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
@ -811,10 +941,6 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="532" max-vertical-offset="1581">
<caret line="72" column="47" selection-start-line="72" selection-start-column="47" selection-end-line="85" selection-end-column="9" />
<folding>
<element signature="e#1315#1316#0" expanded="false" />
<element signature="e#1364#1365#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
@ -822,7 +948,6 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.47156936" vertical-offset="398" max-vertical-offset="1717">
<caret line="72" column="45" selection-start-line="72" selection-start-column="45" selection-end-line="72" selection-end-column="45" />
<folding />
</state>
</provider>
</entry>
@ -830,7 +955,6 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.4253222" vertical-offset="0" max-vertical-offset="1319">
<caret line="53" column="23" selection-start-line="53" selection-start-column="23" selection-end-line="53" selection-end-column="23" />
<folding />
</state>
</provider>
</entry>
@ -838,7 +962,6 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.09021986" vertical-offset="0" max-vertical-offset="1319">
<caret line="11" column="47" selection-start-line="11" selection-start-column="47" selection-end-line="11" selection-end-column="47" />
<folding />
</state>
</provider>
</entry>
@ -846,7 +969,6 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="459" max-vertical-offset="4743">
<caret line="37" column="5" selection-start-line="37" selection-start-column="5" selection-end-line="37" selection-end-column="5" />
<folding />
</state>
</provider>
</entry>
@ -854,7 +976,6 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.21910538" vertical-offset="0" max-vertical-offset="1319">
<caret line="22" column="37" selection-start-line="22" selection-start-column="37" selection-end-line="22" selection-end-column="37" />
<folding />
</state>
</provider>
</entry>
@ -862,7 +983,6 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="544" max-vertical-offset="2754">
<caret line="37" column="42" selection-start-line="37" selection-start-column="42" selection-end-line="37" selection-end-column="42" />
<folding />
</state>
</provider>
</entry>
@ -870,9 +990,6 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="476">
<caret line="16" column="32" selection-start-line="16" selection-start-column="32" selection-end-line="16" selection-end-column="32" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
@ -880,7 +997,6 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="-0.45640635" vertical-offset="993" max-vertical-offset="2312">
<caret line="32" column="48" selection-start-line="32" selection-start-column="48" selection-end-line="32" selection-end-column="48" />
<folding />
</state>
</provider>
</entry>
@ -888,7 +1004,6 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.6444276" vertical-offset="0" max-vertical-offset="1319">
<caret line="77" column="41" selection-start-line="77" selection-start-column="41" selection-end-line="77" selection-end-column="41" />
<folding />
</state>
</provider>
</entry>
@ -896,7 +1011,6 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.49886277" vertical-offset="22037" max-vertical-offset="23647">
<caret line="2272" column="80" selection-start-line="2272" selection-start-column="80" selection-end-line="2272" selection-end-column="80" />
<folding />
</state>
</provider>
</entry>
@ -904,15 +1018,6 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="6601" max-vertical-offset="11424">
<caret line="448" column="49" selection-start-line="448" selection-start-column="49" selection-end-line="448" selection-end-column="49" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamBuilder.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="9767" max-vertical-offset="15283">
<caret line="626" column="5" selection-start-line="626" selection-start-column="5" selection-end-line="626" selection-end-column="5" />
<folding />
</state>
</provider>
</entry>
@ -920,7 +1025,6 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.03420523" vertical-offset="0" max-vertical-offset="1139">
<caret line="2" column="8" selection-start-line="2" selection-start-column="8" selection-end-line="2" selection-end-column="8" />
<folding />
</state>
</provider>
</entry>
@ -932,59 +1036,31 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamInfo.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.12327718" vertical-offset="3936" max-vertical-offset="11186">
<caret line="441" column="158" selection-start-line="441" selection-start-column="158" selection-end-line="441" selection-end-column="158" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/ApiClient.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="39768" max-vertical-offset="45237">
<caret line="2373" column="68" selection-start-line="2373" selection-start-column="68" selection-end-line="2373" selection-end-column="68" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/apiclient/ServerCredentials.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="704" max-vertical-offset="2023">
<caret line="99" column="17" selection-start-line="99" selection-start-column="17" selection-end-line="99" selection-end-column="17" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/dlna/BaseStreamInfoSorter.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="323">
<state vertical-scroll-proportion="0.051554207" vertical-offset="0" max-vertical-offset="1319">
<caret line="4" column="22" selection-start-line="4" selection-start-column="22" selection-end-line="4" selection-end-column="22" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamInfoSorterComparator.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1037">
<state vertical-scroll-proportion="0.25777104" vertical-offset="0" max-vertical-offset="1319">
<caret line="20" column="54" selection-start-line="20" selection-start-column="54" selection-end-line="20" selection-end-column="54" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#271#272#0" expanded="true" />
<element signature="e#296#297#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/dlna/ChainedComparator.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="578">
<state vertical-scroll-proportion="0.07733131" vertical-offset="0" max-vertical-offset="1319">
<caret line="6" column="13" selection-start-line="6" selection-start-column="13" selection-end-line="6" selection-end-column="13" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
@ -996,28 +1072,105 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/StopTranscodingResponse.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="918">
<caret line="39" column="59" selection-start-line="39" selection-start-column="8" selection-end-line="39" selection-end-column="59" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/GetPlaybackInfoResponse.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1020">
<caret line="24" column="43" selection-start-line="24" selection-start-column="43" selection-end-line="24" selection-end-column="43" />
<caret line="48" column="63" selection-start-line="48" selection-start-column="63" selection-end-line="48" selection-end-column="63" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/StopTranscodingResponse.java">
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/ApiClient.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="901">
<caret line="20" column="11" selection-start-line="20" selection-start-column="11" selection-end-line="20" selection-end-column="11" />
<state vertical-scroll-proportion="0.41708043" vertical-offset="37014" max-vertical-offset="45237">
<caret line="2206" column="42" selection-start-line="2206" selection-start-column="42" selection-end-line="2206" selection-end-column="42" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamBuilder.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="10090" max-vertical-offset="15742">
<caret line="623" column="38" selection-start-line="623" selection-start-column="38" selection-end-line="623" selection-end-column="38" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/ReportPlaybackStopResponse.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="935">
<caret line="36" column="82" selection-start-line="36" selection-start-column="82" selection-end-line="36" selection-end-column="82" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/dlna/StreamInfo.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="3834" max-vertical-offset="11101">
<caret line="440" column="24" selection-start-line="440" selection-start-column="24" selection-end-line="440" selection-end-column="24" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/playback/PlaybackManager.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.6686047" vertical-offset="1605" max-vertical-offset="3638">
<caret line="157" column="0" selection-start-line="157" selection-start-column="0" selection-end-line="157" selection-end-column="0" />
<state vertical-scroll-proportion="-15.344828" vertical-offset="2530" max-vertical-offset="3842">
<caret line="197" column="33" selection-start-line="197" selection-start-column="33" selection-end-line="197" selection-end-column="33" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/server/mediasync/MediaSync.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="616" max-vertical-offset="8721">
<caret line="534" column="9" selection-start-line="534" selection-start-column="9" selection-end-line="534" selection-end-column="9" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/server/mediasync/SecondSyncDataResponse.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="595">
<caret line="10" column="13" selection-start-line="10" selection-start-column="13" selection-end-line="10" selection-end-column="13" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/server/mediasync/MediaSyncProgress.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="680">
<caret line="8" column="13" selection-start-line="8" selection-start-column="13" selection-end-line="8" selection-end-column="13" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/model/sync/LocalItem.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1309">
<caret line="96" column="50" selection-start-line="96" selection-start-column="50" selection-end-line="96" selection-end-column="50" />
<folding>
<element signature="e#1818#1819#0" expanded="true" />
<element signature="e#1847#1848#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/mediabrowser/apiinteraction/sync/server/mediasync/SyncDataInnerResponse.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.3813495" vertical-offset="7" max-vertical-offset="1326">
<caret line="39" column="15" selection-start-line="39" selection-start-column="15" selection-end-line="39" selection-end-column="15" />
<folding />
</state>
</provider>

Binary file not shown.

View File

@ -2199,12 +2199,12 @@ public class ApiClient extends BaseApiClient {
Send(url, "GET", new SerializedResponse<SessionInfoDto>(response, jsonSerializer, SessionInfoDto.class));
}
public void StopTranscodingProcesses(String deviceId, String streamId, final EmptyResponse response)
public void StopTranscodingProcesses(String deviceId, String playSessionId, final EmptyResponse response)
{
QueryStringDictionary queryString = new QueryStringDictionary();
queryString.Add("DeviceId", getDeviceId());
queryString.AddIfNotNullOrEmpty("StreamId", streamId);
queryString.AddIfNotNullOrEmpty("PlaySessionId", playSessionId);
String url = GetApiUrl("Videos/ActiveEncodings", queryString);
DeleteAsync(url, response);

View File

@ -42,11 +42,11 @@ public class GetPlaybackInfoResponse extends Response<PlaybackInfoResponse> {
if (isVideo){
StreamInfo streamInfo = playbackManager.getVideoStreamInfoInternal(serverId, (VideoOptions)options);
streamInfo.setPlaybackInfo(playbackInfo);
response.onResponse(streamInfo);
playbackManager.SendResponse(response, streamInfo);
}
else{
StreamInfo streamInfo = streamBuilder.BuildAudioItem(options);
response.onResponse(streamInfo);
playbackManager.SendResponse(response, streamInfo);
}
}

View File

@ -93,6 +93,18 @@ public class PlaybackManager {
options.setDeviceId(device.getDeviceId());
}
void SendResponse(Response<StreamInfo> response, StreamInfo info){
if (info == null){
PlaybackException error = new PlaybackException();
error.setErrorCode(PlaybackErrorCode.NoCompatibleStream);
response.onError(error);
}
else{
response.onResponse(info);
}
}
public void getAudioStreamInfo(String serverId, AudioOptions options, boolean isOffline, ApiClient apiClient, Response<StreamInfo> response)
{
Normalize(options);
@ -116,7 +128,7 @@ public class PlaybackManager {
StreamInfo result = streamBuilder.BuildAudioItem(options);
result.setPlayMethod(PlayMethod.DirectPlay);
response.onResponse(result);
SendResponse(response, result);
return;
}
}
@ -128,7 +140,7 @@ public class PlaybackManager {
return;
}
response.onResponse(streamBuilder.BuildAudioItem(options));
SendResponse(response, streamBuilder.BuildAudioItem(options));
}
public void getVideoStreamInfo(final String serverId, final VideoOptions options, boolean isOffline, ApiClient apiClient, final Response<StreamInfo> response)
@ -142,18 +154,18 @@ public class PlaybackManager {
return;
}
response.onResponse(getVideoStreamInfoInternal(serverId, options));
SendResponse(response, getVideoStreamInfoInternal(serverId, options));
}
public void changeVideoStream(final StreamInfo currentStreamInfo, final String serverId, final VideoOptions options, ApiClient apiClient, final Response<StreamInfo> response)
{
Normalize(options);
String streamId = currentStreamInfo.getPlaybackInfo() == null ?
String playSessionId = currentStreamInfo.getPlaybackInfo() == null ?
null :
currentStreamInfo.getPlaybackInfo().getStreamId();
currentStreamInfo.getPlaybackInfo().getPlaySessionId();
apiClient.StopTranscodingProcesses(device.getDeviceId(), streamId, new StopTranscodingResponse(this, serverId, currentStreamInfo, options, logger, response));
apiClient.StopTranscodingProcesses(device.getDeviceId(), playSessionId, new StopTranscodingResponse(this, serverId, currentStreamInfo, options, logger, response));
}
StreamInfo getVideoStreamInfoInternal(String serverId, VideoOptions options)

View File

@ -30,11 +30,11 @@ public class ReportPlaybackStopResponse extends EmptyResponse {
if (streamInfo.getMediaType() == DlnaProfileType.Video)
{
String streamId = streamInfo.getPlaybackInfo() == null ?
String playSessionId = streamInfo.getPlaybackInfo() == null ?
null :
streamInfo.getPlaybackInfo().getStreamId();
streamInfo.getPlaybackInfo().getPlaySessionId();
apiClient.StopTranscodingProcesses(device.getDeviceId(), streamId, response);
apiClient.StopTranscodingProcesses(device.getDeviceId(), playSessionId, response);
}
else{
response.onResponse();

View File

@ -36,7 +36,8 @@ public class StopTranscodingResponse extends EmptyResponse {
StreamInfo streamInfo = playbackManager.getVideoStreamInfoInternal(serverId, options);
streamInfo.setPlaybackInfo(currentStreamInfo.getPlaybackInfo());
response.onResponse(streamInfo);
playbackManager.SendResponse(response, streamInfo);
}
@Override

View File

@ -4,6 +4,7 @@ import mediabrowser.apiinteraction.IResponse;
import mediabrowser.apiinteraction.Response;
import mediabrowser.apiinteraction.sync.data.ILocalAssetManager;
import mediabrowser.model.apiclient.ServerInfo;
import mediabrowser.model.logging.ILogger;
import mediabrowser.model.sync.ItemFileInfo;
import mediabrowser.model.sync.LocalItem;
import mediabrowser.model.sync.SyncDataResponse;
@ -18,6 +19,7 @@ public class SyncDataInnerResponse extends Response<SyncDataResponse>
private ILocalAssetManager localAssetManager;
private ServerInfo serverInfo;
private boolean syncUserItemAccess;
private ILogger logger;
public SyncDataInnerResponse(IResponse innerResponse, ILocalAssetManager localAssetManager, ServerInfo serverInfo, boolean syncUserItemAccess){
@ -56,6 +58,7 @@ public class SyncDataInnerResponse extends Response<SyncDataResponse>
private void removeItem(String serverId, String itemId)
{
logger.Debug("Removing item. ServerId: {0}, ItemId: {1}", serverId, itemId);
LocalItem localItem = localAssetManager.getLocalItem(serverId, itemId);
if (localItem == null)
@ -63,13 +66,16 @@ public class SyncDataInnerResponse extends Response<SyncDataResponse>
return;
}
ArrayList<ItemFileInfo> files = localAssetManager.getFiles(localItem);
for (ItemFileInfo file : files)
{
localAssetManager.deleteFile(file.getPath());
}
ArrayList<String> additionalFiles = localItem.getAdditionalFiles();
String localPath = localItem.getLocalPath();
localAssetManager.delete(localItem);
for (String file : additionalFiles)
{
localAssetManager.deleteFile(file);
}
localAssetManager.deleteFile(localPath);
}
}

View File

@ -47,11 +47,31 @@ public class EncodingOptions
{
EnableDebugLogging = value;
}
private boolean EnableThrottling;
public final boolean getEnableThrottling()
{
return EnableThrottling;
}
public final void setEnableThrottling(boolean value)
{
EnableThrottling = value;
}
private int ThrottleThresholdSeconds;
public final int getThrottleThresholdSeconds()
{
return ThrottleThresholdSeconds;
}
public final void setThrottleThresholdSeconds(int value)
{
ThrottleThresholdSeconds = value;
}
public EncodingOptions()
{
setH264Encoder("libx264");
setDownMixAudioBoost(2);
setEncodingQuality(EncodingQuality.Auto);
setEnableThrottling(true);
setThrottleThresholdSeconds(120);
}
}

View File

@ -5,7 +5,7 @@ import mediabrowser.model.mediainfo.*;
public class ConditionProcessor
{
public final boolean IsVideoConditionSatisfied(ProfileCondition condition, Integer audioBitrate, Integer audioChannels, Integer width, Integer height, Integer bitDepth, Integer videoBitrate, String videoProfile, Double videoLevel, Float videoFramerate, Integer packetLength, TransportStreamTimestamp timestamp, Boolean isAnamorphic, Boolean isCabac, Integer refFrames)
public final boolean IsVideoConditionSatisfied(ProfileCondition condition, Integer audioBitrate, Integer audioChannels, Integer width, Integer height, Integer bitDepth, Integer videoBitrate, String videoProfile, Double videoLevel, Float videoFramerate, Integer packetLength, TransportStreamTimestamp timestamp, Boolean isAnamorphic, Boolean isCabac, Integer refFrames, Integer numVideoStreams, Integer numAudioStreams)
{
switch (condition.getProperty())
{
@ -41,6 +41,10 @@ public class ConditionProcessor
return IsConditionSatisfied(condition, width);
case RefFrames:
return IsConditionSatisfied(condition, refFrames);
case NumAudioStreams:
return IsConditionSatisfied(condition, numAudioStreams);
case NumVideoStreams:
return IsConditionSatisfied(condition, numVideoStreams);
case VideoTimestamp:
return IsConditionSatisfied(condition, timestamp);
default:
@ -74,7 +78,7 @@ public class ConditionProcessor
}
}
public final boolean IsVideoAudioConditionSatisfied(ProfileCondition condition, Integer audioChannels, Integer audioBitrate, String audioProfile)
public final boolean IsVideoAudioConditionSatisfied(ProfileCondition condition, Integer audioChannels, Integer audioBitrate, String audioProfile, Boolean isSecondaryTrack)
{
switch (condition.getProperty())
{
@ -84,6 +88,8 @@ public class ConditionProcessor
return IsConditionSatisfied(condition, audioBitrate);
case AudioChannels:
return IsConditionSatisfied(condition, audioChannels);
case IsSecondaryAudio:
return IsConditionSatisfied(condition, isSecondaryTrack);
default:
throw new IllegalArgumentException("Unexpected condition on audio file: " + condition.getProperty());
}

View File

@ -601,7 +601,7 @@ public class DeviceProfile
return null;
}
public final ResponseProfile GetVideoMediaProfile(String container, String audioCodec, String videoCodec, Integer audioBitrate, Integer audioChannels, Integer width, Integer height, Integer bitDepth, Integer videoBitrate, String videoProfile, Double videoLevel, Float videoFramerate, Integer packetLength, TransportStreamTimestamp timestamp, Boolean isAnamorphic, Boolean isCabac, Integer refFrames)
public final ResponseProfile GetVideoMediaProfile(String container, String audioCodec, String videoCodec, Integer audioBitrate, Integer audioChannels, Integer width, Integer height, Integer bitDepth, Integer videoBitrate, String videoProfile, Double videoLevel, Float videoFramerate, Integer packetLength, TransportStreamTimestamp timestamp, Boolean isAnamorphic, Boolean isCabac, Integer refFrames, Integer numVideoStreams, Integer numAudioStreams)
{
container = StringHelper.TrimStart(((container != null) ? container : ""), '.');
@ -635,7 +635,7 @@ public class DeviceProfile
boolean anyOff = false;
for (ProfileCondition c : i.getConditions())
{
if (!conditionProcessor.IsVideoConditionSatisfied(c, audioBitrate, audioChannels, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, isCabac, refFrames))
if (!conditionProcessor.IsVideoConditionSatisfied(c, audioBitrate, audioChannels, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, isCabac, refFrames, numVideoStreams, numAudioStreams))
{
anyOff = true;
break;

View File

@ -17,7 +17,10 @@ public enum ProfileConditionValue
VideoTimestamp(12),
IsAnamorphic(13),
RefFrames(14),
IsCabac(15);
IsCabac(15),
NumAudioStreams(16),
NumVideoStreams(17),
IsSecondaryAudio(18);
private int intValue;
private static java.util.HashMap<Integer, ProfileConditionValue> mappings;

View File

@ -234,6 +234,16 @@ public class StreamBuilder
return playlistItem;
}
private Integer GetBitrateForDirectPlayCheck(MediaSourceInfo item, AudioOptions options)
{
if (item.getProtocol() == MediaProtocol.File)
{
return options.getProfile().getMaxStaticBitrate();
}
return options.GetMaxBitrate();
}
private java.util.ArrayList<PlayMethod> GetAudioDirectPlayMethods(MediaSourceInfo item, MediaStream audioStream, AudioOptions options)
{
DirectPlayProfile directPlayProfile = null;
@ -258,7 +268,7 @@ public class StreamBuilder
// The profile describes what the device supports
// If device requirements are satisfied then allow both direct stream and direct play
if (IsAudioEligibleForDirectPlay(item, options.getProfile().getMaxStaticBitrate()))
if (IsAudioEligibleForDirectPlay(item, GetBitrateForDirectPlayCheck(item, options)))
{
playMethods.add(PlayMethod.DirectPlay);
}
@ -289,7 +299,7 @@ public class StreamBuilder
MediaStream videoStream = item.getVideoStream();
// TODO: This doesn't accout for situation of device being able to handle media bitrate, but wifi connection not fast enough
boolean isEligibleForDirectPlay = IsEligibleForDirectPlay(item, options.getProfile().getMaxStaticBitrate(), subtitleStream, options);
boolean isEligibleForDirectPlay = IsEligibleForDirectPlay(item, GetBitrateForDirectPlayCheck(item, options), subtitleStream, options);
boolean isEligibleForDirectStream = IsEligibleForDirectPlay(item, options.GetMaxBitrate(), subtitleStream, options);
if (isEligibleForDirectPlay || isEligibleForDirectStream)
@ -478,10 +488,13 @@ public class StreamBuilder
Integer packetLength = videoStream == null ? null : videoStream.getPacketLength();
Integer refFrames = videoStream == null ? null : videoStream.getRefFrames();
Integer numAudioStreams = mediaSource.GetStreamCount(MediaStreamType.Audio);
Integer numVideoStreams = mediaSource.GetStreamCount(MediaStreamType.Video);
// Check container conditions
for (ProfileCondition i : conditions)
{
if (!conditionProcessor.IsVideoConditionSatisfied(i, audioBitrate, audioChannels, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, isCabac, refFrames))
if (!conditionProcessor.IsVideoConditionSatisfied(i, audioBitrate, audioChannels, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, isCabac, refFrames, numVideoStreams, numAudioStreams))
{
return null;
}
@ -508,7 +521,7 @@ public class StreamBuilder
for (ProfileCondition i : conditions)
{
if (!conditionProcessor.IsVideoConditionSatisfied(i, audioBitrate, audioChannels, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, isCabac, refFrames))
if (!conditionProcessor.IsVideoConditionSatisfied(i, audioBitrate, audioChannels, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, isCabac, refFrames, numVideoStreams, numAudioStreams))
{
return null;
}
@ -537,7 +550,8 @@ public class StreamBuilder
for (ProfileCondition i : conditions)
{
if (!conditionProcessor.IsVideoAudioConditionSatisfied(i, audioChannels, audioBitrate, audioProfile))
Boolean isSecondaryAudio = audioStream == null ? null : mediaSource.IsSecondaryAudio(audioStream);
if (!conditionProcessor.IsVideoAudioConditionSatisfied(i, audioChannels, audioBitrate, audioProfile, isSecondaryAudio))
{
return null;
}
@ -594,6 +608,11 @@ public class StreamBuilder
// Look for an external profile that matches the stream type (text/graphical)
for (SubtitleProfile profile : subtitleProfiles)
{
if (!profile.SupportsLanguage(subtitleStream.getLanguage()))
{
continue;
}
if (profile.getMethod() == SubtitleDeliveryMethod.External && subtitleStream.getIsTextSubtitleStream() == MediaStream.IsTextFormat(profile.getFormat()))
{
if (subtitleStream.getSupportsExternalStream())
@ -611,6 +630,11 @@ public class StreamBuilder
for (SubtitleProfile profile : subtitleProfiles)
{
if (!profile.SupportsLanguage(subtitleStream.getLanguage()))
{
continue;
}
if (profile.getMethod() == SubtitleDeliveryMethod.Embed && subtitleStream.getIsTextSubtitleStream() == MediaStream.IsTextFormat(profile.getFormat()))
{
return profile;
@ -730,6 +754,9 @@ public class StreamBuilder
case AudioProfile:
case Has64BitOffsets:
case PacketLength:
case NumAudioStreams:
case NumVideoStreams:
case IsSecondaryAudio:
case VideoTimestamp:
{
// Not supported yet

View File

@ -456,60 +456,35 @@ public class StreamInfo
list.add(new NameValuePair("Profile", (tempVar6 != null) ? tempVar6 : ""));
list.add(new NameValuePair("Cabac", item.getCabac() != null ? item.getCabac().toString() : ""));
String streamId = item.getPlaybackInfo() == null ? null : item.getPlaybackInfo().getStreamId();
list.add(new NameValuePair("StreamId", (streamId != null) ? streamId : ""));
String playSessionId = item.getPlaybackInfo() == null ? null : item.getPlaybackInfo().getPlaySessionId();
list.add(new NameValuePair("PlaySessionId", (playSessionId != null) ? playSessionId : ""));
list.add(new NameValuePair("api_key", (accessToken != null) ? accessToken : ""));
String liveStreamId = item.getMediaSource() == null ? null : item.getMediaSource().getLiveStreamId();
list.add(new NameValuePair("LiveStreamId", (liveStreamId != null) ? liveStreamId : ""));
return list;
}
public final java.util.ArrayList<SubtitleStreamInfo> GetExternalSubtitles(boolean includeSelectedTrackOnly)
public final java.util.ArrayList<SubtitleStreamInfo> GetExternalSubtitles(boolean includeSelectedTrackOnly, String baseUrl, String accessToken)
{
java.util.ArrayList<SubtitleStreamInfo> list = new java.util.ArrayList<SubtitleStreamInfo>();
java.util.ArrayList<SubtitleStreamInfo> list = GetSubtitleProfiles(includeSelectedTrackOnly, baseUrl, accessToken);
java.util.ArrayList<SubtitleStreamInfo> newList = new java.util.ArrayList<SubtitleStreamInfo>();
// First add the selected track
if (getSubtitleStreamIndex() != null)
for (SubtitleStreamInfo stream : list)
{
for (MediaStream stream : getMediaSource().getMediaStreams())
if (stream.getDeliveryMethod() == SubtitleDeliveryMethod.External)
{
if (stream.getType() == MediaStreamType.Subtitle && stream.getIndex() == getSubtitleStreamIndex())
{
SubtitleStreamInfo info = GetSubtitleStreamInfo(stream);
if (info != null)
{
list.add(info);
}
}
newList.add(stream);
}
}
if (!includeSelectedTrackOnly)
{
for (MediaStream stream : getMediaSource().getMediaStreams())
{
if (stream.getType() == MediaStreamType.Subtitle && (getSubtitleStreamIndex() == null || stream.getIndex() != getSubtitleStreamIndex()))
{
SubtitleStreamInfo info = GetSubtitleStreamInfo(stream);
if (info != null)
{
list.add(info);
}
}
}
}
return list;
return newList;
}
public final java.util.ArrayList<SubtitleStreamInfo> GetExternalSubtitles(String baseUrl, String accessToken, boolean includeSelectedTrackOnly)
public final java.util.ArrayList<SubtitleStreamInfo> GetSubtitleProfiles(boolean includeSelectedTrackOnly, String baseUrl, String accessToken)
{
if (tangible.DotNetToJavaStringHelper.isNullOrEmpty(baseUrl))
{
throw new IllegalArgumentException(baseUrl);
}
java.util.ArrayList<SubtitleStreamInfo> list = new java.util.ArrayList<SubtitleStreamInfo>();
// HLS will preserve timestamps so we can just grab the full subtitle stream
@ -524,10 +499,7 @@ public class StreamInfo
{
SubtitleStreamInfo info = GetSubtitleStreamInfo(stream, baseUrl, accessToken, startPositionTicks);
if (info != null)
{
list.add(info);
}
list.add(info);
}
}
}
@ -540,10 +512,7 @@ public class StreamInfo
{
SubtitleStreamInfo info = GetSubtitleStreamInfo(stream, baseUrl, accessToken, startPositionTicks);
if (info != null)
{
list.add(info);
}
list.add(info);
}
}
}
@ -555,7 +524,7 @@ public class StreamInfo
{
SubtitleStreamInfo info = GetSubtitleStreamInfo(stream);
if (info != null)
if (info.getDeliveryMethod() == SubtitleDeliveryMethod.External && !tangible.DotNetToJavaStringHelper.isNullOrEmpty(baseUrl))
{
info.setUrl(String.format("%1$s/Videos/%2$s/%3$s/Subtitles/%4$s/%5$s/Stream.%6$s", baseUrl, getItemId(), getMediaSourceId(), StringHelper.ToStringCultureInvariant(stream.getIndex()), StringHelper.ToStringCultureInvariant(startPositionTicks), getSubtitleFormat()));
}
@ -567,11 +536,6 @@ public class StreamInfo
{
SubtitleProfile subtitleProfile = StreamBuilder.GetSubtitleProfile(stream, getDeviceProfile().getSubtitleProfiles(), getContext());
if (subtitleProfile.getMethod() != SubtitleDeliveryMethod.External)
{
return null;
}
SubtitleStreamInfo tempVar = new SubtitleStreamInfo();
tempVar.setIsForced(stream.getIsForced());
tempVar.setLanguage(stream.getLanguage());
@ -579,6 +543,7 @@ public class StreamInfo
tempVar.setName((tempVar2 != null) ? tempVar2 : "Unknown");
tempVar.setFormat(getSubtitleFormat());
tempVar.setIndex(stream.getIndex());
tempVar.setDeliveryMethod(subtitleProfile.getMethod());
return tempVar;
}
@ -826,6 +791,36 @@ public class StreamInfo
return getMaxHeight();
}
public final Integer getTargetVideoStreamCount()
{
if (getIsDirectStream())
{
return GetMediaStreamCount(MediaStreamType.Video, Integer.MAX_VALUE);
}
return GetMediaStreamCount(MediaStreamType.Video, 1);
}
public final Integer getTargetAudioStreamCount()
{
if (getIsDirectStream())
{
return GetMediaStreamCount(MediaStreamType.Audio, Integer.MAX_VALUE);
}
return GetMediaStreamCount(MediaStreamType.Audio, 1);
}
private Integer GetMediaStreamCount(MediaStreamType type, int limit)
{
Integer count = getMediaSource().GetStreamCount(type);
if (count != null)
{
count = Math.min(count, limit);
}
return count;
}
public final java.util.ArrayList<MediaStream> GetSelectableAudioStreams()
{
return GetSelectableStreams(MediaStreamType.Audio);

View File

@ -1,5 +1,7 @@
package mediabrowser.model.dlna;
import mediabrowser.model.extensions.*;
public class SubtitleProfile
{
//C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET attributes:
@ -38,4 +40,39 @@ public class SubtitleProfile
DidlMode = value;
}
//C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET attributes:
//ORIGINAL LINE: [XmlAttribute("language")] public string Language {get;set;}
private String Language;
public final String getLanguage()
{
return Language;
}
public final void setLanguage(String value)
{
Language = value;
}
public final java.util.ArrayList<String> GetLanguages()
{
java.util.ArrayList<String> list = new java.util.ArrayList<String>();
for (String i : ((getLanguage() != null) ? getLanguage() : "").split("[,]", -1))
{
if (!tangible.DotNetToJavaStringHelper.isNullOrEmpty(i))
{
list.add(i);
}
}
return list;
}
public final boolean SupportsLanguage(String language)
{
if (tangible.DotNetToJavaStringHelper.isNullOrEmpty(language))
{
language = "und";
}
java.util.ArrayList<String> languages = GetLanguages();
return languages.isEmpty() || ListHelper.ContainsIgnoreCase(languages, language);
}
}

View File

@ -56,4 +56,13 @@ public class SubtitleStreamInfo
{
Index = value;
}
private SubtitleDeliveryMethod DeliveryMethod = SubtitleDeliveryMethod.values()[0];
public final SubtitleDeliveryMethod getDeliveryMethod()
{
return DeliveryMethod;
}
public final void setDeliveryMethod(SubtitleDeliveryMethod value)
{
DeliveryMethod = value;
}
}

View File

@ -120,6 +120,52 @@ public class MediaSourceInfo
SupportsDirectPlay = value;
}
private boolean RequiresOpening;
public final boolean getRequiresOpening()
{
return RequiresOpening;
}
public final void setRequiresOpening(boolean value)
{
RequiresOpening = value;
}
private String OpenToken;
public final String getOpenToken()
{
return OpenToken;
}
public final void setOpenToken(String value)
{
OpenToken = value;
}
private boolean RequiresClosing;
public final boolean getRequiresClosing()
{
return RequiresClosing;
}
public final void setRequiresClosing(boolean value)
{
RequiresClosing = value;
}
private String LiveStreamId;
public final String getLiveStreamId()
{
return LiveStreamId;
}
public final void setLiveStreamId(String value)
{
LiveStreamId = value;
}
private Integer BufferMs = null;
public final Integer getBufferMs()
{
return BufferMs;
}
public final void setBufferMs(Integer value)
{
BufferMs = value;
}
private VideoType VideoType = null;
public final VideoType getVideoType()
{
@ -335,4 +381,34 @@ public class MediaSourceInfo
return null;
}
public final Integer GetStreamCount(MediaStreamType type)
{
int numMatches = 0;
int numStreams = 0;
for (MediaStream i : getMediaStreams())
{
numStreams++;
if (i.getType() == type)
{
numMatches++;
}
}
return numStreams == 0 ? (Integer)null : numMatches;
}
public final Boolean IsSecondaryAudio(MediaStream stream)
{
for (MediaStream currentStream : getMediaStreams())
{
if (currentStream.getType() == MediaStreamType.Audio)
{
return currentStream.getIndex() != stream.getIndex();
}
}
return null;
}
}

View File

@ -4,7 +4,7 @@ public enum MediaSourceType
{
Default(0),
Grouping(1),
Cache(2);
Placeholder(2);
private int intValue;
private static java.util.HashMap<Integer, MediaSourceType> mappings;

View File

@ -1,5 +1,6 @@
package mediabrowser.model.entities;
import mediabrowser.model.dlna.*;
import mediabrowser.model.extensions.*;
/**
@ -324,6 +325,35 @@ public class MediaStream
IsExternal = value;
}
/**
Gets or sets the method.
<value>The method.</value>
*/
private SubtitleDeliveryMethod DeliveryMethod = null;
public final SubtitleDeliveryMethod getDeliveryMethod()
{
return DeliveryMethod;
}
public final void setDeliveryMethod(SubtitleDeliveryMethod value)
{
DeliveryMethod = value;
}
/**
Gets or sets the delivery URL.
<value>The delivery URL.</value>
*/
private String DeliveryUrl;
public final String getDeliveryUrl()
{
return DeliveryUrl;
}
public final void setDeliveryUrl(String value)
{
DeliveryUrl = value;
}
public final boolean getIsTextSubtitleStream()
{
if (getType() != MediaStreamType.Subtitle)
@ -331,6 +361,11 @@ public class MediaStream
return false;
}
if (tangible.DotNetToJavaStringHelper.isNullOrEmpty(getCodec()) && !getIsExternal())
{
return false;
}
return IsTextFormat(getCodec());
}
@ -373,6 +408,21 @@ public class MediaStream
Path = value;
}
/**
Gets or sets the external identifier.
<value>The external identifier.</value>
*/
private String ExternalId;
public final String getExternalId()
{
return ExternalId;
}
public final void setExternalId(String value)
{
ExternalId = value;
}
/**
Gets or sets the pixel format.

View File

@ -0,0 +1,98 @@
package mediabrowser.model.mediainfo;
import mediabrowser.model.dlna.*;
public class LiveStreamRequest
{
private String OpenToken;
public final String getOpenToken()
{
return OpenToken;
}
public final void setOpenToken(String value)
{
OpenToken = value;
}
private String UserId;
public final String getUserId()
{
return UserId;
}
public final void setUserId(String value)
{
UserId = value;
}
private Integer MaxStreamingBitrate;
public final Integer getMaxStreamingBitrate()
{
return MaxStreamingBitrate;
}
public final void setMaxStreamingBitrate(Integer value)
{
MaxStreamingBitrate = value;
}
private Long StartTimeTicks;
public final Long getStartTimeTicks()
{
return StartTimeTicks;
}
public final void setStartTimeTicks(Long value)
{
StartTimeTicks = value;
}
private Integer AudioStreamIndex;
public final Integer getAudioStreamIndex()
{
return AudioStreamIndex;
}
public final void setAudioStreamIndex(Integer value)
{
AudioStreamIndex = value;
}
private Integer SubtitleStreamIndex;
public final Integer getSubtitleStreamIndex()
{
return SubtitleStreamIndex;
}
public final void setSubtitleStreamIndex(Integer value)
{
SubtitleStreamIndex = value;
}
private String ItemId;
public final String getItemId()
{
return ItemId;
}
public final void setItemId(String value)
{
ItemId = value;
}
private DeviceProfile DeviceProfile;
public final DeviceProfile getDeviceProfile()
{
return DeviceProfile;
}
public final void setDeviceProfile(DeviceProfile value)
{
DeviceProfile = value;
}
public LiveStreamRequest()
{
}
public LiveStreamRequest(AudioOptions options)
{
setMaxStreamingBitrate(options.getMaxBitrate());
setItemId(options.getItemId());
setDeviceProfile(options.getProfile());
VideoOptions videoOptions = (VideoOptions)((options instanceof VideoOptions) ? options : null);
if (videoOptions != null)
{
setAudioStreamIndex(videoOptions.getAudioStreamIndex());
setSubtitleStreamIndex(videoOptions.getSubtitleStreamIndex());
}
}
}

View File

@ -0,0 +1,16 @@
package mediabrowser.model.mediainfo;
import mediabrowser.model.dto.*;
public class LiveStreamResponse
{
private MediaSourceInfo MediaSource;
public final MediaSourceInfo getMediaSource()
{
return MediaSource;
}
public final void setMediaSource(MediaSourceInfo value)
{
MediaSource = value;
}
}

View File

@ -1,7 +1,6 @@
package mediabrowser.model.mediainfo;
import mediabrowser.model.dlna.*;
import mediabrowser.model.dto.*;
public class PlaybackInfoRequest
{
@ -14,13 +13,4 @@ public class PlaybackInfoRequest
{
DeviceProfile = value;
}
private MediaSourceInfo MediaSource;
public final MediaSourceInfo getMediaSource()
{
return MediaSource;
}
public final void setMediaSource(MediaSourceInfo value)
{
MediaSource = value;
}
}

View File

@ -21,18 +21,18 @@ public class PlaybackInfoResponse
}
/**
Gets or sets the stream identifier.
Gets or sets the play session identifier.
<value>The stream identifier.</value>
<value>The play session identifier.</value>
*/
private String StreamId;
public final String getStreamId()
private String PlaySessionId;
public final String getPlaySessionId()
{
return StreamId;
return PlaySessionId;
}
public final void setStreamId(String value)
public final void setPlaySessionId(String value)
{
StreamId = value;
PlaySessionId = value;
}
/**

View File

@ -186,4 +186,18 @@ public class PlaybackProgressInfo
{
PlayMethod = value;
}
/**
Gets or sets the live stream identifier.
<value>The live stream identifier.</value>
*/
private String LiveStreamId;
public final String getLiveStreamId()
{
return LiveStreamId;
}
public final void setLiveStreamId(String value)
{
LiveStreamId = value;
}
}

View File

@ -81,4 +81,18 @@ public class PlaybackStopInfo
{
PositionTicks = value;
}
/**
Gets or sets the live stream identifier.
<value>The live stream identifier.</value>
*/
private String LiveStreamId;
public final String getLiveStreamId()
{
return LiveStreamId;
}
public final void setLiveStreamId(String value)
{
LiveStreamId = value;
}
}

View File

@ -88,9 +88,24 @@ public class LocalItem
{
UserIdsWithAccess = value;
}
/**
Gets or sets the additional files.
<value>The additional files.</value>
*/
private java.util.ArrayList<String> AdditionalFiles;
public final java.util.ArrayList<String> getAdditionalFiles()
{
return AdditionalFiles;
}
public final void setAdditionalFiles(java.util.ArrayList<String> value)
{
AdditionalFiles = value;
}
public LocalItem()
{
setAdditionalFiles(new java.util.ArrayList<String>());
setUserIdsWithAccess(new java.util.ArrayList<String>());
}
}