mirror of
https://github.com/Febbweiss/mopidy-touchscreen.git
synced 2026-03-04 22:25:39 +00:00
Added progressbar
This commit is contained in:
1
mopidy_touchscreen/.idea/.name
generated
Normal file
1
mopidy_touchscreen/.idea/.name
generated
Normal file
@@ -0,0 +1 @@
|
|||||||
|
mopidy_touchscreen
|
||||||
5
mopidy_touchscreen/.idea/encodings.xml
generated
Normal file
5
mopidy_touchscreen/.idea/encodings.xml
generated
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
|
||||||
|
</project>
|
||||||
|
|
||||||
5
mopidy_touchscreen/.idea/misc.xml
generated
Normal file
5
mopidy_touchscreen/.idea/misc.xml
generated
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7.6 (/usr/bin/python2.7)" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
||||||
|
|
||||||
9
mopidy_touchscreen/.idea/modules.xml
generated
Normal file
9
mopidy_touchscreen/.idea/modules.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/mopidy_touchscreen.iml" filepath="$PROJECT_DIR$/.idea/mopidy_touchscreen.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
||||||
9
mopidy_touchscreen/.idea/mopidy_touchscreen.iml
generated
Normal file
9
mopidy_touchscreen/.idea/mopidy_touchscreen.iml
generated
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
|
|
||||||
5
mopidy_touchscreen/.idea/scopes/scope_settings.xml
generated
Normal file
5
mopidy_touchscreen/.idea/scopes/scope_settings.xml
generated
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<component name="DependencyValidationManager">
|
||||||
|
<state>
|
||||||
|
<option name="SKIP_IMPORT_STATEMENTS" value="false" />
|
||||||
|
</state>
|
||||||
|
</component>
|
||||||
7
mopidy_touchscreen/.idea/vcs.xml
generated
Normal file
7
mopidy_touchscreen/.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
||||||
549
mopidy_touchscreen/.idea/workspace.xml
generated
Normal file
549
mopidy_touchscreen/.idea/workspace.xml
generated
Normal file
@@ -0,0 +1,549 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ChangeListManager">
|
||||||
|
<list default="true" id="7a0221ec-f62d-42c9-ae57-fc244b722561" name="Default" comment="" />
|
||||||
|
<ignored path="mopidy_touchscreen.iws" />
|
||||||
|
<ignored path=".idea/workspace.xml" />
|
||||||
|
<option name="TRACKING_ENABLED" value="true" />
|
||||||
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
|
</component>
|
||||||
|
<component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
|
||||||
|
<component name="CreatePatchCommitExecutor">
|
||||||
|
<option name="PATCH_PATH" value="" />
|
||||||
|
</component>
|
||||||
|
<component name="DaemonCodeAnalyzer">
|
||||||
|
<disable_hints />
|
||||||
|
</component>
|
||||||
|
<component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
|
||||||
|
<component name="FavoritesManager">
|
||||||
|
<favorites_list name="mopidy_touchscreen" />
|
||||||
|
</component>
|
||||||
|
<component name="FileEditorManager">
|
||||||
|
<leaf>
|
||||||
|
<file leaf-file-name="main_screen.py" pinned="false" current="true" current-in-tab="true">
|
||||||
|
<entry file="file://$PROJECT_DIR$/main_screen.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.51970446" vertical-offset="329" max-vertical-offset="1500">
|
||||||
|
<caret line="36" column="107" selection-start-line="36" selection-start-column="107" selection-end-line="36" selection-end-column="107" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#13#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file leaf-file-name="touch_text_manager.py" pinned="false" current="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/touch_text_manager.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="3.477612" vertical-offset="623" max-vertical-offset="2415">
|
||||||
|
<caret line="26" column="0" selection-start-line="26" selection-start-column="0" selection-end-line="26" selection-end-column="0" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#13#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file leaf-file-name="screen_manager.py" pinned="false" current="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/screen_manager.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="330" max-vertical-offset="450">
|
||||||
|
<caret line="22" column="0" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file leaf-file-name="touch_screen.py" pinned="false" current="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/touch_screen.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="855">
|
||||||
|
<caret line="43" column="0" selection-start-line="43" selection-start-column="0" selection-end-line="43" selection-end-column="0" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#12#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
</leaf>
|
||||||
|
</component>
|
||||||
|
<component name="FindManager">
|
||||||
|
<FindUsagesManager>
|
||||||
|
<setting name="OPEN_NEW_TAB" value="true" />
|
||||||
|
</FindUsagesManager>
|
||||||
|
</component>
|
||||||
|
<component name="IdeDocumentHistory">
|
||||||
|
<option name="changedFiles">
|
||||||
|
<list>
|
||||||
|
<option value="$PROJECT_DIR$/screen_manager.py" />
|
||||||
|
<option value="$PROJECT_DIR$/touch_screen.py" />
|
||||||
|
<option value="$PROJECT_DIR$/touch_text_manager.py" />
|
||||||
|
<option value="$PROJECT_DIR$/main_screen.py" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="ProjectFrameBounds">
|
||||||
|
<option name="x" value="65" />
|
||||||
|
<option name="y" value="24" />
|
||||||
|
<option name="width" value="1301" />
|
||||||
|
<option name="height" value="744" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
|
||||||
|
<OptionsSetting value="true" id="Add" />
|
||||||
|
<OptionsSetting value="true" id="Remove" />
|
||||||
|
<OptionsSetting value="true" id="Checkout" />
|
||||||
|
<OptionsSetting value="true" id="Update" />
|
||||||
|
<OptionsSetting value="true" id="Status" />
|
||||||
|
<OptionsSetting value="true" id="Edit" />
|
||||||
|
<ConfirmationsSetting value="0" id="Add" />
|
||||||
|
<ConfirmationsSetting value="0" id="Remove" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectReloadState">
|
||||||
|
<option name="STATE" value="0" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectView">
|
||||||
|
<navigator currentView="ProjectPane" proportions="" version="1">
|
||||||
|
<flattenPackages />
|
||||||
|
<showMembers />
|
||||||
|
<showModules />
|
||||||
|
<showLibraryContents />
|
||||||
|
<hideEmptyPackages />
|
||||||
|
<abbreviatePackageNames />
|
||||||
|
<autoscrollToSource />
|
||||||
|
<autoscrollFromSource />
|
||||||
|
<sortByType />
|
||||||
|
</navigator>
|
||||||
|
<panes>
|
||||||
|
<pane id="ProjectPane">
|
||||||
|
<subPane>
|
||||||
|
<PATH>
|
||||||
|
<PATH_ELEMENT>
|
||||||
|
<option name="myItemId" value="mopidy_touchscreen" />
|
||||||
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
||||||
|
</PATH_ELEMENT>
|
||||||
|
</PATH>
|
||||||
|
<PATH>
|
||||||
|
<PATH_ELEMENT>
|
||||||
|
<option name="myItemId" value="mopidy_touchscreen" />
|
||||||
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
||||||
|
</PATH_ELEMENT>
|
||||||
|
<PATH_ELEMENT>
|
||||||
|
<option name="myItemId" value="mopidy_touchscreen" />
|
||||||
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||||
|
</PATH_ELEMENT>
|
||||||
|
</PATH>
|
||||||
|
</subPane>
|
||||||
|
</pane>
|
||||||
|
<pane id="Scope" />
|
||||||
|
</panes>
|
||||||
|
</component>
|
||||||
|
<component name="PropertiesComponent">
|
||||||
|
<property name="recentsLimit" value="5" />
|
||||||
|
<property name="restartRequiresConfirmation" value="true" />
|
||||||
|
<property name="FullScreen" value="false" />
|
||||||
|
</component>
|
||||||
|
<component name="PyConsoleOptionsProvider">
|
||||||
|
<option name="myPythonConsoleState">
|
||||||
|
<console-settings />
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="RunManager" selected="Python.mopidy">
|
||||||
|
<configuration default="true" type="tests" factoryName="py.test">
|
||||||
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
|
<option name="PARENT_ENVS" value="true" />
|
||||||
|
<envs />
|
||||||
|
<option name="SDK_HOME" value="" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="" />
|
||||||
|
<option name="IS_MODULE_SDK" value="false" />
|
||||||
|
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||||
|
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||||
|
<module name="mopidy_touchscreen" />
|
||||||
|
<option name="SCRIPT_NAME" value="" />
|
||||||
|
<option name="CLASS_NAME" value="" />
|
||||||
|
<option name="METHOD_NAME" value="" />
|
||||||
|
<option name="FOLDER_NAME" value="" />
|
||||||
|
<option name="TEST_TYPE" value="TEST_SCRIPT" />
|
||||||
|
<option name="PATTERN" value="" />
|
||||||
|
<option name="USE_PATTERN" value="false" />
|
||||||
|
<option name="testToRun" value="" />
|
||||||
|
<option name="keywords" value="" />
|
||||||
|
<option name="params" value="" />
|
||||||
|
<option name="USE_PARAM" value="false" />
|
||||||
|
<option name="USE_KEYWORD" value="false" />
|
||||||
|
<method />
|
||||||
|
</configuration>
|
||||||
|
<configuration default="true" type="tests" factoryName="Nosetests">
|
||||||
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
|
<option name="PARENT_ENVS" value="true" />
|
||||||
|
<envs />
|
||||||
|
<option name="SDK_HOME" value="" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="" />
|
||||||
|
<option name="IS_MODULE_SDK" value="false" />
|
||||||
|
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||||
|
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||||
|
<module name="mopidy_touchscreen" />
|
||||||
|
<option name="SCRIPT_NAME" value="" />
|
||||||
|
<option name="CLASS_NAME" value="" />
|
||||||
|
<option name="METHOD_NAME" value="" />
|
||||||
|
<option name="FOLDER_NAME" value="" />
|
||||||
|
<option name="TEST_TYPE" value="TEST_SCRIPT" />
|
||||||
|
<option name="PATTERN" value="" />
|
||||||
|
<option name="USE_PATTERN" value="false" />
|
||||||
|
<option name="PARAMS" value="" />
|
||||||
|
<option name="USE_PARAM" value="false" />
|
||||||
|
<method />
|
||||||
|
</configuration>
|
||||||
|
<configuration default="true" type="PythonConfigurationType" factoryName="Python">
|
||||||
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
|
<option name="PARENT_ENVS" value="true" />
|
||||||
|
<envs>
|
||||||
|
<env name="PYTHONUNBUFFERED" value="1" />
|
||||||
|
</envs>
|
||||||
|
<option name="SDK_HOME" value="" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="" />
|
||||||
|
<option name="IS_MODULE_SDK" value="false" />
|
||||||
|
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||||
|
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||||
|
<module name="mopidy_touchscreen" />
|
||||||
|
<option name="SCRIPT_NAME" value="" />
|
||||||
|
<option name="PARAMETERS" value="" />
|
||||||
|
<method />
|
||||||
|
</configuration>
|
||||||
|
<configuration default="true" type="tests" factoryName="Unittests">
|
||||||
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
|
<option name="PARENT_ENVS" value="true" />
|
||||||
|
<envs />
|
||||||
|
<option name="SDK_HOME" value="" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="" />
|
||||||
|
<option name="IS_MODULE_SDK" value="false" />
|
||||||
|
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||||
|
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||||
|
<module name="mopidy_touchscreen" />
|
||||||
|
<option name="SCRIPT_NAME" value="" />
|
||||||
|
<option name="CLASS_NAME" value="" />
|
||||||
|
<option name="METHOD_NAME" value="" />
|
||||||
|
<option name="FOLDER_NAME" value="" />
|
||||||
|
<option name="TEST_TYPE" value="TEST_SCRIPT" />
|
||||||
|
<option name="PATTERN" value="" />
|
||||||
|
<option name="USE_PATTERN" value="false" />
|
||||||
|
<option name="PUREUNITTEST" value="true" />
|
||||||
|
<option name="PARAMS" value="" />
|
||||||
|
<option name="USE_PARAM" value="false" />
|
||||||
|
<method />
|
||||||
|
</configuration>
|
||||||
|
<configuration default="true" type="tests" factoryName="Doctests">
|
||||||
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
|
<option name="PARENT_ENVS" value="true" />
|
||||||
|
<envs />
|
||||||
|
<option name="SDK_HOME" value="" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="" />
|
||||||
|
<option name="IS_MODULE_SDK" value="false" />
|
||||||
|
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||||
|
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||||
|
<module name="mopidy_touchscreen" />
|
||||||
|
<option name="SCRIPT_NAME" value="" />
|
||||||
|
<option name="CLASS_NAME" value="" />
|
||||||
|
<option name="METHOD_NAME" value="" />
|
||||||
|
<option name="FOLDER_NAME" value="" />
|
||||||
|
<option name="TEST_TYPE" value="TEST_SCRIPT" />
|
||||||
|
<option name="PATTERN" value="" />
|
||||||
|
<option name="USE_PATTERN" value="false" />
|
||||||
|
<method />
|
||||||
|
</configuration>
|
||||||
|
<configuration default="true" type="tests" factoryName="Attests">
|
||||||
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
|
<option name="PARENT_ENVS" value="true" />
|
||||||
|
<envs />
|
||||||
|
<option name="SDK_HOME" value="" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="" />
|
||||||
|
<option name="IS_MODULE_SDK" value="false" />
|
||||||
|
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||||
|
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||||
|
<module name="mopidy_touchscreen" />
|
||||||
|
<option name="SCRIPT_NAME" value="" />
|
||||||
|
<option name="CLASS_NAME" value="" />
|
||||||
|
<option name="METHOD_NAME" value="" />
|
||||||
|
<option name="FOLDER_NAME" value="" />
|
||||||
|
<option name="TEST_TYPE" value="TEST_SCRIPT" />
|
||||||
|
<option name="PATTERN" value="" />
|
||||||
|
<option name="USE_PATTERN" value="false" />
|
||||||
|
<method />
|
||||||
|
</configuration>
|
||||||
|
<configuration default="false" name="mopidy" type="PythonConfigurationType" factoryName="Python">
|
||||||
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
|
<option name="PARENT_ENVS" value="true" />
|
||||||
|
<envs>
|
||||||
|
<env name="PYTHONUNBUFFERED" value="1" />
|
||||||
|
</envs>
|
||||||
|
<option name="SDK_HOME" value="/usr/bin/python2.7" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="" />
|
||||||
|
<option name="IS_MODULE_SDK" value="false" />
|
||||||
|
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||||
|
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||||
|
<module name="mopidy_touchscreen" />
|
||||||
|
<option name="SCRIPT_NAME" value="mopidy" />
|
||||||
|
<option name="PARAMETERS" value="" />
|
||||||
|
<RunnerSettings RunnerId="PythonRunner" />
|
||||||
|
<ConfigurationWrapper RunnerId="PythonRunner" />
|
||||||
|
<method />
|
||||||
|
</configuration>
|
||||||
|
<list size="1">
|
||||||
|
<item index="0" class="java.lang.String" itemvalue="Python.mopidy" />
|
||||||
|
</list>
|
||||||
|
</component>
|
||||||
|
<component name="ShelveChangesManager" show_recycled="false" />
|
||||||
|
<component name="SvnConfiguration">
|
||||||
|
<configuration />
|
||||||
|
</component>
|
||||||
|
<component name="TaskManager">
|
||||||
|
<task active="true" id="Default" summary="Default task">
|
||||||
|
<changelist id="7a0221ec-f62d-42c9-ae57-fc244b722561" name="Default" comment="" />
|
||||||
|
<created>1405618199088</created>
|
||||||
|
<updated>1405618199088</updated>
|
||||||
|
</task>
|
||||||
|
<servers />
|
||||||
|
</component>
|
||||||
|
<component name="ToolWindowManager">
|
||||||
|
<frame x="65" y="24" width="1301" height="744" extended-state="6" />
|
||||||
|
<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="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="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
|
||||||
|
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.32884902" sideWeight="0.49961567" 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="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24980783" sideWeight="0.5" order="0" 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" />
|
||||||
|
<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="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.32884902" sideWeight="0.50038433" order="7" side_tool="true" content_ui="tabs" />
|
||||||
|
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32884902" sideWeight="0.49961567" order="2" 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="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="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="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" 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="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" />
|
||||||
|
</layout>
|
||||||
|
</component>
|
||||||
|
<component name="Vcs.Log.UiProperties">
|
||||||
|
<option name="RECENTLY_FILTERED_USER_GROUPS">
|
||||||
|
<collection />
|
||||||
|
</option>
|
||||||
|
<option name="RECENTLY_FILTERED_BRANCH_GROUPS">
|
||||||
|
<collection />
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="VcsContentAnnotationSettings">
|
||||||
|
<option name="myLimit" value="2678400000" />
|
||||||
|
</component>
|
||||||
|
<component name="VcsManagerConfiguration">
|
||||||
|
<option name="myTodoPanelSettings">
|
||||||
|
<TodoPanelSettings />
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="XDebuggerManager">
|
||||||
|
<breakpoint-manager>
|
||||||
|
<option name="time" value="1" />
|
||||||
|
</breakpoint-manager>
|
||||||
|
</component>
|
||||||
|
<component name="editorHistoryManager">
|
||||||
|
<entry file="file://$PROJECT_DIR$/main_screen.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1185">
|
||||||
|
<caret line="26" column="100" selection-start-line="26" selection-start-column="100" selection-end-line="26" selection-end-column="100" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#13#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/touch_text_manager.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="1425" max-vertical-offset="1650">
|
||||||
|
<caret line="95" column="29" selection-start-line="95" selection-start-column="29" selection-end-line="95" selection-end-column="29" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#13#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/screen_manager.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="330" max-vertical-offset="450">
|
||||||
|
<caret line="22" column="0" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/touch_screen.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="301" max-vertical-offset="855">
|
||||||
|
<caret line="27" column="27" selection-start-line="27" selection-start-column="27" selection-end-line="27" selection-end-column="27" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#12#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/main_screen.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1335">
|
||||||
|
<caret line="31" column="28" selection-start-line="31" selection-start-column="28" selection-end-line="31" selection-end-column="28" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#13#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/touch_text_manager.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="1050" max-vertical-offset="1245">
|
||||||
|
<caret line="70" column="55" selection-start-line="70" selection-start-column="55" selection-end-line="70" selection-end-column="55" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#13#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/screen_manager.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="330" max-vertical-offset="450">
|
||||||
|
<caret line="22" column="0" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/touch_screen.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="300" max-vertical-offset="855">
|
||||||
|
<caret line="20" column="9" selection-start-line="20" selection-start-column="9" selection-end-line="20" selection-end-column="9" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#12#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/main_screen.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="899" max-vertical-offset="1350">
|
||||||
|
<caret line="67" column="30" selection-start-line="67" selection-start-column="30" selection-end-line="67" selection-end-column="30" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#13#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/touch_text_manager.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="570" max-vertical-offset="1080">
|
||||||
|
<caret line="38" column="26" selection-start-line="38" selection-start-column="26" selection-end-line="38" selection-end-column="26" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#13#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/screen_manager.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="330" max-vertical-offset="450">
|
||||||
|
<caret line="22" column="0" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/touch_screen.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="285" max-vertical-offset="855">
|
||||||
|
<caret line="19" column="34" selection-start-line="19" selection-start-column="34" selection-end-line="19" selection-end-column="34" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#12#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/main_screen.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1230">
|
||||||
|
<caret line="60" column="52" selection-start-line="60" selection-start-column="52" selection-end-line="60" selection-end-column="52" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#13#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/touch_text_manager.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="181" max-vertical-offset="960">
|
||||||
|
<caret line="56" column="13" selection-start-line="56" selection-start-column="13" selection-end-line="56" selection-end-column="13" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#13#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/touch_screen.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="376" max-vertical-offset="795">
|
||||||
|
<caret line="45" column="0" selection-start-line="45" selection-start-column="0" selection-end-line="45" selection-end-column="0" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#12#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/main_screen.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1245">
|
||||||
|
<caret line="28" column="46" selection-start-line="28" selection-start-column="46" selection-end-line="28" selection-end-column="46" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#13#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/screen_manager.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="450">
|
||||||
|
<caret line="22" column="0" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/touch_screen.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="855">
|
||||||
|
<caret line="43" column="0" selection-start-line="43" selection-start-column="0" selection-end-line="43" selection-end-column="0" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#12#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/touch_text_manager.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="3.477612" vertical-offset="623" max-vertical-offset="2415">
|
||||||
|
<caret line="26" column="0" selection-start-line="26" selection-start-column="0" selection-end-line="26" selection-end-column="0" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#13#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/main_screen.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state vertical-scroll-proportion="0.51970446" vertical-offset="329" max-vertical-offset="1500">
|
||||||
|
<caret line="36" column="107" selection-start-line="36" selection-start-column="107" selection-end-line="36" selection-end-column="107" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#13#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
||||||
25
mopidy_touchscreen/dynamic_background.py~
Normal file
25
mopidy_touchscreen/dynamic_background.py~
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import random
|
||||||
|
|
||||||
|
class DynamicBackground():
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.current=[0,0,0]
|
||||||
|
self.target=[0,0,0]
|
||||||
|
for x in range(0, 3):
|
||||||
|
self.target[x]=random.randint(0,255)
|
||||||
|
|
||||||
|
def drawBackground(self,surface):
|
||||||
|
same = True
|
||||||
|
for x in range(0, 3):
|
||||||
|
if self.current[x]> self.target[x]:
|
||||||
|
self.current[x]=self.current[x]-1
|
||||||
|
elif self.current[x]<self.target[x]:
|
||||||
|
self.current[x]=self.current[x]+1
|
||||||
|
if(self.current != self.target):
|
||||||
|
same = False
|
||||||
|
if same:
|
||||||
|
for x in range(0, 3):
|
||||||
|
self.target[x]=random.randint(0,255)
|
||||||
|
surface.fill(self.current)
|
||||||
|
|
||||||
|
|
||||||
6
mopidy_touchscreen/image_manager.py~
Normal file
6
mopidy_touchscreen/image_manager.py~
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
class ImageManager():
|
||||||
|
|
||||||
|
def __init__(self,cache):
|
||||||
|
self.cache = cache
|
||||||
|
|
||||||
|
def isImageInCache(self,imagename):
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import pygame
|
import pygame
|
||||||
import logging
|
import logging
|
||||||
import hashlib
|
import hashlib
|
||||||
|
import time
|
||||||
import os
|
import os
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
import urllib
|
import urllib
|
||||||
@@ -11,51 +12,60 @@ from .touch_text_manager import TouchTextManager
|
|||||||
from .dynamic_background import DynamicBackground
|
from .dynamic_background import DynamicBackground
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
margin = 10
|
|
||||||
|
|
||||||
|
|
||||||
class MainScreen():
|
class MainScreen():
|
||||||
|
|
||||||
def __init__(self,size,manager,cache):
|
def __init__(self,size,manager,cache):
|
||||||
self.size = size
|
self.size = size
|
||||||
|
self.base_size = self.size[1]/12
|
||||||
self.manager = manager
|
self.manager = manager
|
||||||
self.background = DynamicBackground()
|
self.background = DynamicBackground()
|
||||||
self.track = None
|
self.track = None
|
||||||
self.cache = cache
|
self.cache = cache
|
||||||
self.image = None
|
self.image = None
|
||||||
self.touch_text_manager = TouchTextManager(size)
|
self.touch_text_manager = TouchTextManager(size,self.base_size)
|
||||||
|
self.touch_text_manager.add_touch_object("pause_play","Play",(0,0),(255,255,255))
|
||||||
|
|
||||||
|
|
||||||
def update(self,core):
|
def update(self,core):
|
||||||
screen = pygame.Surface(self.size)
|
screen = pygame.Surface(self.size)
|
||||||
self.background.drawBackground(screen)
|
self.background.drawBackground(screen)
|
||||||
if self.track!=None:
|
if self.track is not None:
|
||||||
if self.image is not None:
|
if self.image is not None:
|
||||||
screen.blit(self.image, ((self.size[0]-self.image.get_rect().width)/2, 0))
|
screen.blit(self.image, (self.base_size, self.base_size*3))
|
||||||
self.touch_text_manager.render(screen)
|
self.touch_text_manager.get_touch_object("time_progress").set_value(core.playback.time_position.get()/1000)
|
||||||
|
self.touch_text_manager.get_object("track_time").set_text(time.strftime('%M:%S', time.gmtime(core.playback.time_position.get()/1000))+"/"+time.strftime('%M:%S', time.gmtime(self.track.length/1000)))
|
||||||
|
self.touch_text_manager.render(screen)
|
||||||
return screen
|
return screen
|
||||||
|
|
||||||
def track_started(self, track):
|
def track_started(self, track):
|
||||||
self.track = track
|
|
||||||
self.image = None
|
self.image = None
|
||||||
self.touch_text_manager.add_text_object("track_name",self.track.name,(0,0), self.size, (255, 255, 255))
|
self.touch_text_manager.add_object("track_name",track.name,(self.size[0]/2,self.base_size*3), (self.size[0]-self.base_size,self.size[1]), (255, 255, 255))
|
||||||
self.touch_text_manager.add_text_object("album_name",self.track.album.name,(0,20), self.size, (255, 255, 255))
|
self.touch_text_manager.add_object("album_name",track.album.name,(self.size[0]/2,self.base_size*4), (self.size[0]-self.base_size,self.size[1]), (255, 255, 255))
|
||||||
self.touch_text_manager.add_text_object("artist_name",self.getFirstArtist(),(0,40), self.size, (255, 255, 255))
|
self.touch_text_manager.add_object("artist_name",self.getFirstArtist(track),(self.size[0]/2,self.base_size*5), (self.size[0]-self.base_size,self.size[1]), (255, 255, 255))
|
||||||
|
self.touch_text_manager.add_object("track_time",time.strftime('%M:%S', time.gmtime(0))+"/"+time.strftime('%M:%S', time.gmtime(0)),(self.size[0]/2,self.base_size*6), (self.size[0]-self.base_size,self.base_size * 7), (255, 255, 255))
|
||||||
|
self.touch_text_manager.add_progressbar("time_progress", (self.size[0]/2,self.base_size*7), (self.size[0]-self.base_size,self.base_size*8),track.length/1000)
|
||||||
|
self.track = track
|
||||||
if not self.is_image_in_cache():
|
if not self.is_image_in_cache():
|
||||||
thread = Thread(target=self.downloadImage())
|
thread = Thread(target=self.downloadImage())
|
||||||
thread.start()
|
thread.start()
|
||||||
else:
|
else:
|
||||||
self.loadImage()
|
self.loadImage()
|
||||||
|
|
||||||
def getFirstArtist(self):
|
|
||||||
artist = next(iter(self.track.artists)).name
|
def getFirstArtist(self,track):
|
||||||
if "," in artist:
|
if track is None:
|
||||||
artist = artist.split(',')[0]
|
artist = next(iter(self.track.artists)).name
|
||||||
|
else:
|
||||||
|
artist = next(iter(track.artists)).name
|
||||||
return artist
|
return artist
|
||||||
|
|
||||||
|
|
||||||
def getImageFileName(self):
|
def getImageFileName(self):
|
||||||
name = self.track.album.name + '-' + self.getFirstArtist()
|
name = self.track.album.name + '-' + self.getFirstArtist(None)
|
||||||
md5name = hashlib.md5(name).hexdigest()+".png"
|
md5name = hashlib.md5(name).hexdigest()
|
||||||
return md5name
|
return md5name
|
||||||
|
|
||||||
def getCoverFolder(self):
|
def getCoverFolder(self):
|
||||||
@@ -65,10 +75,10 @@ class MainScreen():
|
|||||||
|
|
||||||
def is_image_in_cache(self):
|
def is_image_in_cache(self):
|
||||||
self.getCoverFolder()
|
self.getCoverFolder()
|
||||||
return os.path.isfile(self.cache+self.getCoverFolder()+self.getImageFileName())
|
return os.path.isfile(self.getCoverFolder()+self.getImageFileName())
|
||||||
|
|
||||||
def downloadImage(self):
|
def downloadImage(self):
|
||||||
safe_artist=urllib.quote_plus(self.getFirstArtist())
|
safe_artist=urllib.quote_plus(self.getFirstArtist(None))
|
||||||
safe_album=urllib.quote_plus(self.track.album.name)
|
safe_album=urllib.quote_plus(self.track.album.name)
|
||||||
url="http://ws.audioscrobbler.com/2.0/?"
|
url="http://ws.audioscrobbler.com/2.0/?"
|
||||||
params="method=album.getinfo&api_key=59a04c6a73fb99d6e8996e01db306829&artist="+safe_artist+"&album="+safe_album+"&format=json"
|
params="method=album.getinfo&api_key=59a04c6a73fb99d6e8996e01db306829&artist="+safe_artist+"&album="+safe_album+"&format=json"
|
||||||
@@ -79,6 +89,6 @@ class MainScreen():
|
|||||||
self.loadImage()
|
self.loadImage()
|
||||||
|
|
||||||
def loadImage(self):
|
def loadImage(self):
|
||||||
size = self.size[1]
|
size = self.base_size*6
|
||||||
self.image = pygame.transform.scale(pygame.image.load(self.getCoverFolder()+self.getImageFileName()),(size,size))
|
self.image = pygame.transform.scale(pygame.image.load(self.getCoverFolder()+self.getImageFileName()).convert(),(size,size))
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,86 @@
|
|||||||
import pygame
|
import pygame
|
||||||
|
import logging
|
||||||
|
import hashlib
|
||||||
|
import os
|
||||||
|
import urllib
|
||||||
|
from mopidy.audio import PlaybackState
|
||||||
|
from .dynamic_background import DynamicBackground
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class MainScreen():
|
class MainScreen():
|
||||||
|
|
||||||
def update(self):
|
|
||||||
surface = pygame.Surface((200,200)).fill((255,255,255))
|
|
||||||
return surface
|
def __init__(self,size,manager,cache):
|
||||||
|
self.size=size
|
||||||
|
self.manager=manager
|
||||||
|
self.background=DynamicBackground()
|
||||||
|
self.track = None
|
||||||
|
self.cache=cache
|
||||||
|
self.imageStatus = -1
|
||||||
|
|
||||||
|
def update(self,core):
|
||||||
|
screen = pygame.Surface(self.size)
|
||||||
|
self.background.drawBackground(screen)
|
||||||
|
text = pygame.font.SysFont("arial",20)
|
||||||
|
if(self.track!=None):
|
||||||
|
text_surface=text.render(self.track.name,False,(255,255,255))
|
||||||
|
screen.blit(text_surface,(0,0))
|
||||||
|
return screen
|
||||||
|
|
||||||
|
def track_started(self,track):
|
||||||
|
self.track=track
|
||||||
|
logger.error("track started")
|
||||||
|
if(not self.isImageInCache()):
|
||||||
|
logger.error("deskarga hasiko da")
|
||||||
|
self.downloadImage()
|
||||||
|
|
||||||
|
else:
|
||||||
|
self.imageStatus = 1
|
||||||
|
logger.error("supuestamente irudia badago")
|
||||||
|
|
||||||
|
def getImageFileName(self):
|
||||||
|
logger.error("izena sortzen")
|
||||||
|
name = self.track.album.name
|
||||||
|
logger.error(name)
|
||||||
|
md5name = hashlib.md5(name).hexdigest()
|
||||||
|
logger.error("izena ondo")
|
||||||
|
return md5name
|
||||||
|
|
||||||
|
def getCoverFolder(self):
|
||||||
|
logger.error("cover karpeta lortzen")
|
||||||
|
if(not os.path.isdir(self.cache+"/covers")):
|
||||||
|
logger.error("cover carpeta sortu da")
|
||||||
|
os.makedirs(self.cache+"/covers")
|
||||||
|
else:
|
||||||
|
logger.error("ez da cover carpeta sortu")
|
||||||
|
return self.cache+"/covers/"
|
||||||
|
|
||||||
|
def isImageInCache(self):
|
||||||
|
logger.error("imagen en katxe hasiera")
|
||||||
|
self.getCoverFolder()
|
||||||
|
logger.error("imagen en katxe bukaerar")
|
||||||
|
return os.path.isfile(self.cache+self.getCoverFolder()+self.getImageFileName())
|
||||||
|
|
||||||
|
|
||||||
|
def downloadImage(self):
|
||||||
|
logger.error("deskarga hasi da jaja")
|
||||||
|
self.imageStatus = 0
|
||||||
|
#safe_artist=urllib.quote_plus(self.track.artists)
|
||||||
|
safe_artist=''
|
||||||
|
logger.error("-1")
|
||||||
|
safe_album=urllib.quote_plus(self.track.album.name)
|
||||||
|
logger.error("1")
|
||||||
|
url="http://ws.audioscrobbler.com/2.0/?"
|
||||||
|
params="method=album.getinfo&api_key=59a04c6a73fb99d6e8996e01db306829&artist="+safe_artist+"&album="+safe_album+"&format=json"
|
||||||
|
response = urllib2.urlopen(url+params)
|
||||||
|
data = json.load(response)
|
||||||
|
image = data['album']['image'][2]['#text']
|
||||||
|
urllib.urlretrieve(image, folder+"00000001.jpg")
|
||||||
|
self.imageStatus = 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,15 +8,17 @@ class ScreenManager():
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def __init__(self,size):
|
def __init__(self,size):
|
||||||
self.screen_size=size
|
self.screen_size=size
|
||||||
self.screens=[MainScreen(size,self,"/home/ander")]
|
self.screens=[MainScreen(size,self,"/home/ander")]
|
||||||
self.track=None
|
self.track=None
|
||||||
|
|
||||||
|
def update(self,core):
|
||||||
|
return self.screens[0].update(core)
|
||||||
|
|
||||||
|
def track_started(self,track):
|
||||||
|
self.track=track
|
||||||
|
self.screens[0].track_started(track.track)
|
||||||
|
|
||||||
def update(self,core):
|
|
||||||
return self.screens[0].update(core)
|
|
||||||
|
|
||||||
def track_started(self,track):
|
|
||||||
self.track=track
|
|
||||||
self.screens[0].track_started(track.track)
|
|
||||||
|
|
||||||
|
|||||||
24
mopidy_touchscreen/screen_manager.py~
Normal file
24
mopidy_touchscreen/screen_manager.py~
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
from .main_screen import MainScreen
|
||||||
|
import pygame
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
class ScreenManager():
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def __init__(self,size):
|
||||||
|
logger.error("track started")
|
||||||
|
self.screen_size=size
|
||||||
|
self.screens=[MainScreen(size,self,"/home/ander")]
|
||||||
|
self.track=None
|
||||||
|
|
||||||
|
def update(self,core):
|
||||||
|
return self.screens[0].update(core)
|
||||||
|
|
||||||
|
def track_started(self,track):
|
||||||
|
logger.error("track started")
|
||||||
|
self.track=track
|
||||||
|
self.screens[0].track_started(track.track)
|
||||||
|
|
||||||
@@ -1,39 +1,46 @@
|
|||||||
import pykka
|
import pykka
|
||||||
|
|
||||||
import traceback
|
import traceback
|
||||||
import logging
|
import logging
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
import pygame
|
import pygame
|
||||||
from .screen_manager import ScreenManager
|
from .screen_manager import ScreenManager
|
||||||
|
from pygame.locals import *
|
||||||
|
|
||||||
from mopidy import core
|
from mopidy import core
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class TouchScreen(pykka.ThreadingActor, core.CoreListener):
|
class TouchScreen(pykka.ThreadingActor, core.CoreListener):
|
||||||
|
|
||||||
def __init__(self, config, core):
|
def __init__(self, config, core):
|
||||||
super(TouchScreen, self).__init__()
|
super(TouchScreen, self).__init__()
|
||||||
self.core = core
|
self.core = core
|
||||||
self.screen_size=(320, 240)
|
self.running = False
|
||||||
|
#self.screen_size=(320, 240)
|
||||||
|
self.screen_size=(800, 600)
|
||||||
|
pygame.init()
|
||||||
self.screen_manager = ScreenManager(self.screen_size)
|
self.screen_manager = ScreenManager(self.screen_size)
|
||||||
|
|
||||||
|
|
||||||
def start_thread(self):
|
def start_thread(self):
|
||||||
pygame.init()
|
|
||||||
clock = pygame.time.Clock()
|
clock = pygame.time.Clock()
|
||||||
screen = pygame.display.set_mode(self.screen_size)
|
screen = pygame.display.set_mode(self.screen_size)
|
||||||
while self.running:
|
while self.running:
|
||||||
clock.tick(30)
|
clock.tick(30)
|
||||||
screen.blit(self.screen_manager.update(self.core),(0,0))
|
screen.blit(self.screen_manager.update(self.core),(0,0))
|
||||||
pygame.display.flip()
|
pygame.display.flip()
|
||||||
|
for event in pygame.event.get():
|
||||||
pygame.quit()
|
pass
|
||||||
|
pygame.quit()
|
||||||
|
|
||||||
def on_start(self):
|
def on_start(self):
|
||||||
self.running=True
|
try:
|
||||||
thread = Thread(target=self.start_thread)
|
self.running = True
|
||||||
thread.start()
|
thread = Thread(target=self.start_thread)
|
||||||
|
thread.start()
|
||||||
|
except:
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
def on_stop(self):
|
def on_stop(self):
|
||||||
self.running = False
|
self.running = False
|
||||||
@@ -43,5 +50,3 @@ class TouchScreen(pykka.ThreadingActor, core.CoreListener):
|
|||||||
self.screen_manager.track_started(tl_track)
|
self.screen_manager.track_started(tl_track)
|
||||||
except:
|
except:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -31,9 +31,8 @@ class TouchScreen(pykka.ThreadingActor, core.CoreListener):
|
|||||||
|
|
||||||
def on_start(self):
|
def on_start(self):
|
||||||
self.running=True
|
self.running=True
|
||||||
self.thread = Thread(target=self.start_thread)
|
thread = Thread(target=self.start_thread)
|
||||||
self.thread.start()
|
thread.start()
|
||||||
pass
|
|
||||||
def on_stop(self):
|
def on_stop(self):
|
||||||
self.running = False
|
self.running = False
|
||||||
|
|
||||||
|
|||||||
155
mopidy_touchscreen/touch_text_manager.py
Normal file
155
mopidy_touchscreen/touch_text_manager.py
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
import pygame
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
class TouchTextManager():
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def __init__(self,size,base_size):
|
||||||
|
self.size = size
|
||||||
|
self.base_size = base_size
|
||||||
|
self.touch_objects = {}
|
||||||
|
self.text_objects = {}
|
||||||
|
|
||||||
|
def add_object(self, key, text, pos, pos2, color):
|
||||||
|
self.text_objects[key] = TextItem(text, pos,pos2,color,self.base_size)
|
||||||
|
|
||||||
|
def get_object(self, key):
|
||||||
|
return self.text_objects[key]
|
||||||
|
|
||||||
|
def add_touch_object(self, key, text, pos, color):
|
||||||
|
self.touch_objects['key'] = TouchAndTextItem(text, pos, color, self.base_size)
|
||||||
|
|
||||||
|
def get_touch_object(self,key):
|
||||||
|
return self.touch_objects['key']
|
||||||
|
|
||||||
|
def add_progressbar(self, key, pos, pos2, max):
|
||||||
|
self.touch_objects['key'] = Progressbar(pos,pos2,max)
|
||||||
|
|
||||||
|
def render(self, surface):
|
||||||
|
for key in self.text_objects:
|
||||||
|
self.text_objects[key].update()
|
||||||
|
self.text_objects[key].render(surface)
|
||||||
|
for key in self.touch_objects:
|
||||||
|
self.touch_objects[key].render(surface)
|
||||||
|
|
||||||
|
|
||||||
|
class BaseItem():
|
||||||
|
|
||||||
|
def __init__(self,pos,pos2):
|
||||||
|
self.pos = pos
|
||||||
|
self.pos2 = pos2
|
||||||
|
self.size=[0,0]
|
||||||
|
self.size[0] = self.pos2[0] - self.pos[0]
|
||||||
|
self.size[1] = self.pos2[1] - self.pos[1]
|
||||||
|
self.rect = pygame.Rect(0,0,self.size[0],self.size[1])
|
||||||
|
|
||||||
|
|
||||||
|
class TextItem(BaseItem):
|
||||||
|
|
||||||
|
def __init__(self, text, pos,pos2, color,text_size):
|
||||||
|
if pos2 is not None:
|
||||||
|
BaseItem.__init__(self,pos,pos2)
|
||||||
|
self.text_size = text_size
|
||||||
|
self.font = pygame.font.SysFont("arial", text_size)
|
||||||
|
self.text = text
|
||||||
|
self.color = color
|
||||||
|
self.box = self.font.render(text, True, self.color)
|
||||||
|
if pos2 is not None:
|
||||||
|
if self.pos[0] + self.box.get_rect().width > pos2[0]:
|
||||||
|
self.fit_horizontal = False
|
||||||
|
self.text = self.text + " "
|
||||||
|
self.original_text = self.text
|
||||||
|
self.step = 0
|
||||||
|
else:
|
||||||
|
self.fit_horizontal = True
|
||||||
|
if self.pos[1] + self.box.get_rect().height > pos2[1]:
|
||||||
|
self.fit_vertical = False
|
||||||
|
else:
|
||||||
|
self.fit_vertical = True
|
||||||
|
else:
|
||||||
|
BaseItem.__init__(self,pos,(pos[0]+self.box.get_rect().width,pos[1]+self.box.get_rect().height))
|
||||||
|
self.fit_horizontal = True
|
||||||
|
self.fit_vertical = True
|
||||||
|
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
if not self.fit_horizontal:
|
||||||
|
if self.text == self.original_text:
|
||||||
|
if self.step > 90:
|
||||||
|
self.step = 0
|
||||||
|
new_text = self.text[1:]
|
||||||
|
new_text = new_text + self.text[:1]
|
||||||
|
self.text = new_text
|
||||||
|
else:
|
||||||
|
self.step = self.step + 1
|
||||||
|
elif self.step > 5:
|
||||||
|
self.step = 0
|
||||||
|
new_text = self.text[1:]
|
||||||
|
new_text = new_text + self.text[:1]
|
||||||
|
self.text = new_text
|
||||||
|
else:
|
||||||
|
self.step = self.step + 1
|
||||||
|
|
||||||
|
def render(self,surface):
|
||||||
|
if self.fit_horizontal:
|
||||||
|
self.box
|
||||||
|
else:
|
||||||
|
self.box = self.font.render(self.text, True, self.color)
|
||||||
|
surface.blit(self.box,self.pos,area=self.rect)
|
||||||
|
|
||||||
|
def set_text(self, text):
|
||||||
|
self.__init__(text,self.pos,self.pos2,self.color,self.text_size)
|
||||||
|
|
||||||
|
class TouchObject(BaseItem):
|
||||||
|
|
||||||
|
def __init__(self,pos,pos2):
|
||||||
|
BaseItem.__init__(self,pos,pos2)
|
||||||
|
self.active = False
|
||||||
|
self.background_box = pygame.Surface(self.size)
|
||||||
|
self.background_box.fill((0,128,255))
|
||||||
|
|
||||||
|
def render(self,surface):
|
||||||
|
surface.blit(self.background_box, self.pos)
|
||||||
|
|
||||||
|
|
||||||
|
class TouchAndTextItem(TouchObject, TextItem):
|
||||||
|
|
||||||
|
def __init__(self, text, pos, color,text_size):
|
||||||
|
TextItem.__init__(self,text, pos,None, color,text_size)
|
||||||
|
TouchObject.__init__(self,pos,self.pos2)
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
TextItem.update()
|
||||||
|
|
||||||
|
def render(self,surface):
|
||||||
|
TouchObject.render(self,surface)
|
||||||
|
TextItem.render(self,surface)
|
||||||
|
|
||||||
|
class Progressbar(BaseItem):
|
||||||
|
|
||||||
|
def __init__(self, pos, pos2, max):
|
||||||
|
BaseItem.__init__(self, pos, pos2)
|
||||||
|
logger.error(pos2)
|
||||||
|
self.value = 0
|
||||||
|
self.max = max
|
||||||
|
self.back_color = (0,0,0)
|
||||||
|
self.main_color = (255,255,255)
|
||||||
|
self.surface = pygame.Surface(self.size)
|
||||||
|
self.surface.fill(self.back_color)
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def render(self, surface):
|
||||||
|
surface.blit(self.surface, self.pos)
|
||||||
|
|
||||||
|
def set_value(self, value):
|
||||||
|
self.value = value
|
||||||
|
self.surface.fill(self.back_color)
|
||||||
|
pos_pixel = value * self.size[0] / self.max
|
||||||
|
rect = pygame.Rect(0,0,pos_pixel,self.size[1])
|
||||||
|
self.surface.fill(self.main_color, rect)
|
||||||
|
|
||||||
49
setup.py~
Normal file
49
setup.py~
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
|
from setuptools import find_packages, setup
|
||||||
|
|
||||||
|
|
||||||
|
def get_version(filename):
|
||||||
|
content = open(filename).read()
|
||||||
|
metadata = dict(re.findall("__([a-z]+)__ = '([^']+)'", content))
|
||||||
|
return metadata['version']
|
||||||
|
|
||||||
|
|
||||||
|
setup(
|
||||||
|
name='Mopidy-Touchscreen',
|
||||||
|
version=get_version('mopidy_touchscreen/__init__.py'),
|
||||||
|
url='https://github.com/9and3r/mopidy-touchscreen',
|
||||||
|
license='Apache License, Version 2.0',
|
||||||
|
author='9and3r',
|
||||||
|
author_email='9and3r@gmail.com',
|
||||||
|
description='Mopidy extension to show info on a display and control from it',
|
||||||
|
long_description=open('README.rst').read(),
|
||||||
|
packages=find_packages(exclude=['tests', 'tests.*']),
|
||||||
|
zip_safe=False,
|
||||||
|
include_package_data=True,
|
||||||
|
install_requires=[
|
||||||
|
'setuptools',
|
||||||
|
'Mopidy >= 0.17',
|
||||||
|
'Pykka >= 1.1',
|
||||||
|
],
|
||||||
|
test_suite='nose.collector',
|
||||||
|
tests_require=[
|
||||||
|
'nose',
|
||||||
|
'mock >= 1.0',
|
||||||
|
],
|
||||||
|
entry_points={
|
||||||
|
'mopidy.ext': [
|
||||||
|
'touchscreen = mopidy_touchscreen:Extension',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
classifiers=[
|
||||||
|
'Environment :: No Input/Output (Daemon)',
|
||||||
|
'Intended Audience :: End Users/Desktop',
|
||||||
|
'License :: OSI Approved :: Apache Software License',
|
||||||
|
'Operating System :: OS Independent',
|
||||||
|
'Programming Language :: Python :: 2',
|
||||||
|
'Topic :: Multimedia :: Sound/Audio :: Players',
|
||||||
|
],
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user