Menu

Main Menu
Talk Get Daily Search

Member's Online

    User Name
    Password

    [Announce] Troll Bridge: an Olympus camera controller

    Reply
    Bundyo | # 1 | 2016-05-07, 08:17 | Report

    Troll Bridge (TRaveller's OLympus Bridge) is a PoC application for controlling an Olympus WiFi enabled OM-D/PEN/Air camera.

    Thanks to Nekron for the Go-QML Sailfish OS port.

    Warning: Test on your own responsibility.

    Packages:
    https://openrepos.net/content/bundyo/troll-bridge

    Source:
    https://github.com/bundyo/trollbridge

    Warning: The app was built using Go 1.6, but with the current Nekron port it will crash on engine.AddImageProvider. To get it working, use the unsafe_ref.patch in the patches folder to patch your Go 1.6 package. Didn't test building it with Go !.5.

    Pull requests are welcome.

    Edit | Forward | Quote | Quick Reply | Thanks

    Last edited by Bundyo; 2016-05-20 at 20:55.
    The Following 6 Users Say Thank You to Bundyo For This Useful Post:
    aegis, eekkelund, juiceme, peterleinchen, rcolistete, robthebold

     
    aegis | # 2 | 2016-05-07, 15:19 | Report

    Working nicely with my OM-D E-M10 Mk1.

    Edit | Forward | Quote | Quick Reply | Thanks
    The Following User Says Thank You to aegis For This Useful Post:
    Bundyo

     
    seiichiro0185 | # 3 | 2016-05-08, 07:22 | Report

    I also have an omd e-m10, app works as expected (Tablet and Phone). It crashed once on the first attempt to download the pictures, but I couldn't reproduce this, second attempt worked nicely.

    Edit | Forward | Quote | Quick Reply | Thanks
    The Following User Says Thank You to seiichiro0185 For This Useful Post:
    Bundyo

     
    Bundyo | # 4 | 2016-05-08, 19:25 | Report

    Hmm, I have an existential issue... What do you think, should I keep using only one folder (currently /home/nemo/Pictures/Olympus/, probably configurable in the future) or should I keep the pictures in different folders, based on the camera model?

    I have both E-M5 Mark II and an Air and I know that some people do have several cameras they use for different things (like E-M1 for phase focus for instance) and several folders does seem like the obvious choice.

    Edit | Forward | Quote | Quick Reply | Thanks

     
    Bundyo | # 5 | 2016-05-08, 22:28 | Report

    Version 0.1.1 uploaded.

    Did it with separate folders for every camera model, you may want to move your pictures there after the next download (only for detection).

    Olympus Air is now part of the family (no remote shutter for now).

    Edit | Forward | Quote | Quick Reply | Thanks

     
    Bundyo | # 6 | 2016-05-09, 05:50 | Report

    Added sources and the Go 1.6 patch.

    Btw, I have an issue with the SilicaGridView - the model changes underneath and the changes propagate to the QML, but sometimes the QML elements inside the delegate don't change their visibility until you scroll out of the view and then return. The GridView forceLayout method doesn't seem to help much and seems like a rendering bug. Any ideas?

    Edit | Forward | Quote | Quick Reply | Thanks

     
    marxian | # 7 | 2016-05-09, 13:15 | Report

    Originally Posted by Bundyo View Post
    Added sources and the Go 1.6 patch.

    Btw, I have an issue with the SilicaGridView - the model changes underneath and the changes propagate to the QML, but sometimes the QML elements inside the delegate don't change their visibility until you scroll out of the view and then return. The GridView forceLayout method doesn't seem to help much and seems like a rendering bug. Any ideas?
    Your data model is not updated when the image status changes, so these status changes will not be reflected in the delegate, and you are using a function call that depends on the index only, so the function will only be re-evaluated when the index changes.

    To fix this, you could use either QAbstractItemModel or QML ListModel and either have the bridge update the model when the image status changes, or use signal/slot connections, e.g:

    Code:
    ListModel {
        id: model
    }
    
    Connections {
        target: bridge
        onImageStatusChanged: model.setProperty(index, "status", status) // 'index' and 'status' (e.g 'Downloading' or 'Downloaded') are signal parameters
    }
    EDIT: Another possible solution is to use the array of images as the model, then you could bind to the 'dowloading' property via 'modelData', e.g:

    Code:
    ....
    model: bridge.fileList
    delegate: Item {
        someProperty: modelData.downloading
        otherProperty: modelData.downloaded
    }

    Edit | Forward | Quote | Quick Reply | Thanks

    Last edited by marxian; 2016-05-09 at 13:43.
    The Following User Says Thank You to marxian For This Useful Post:
    Bundyo

     
    Bundyo | # 8 | 2016-05-10, 04:31 | Report

    Originally Posted by marxian View Post
    Your data model is not updated when the image status changes, so these status changes will not be reflected in the delegate, and you are using a function call that depends on the index only, so the function will only be re-evaluated when the index changes.

    To fix this, you could use either QAbstractItemModel or QML ListModel and either have the bridge update the model when the image status changes, or use signal/slot connections, e.g:

    Code:
    ListModel {
        id: model
    }
    
    Connections {
        target: bridge
        onImageStatusChanged: model.setProperty(index, "status", status) // 'index' and 'status' (e.g 'Downloading' or 'Downloaded') are signal parameters
    }
    EDIT: Another possible solution is to use the array of images as the model, then you could bind to the 'dowloading' property via 'modelData', e.g:

    Code:
    ....
    model: bridge.fileList
    delegate: Item {
        someProperty: modelData.downloading
        otherProperty: modelData.downloaded
    }
    Unfortunately Go-QML doesn't support array model binding I'll try the rest.

    Edit | Forward | Quote | Quick Reply | Thanks

     
    Bundyo | # 9 | 2016-05-12, 06:36 | Report

    Version 0.1.2 is up, bringing RAW and refresh fixes.

    Very convoluted refresh fix though... Using ListModel, but since for some reason the append call can't send a struct, I had to do it through property events

    Edit | Forward | Quote | Quick Reply | Thanks
    The Following User Says Thank You to Bundyo For This Useful Post:
    eekkelund

     
vBulletin® Version 3.8.8
Normal Logout