diff --git a/modules/LIST b/modules/LIST index fe326c30fc3f26ee2cc9cdc2499d5493ab0476c2..ee82cfe26465aee3229187d50c23ddf395522221 100644 --- a/modules/LIST +++ b/modules/LIST @@ -340,6 +340,7 @@ $Id$ * wave: Wave video effect * waveout: simple audio output module for Windows * win32text: Text renderer using native Win32 API + * windrive: Windows logical disc drives * wingapi: Win CE video output * wingdi: WIN 32 / WIN CE GDI video output * wma_fixed: wma decoder using integer decoder from Rockbox diff --git a/modules/services_discovery/Modules.am b/modules/services_discovery/Modules.am index ed1771867a8e57ff00c4a34c2a191c926f1ab742..846d112ede40a119d0b55e2aba31c4665bbb97ae 100644 --- a/modules/services_discovery/Modules.am +++ b/modules/services_discovery/Modules.am @@ -24,6 +24,14 @@ if HAVE_XCB libvlc_LTLIBRARIES += libxcb_apps_plugin.la endif +libwindrive_plugin_la_SOURCES = windrive.c +libwindrive_plugin_la_CFLAGS = $(AM_CFLAGS) +libwindrive_plugin_la_LIBADD = $(AM_LIBADD) +libwindrive_plugin_la_DEPENDENCIES = +if HAVE_WIN32 +libvlc_LTLIBRARIES += libwindrive_plugin.la +endif + EXTRA_LTLIBRARIES += \ libudev_plugin.la libvlc_LTLIBRARIES += \ diff --git a/modules/services_discovery/windrive.c b/modules/services_discovery/windrive.c new file mode 100644 index 0000000000000000000000000000000000000000..d17a76bb1b659e11ec3d129cf4919f7025d48e63 --- /dev/null +++ b/modules/services_discovery/windrive.c @@ -0,0 +1,86 @@ +/** + * @file win_disc.c + * @brief List of disc drives for VLC media player for Windows + */ +/***************************************************************************** + * Copyright © 2010 Rémi Denis-Courmont + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + ****************************************************************************/ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <vlc_common.h> +#include <vlc_services_discovery.h> +#include <vlc_plugin.h> + +static int Open (vlc_object_t *); + +VLC_SD_PROBE_HELPER("disc", "Discs", SD_CAT_DEVICES) + +/* + * Module descriptor + */ +vlc_module_begin () + add_submodule () + set_shortname (N_("Discs")) + set_description (N_("Discs")) + set_category (CAT_PLAYLIST) + set_subcategory (SUBCAT_PLAYLIST_SD) + set_capability ("services_discovery", 0) + set_callbacks (Open, NULL) + add_shortcut ("disc") + + VLC_SD_PROBE_SUBMODULE + +vlc_module_end () + +/** + * Probes and initializes. + */ +static int Open (vlc_object_t *obj) +{ + services_discovery_t *sd = (services_discovery_t *)obj; + + LONG drives = GetLogicalDrives (); + char mrl[12] = "file:///A:/", name[3] = "A:"; + TCHAR path[4] = "A:\\"; + + for (char d = 0; d < 26; d++) + { + input_item_t *item; + char letter = 'A' + d; + + /* Does this drive actually exist? */ + if (!(drives & (1 << d))) + continue; + /* Is it a disc drive? */ + path[0] = letter; + if (GetDriveType (path) != DRIVE_CDROM) + continue; + + mrl[8] = name[0] = letter; + item = input_item_NewWithType (VLC_OBJECT (sd), mrl, name, + 0, NULL, 0, -1, ITEM_TYPE_DISC); + msg_Dbg (sd, "adding %s (%s)", mrl, name); + if (item == NULL) + break; + + services_discovery_AddItem (sd, item, _("Local drives")); + } + return VLC_SUCCESS; +}