]> git.tdb.fi Git - xinema.git/blobdiff - remote/qml/pages/BrowsePage.qml
Go back to ConnectPage if connection to the server is lost
[xinema.git] / remote / qml / pages / BrowsePage.qml
index f85388098409e48e9d104827ebef3cbd173fc223..74758a69c74e8e0ca42bb47087aa09c42fbf843a 100644 (file)
@@ -1,88 +1,90 @@
 import QtQuick 2.0
 import Sailfish.Silica 1.0
+import org.nemomobile.configuration 1.0
 import fi.mikkosoft.xinema 0.1
+import "../components"
 
 Page
 {
        id: page
 
-       SilicaFlickable
+       function navigate(dir)
+       {
+               var newDir = browseDirectory.directory;
+               if(newDir!="/")
+                       newDir += "/";
+               newDir += dir;
+               browseDirectory.directory = newDir;
+       }
+
+       function navigateUp()
+       {
+               var newDir = browseDirectory.directory;
+               var slash = newDir.lastIndexOf("/");
+               if(slash>0)
+                       newDir = newDir.substring(0, slash);
+               else
+                       newDir = "/";
+               browseDirectory.directory = newDir;
+       }
+
+       SilicaListView
        {
                anchors.fill: parent
-               contentHeight: column.height
 
-               Column
+               PullDownMenu
+               {
+                       MenuItem
+                       {
+                               text: "Set as default location"
+
+                               onClicked: defaultLocation.value = browseDirectory.directory
+                       }
+
+                       MenuItem
+                       {
+                               visible: streamControl.title
+                               text: streamControl.title
+
+                               onClicked: pageStack.push("PlaybackPage.qml");
+                       }
+               }
+
+               header: PageHeader
                {
-                       id: column
+                       title: qsTr("Browse files")
+               }
+
+               model: browseDirectory.model
 
+               delegate: DirectoryEntry
+               {
                        width: parent.width
-                       spacing: Theme.paddingLarge
 
-                       PageHeader
+                       icon:
                        {
-                               title: qsTr("Browse files")
+                               if(type==DirectoryModel.ParentDir)
+                                       return "image://theme/icon-m-back";
+                               else if(type==DirectoryModel.SubDir)
+                                       return "image://theme/icon-m-folder";
+                               else
+                                       return "";
                        }
 
-                       // This really should be SilicaListView, but I can't figure out an
-                       // easy way to turn the string lists into a suitable ListModel
-                       Column
+                       text: name
+
+                       onClicked:
                        {
-                               width: parent.width
-                               spacing: Theme.paddingSmall
-
-                               DirectoryEntry
-                               {
-                                       visible: browseDirectory.directory!="/"
-                                       icon: "image://theme/icon-m-back"
-                                       text: ".."
-                                       onPressed:
-                                       {
-                                               var newDir = browseDirectory.directory;
-                                               var slash = newDir.lastIndexOf("/");
-                                               if(slash>0)
-                                                       newDir = newDir.substring(0, slash);
-                                               else
-                                                       newDir = "/";
-                                               browseDirectory.directory = newDir;
-                                       }
-                               }
-
-                               Repeater
-                               {
-                                       model: browseDirectory.subdirectories
-
-                                       DirectoryEntry
-                                       {
-                                               icon: "image://theme/icon-m-folder"
-                                               text: modelData
-
-                                               onPressed:
-                                               {
-                                                       var newDir = browseDirectory.directory;
-                                                       if(newDir!="/")
-                                                               newDir += "/";
-                                                       newDir += modelData;
-                                                       browseDirectory.directory = newDir;
-                                               }
-                                       }
-                               }
-
-                               Repeater
-                               {
-                                       model: browseDirectory.files
-                                       DirectoryEntry
-                                       {
-                                               text: modelData
-
-                                               onPressed:
-                                               {
-                                                       xinemaControl.play_file(browseDirectory.directory+"/"+modelData);
-                                                       pageStack.replace("PlaybackPage.qml");
-                                               }
-                                       }
-                               }
+                               if(type==DirectoryModel.File)
+                                       xinemaControl.play_file(browseDirectory.directory+"/"+name);
+                               else if(type==DirectoryModel.ParentDir)
+                                       page.navigateUp();
+                               else if(type==DirectoryModel.SubDir)
+                                       page.navigate(name);
                        }
                }
+
+               VerticalScrollDecorator { }
        }
 
        BrowseDirectory
@@ -91,20 +93,42 @@ Page
                control: xinemaControl
        }
 
+       Component.onCompleted:
+       {
+               if(xinemaControl.connected)
+                       browseDirectory.directory = defaultLocation.value;
+       }
+
        Connections
        {
                target: xinemaControl
                onConnectedChanged:
                {
-                       if(xinemaControl.connected)
-                               browseDirectory.directory = "/";
+                       if(!xinemaControl.connected)
+                               pageStack.replace("ConnectPage.qml");
                }
        }
 
-       Component.onCompleted:
+       StreamControl
        {
-               if(xinemaControl.connected)
-                       browseDirectory.directory = "/";
+               id: streamControl
+               control: xinemaControl
+               onPlaybackStateChanged:
+               {
+                       if(playbackState==StreamControl.Playing && pageContainer.currentPage==page)
+                       {
+                               if(pageContainer.busy)
+                                       pageContainer.completeAnimation();
+                               pageStack.push("PlaybackPage.qml");
+                       }
+               }
+       }
+
+       ConfigurationValue
+       {
+               id: defaultLocation
+               key: "/fi/mikkosoft/xinema-remote/defaultLocation"
+               defaultValue: "/"
        }
 }