Add support for gphoto 2.5

Based on KDE GIT commit cdcf4205
pull/1/head
Slávek Banko 12 years ago
parent 0fed03e235
commit d4d1a5808b

@ -45,3 +45,6 @@
// ksnapshop // ksnapshop
#cmakedefine HAVE_X11_EXTENSIONS_SHAPE_H 1 #cmakedefine HAVE_X11_EXTENSIONS_SHAPE_H 1
// kamera
#cmakedefine HAVE_GPHOTO2_5 1

@ -13,3 +13,11 @@ pkg_search_module( GPHOTO2 libgphoto2 )
if( NOT GPHOTO2_FOUND ) if( NOT GPHOTO2_FOUND )
tde_message_fatal( "libgphoto2 is required, but was not found on your system" ) tde_message_fatal( "libgphoto2 is required, but was not found on your system" )
endif( ) endif( )
check_library_exists(gphoto2_port gp_port_info_get_name "" GPHOTO2_5)
if(GPHOTO2_5)
message(STATUS " found libgphoto2 2.5")
else(GPHOTO2_5)
message(STATUS " assuming libgphoto2 2.4")
endif(GPHOTO2_5)
set(HAVE_GPHOTO2_5 ${GPHOTO2_5} CACHE FILEPATH "")

@ -37,6 +37,8 @@
#include <kmessagebox.h> #include <kmessagebox.h>
#include <kdebug.h> #include <kdebug.h>
#include "config.h"
extern "C" { extern "C" {
#include <gphoto2.h> #include <gphoto2.h>
} }
@ -118,9 +120,9 @@ bool KCamera::initCamera()
gp_port_info_list_new(&il); gp_port_info_list_new(&il);
gp_port_info_list_load(il); gp_port_info_list_load(il);
gp_port_info_list_get_info(il, gp_port_info_list_lookup_path(il, m_path.local8Bit().data()), &info); gp_port_info_list_get_info(il, gp_port_info_list_lookup_path(il, m_path.local8Bit().data()), &info);
gp_port_info_list_free(il);
gp_camera_set_abilities(m_camera, m_abilities); gp_camera_set_abilities(m_camera, m_abilities);
gp_camera_set_port_info(m_camera, info); gp_camera_set_port_info(m_camera, info);
gp_port_info_list_free(il);
// this might take some time (esp. for non-existant camera) - better be done asynchronously // this might take some time (esp. for non-existant camera) - better be done asynchronously
result = gp_camera_init(m_camera, glob_context); result = gp_camera_init(m_camera, glob_context);
@ -346,8 +348,15 @@ KameraDeviceSelectDialog::KameraDeviceSelectDialog(TQWidget *parent, KCamera *de
} }
for (int i = 0; i < gphoto_ports; i++) { for (int i = 0; i < gphoto_ports; i++) {
if (gp_port_info_list_get_info(list, i, &info) >= 0) { if (gp_port_info_list_get_info(list, i, &info) >= 0) {
#ifdef HAVE_GPHOTO2_5
char *xpath;
gp_port_info_get_path (info, &xpath);
if (strncmp(xpath, "serial:", 7) == 0)
m_serialPortCombo->insertItem(TQString::fromLatin1(xpath).mid(7));
#else
if (strncmp(info.path, "serial:", 7) == 0) if (strncmp(info.path, "serial:", 7) == 0)
m_serialPortCombo->insertItem(TQString::fromLatin1(info.path).mid(7)); m_serialPortCombo->insertItem(TQString::fromLatin1(info.path).mid(7));
#endif
} }
} }
gp_port_info_list_free(list); gp_port_info_list_free(list);

@ -55,11 +55,19 @@ extern "C"
{ {
KDE_EXPORT int kdemain(int argc, char **argv); KDE_EXPORT int kdemain(int argc, char **argv);
#ifdef HAVE_GPHOTO2_5
static void frontendCameraStatus(GPContext *context, const char *status, void *data);
static unsigned int frontendProgressStart(
GPContext *context, float totalsize, const char *status,
void *data
);
#else
static void frontendCameraStatus(GPContext *context, const char *format, va_list args, void *data); static void frontendCameraStatus(GPContext *context, const char *format, va_list args, void *data);
static unsigned int frontendProgressStart( static unsigned int frontendProgressStart(
GPContext *context, float totalsize, const char *format, GPContext *context, float totalsize, const char *format,
va_list args, void *data va_list args, void *data
); );
#endif
static void frontendProgressUpdate( static void frontendProgressUpdate(
GPContext *context, unsigned int id, float current, void *data GPContext *context, unsigned int id, float current, void *data
); );
@ -791,11 +799,11 @@ void KameraProtocol::setHost(const TQString& host, int port, const TQString& use
return; return;
} }
gp_port_info_list_get_info(port_info_list, idx, &port_info); gp_port_info_list_get_info(port_info_list, idx, &port_info);
gp_port_info_list_free(port_info_list);
// create a new camera object // create a new camera object
gpr = gp_camera_new(&m_camera); gpr = gp_camera_new(&m_camera);
if(gpr != GP_OK) { if(gpr != GP_OK) {
gp_port_info_list_free(port_info_list);
error(TDEIO::ERR_UNKNOWN, gp_result_as_string(gpr)); error(TDEIO::ERR_UNKNOWN, gp_result_as_string(gpr));
return; return;
} }
@ -813,6 +821,8 @@ void KameraProtocol::setHost(const TQString& host, int port, const TQString& use
gp_camera_set_port_speed(m_camera, 0); // TODO: the value needs to be configurable gp_camera_set_port_speed(m_camera, 0); // TODO: the value needs to be configurable
kdDebug(7123) << "Opening camera model " << user << " at " << host << endl; kdDebug(7123) << "Opening camera model " << user << " at " << host << endl;
gp_port_info_list_free(port_info_list);
TQString errstr; TQString errstr;
if (!openCamera(errstr)) { if (!openCamera(errstr)) {
kdDebug(7123) << "Unable to init camera: " << gp_result_as_string(gpr) << endl; kdDebug(7123) << "Unable to init camera: " << gp_result_as_string(gpr) << endl;
@ -865,9 +875,6 @@ void KameraProtocol::translateFileToUDS(UDSEntry &udsEntry, const CameraFileInfo
udsEntry.append(atom); udsEntry.append(atom);
atom.m_uds = UDS_NAME; atom.m_uds = UDS_NAME;
if (info.file.fields & GP_FILE_INFO_NAME)
atom.m_str = TQString::fromLocal8Bit(info.file.name);
else
atom.m_str = name; atom.m_str = name;
udsEntry.append(atom); udsEntry.append(atom);
@ -994,10 +1001,16 @@ void frontendProgressUpdate(
} }
unsigned int frontendProgressStart( unsigned int frontendProgressStart(
GPContext * /*context*/, float totalsize, const char *format, va_list args, GPContext * /*context*/, float totalsize,
#ifdef HAVE_GPHOTO2_5
const char *status,
#else
const char *format, va_list args,
#endif
void *data void *data
) { ) {
KameraProtocol *object = (KameraProtocol*)data; KameraProtocol *object = (KameraProtocol*)data;
#ifndef HAVE_GPHOTO2_5
char *status; char *status;
/* We must copy the va_list to walk it twice, or all hell /* We must copy the va_list to walk it twice, or all hell
@ -1031,14 +1044,26 @@ unsigned int frontendProgressStart(
object->infoMessage(TQString::fromLocal8Bit(status)); object->infoMessage(TQString::fromLocal8Bit(status));
delete [] status; delete [] status;
#else
/* libgphoto2 2.5 has resolved this already, no need for print */
object->infoMessage(TQString::fromLocal8Bit(status));
#endif
object->totalSize((int)totalsize); // hack: call slot directly object->totalSize((int)totalsize); // hack: call slot directly
return GP_OK; return GP_OK;
} }
// this callback function is activated on every status message from gphoto2 // this callback function is activated on every status message from gphoto2
static void frontendCameraStatus(GPContext * /*context*/, const char *format, va_list args, void *data) static void frontendCameraStatus(
{ GPContext * /*context*/,
#ifdef HAVE_GPHOTO2_5
const char *status,
#else
const char *format, va_list args,
#endif
void *data
) {
KameraProtocol *object = (KameraProtocol*)data; KameraProtocol *object = (KameraProtocol*)data;
#ifndef HAVE_GPHOTO2_5
char *status; char *status;
/* We must copy the va_list to walk it twice, or all hell /* We must copy the va_list to walk it twice, or all hell
@ -1071,4 +1096,7 @@ static void frontendCameraStatus(GPContext * /*context*/, const char *format, va
#endif #endif
object->infoMessage(TQString::fromLocal8Bit(status)); object->infoMessage(TQString::fromLocal8Bit(status));
delete [] status; delete [] status;
#else
object->infoMessage(TQString::fromLocal8Bit(status));
#endif
} }

Loading…
Cancel
Save