コード例 #1
0
ファイル: games_sys.c プロジェクト: GeeXboX/enna
static void
_parse_directory(Evas_Object *list, const char *dir_path)
{
    struct dirent *dp;
    DIR *dir;

    if (!(dir = opendir(dir_path))) return;

    while ((dp = readdir(dir)))
    {
        Game_Entry *game;
        char dsfile[4096];

        if (!enna_util_str_has_extension(dp->d_name, "desktop")) continue;
        sprintf(dsfile, "%s/%s", dir_path, dp->d_name);

        if ((game = _parse_desktop_game(dsfile)))
        {
            Enna_File *item;

            item = ENNA_NEW(Enna_File, 1);
            item->label = strdup(game->name);
            item->is_menu = 1;
            if (game->icon) item->icon = strdup(game->icon);

            enna_list_file_append(list, item, _play, strdup(game->exec));//TODO free this dup
            mod->count++;
            ENNA_FREE(game->name);
            ENNA_FREE(game->icon);
            ENNA_FREE(game->exec);
            ENNA_FREE(game);
        }
    }
    closedir(dir);
}
コード例 #2
0
ファイル: bookstore_gocomics.c プロジェクト: naguirre/enna
static void
bs_gocomics_hide (Evas_Object *layout)
{
    url_free(mod->url);
    ENNA_FREE(mod->comic_name);
    ENNA_FREE(mod->comic_id);
    ENNA_OBJECT_DEL(mod->list);
    elm_object_part_content_unset(mod->layout, "service.browser.swallow");
    ENNA_FREE(mod->path);
    ENNA_FREE(mod);
}
コード例 #3
0
ファイル: mediaplayer_emotion.c プロジェクト: naguirre/enna
void
enna_mediaplayer_shutdown(void)
{
    if (!mp)
        return;

    ENNA_FREE(mp->uri);
    ENNA_FREE(mp->label);
    ENNA_FREE(mp->engine);
    emotion_object_play_set(mp->player, EINA_FALSE);
    if (mp->player)
        evas_object_del(mp->player);
    ENNA_FREE(mp);
}
コード例 #4
0
ファイル: bookstore_gocomics.c プロジェクト: naguirre/enna
static void
gocomics_select_comic(void *data)
{
    Enna_File *item = data;

    gocomics_date_set_current ();

    ENNA_FREE(mod->comic_name);
    mod->comic_name = strdup (item->label);
    ENNA_FREE(mod->comic_id);
    mod->comic_id = strdup (item->uri);

    gocomics_display();
}
コード例 #5
0
ファイル: mediaplayer_obj.c プロジェクト: enna-project/enna
static int
metadata_set_text(Evas_Object *obj,
                  Enna_File *file, const char *name, int bold)
{
    int res = 0;
    const char *str = NULL;
    char *tmp = NULL;

    if (file)
        str =  enna_file_meta_get(file, name);

    if (!str)
        res = -1;
    else
        tmp = strdup(str);

    if(bold && str)
    {
        tmp = enna_util_str_chomp(tmp);
    }
    else
    {
        tmp = enna_util_str_chomp(tmp);
    }
    elm_label_ellipsis_set(obj, EINA_TRUE);
    elm_object_text_set(obj, tmp);
    ENNA_FREE(tmp);
    eina_stringshare_del(str);
    return res;
}
コード例 #6
0
ファイル: infos_video_flags.c プロジェクト: naguirre/enna
static void
audio_flag_set (Smart_Data *sd, Enna_File *file)
{
    const char *c_str;
    char *flag = NULL;

    if (!file)
        goto audio_unknown;

    /* try to guess audio flag (naive method atm) */
    c_str = enna_file_meta_get(file, "audio_channels");
    if (c_str)
    {
        int i, c;

        c = atoi (c_str);
        for (i = 0; flag_audio_mapping[i].name; i++)
            if (c <= flag_audio_mapping[i].channels)
            {
                flag = strdup(flag_audio_mapping[i].name);
                break;
            }

        eina_stringshare_del(c_str);
    }

audio_unknown:
    if (!flag)
        flag = strdup("flags/audio/default");

    flag_set(sd, &sd->o_audio, flag, "flags.audio.swallow");
    ENNA_FREE(flag);
}
コード例 #7
0
ファイル: infos_video_flags.c プロジェクト: naguirre/enna
static void
studio_flag_set (Smart_Data *sd, Enna_File *file)
{
    const char *studio;
    char *flag = NULL;

    if (!file)
        goto studio_unknown;

    /* try to guess studio flag */
    studio = enna_file_meta_get(file, "studio");
    if (studio)
    {
        int i;

        for (i = 0; flag_studio_mapping[i].name; i++)
            if (!strcasecmp (studio, flag_studio_mapping[i].fullname))
            {
                flag = strdup(flag_studio_mapping[i].name);
                break;
            }

        eina_stringshare_del(studio);
    }

studio_unknown:
    if (!flag)
        flag = strdup("flags/studio/default");

    flag_set(sd, &sd->o_studio, flag, "flags.studio.swallow");
    ENNA_FREE(flag);
}
コード例 #8
0
ファイル: infos_video_flags.c プロジェクト: naguirre/enna
static void
media_flag_set (Smart_Data *sd, Enna_File *file)
{
    const char *h_str;
    char *flag = NULL;

    if (!file)
        goto media_unknown;

    /* try to guess video flag, based on video resolution */
    h_str = enna_file_meta_get(file, "height");
    if (h_str)
    {
        int i, h;

        h = atoi (h_str);
        for (i = 0; flag_media_mapping[i].name; i++)
            if (h <= flag_media_mapping[i].min_height)
            {
                flag = strdup(flag_media_mapping[i].name);
                break;
            }

        if (!flag)
            flag = strdup("flags/media/divx");
        eina_stringshare_del(h_str);
    }

media_unknown:
    if (!flag)
        flag = strdup("flags/media/default");

    flag_set(sd, &sd->o_media, flag, "flags.media.swallow");
    ENNA_FREE(flag);
}
コード例 #9
0
ファイル: gad_date.c プロジェクト: GeeXboX/enna
static void
module_shutdown(Enna_Module *em)
{
 
    ENNA_OBJECT_DEL(sd->obj);
    ENNA_FREE(sd);
    sd = NULL;
}
コード例 #10
0
ファイル: video_infos.c プロジェクト: enna-project/enna
static void
_del(void *data, Evas *a, Evas_Object *obj, void *event_info)
{
    Smart_Data *sd = data;
    ENNA_OBJECT_DEL(sd->o_img);
    ENNA_OBJECT_DEL(sd->o_rating);
    ENNA_OBJECT_DEL(sd->o_cover);
    ENNA_FREE(sd);
}
コード例 #11
0
ファイル: volumes.c プロジェクト: enna-project/enna
void
enna_volumes_listener_del(Enna_Volumes_Listener *vl)
{
   if (!vl) return;

   enna_log(ENNA_MSG_EVENT, "volumes", "Del: %s listener", vl->name);
   enna_volumes_listeners = eina_list_remove(enna_volumes_listeners, vl);
   ENNA_STRINGSHARE_DEL(vl->name);
   ENNA_FREE(vl);
}
コード例 #12
0
ファイル: infos_video_flags.c プロジェクト: naguirre/enna
static void
video_flags_del(void *data, Evas *a, Evas_Object *obj, void *event_info)
{
    Smart_Data *sd = data;
    ENNA_OBJECT_DEL(sd->o_video);
    ENNA_OBJECT_DEL(sd->o_audio);
    ENNA_OBJECT_DEL(sd->o_studio);
    ENNA_OBJECT_DEL(sd->o_media);
    ENNA_FREE(sd);
}
コード例 #13
0
void
enna_mainmenu_shutdown(Evas_Object *obj)
{
    Smart_Data *sd;

    sd =evas_object_data_get(obj, "mainmenu_data");
    ENNA_EVENT_HANDLER_DEL(sd->act_handler);

    enna_browser_del(sd->browser);
    ENNA_FREE(sd);
}
コード例 #14
0
void
enna_localfiles_shutdown(void)
{

   free(mod->all);

   ENNA_FREE(mod);

   efreet_mime_shutdown();
   eio_shutdown();
}
コード例 #15
0
ファイル: photo_slideshow_view.c プロジェクト: naguirre/enna
static void
_sd_del(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
    Smart_Data *sd = data;

    ENNA_OBJECT_DEL(sd->controls);
    ENNA_OBJECT_DEL(sd->slideshow);
    eina_list_free(sd->items);
    enna_input_listener_del(sd->listener);
    ENNA_FREE(sd);
}
コード例 #16
0
ファイル: volumes.c プロジェクト: enna-project/enna
void
enna_volume_free (Enna_Volume *v)
{
  if (!v)
    return;

  eina_stringshare_del (v->device_name);
  eina_stringshare_del (v->mount_point);
  eina_stringshare_del (v->label);

  ENNA_FREE (v);
}
コード例 #17
0
ファイル: enna_config.c プロジェクト: enna-project/enna
/**
 * @brief UnRegister a configuration panel
 * @param destroy_cb This is the function to call when the panel need to be destroyed
 * @return EINA_TRUE on success, EINA_FALSE otherwise.
 *
 * When you dont need the entry in the configuration panel use this function.
 * You should do this at least on shoutdown
 */
Eina_Bool
enna_config_panel_unregister(Enna_Config_Panel *ecp)
{
    if (!ecp) return EINA_FALSE;

    _config_panels = eina_list_remove(_config_panels, ecp);
    if (ecp->label) eina_stringshare_del(ecp->label);
    if (ecp->icon) eina_stringshare_del(ecp->icon);
    ENNA_FREE(ecp);
    //TODO here emit an event like ENNA_CONFIG_PANEL_CHANGED
    return EINA_TRUE;
}
コード例 #18
0
ファイル: utils.c プロジェクト: GeeXboX/enna
int
enna_util_shutdown()
{
    _util_init_count--;
    if (_util_init_count == 0)
    {
      eina_stringshare_del(sd->cache);
      eina_stringshare_del(sd->config);
      eina_stringshare_del(sd->data);
        ENNA_FREE(sd);
    }

    return _util_init_count;
}
コード例 #19
0
ファイル: mainmenu.c プロジェクト: enna-project/enna
void
enna_mainmenu_shutdown(Evas_Object *obj)
{
    Smart_Data *sd;

    sd =evas_object_data_get(obj, "mainmenu_data");
    ENNA_EVENT_HANDLER_DEL(sd->act_handler);

    enna_input_listener_del(sd->listener);

    ENNA_OBJECT_DEL(sd->o_menu);
    ENNA_OBJECT_DEL(sd->o_volume);
    enna_browser_del(sd->browser);
    ENNA_FREE(sd);
}
コード例 #20
0
ファイル: photo_infos.c プロジェクト: enna-project/enna
void
photo_panel_infos_set_text (Evas_Object *obj, const char *filename)
{
    Enna_Metadata *m;
    const char *meta;
    char *meta2 = NULL;

    API_ENTRY return;

    if (!filename || !ecore_file_exists(filename))
    {
        edje_object_part_text_set (sd->o_edje, "infos.panel.textblock",
	    _("No EXIF information found ..."));
        return;
    }

    m = enna_metadata_meta_new (filename);
    meta = enna_metadata_meta_get_all (m);
    if (meta)
    {
        unsigned int i, j;

        meta2 = calloc (2, strlen (meta));
        for (i = 0, j = 0; i < strlen (meta); i++)
        {
            if (meta[i] != '\n')
            {
                meta2[j] = meta[i];
                j++;
            }
            else
            {
                meta2[j]   = '<';
                meta2[j+1] = 'b';
                meta2[j+2] = 'r';
                meta2[j+3] = '>';
                j += 4;
            }
        }
    }

    edje_object_part_text_set (sd->o_edje, "infos.panel.textblock",
                               meta2 ? meta2:
                               _("No EXIF such information found ..."));
    eina_stringshare_del(meta);
    ENNA_FREE (meta2);
    enna_metadata_meta_free (m);
}
コード例 #21
0
ファイル: enna_config.c プロジェクト: enna-project/enna
static void
cfg_main_section_free (void)
{
    char *c;

    ENNA_FREE(enna_config->theme);
    ENNA_FREE(enna_config->engine);
    ENNA_FREE(enna_config->verbosity);
    ENNA_FREE(enna_config->log_file);

    EINA_LIST_FREE(enna_config->music_filters, c)
        ENNA_FREE(c);

    EINA_LIST_FREE(enna_config->video_filters, c)
        ENNA_FREE(c);

    EINA_LIST_FREE(enna_config->photo_filters, c)
        ENNA_FREE(c);
}
コード例 #22
0
static void
_del(void *priv)
{
   Enna_Localfiles_Priv *p = priv;
   Ecore_Event_Handler *handler;

   if (p->file)
     eio_file_cancel(p->file);

   /* EINA_LIST_FREE(p->monitor_handlers, handler) */
   /*   { */
   /*      ecore_event_handler_del(handler); */
   /*   } */

   /* if (p->monitor) */
   /*   eio_monitor_del(p->monitor); */

   eina_stringshare_del(p->root);
   eina_stringshare_del(p->relative_path);
   ENNA_FREE(p);
}
コード例 #23
0
ファイル: utils.c プロジェクト: GeeXboX/enna
Eina_List *
enna_util_tuple_get (const char *str, const char *delimiter)
{
    Eina_List *tuple = NULL;
    char *l, *s = NULL;

    if (!str || !delimiter)
        return NULL;

    l = strdup(str);
    s = strtok(l, delimiter);
    do
    {
        if (s)
            tuple = eina_list_append(tuple, strdup(s));
        s = strtok(NULL, delimiter);
    } while (s);

    ENNA_FREE(l);

    return tuple;
}
コード例 #24
0
ファイル: utils.c プロジェクト: GeeXboX/enna
int
enna_util_has_suffix(char *str, Eina_List * patterns)
{
    Eina_List *l;
    int result = 0;

    unsigned int i;
    char *tmp;

    if (!patterns || !str || !str[0])
        return 0;

    for (l = patterns; l; l = eina_list_next(l))
    {
        tmp = calloc(1, strlen(str) + 1);
        for (i = 0; i < strlen(str); i++)
            tmp[i] = tolower(str[i]);
        result |= enna_util_str_has_suffix(tmp, (char *)l->data);
        ENNA_FREE(tmp);
    }
    return result;
}
コード例 #25
0
ファイル: bookstore_gocomics.c プロジェクト: naguirre/enna
static void
gocomics_set_comic_strip (void)
{
    char img_dst[1024] = { 0 };
    char query[1024] = { 0 };
    char tdate[16] = { 0 };
    char *ptr_start, *ptr_end, *img_src = NULL;
    url_data_t data = { 0 };

    if (!mod->comic_id)
        return;

    /* get expected destination file name */
    snprintf(img_dst, sizeof(img_dst),
             "%s/%s_%.4d_%.2d_%.2d", mod->path, mod->comic_id,
             mod->year, mod->month, mod->day);

    /* no need to perform a web request for an already existing file */
    if (ecore_file_exists(img_dst))
        goto comic_strip_show;

    /* compute the requested URL */
    snprintf (tdate, sizeof (tdate), "%.4d/%.2d/%.2d\n",
              mod->year, mod->month, mod->day);
    snprintf (query, sizeof(query), GOCOMICS_QUERY, mod->comic_id, tdate);

    enna_log(ENNA_MSG_EVENT, ENNA_MODULE_NAME,
             "Query Request: %s", query);

    /* perform request */
    data = url_get_data(mod->url, query);
    if (!data.buffer)
        return;

    enna_log(ENNA_MSG_EVENT, ENNA_MODULE_NAME,
             "Query Result: %s", data.buffer);

    /* find the comic strip url */
    ptr_start = strstr(data.buffer, GOCOMICS_NEEDLE_START);
    if (!ptr_start)
        goto err_url;

    ptr_start += strlen(GOCOMICS_NEEDLE_START);
    ptr_end = strstr(ptr_start, GOCOMICS_NEEDLE_END);
    if (!ptr_end)
        goto err_url;

    /* download and save the comic strip file */
    img_src = strndup (ptr_start, strlen(ptr_start) - strlen(ptr_end));
    enna_log(ENNA_MSG_EVENT, ENNA_MODULE_NAME,
             "Saving Comic Strip URL %s to %s", img_src, img_dst);
    url_save_to_disk(mod->url, img_src, img_dst);

    /* display the comic strip */
comic_strip_show:
    bs_service_page_show(img_dst);

err_url:
    ENNA_FREE(img_src);
    ENNA_FREE(data.buffer);
}
コード例 #26
0
ファイル: mediaplayer.c プロジェクト: GeeXboX/enna
static int
mp_file_set(const char *uri, const char *label)
{
    mrl_t *mrl = NULL;
    player_type_t player_type = mp->default_type;

    enna_log(ENNA_MSG_INFO, NULL, "Try to load : %s , %s", uri, label);

    /* try network streams */
    if (!strncmp(uri, URI_TYPE_FTP, strlen(URI_TYPE_FTP)))
        mrl = set_network_stream(uri, MRL_RESOURCE_FTP);
    else if (!strncmp(uri, URI_TYPE_HTTP, strlen(URI_TYPE_HTTP)))
        mrl = set_network_stream(uri, MRL_RESOURCE_HTTP);
    else if (!strncmp(uri, URI_TYPE_MMS, strlen(URI_TYPE_MMS)))
        mrl = set_network_stream(uri, MRL_RESOURCE_MMS);
    else if (!strncmp(uri, URI_TYPE_NETVDR, strlen(URI_TYPE_NETVDR)))
    {
        mrl = set_network_stream(uri, MRL_RESOURCE_NETVDR);
        player_type = mp->tv_type;
    }
    else if (!strncmp(uri, URI_TYPE_RTP, strlen(URI_TYPE_RTP)))
        mrl = set_network_stream(uri, MRL_RESOURCE_RTP);
    else if (!strncmp(uri, URI_TYPE_RTSP, strlen(URI_TYPE_RTSP)))
        mrl = set_network_stream(uri, MRL_RESOURCE_RTSP);
    else if (!strncmp(uri, URI_TYPE_SMB, strlen(URI_TYPE_SMB)))
        mrl = set_network_stream(uri, MRL_RESOURCE_SMB);
    else if (!strncmp(uri, URI_TYPE_TCP, strlen(URI_TYPE_TCP)))
        mrl = set_network_stream(uri, MRL_RESOURCE_TCP);
    else if (!strncmp(uri, URI_TYPE_UDP, strlen(URI_TYPE_UDP)))
        mrl = set_network_stream(uri, MRL_RESOURCE_UDP);
    else if (!strncmp(uri, URI_TYPE_UNSV, strlen(URI_TYPE_UNSV)))
        mrl = set_network_stream(uri, MRL_RESOURCE_UNSV);

    /* Try DVD video */
    else if (!strncmp(uri, URI_TYPE_DVD, strlen(URI_TYPE_DVD)))
    {
        mrl = set_dvd_stream(uri, MRL_RESOURCE_DVD);
        player_type = mp->dvd_type;
    }
    else if (!strncmp(uri, URI_TYPE_DVDNAV, strlen(URI_TYPE_DVDNAV)))
    {
        mrl = set_dvd_stream(uri, MRL_RESOURCE_DVDNAV);
        player_type = mp->dvd_type;
    }

    /* Try TV */
    else if (!strncmp(uri, URI_TYPE_VDR, strlen(URI_TYPE_VDR)))
    {
        char *device = NULL;
        char *driver = strstr(uri, "#");
        size_t device_len = strlen(uri) - strlen(URI_TYPE_VDR);

        if (driver)
        {
            device_len -= strlen(driver);
            driver++;
            device = malloc(device_len);
            strncpy(device, uri + strlen(URI_TYPE_VDR), device_len);
        }
        else if (device_len)
            device = strdup(uri + strlen(URI_TYPE_VDR));

        mrl = set_tv_stream(device, driver, MRL_RESOURCE_VDR);
        player_type = mp->tv_type;
    }
    /* Try CD Audio */
    else if (!strncmp(uri, URI_TYPE_CDDA, strlen(URI_TYPE_CDDA)))
    {
        mrl = set_cdda_stream(uri, MRL_RESOURCE_CDDA);
    }
    /* Try Spotify stream */
    else if (!strncmp(uri, URI_TYPE_SPOTIFY, strlen(URI_TYPE_SPOTIFY)))
      {
	mrl = set_spotify_stream(uri, MRL_RESOURCE_FILE);
	player_type = mp->spotify_type;
      }
    /* default is local files */
    if (!mrl)
    {
	printf("MRL is NULL try local file\n");
        const char *it;
        it = strrchr(uri, '.');
        if (it && !strcmp(it, ".iso")) /* consider ISO file as DVD */
        {
            mrl = set_dvd_stream(uri, MRL_RESOURCE_DVDNAV);
            player_type = mp->dvd_type;
        }
        else
	  {
            mrl = set_local_stream(uri);
	  }
    }

    if (!mrl)
      {
	printf("MRL is NULL\n");
        return 1;
      }
    ENNA_FREE(mp->uri);
    mp->uri = strdup(uri);

    ENNA_FREE(mp->label);
    mp->label = label ? strdup(label) : NULL;

    mp->audio_delay = AUDIO_DELAY_DEFAULT;
    mp->subtitle_delay = SUB_DELAY_DEFAULT;

    /* Initialization of subtitles variables */
    init_sub_align();
    init_sub_pos();
    init_sub_scale();
    init_framedrop();
    init_sub_visibility();

    mp->player_type = player_type;
    mp->player = mp->players[player_type];

    player_mrl_set(mp->player, mrl);

    if (mp->subtitle_alignment != SUB_ALIGNMENT_DEFAULT)
        player_subtitle_set_alignment(mp->player, mp->subtitle_alignment);
    if (mp->subtitle_position != SUB_POSITION_DEFAULT)
        player_subtitle_set_position(mp->player, mp->subtitle_position);
    if (mp->subtitle_scale != SUB_SCALE_DEFAULT)
        player_subtitle_scale(mp->player, mp->subtitle_scale, 1);
    player_subtitle_set_visibility(mp->player, mp->subtitle_visibility);
    if (mp->framedrop != FRAMEDROP_DEFAULT)
        player_set_framedrop(mp->player, mp->framedrop);

    return 0;
}
コード例 #27
0
ファイル: games_sys.c プロジェクト: GeeXboX/enna
static void
games_sys_hide(Evas_Object *edje)
{
    ENNA_OBJECT_DEL(mod->o_list);
    ENNA_FREE(mod);
}