Basically, if you have a LARGE media library, say, 20,000 pieces of audio, and you hit Play All to play them all, there is a considerable amount of processing time that happens, before anything appears to happen from the user's perspective.

* When a user hits Play All, it sends an MH Play Media command to the Media Plugin, the filename is !Gxxx, e.g. !G250, that is, the current mediafile grid for Orbiter #250.* The code snippet catches the special !G case, and immediately embarks upon a loop to traverse through the table, grabbing the cell values.* For each cell you see, there is the text you see, and the actual value passed back to the code, and depending on which view you see, you can either be looking at a pile of Attributes (Director, Genre, etc.), or at a pile of files (the Title view, Filename view), so you'll see e.g. a set of !F1234, !F1235, or !A1234, !A1235, for PK_File 1234, 1235 or PK_Attribute 1234,1235 respectively.* Then there are the two if's... for files, our job is easy, we get the appropriate row from the File Table, and put together the directory and file path, and then pass that along.* For Attributes, this is more involved. We need to get the Attribute, then we need to match that against entries in the File_Attribute table, and grab all the matching PK_Files for each PK_Attribute, and THEN do what we mention above.* At this point, the returned full path to the file is then passed into a new MediaFile object, and then added to the deque of MediaFile objects to become the playlist. * Then the process repeats, until ALL of the cells have been traversed.

This process involves a potentially large number of individual queries the size of toothpicks. These toothpicks are small, and are inconsequential for the database to query and return, but, we also have the process of taking that data, peeling it apart, and acting upon it by doing more tiny queries, in a loop, all of this happening serially, and therefore incredibly inefficiently.

Why does this matter?

Well, besides the obvious effect of longer and longer delays from the user's standpoint, any code built on DCE has a built-in deadlock prevention timer. That is, if you send a message, and that message takes longer than 30 seconds to complete, DCE will assume that things have stalled, and the offending process will be terminated. Since Plugins like the Media Plugin run in exactly the same address space as DCERouter, that means the DCERouter gets killed if some work in a plugin takes too long to complete! Router goes "bye-bye;" whole system says, "sayonara."

So even if you can PUT UP with the egregious delay while asking the system to play a large number of media, there will hit a point where your system will take too long to process the "Play All", and your system will appear to crash. First, your Orbiters, then the core. It will recover, but your intended goal of playing the media won't happen.

Ok, so, what's the goal?

We need to make this block of code more efficient, and the way I can see that happening, is to make a proper database query to return ALL of the PK_File entries that match either the list of !F or !A entries that are present in the currently visible datagrid. This can subsequently be peeled apart linearly into MediaFiles and dequed appropriately. I believe this will decrease the delay to less than a few seconds, if not less than 1 second, for 99% of cases,

but, I am not an SQL wizard, and need some help to try and construct this query.

In the pluto_main database, there are three tables, Country, Region, and City, which are ultimately used to find a particular city or town. I want the Weather device to use this data, to pick not only which weather data to display, but also which weather radar data to automatically select for display.

But for this to work, I need lots of data mapped.

Here is a list of all the maps that Weather.com offers from its map room.

And these need to be mapped to countries and regions in the LinuxMCE database, so that when the Weather device looks at your installation, it will select the most appropriate maps to display.

Does anyone want to help? Yes, this is exceedingly tedious, and potentially thousands of mappings may need to be done, but in the end, it will allow for an ease of use and a "just works" functionality that everyone can appreciate.

I will point out, that not EVERY single city needs to be mapped, just the countries and regions.

I would be very indebted to those who help out, and help to make the weather functionality in LinuxMCE heads and shoulders above everything else out there!

I am currently checking in a multitude of changes to Telecom_Plugin and to Orbiter, to facilitate a better voicemail screen.

(to forum members: No, I will not back port this to 10.04. This is for the next release. Please don't ask.)

Current features:

* Able to distinguish between new and old voicemails both with textual label and color coding.* Able to play individual voicemails. Voicemails are moved from new to old while playing, and UI is updated.* Able to delete individual voicemails, with confirmation. Any deletions also update on other orbiters which may be viewing the same screen.* Able to skip forward/backward 2 seconds in voicemail.* Voicemail playback uses resume feature, which for now causes the remote not to display while playing back.* Able to delete all voicemails for user, with confirmation.

To do:* Play All. This is actually implemented, and is checked in, however, I have HIDDEN the button for now, because MH Play Media's resume functionality is broken, please see below.* Caller ID. For some reason, Caller ID is NOT making it across to my individual voicemail metadata text files. It was the last time I did any work on this, and I haven't a clue why. * Squeezebox/Squeezeslave playback. Figure out why this isn't working. Maybe a file access issue.

A note about MH Play Media resume:

MH Play Media has a resume parameter. This was defined by Pluto so that something else could jump in and temporarily replace a playing stream, and when it was done, to return to the previously playing stream (if one existed). It also has the benefit of not changing the active remotes in the room, so as to not confuse anyone.

However, this functionality is currently very broken.

I believe the playback events (playback started/finished) are not properly setting state, and this is causing some weirdness, namely that I can only play one thing in a stream, even if I have multiple MediaFiles in the deque, I only hear the first one, before it drops, and when the stream is finished, the previous stream is not continuing to play. I am trying to track this problem down, as a great number of useful features can be derived from this one flag, which we desperately need, but finding the source of the breakage is not proving to be easy; may take a while for me to solve this, so for now, the Play All button is hidden.

All of the relevant bits are being checked in right now, and will be placed on the list of stuff to build shortly.

If you've been following the Developers Forum, you may notice that I am developing support for Weather views in Orbiter, and Weather Events, for the next release.

There are two parts being developed, the first part is the Plugin, which runs on the router, and holds the weather information gathered by various weather events (Temperature changed, forecast changed, etc.), and updates the Orbiter displays appropriately,

The other part concerns the Weather devices, which would gather weather from a source(s) and emit events for the Weather PlugIn to catch. This data could come from a weather station, or from online sources such as AccuWeather, The Weather Channel, etc.

Here is a preview video showing the plugin part working. I am feeding the Weather Plugin some fake data, courtesy of MessageSend, so I can test everything.

We are getting ready to completely nuke the Asterisk configuration we've been using (based on an ANCIENT AMP, which was never fixed for FreePBX), and to do a completely brand new configuration specially tailored for LinuxMCE, from scratch, and I need EXPERIENCED Asterisk architects to help design the new dialplan.

Currently I'm doing the initial research, and scribbling down the necessary functionality and working on the flow described above, while testing out some ideas on my system here, Foxi352 is also helping out, as is posde.

Anyway,

If there are any of you in here, please private message me, and I will continue talking with you on email.

I decided to make a video after doing a number of patches to the system so that the built in media director SimplePhone, could not only use a specific sound card, for making calls and playing rings, but that the Plug and Play detection for the Phoenix Solo USB could be debugged and made to work correctly in all cases, leveraging the knowledge I've gained over the last 4 years, since I initially added the device.

The video goes through the following points:

* What device data I added to the SimplePhone device template* The code I needed to add to SimplePhone to use this device data, and tell SimplePhone to use the sound card.* How the plug and play section works, with regards to matching specific devices, utilizing the right device data, bringing along with it the needed device data for the Configuration script.* How to pass this to a Configuration script, so that additional functionality can be done when a device is added to the system, in this case, inserting device data into SimplePhone to explicitly set the sound card to the new Phoenix Solo mic that was just added.

This is intended to be an introduction into the Plug and Play section, and hopefully spur questions and give me direction as to what more videos to make.

I am between contracts, and looking for little things that might be very useful to the LinuxMCE community to do, to make sure I can take care of the recent hospital bill.

I have mapped out what needs to happen to add AFP support to LinuxMCE's file server detection and file share adding code, so that shared folders on the mac can be seen by LinuxMCE and subsequently scanned by media, coupled with the recently added AirPlay support, this helps close the integration loop significantly for Apple Macintosh households.

After years of doing cell phone shaky cam videos, and getting constantly ribbed about them; coinciding with the purchase of a Nikon D5200 camera, I am now putting together a series of demonstration videos, titled "Why LinuxMCE?"

The aim of these videos is to show concepts present in the system, without going into a lot of detail.