[00:04] my touchscreen already works as a mouse [00:04] wacom is installed by default lol [00:04] Is that all it does? [00:05] I will check out unity8 though [00:09] nik90: i it supposed to say no data sources? [00:11] nothing I click on works.. [00:11] I thought it was like a version for a desktop not a phone emulator haha [00:14] wasnt in ubuntu-restricted-extras or -extras [00:14] er -adons [00:14] oops wc [00:23] PublicStaticVoid: I did say it wasn't ready for desktop. That said, if you resize the window, the UI will adapt to the window size. [00:23] but the convergence is a wip. So it doesn't happen with all UI elements [00:23] yeah nothings works [00:23] so I will wait a while [00:23] looks good though [00:23] I haven't personally tried. So you might want to ask on #ubuntu-touch on how to test it. [00:24] By nothing I mean clicking or touching apps does nothing [00:24] I thought this was #ubuntu-touch haha [00:24] could be that you need to add additional parameters while running it to get those working [00:24] I am in there haha [00:24] Thx [00:51] nik90, managed to convert the recently played tracks to use U1DB \o/ [00:53] ahayzen: wow! that's awesome [00:53] nik90, the only issue i've hit so far is 'u1db: Invalid docID', so far I have found if u have a space or a dot it doesn't like it :/ [00:55] nik90, i need to sanitise them in some way but i'm not sure of all the legal chars yet lol and I need to ensure they are unique [00:55] ahayzen: yup. I guess docId is quite similar to qml Id which are special [00:55] nik90, yeah [00:55] ahayzen: why dont you let u1db generate the docId automatically? [00:55] nik90, it can do tht? [00:55] nik90, wht just leave it blank? [00:56] if you use the putDoc() method and give it just the data, it will create a document with a unique docId [00:56] this doesn't work for static document creation [00:56] at least that's what I think [00:58] nik90, thanks i'll try tht :) [00:59] nik90, it works :) ... just realised i need to sort the query some how [01:00] nice [01:01] nik90, oh no its just backwards, do u know how to get a listview to display the results backwards lol [01:01] ahayzen: sorting hmm..I have no idea about that. But that is something I would be interested in knowing as well. [01:01] nik90, ah no it may be trickier than tht [01:02] nik90, also using the autogenerate does make it more difficult to detect wht is already there, i'll continue investigating :) [01:03] ahayzen: you can use the function listDocs() to list all the docs available in the database [01:03] it returns all the docIds as a list. [01:04] nik90, before i was using recent_albumname ... so it would just overwrite the existing when it needs to update the time [01:04] nik90, tht would mean searching through all the docs for the matching album :/ [01:05] nik90, if i could take a hash of the album name tht would probably be the best/easiest solution to solve the id issue [01:06] ahayzen: hash? [01:06] you meant a part of the album name? [01:06] nik90, if i took say a md5 of the album name tht would both be unique and would contain valid characters? [01:07] true [01:07] ahayzen: are there quite a bit of songs in the recently played? or is it just the last played song that you are storing? [01:08] nik90, it is a list of all the albums/playlists played by the user IIRC ... so could be massive [01:08] ahayzen: ah okay [01:08] nik90, although i don't know if it is planned to be limited to x items, at the moment we just have a clear button [01:09] ahayzen: in that case, why dont you add a property called "type" = "recentPlayed" and then query for docs with that property value? [01:09] that's what stuart recommended in order to filter through the docs in a database [01:09] ahayzen: btw, check out https://one.ubuntu.com/developer/data/u1db/high-level-api [01:09] it is a python API [01:10] however it shows some valid index and query expressions that can be used [01:10] nik90, i'm not sure how i've done it but i've got the contents as {"recent": {"title": title, ... }} and then the index points at "recent.title" etc and then the query points at the index? [01:11] nik90, similar to this one http://bazaar.launchpad.net/~geldliste-developers/geldliste/ubuntu-app-showdown/view/head:/geldliste/model/GeldlisteDatabase.qml [01:12] ahayzen: I think that should work. I am still getting used to the query stuff [01:13] nik90, yh it seems like there a few different ways of doing it [01:15] nik90, anyway i better go to sleep, thanks for all ur help :) [01:16] ahayzen: np. gud nite === JamesTait is now known as Guest30408 [13:38] ahayzen: were you able to fix the issue where the listview showed results backwards? [13:38] nik90, no i realised it was just showing them in order added [13:38] nik90, i also found in the spec 'Recent: the last n albums that were played or added.' so i have changed it to use ur idea of auto ids [13:38] I still have 2 things I need to figure out -> 1. changing the order 2. Different types of query expressions allowed [13:39] ahayzen: oh by the way I figured out basic filtering methods [13:39] nik90, i think all i now need is to be able to sort the query in descending order on a field [13:39] I created dynamic tasks similar to { "task": {"name": "sample task 0", "status": "Started", "progress": 20} } [13:39] nik90, and then put the index on task.name ? [13:40] yup [13:40] nik90, ^^ is wht i figured out last night as well :) [13:40] actually my index lists expression: ["task.name", "task.status", "task.progress"] [13:40] nik90, and then ur query points at ur index? [13:40] I noticed that if I dont add task.status and task.progress, I cannot display that data in a listview [13:41] nik90, yeah it is like ur telling it wht to put in the SELECT statement [13:41] my query is query: [{"name":"*"}, {"status":"*"}, {"progress":"*"}] [13:41] best part is I can change it to status:"Done" [13:41] and then it will show only tasks that are done [13:42] but I still need to find out all available logic expressions that can be used. [13:42] nik90, cool, my query is blank at the moment as i want all of the recent items [13:42] ahayzen: yup that makes sense for recent items [13:42] so in your list view your model is the query object [13:42] nik90, i just need to be able to sort the query. Then i can remove any docs after X index [13:42] nik90, yep [13:43] nik90, oh yeah to remove a doc u do db.putDoc("", docId) [13:43] yeah, I saw it in geldliste this morning [13:43] I was up pretty much the whole nite trying to figure this thing out :P [13:43] nik90, yeah same lol [13:44] lol [13:44] nik90, it does seem much cleaner than localstorage though :) [13:44] oh also, query also provides the docId as well just so you know [13:44] nik90, yep i'm just playing with tht now [13:44] nik90, so who do we talk to regarding sorting etc? [13:44] +1.. u1db much cleaner than local storage [13:45] definitely stuart again [13:45] I will send a g+ message to him and include you in the conversation [13:45] nik90, is he around on IRC?....ah cool thx [13:46] he normally is, but I havent seen him on irc this whole weekend [13:46] his nick is aquarius [13:46] nik90, he is probably hiding from u ;) [13:46] hey I dont think I have you in my circles, can you link me to your profile [13:46] lol ;P [13:46] nik90, http://andrewhayzen.co.uk/plus [13:48] awesome [13:48] ahayzen: let me know if you figure out any other cool tricks [13:48] nik90, haha i will, i'm still wondering about the best way to do the playlists [14:06] nik90, do u think you can double nest the elements eg playlist.tracks.file ? [14:06] nik90, so it would then be {"playlist": {"name":"test", "tracks": {"file":"/path"}}} [14:09] ahayzen: absolutely [14:09] ahayzen: but I am guessing you might need to adjust the query appropriately since you will essentially have 2 models [14:09] nik90, and then wht would the playlisttrack index look like? ["playlist.tracks.file"] [14:09] nik90, well i need two models. one for the list of playlists then one for the list of tracks in a playlist [14:10] nik90, i'll try it and see wht happens :) [14:10] ahayzen: yup, give it a try, I am experimenting with that as well [14:10] nik90, if it can do ^^ and we can figure out sorting then we are on to a winner :) [14:17] ahayzen: yup :) because that should cover almost 80-90% of what most apps need [14:18] nik90, yep :) [14:19] nik90, wht would be really cool would be able to go sort: ["recent.time"] and then have a true false for asc/desc or something [14:21] ahayzen: +1 [14:21] nik90, ^^ would be enough for me i think [14:21] ahayzen: in the u1db python docs, I have seen a sort function. dont know if there is a equivalent in qml javascript [14:22] nik90, i saw some of the py examples just wrapped sorted() around the results, are u able to point me to an example? [14:24] ahayzen: http://pythonhosted.org/u1db/high-level-api.html [14:24] sorted(db1.get_index_keys('by-firstname') [14:24] search for that string in the link [14:25] nik90, is tht not python sorting it no U1DB though? [14:25] *not U1DB [14:26] I think so...that's why I hope javascript has something similar [14:27] nik90, but we just point the listView at the query so surely we would want the query to do it for us before it reaches the listView? [14:27] + [14:28] nik90, otherwise we would have to extract the results, sort them and then somehow make them back into a listmodel [14:29] ahayzen: well in essence we can create a listmodel and have a for loop where we go through the query results and then push it to the listmodel with a appropriate filter or expression [14:30] ahayzen: but before we go to that step, I am trying to ensure that u1db has some trick up its sleeve [14:30] nik90, we could but U1db appears to be very fast so i would prefer it to do the sorting internally to maintain the performance [14:31] I take it you refer internally->u1db ? [14:33] nik90, yep internally as in, in its statements when it is reading from the actual db [14:33] ahayzen: btw is this statement { "task": {"name": "sample task 0", "status": "Started", "progress": 20, "tags": [{"tag":"test1"},{"tag":"test2"}]}} seem correct? It should be similar to your recent playlist object [14:34] where task is a playlist and tags are the filenames [14:35] nik90, ooo interesting, i'm still building my interface :) [14:35] nik90, just deciding how to detect if a playlist name already exists in the db [14:36] ah [14:36] nik90, can either loop through the results or i was thinking of using a query to filter by that name and then count the results [14:38] is this to check while creating a new playlist to avoid duplicate playlist names? [14:38] I would use the query filter and count the results. [14:39] nik90, yep and i agree thts the best way [14:39] * ahayzen notices the music-app doesn't currently stop duplicate playlist names causing interesting affects [14:42] I am guessing localstorage will override an existing playlist? [14:43] nik90, i end up with two tht are like merged lol because we currently have playlist(id, name) with id as the key. i'm now gonna change this to just name with that as the key to prevent this [14:45] nik90, so if i have {"playlist": {"tracks": []}} and then i want to add to tht playlist how to add {"file": "/path"} to it. Is this where the issue of QML not picking up appends that Stuart mentioned occurs? [14:48] ahayzen: yes [14:48] nik90, so i have to get the contents of the doc add it to tht var then reset the *whole* contents back to the doc? [14:49] that's what I am planning to do [14:49] nik90, something like var contents = doc.contents; contents.playlist.tracks.push(record); doc.contents = contents; [14:50] I am not sure about the contents.tracks.push() part, but others seems fine [14:50] nik90, haha yeah i'm not sure either [14:51] although I am still stuck in the {"playlist": {"tracks": []}} part. I am not sure how to display it using a query [14:51] it is not working for me [14:52] nik90, ah i'm still building the parts to put the data in lol so will probably have the same issue in a bit [14:53] hehe [14:54] ahayzen: you should test all this in a sample program rather than on the music app, since you can iteratively test it quickly [14:54] nik90, yeah probably a better idea but i'm pretty much there hehe [15:12] nik90, yeah something in there isn't working as expected :/ [15:13] ahayzen: regarding the push or viewing the query? [15:13] nik90, just viewing the query haven't got as far as pushing yet [15:13] I have a feeling that the index keys should have the same size [15:14] nik90, i can create a playlist with {"playlist": {"name": "a", "tracks": []}} but i can't get the tracks part back to count how many tracks there are [15:14] in our case, we have playlist.name and playlist.tracks of different size [15:14] nik90, i've tried doing playlist.tracks and it just says it doesn't exist when i try and do contents.tracks.length in the listview [15:15] yup for me it says playlist.tracks is undefine [15:15] undefined* [15:15] I tried Query.results[0].tracks [15:15] yep [15:15] hmmm [15:17] nik90, gonna need a new plan ;) [15:18] :) [15:21] ahayzen: http://bazaar.launchpad.net/~uonedb-qt/u1db-qt/trunk/view/head:/examples/u1db-qt-example-5/u1db-qt-example-5.qml [15:21] there they use a similar document contents and have made a index and query [15:21] but on trying it with playlist, it doesnt work [15:21] nik90, ooo tht is close [15:21] this is so unfair :/ [15:21] nik90, the issue is we have tracks as a list [15:22] nik90, oh but they have word as a list... [15:22] exactly [15:22] but the thing is look at their index [15:22] both have the same size [15:22] unlike ours [15:22] nik90, interesting [15:24] nik90, ok i could put a playlist.count to solve tht i just need to then have a way of only showing the playlist.tracks.xx that have a playlist.name==x which will be the next issue lol [15:39] ahayzen: I figured how to view it!!! [15:40] nik90, how? [15:40] ahayzen: let me post the code. 10 secs [15:40] nik90, np [15:42] ahayzen: http://paste.ubuntu.com/6697573/ [15:43] nik90, ooo interesting [15:44] ahayzen: I realised that the query gives the docId of the playlist we are interested in. So with the docId, I get the tracks info directly from the database :) [15:45] nik90, cool once i get my smaller example working i'll see if it works [15:50] nik90, i'm getting data back \o/ [15:50] ahayzen: awesome! [15:50] ahayzen: are you going to try the adding/editing part now? [15:51] nik90, yep and then see if i can copy the changes across to the music-app attempt :) [15:55] :) [16:02] nik90, i can see the push is working on the actual array, just need to get it to update the document [16:03] ahayzen: well if you pushed into a javascript array and that worked, then document.contents = javascript array should work? [16:04] nik90, but i don't have the actual document so i thought db.putDoc(contents, docId); might work [16:04] ahayzen: oh yeah that will work!! nice! [16:05] nik90, but something isn't working :/ [16:06] nik90, i can see it trying to read stuff for the listmodel but it is coming back with u1db: Failed to get document : No document [16:07] nik90, brb [16:12] nik90, see wht u make of http://pastebin.ubuntu.com/6697749/ bits of it are overcomplicated for tht small example and some temporary methods have been added but u get the idea [16:13] nik90, just when u hit add u can see it being added to the contents but not the listview [16:15] should I be looking at function addToPlaylist() ? [16:16] ahayzen: [16:19] nik90, yeah [16:20] nik90, it all needs cleaning up as things have been added/removed alot lol but still not sure y it isn't quite working [16:21] hmm it works for me on my program. [16:21] ahayzen: I copied most of the stuff from your program [16:21] let me debug yours..1 min [16:21] nik90, hmm probably have a query/index linked incorrectly somewhere [16:22] ahayzen: give me the ooutput as I ask them [16:22] ahayzen: when you do contents = db.getDoc(doc) [16:22] do you get the right contents output? [16:23] I am trying to validate if your docId you passed is correct [16:23] nik90, the output of this ... console.debug("DOC", doc, JSON.stringify(contents)); [16:23] nik90, is DOC D-132a191a-6bd1-476b-af51-04a32a94fbba {"playlist":{"name":"test","tracks":[{"file":"/path/to/file"},{"file":"/new/path"},{"file":"/new/path"}]}} [16:24] nik90, and then the second debug line after the push u can see the new item...DOC D-132a191a-6bd1-476b-af51-04a32a94fbba {"playlist":{"name":"test","tracks":[{"file":"/path/to/file"},{"file":"/new/path"},{"file":"/new/path"},{"file":"/new/path"}]}} [16:24] okay that seems fine then [16:26] nik90, it seems to be failing in playlist.getDb().getDoc(docId) [16:26] nik90, tht appears to be where this appears 'u1db: Failed to get document : No document' [16:27] ahayzen: ah..okay [16:27] nik90, tht is in the listitem [16:30] ahayzen: could it be that it is confusing the two identical playlist variable names? [16:30] in that statement [16:31] nik90, where? [16:31] ahayzen: in playlist.getDb().getDoc(docId).playlist.tracks[index].file [16:31] could you change Playlist { id: playlist } to someother name [16:32] but i am calling tht playlist aren't i? [16:33] true, but there is playlist.getDb() and also playlist.tracks[index].file as well [16:33] so I thought perhaps it is confusing between those two playlist variable names [16:33] ah i see wht u mean [16:35] ahayzen: I am pretty sure the way you are adding stuff to the u1db is correct since it works for me as well. So that's a huge win for us :) [16:36] nik90, yep :)...u have a repeater in ur listview... [16:38] ahayzen: is it working for you now? [16:38] nik90, no lol [16:38] :/ [16:39] nik90, ooo maybe now but my repeater is putting the text ontop of itself so just get a black blob lol [16:39] lol..use a column or row [16:40] you need to use a repeater since it is a array inside a array if you know what I mean [16:40] nik90, thx [16:40] or else we need to use a ListItem.Multivalue [16:40] I tried that but it showed [object Object] instead of the actual value [16:41] nik90, right tht works [16:41] nik90, i just wonder if i can get the UI right, it should be ok (yn) [16:42] ahayzen: well here's what I am thinking right now. -> I got dynamic documents working!! I can add, edit, delete and view them! [16:42] I will worry about the UI a bit later :P [16:43] I think i have enough to start my blog post explaining what I did. [16:43] * nik90 is tired.. [16:43] nik90, yep it is coming together slowly :) [16:45] the thing is this is all quite new and hence takes time to get it right..I struggled in a similar fashion with local storage as well. The only difference between the code will be more cleaner and leaner this time. [16:46] nik90, right just got the filter working, think i have enough to attempt to get it working with the music-app [16:46] ahayzen: yup..me too for the clock app. [16:47] ahayzen: btw thnx for working with me on this..nice to work together and exchange code to help one other [16:47] nik90, and hopefully we'll get a response about the sorting then we'll be sorted (if u pardon the pun) ;) [16:47] lol with the pun ;D [16:48] nik90, no problem and thanks to u as well been a great help with getting this going [16:48] nik90, sure we'll get there eventually [17:02] nik90, do u know where the U1DB are stored so they can be easily deleted? [17:03] ahayzen: it is located in ~/.local/share/applicationName [17:04] ahayzen: just so you know, I deleted my u1db file 1000 times in the past 24 hours :) [17:04] nik90, found it thanks :) [17:22] ahayzen: hope you saw stuart's reply on g+ [17:23] nik90, oooo reading now thx [17:23] ahayzen: no sorting available in u1db, but he has a valid point why. Unfortunately for us, QML doesn't offer sorting either :? [17:24] nik90, damn [17:25] nik90, he says you can do it in the ListModel with C++, anyway of the SDK exposing this to us? [17:26] nik90, IIRC correctly in Gtk you have a TreeModelSort which u put around the liststore...this would be perfect if we had a ModelSort to put around the Query we get [17:34] nik90, still not sure if the way we are getting the third level elements is the best as it makes it tricky to do swipeDelete etc in the listview [17:46] ahayzen: I really want ListModel Sorting as a SDK feature definitely. [17:46] nik90, now who is best to talk to about this? [17:47] nik90, most of them are probably still on holiday until tomorrow at a guess ;) [17:47] ahayzen: well I propose getting an email in the mailing list first and then talking to sdk devs like zsombi, florian and tim [17:47] ahayzen: yes :) [17:47] nik90, agreed [17:47] ahayzen: regarding the third level elements [17:48] ahayzen: can you ask on the g+ post to stuart [17:48] ahayzen: to confirm if we are doing to the proper way [17:48] I need to go prepare dinner now [17:48] nik90, yep will do :) [17:48] nik90, i need to take decorations down and have dinner as well ;) lol [17:48] nik90, speak later [17:48] ahayzen: go ahead..tlk later..bye [19:44] ahayzen: did db.getIndexKeys(indexname) work for you? [19:45] It doesnt work for me [19:56] nik90, oh if u mean '>>> print db.get_index_keys("by-file")' then yes it does work for me [19:57] ahayzen_: yes I meant that [19:57] nik90, what happens for u? [19:57] is the function getIndexKeys() or get_index_keys() [19:58] for me it outputs u1db: Failed to get index keys: [19:58] SELECT FROM document d, WHERE GROUP BY [19:58] nik90, get_index_keys() [19:58] oh [19:59] ahayzen_: but when I look at http://developer.ubuntu.com/api/qml/sdk-1.0/U1DB.Database/, it says it is getIndexKeys() [19:59] that's why I used that [20:00] on using get_index_keys() I get Object U1db::Database(0x1dc1890) has no method 'get_index_keys' [20:00] nik90, i was doing it in Python? [20:00] ahayzen_: oh [20:00] ahayzen_: I am sticking with javascript :P [20:00] nik90, i was doing it in Python? [20:00] bah [20:01] nik90, did u convert his example to JS? [20:01] lol [20:01] well sort of [20:01] he only added the get index keys line extra [20:01] and I found that function in javascript as getIndexKeys() [20:01] yeah [20:02] damn moving playlist.name to the first element still doesn't fix it :/ [20:02] paste the code in ubuntu. Let me see if you are doing something wrong [20:04] nik90, this is working on the music-app though [20:04] nik90, i'll see if i can get it working in tht smaller example first [20:04] nik90, unless u wanna go though 1000s of lines of code hehe [20:05] lol no :P === balloons_ is now known as balloons [20:12] ahayzen_: you know what, I am going to convert my tasks app to music playlist app to debug better [20:14] nik90, http://pastebin.ubuntu.com/6699086/ [20:15] nik90, it displays the first item from both of the documents but it should be filtering to the playlists with the name "blah" ... which don't exist... so it should bring back nothing === Zuardi__ is now known as Zuardi_ === balloons_ is now known as balloons [20:30] ahayzen__: can you tell me what i am doing here -> http://paste.ubuntu.com/6699191/ [20:31] it doesn't recoginise contents.name in the listview delegate to print the playlist name [20:31] I changed my example to look quite similar to yours [21:22] hello. I've got a question, hope anybody could hrlp me. Am learning ubuntu SDK now, and I have ubuntu on my phone. Is there any place where I can browse known and submit some bugs that I've found in core apps? [21:28] d6342035: hi there [21:29] d6342035: check out the wiki link at https://wiki.ubuntu.com/Touch/CoreApps [21:30] d6342035: it provides the link to the project page of all the core apps where you can submit bug reports [21:30] d6342035: hope this helps [21:34] thanks [21:50] hi all [21:51] can you tell me, how can I import contacts from command line? [21:52] if I get contacts.db, and I fill my contacts to folder_id table and I change the sqlite file, will it works? [21:54] I mean contacts.db from /userdata/user-data/phablet/.local/share/evolution/addressbook/system/contacts.db [21:54] (build 79) [21:55] anybody? any suggestions? [22:02] OK, I'll try it tomorrow... [22:02] bye all [22:27] nik90, yep tht is exactly wht i have observed [22:27] nik90, u can't seem to be able to retrieve playlist.name or put a filter on it :/ [22:33] nik90, also note how only the first track for each playlist actually appears in the listview [22:37] ahayzen__: when I changed the index expression to ["playlist.name", "playlist.tracks"], then the listview recognised the contents.name properly [22:37] nik90, yep but u can't have both as stuart seemed to suggest *should* work and gave in his python example? [22:38] ahayzen__: after I did that, the name filtering also worked! [22:38] ahayzen__: the thing is the whole index thing is like a blackbox. [22:39] I need more documentation to go on it [22:39] nik90, yep but then u struggle to get the track info [22:39] but as I mentioned above, I think it expects the index expression to have the same size [22:39] so for the track info, you will need another index I think [22:40] but again I dont to speculate too much :P. So I have sent a mail to the mailing list with the issues we had. Lets see if christian can reply to them [22:40] nik90, i agree tht this is probably the issue in the QML implementation...but the example provided by Stuart in python did exactly wht i wanted [22:41] nik90, this one http://pastebin.ubuntu.com/6699829/ [22:41] nik90, i just read ur email thx for doing tht [22:43] ahayzen__: yup then it has to be a qml implementation bug..damn you QMl!!!! :P [22:43] ahayzen__: u r welcome [22:44] nik90, hopefully we'll get some answers in the mailing list :) [22:52] +