Author: pebender
Date: Tue Jun 2 18:12:02 2009
New Revision: 4879
Added:
trunk/gar-minimyth/script/system/lirc/files/lirc-0.8.5-lircmd_uinput.patch
Modified:
trunk/gar-minimyth/html/minimyth/conf/minimyth.conf
trunk/gar-minimyth/html/minimyth/document-changelog.txt
trunk/gar-minimyth/html/minimyth/document-configure.html
trunk/gar-minimyth/html/minimyth/document-minimyth_conf.html
trunk/gar-minimyth/script/meta/minimyth/files/source/lists/minimyth-bin-list
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/init/conf/MM_LIRC.pm
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/init/conf/MM_X.pm
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/init/lirc.pm
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/lib/udev/mm_persistent
trunk/gar-minimyth/script/minimyth.conf.mk
trunk/gar-minimyth/script/system/lirc/Makefile
trunk/gar-minimyth/script/system/lirc/checksums
Log:
- Patched lircmd so that it creates in uinput based event device.
- Added lircmd support.
Modified: trunk/gar-minimyth/html/minimyth/conf/minimyth.conf
==============================================================================
--- trunk/gar-minimyth/html/minimyth/conf/minimyth.conf (original)
+++ trunk/gar-minimyth/html/minimyth/conf/minimyth.conf Tue Jun 2 18:12:02
2009
@@ -260,6 +260,7 @@
# MM_LIRC_SLEEP_ENABLED
# MM_LIRC_WAKEUP_ENABLED
# MM_LIRC_FETCH_LIRCD_CONF
+# MM_LIRC_FETCH_LIRCMD_CONF
# MM_LIRC_FETCH_LIRCRC
# MM_LIRC_FETCH_LIRCRC_MINIMYTH
# MM_LIRC_FETCH_LIRCRC_MYTHTV
Modified: trunk/gar-minimyth/html/minimyth/document-changelog.txt
==============================================================================
--- trunk/gar-minimyth/html/minimyth/document-changelog.txt (original)
+++ trunk/gar-minimyth/html/minimyth/document-changelog.txt Tue Jun 2
18:12:02 2009
@@ -1,7 +1,7 @@
MiniMyth Changelog
--------------------------------------------------------------------------------
-Changes since 66 (2009-06-01):
+Changes since 66 (2009-06-02):
Current MythTV versions
MythTV 0.20-softpad: version 0.20.2.softpad, release-0-20-fixes branch
svn 16082 and
@@ -92,6 +92,10 @@
Improved Xine
- Added the m2ts patch from
<http://www.minimyth.org/forum/viewtopic.php?f=2&t=2272>.
+
+Improved LIRC
+ - Patched lircmd so that it creates in uinput based event device.
+ - Added lircmd support.
Modified LCDproc
- Updated imonlcd patch.
Modified: trunk/gar-minimyth/html/minimyth/document-configure.html
==============================================================================
--- trunk/gar-minimyth/html/minimyth/document-configure.html (original)
+++ trunk/gar-minimyth/html/minimyth/document-configure.html Tue Jun 2
18:12:02 2009
@@ -636,6 +636,15 @@
'<a
href="document-minimyth_conf.html#MM_LIRC_FETCH_LIRCD_CONF">MM_LIRC_FETCH_LIRCD_CONF</a>'.
</p>
</dd>
+ <dt id="lircmd_conf">lircmd.conf</dt>
+ <dd>
+ <p>
+ The LIRC mouse daemon ('lircmd') configuration file.
+ MiniMyth will use this file as the '/etc/lircmd.conf' file
in the MiniMyth file system.
+ Whether or not 'lircmd.conf' is retrieved depends on
+ '<a
href="document-minimyth_conf.html#MM_LIRC_FETCH_LIRCMD_CONF">MM_LIRC_FETCH_LIRCMD_CONF</a>'.
+ </p>
+ </dd>
<dt id="lircrc">lircrc</dt>
<dd>
<p>
@@ -786,7 +795,7 @@
alt="Valid CSS!" height="31" width="88" /></a>
</div>
<div class="version">
- Last Updated on 2009-05-21
+ Last Updated on 2009-06-02
<br />
< mailto : webmaster at minimyth dot org >
</div>
Modified: trunk/gar-minimyth/html/minimyth/document-minimyth_conf.html
==============================================================================
--- trunk/gar-minimyth/html/minimyth/document-minimyth_conf.html
(original)
+++ trunk/gar-minimyth/html/minimyth/document-minimyth_conf.html Tue Jun
2
18:12:02 2009
@@ -2381,6 +2381,7 @@
<li><a
href="#MM_LIRC_SLEEP_ENABLED">MM_LIRC_SLEEP_ENABLED</a></li>
<li><a
href="#MM_LIRC_WAKEUP_ENABLED">MM_LIRC_WAKEUP_ENABLED</a></li>
<li><a
href="#MM_LIRC_FETCH_LIRCD_CONF">MM_LIRC_FETCH_LIRCD_CONF</a></li>
+ <li><a
href="#MM_LIRC_FETCH_LIRCMD_CONF">MM_LIRC_FETCH_LIRCMD_CONF</a></li>
<li><a
href="#MM_LIRC_FETCH_LIRCRC">MM_LIRC_FETCH_LIRCRC</a></li>
<li><a
href="#MM_LIRC_FETCH_LIRCRC_MINIMYTH">MM_LIRC_FETCH_LIRCRC_MINIMYTH</a></li>
<li><a
href="#MM_LIRC_FETCH_LIRCRC_MYTHTV">MM_LIRC_FETCH_LIRCRC_MYTHTV</a></li>
@@ -2627,6 +2628,24 @@
<li>a 'streamzap' receiver with a 'streamzap' remote</li>
</ul>
</dd>
+ <dt
id="MM_LIRC_FETCH_LIRCMD_CONF"><strong>MM_LIRC_FETCH_LIRCMD_CONF</strong></dt>
+ <dd>
+ <p>
+ Indicate whether or not to fetch the
+ '<a
href="document-configure.html#lircmd_conf">lircmd.conf</a>'
+ file from the MiniMyth system's MiniMyth read-only
configuration directory.
+ Valid values are 'yes' and 'no', with 'no' the default.
+ </p>
+ <p>
+ If
+ '<a
href="document-configure.html#lircmd_conf">lircmd.conf</a>'
+ is fetched, then MiniMyth will start the LIRC mouse daemon
(lircmd) in uinput mode and
+ configure Xorg to use the resulting event device.
+ '<a
href="document-configure.html#lircmd_conf">lircmd.conf</a>'.
+ Note that the LIRC mouse daemon in uinput mode ignores the
PROTOCOL option in
+ '<a
href="document-configure.html#lircmd_conf">lircmd.conf</a>'
+ </p>
+ </dd>
<dt
id="MM_LIRC_FETCH_LIRCRC"><strong>MM_LIRC_FETCH_LIRCRC</strong></dt>
<dd>
<p>
@@ -3255,7 +3274,7 @@
alt="Valid CSS!" height="31" width="88" /></a>
</div>
<div class="version">
- Last Updated on 2009-05-31
+ Last Updated on 2009-06-02
<br />
< mailto : webmaster at minimyth dot org >
</div>
Modified:
trunk/gar-minimyth/script/meta/minimyth/files/source/lists/minimyth-bin-list
==============================================================================
---
trunk/gar-minimyth/script/meta/minimyth/files/source/lists/minimyth-bin-list
(original)
+++
trunk/gar-minimyth/script/meta/minimyth/files/source/lists/minimyth-bin-list
Tue Jun 2 18:12:02 2009
@@ -38,6 +38,7 @@
ldconfig
lighttpd
lircd
+lircmd
lsdvd
lsmod
lsof
Modified:
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/init/conf/MM_LIRC.pm
==============================================================================
---
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/init/conf/MM_LIRC.pm
(original)
+++
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/init/conf/MM_LIRC.pm
Tue Jun 2 18:12:02 2009
@@ -172,6 +172,14 @@
file => {name_remote => '/lircd.conf',
name_local => '/etc/lircd.conf'}
};
+$var_list{'MM_LIRC_FETCH_LIRCMD_CONF'} =
+{
+ value_default => 'no',
+ value_valid => 'no|yes',
+ value_file => 'yes',
+ file => {name_remote => '/lircmd.conf',
+ name_local => '/etc/lircmd.conf'}
+};
$var_list{'MM_LIRC_FETCH_LIRCRC'} =
{
value_default => 'no',
@@ -357,9 +365,28 @@
return join(' ', @device_list);
}
};
+$var_list{'MM_LIRC_LIRCM_DEVICE'} =
+{
+ prerequisite => ['MM_LIRC_FETCH_LIRCMD_CONF'],
+ value_default => 'auto',
+ value_valid => 'auto|.+',
+ value_auto => sub
+ {
+ my $minimyth = shift;
+ my $name = shift;
+
+ my $device = '';
+ if ($minimyth->var_get('MM_LIRC_FETCH_LIRCMD_CONF'))
+ {
+ $device = '/dev/persistent/event-lircm';
+ }
+
+ return $device;
+ }
+};
$var_list{'MM_LIRC_KERNEL_MODULE_LIST'} =
{
- prerequisite =>
['MM_LIRC_KERNEL_MODULE', 'MM_LIRC_KERNEL_MODULE_OPTIONS'],
+ prerequisite =>
['MM_LIRC_KERNEL_MODULE', 'MM_LIRC_KERNEL_MODULE_OPTIONS',
'MM_LIRC_FETCH_LIRCMD_CONF'],
value_clean => sub
{
my $minimyth = shift;
@@ -376,7 +403,18 @@
my $minimyth = shift;
my $name = shift;
- return $minimyth->var_get('MM_LIRC_KERNEL_MODULE');
+ my @kernel_modules = ();
+
+ if ($minimyth->var_get('MM_LIRC_KERNEL_MODULE'))
+ {
+ push(@kernel_modules,
$minimyth->var_get('MM_LIRC_KERNEL_MODULE'));
+ }
+ if ($minimyth->var_get('MM_LIRC_FETCH_LIRCMD_CONF'))
+ {
+ push(@kernel_modules, 'uinput');
+ }
+
+ return join(' ', @kernel_modules);
},
extra => sub
{
Modified:
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/init/conf/MM_X.pm
==============================================================================
---
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/init/conf/MM_X.pm
(original)
+++
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/init/conf/MM_X.pm
Tue Jun 2 18:12:02 2009
@@ -30,7 +30,7 @@
};
$var_list{'MM_X_EVENT_DEVICE_LIST'} =
{
- prerequisite =>
['MM_LIRC_DEVICE_LIST', 'MM_WIIMOTE_EVENT_DEVICE_LIST'],
+ prerequisite =>
['MM_LIRC_DEVICE_LIST', 'MM_LIRC_LIRCMD_DEVICE',
'MM_WIIMOTE_EVENT_DEVICE_LIST'],
value_default => 'auto',
value_valid => 'auto|.+',
@@ -58,6 +58,12 @@
{
push(@device_list, $device);
}
+ }
+
+ # Add LIRC mouse daemon event device.
+ if ($minimyth->var_get('MM_LIRC_LIRCM_DEVICE'))
+ {
+ push(@device_list, $minimyth->var_get('MM_LIRC_LIRCM_DEVICE'));
}
# Remove any duplicates.
Modified:
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/init/lirc.pm
==============================================================================
---
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/init/lirc.pm
(original)
+++
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/init/lirc.pm
Tue Jun 2 18:12:02 2009
@@ -391,6 +391,12 @@
system(qq(/usr/bin/irexec -d /etc/lircrc));
}
+ # Start the lircmd daemon.
+ if (-e '/etc/lircmd.conf')
+ {
+ system(qq(/usr/sbin/lircmd --uinput /etc/lircmd.conf));
+ }
+
return 1;
}
@@ -399,10 +405,13 @@
my $self = shift;
my $minimyth = shift;
- if (($minimyth->application_running('irexec')) ||
($minimyth->application_running('lircd')))
+ if ( ($minimyth->application_running('lircmd')) ||
+ ($minimyth->application_running('irexec')) ||
+ ($minimyth->application_running('lircd')) )
{
$minimyth->message_output('info', "stopping remote control ...");
+ $minimyth->application_stop('lircmd');
$minimyth->application_stop('irexec');
$minimyth->application_stop('lircd');
}
Modified:
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/lib/udev/mm_persistent
==============================================================================
---
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/lib/udev/mm_persistent
(original)
+++
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/lib/udev/mm_persistent
Tue Jun 2 18:12:02 2009
@@ -90,6 +90,9 @@
gsub(/\//, ":", phys)
}
}
+ if ( ( driver == "" ) && ( name == "lircmd" ) ) {
+ mm_persistent=kernel "-lircm"
+ }
if ( ( driver == "" ) && ( name == "Nintendo Wiimote" ) &&
( phys ) ) {
mm_persistent=kernel "-wminput:" phys
}
Modified: trunk/gar-minimyth/script/minimyth.conf.mk
==============================================================================
--- trunk/gar-minimyth/script/minimyth.conf.mk (original)
+++ trunk/gar-minimyth/script/minimyth.conf.mk Tue Jun 2 18:12:02 2009
@@ -18,7 +18,7 @@
)
# Configuration file (minimyth.conf) version.
-mm_CONF_VERSION ?= 45
+mm_CONF_VERSION ?= 46
#-------------------------------------------------------------------------------
# Variables that you are likely to be override based on your environment.
Modified: trunk/gar-minimyth/script/system/lirc/Makefile
==============================================================================
--- trunk/gar-minimyth/script/system/lirc/Makefile (original)
+++ trunk/gar-minimyth/script/system/lirc/Makefile Tue Jun 2 18:12:02 2009
@@ -8,7 +8,7 @@
#MASTER_SITES =
cvs://anonym...@$(GARNAME).cvs.sourceforge.net:/cvsroot/$(GARNAME)/
DISTFILES = $(DISTNAME).tar.bz2
#PATCHFILES = $(DISTNAME)-usb_sysfs.patch
$(DISTNAME)-lirc_i2c_device.patch $(DISTNAME)-no_python.patch
$(DISTNAME)-imon_module_param.patch $(DISTNAME)-imon_lcd_dynamic.patch
$(DISTNAME)-remove_smp_unsafe_drivers.patch
-PATCHFILES = $(DISTNAME)-mceusb2_mod_mce_0.2.0.patch
$(DISTNAME)-no_python.patch $(DISTNAME)-remove_smp_unsafe_drivers.patch
+PATCHFILES = $(DISTNAME)-lircmd_uinput.patch
$(DISTNAME)-mceusb2_mod_mce_0.2.0.patch $(DISTNAME)-no_python.patch
$(DISTNAME)-remove_smp_unsafe_drivers.patch
LICENSE = GPL2
DESCRIPTION =
Modified: trunk/gar-minimyth/script/system/lirc/checksums
==============================================================================
--- trunk/gar-minimyth/script/system/lirc/checksums (original)
+++ trunk/gar-minimyth/script/system/lirc/checksums Tue Jun 2 18:12:02 2009
@@ -8,6 +8,7 @@
7fef9c434332248022774b90ccc234e1
download/lirc-0.8.4a-remove_smp_unsafe_drivers.patch
5a274e4eaff8156b17903c22ea01f506 download/lirc-0.8.5.tar.bz2
+d6256f60bc45a9a5b6da30dd9eac2d24 download/lirc-0.8.5-lircmd_uinput.patch
0c6e1197f1cced83070509d56d24360c
download/lirc-0.8.5-mceusb2_mod_mce_0.2.0.patch
e13b18b563136e8c50f490df4ef9250d download/lirc-0.8.5-no_python.patch
e734f494fc683e9e6f3335c212c980af
download/lirc-0.8.5-remove_smp_unsafe_drivers.patch
Added:
trunk/gar-minimyth/script/system/lirc/files/lirc-0.8.5-lircmd_uinput.patch
==============================================================================
--- (empty file)
+++
trunk/gar-minimyth/script/system/lirc/files/lirc-0.8.5-lircmd_uinput.patch
Tue Jun 2 18:12:02 2009
@@ -0,0 +1,223 @@
+diff -Naur lirc-0.8.5-old/daemons/lircmd.c lirc-0.8.5-new/daemons/lircmd.c
+--- lirc-0.8.5-old/daemons/lircmd.c 2006-10-09 00:22:14.000000000 -0700
++++ lirc-0.8.5-new/daemons/lircmd.c 2009-06-02 17:30:53.000000000 -0700
+@@ -32,6 +32,12 @@
+ #include <sys/socket.h>
+ #include <sys/un.h>
+
++#if defined(__linux__)
++#include <linux/input.h>
++#include <linux/uinput.h>
++#include "input_map.h"
++#endif
++
+ #define CLICK_DELAY 50000 /* usecs */
+ #define PACKET_SIZE 256
+ #define WHITE_SPACE " \t"
+@@ -49,6 +55,9 @@
+ #define MAP_BUTTON2 1
+ #define MAP_BUTTON3 2
+
++static int uinputfd = -1;
++static int useuinput = 0;
++
+ inline int map_buttons(int b)
+ {
+ switch(b)
+@@ -165,6 +174,13 @@
+ {
+ /* not safe in a signal handler *//*freetm(tm_first);*/
+
++ if(uinputfd != -1)
++ {
++ ioctl(uinputfd, UI_DEV_DESTROY);
++ close(uinputfd);
++ uinputfd = -1;
++ }
++
+ shutdown(lircd,2);
+ close(lircd);
+ shutdown(lircm,2);
+@@ -217,6 +233,88 @@
+ }
+ #endif /* DAEMONIZE */
+
++int setup_uinputfd(const char *name)
++{
++#if defined(__linux__)
++ int fd;
++ int key;
++ struct uinput_user_dev dev;
++
++ fd = open("/dev/input/uinput", O_RDWR);
++ if(fd == -1)
++ {
++ fd = open("/dev/uinput", O_RDWR);
++ if(fd == -1)
++ {
++ fd = open("/dev/misc/uinput", O_RDWR);
++ if(fd == -1)
++ {
++ fprintf(stderr, "could not open %s\n",
++ "uinput");
++ perror(NULL);
++ return -1;
++ }
++ }
++ }
++ memset(&dev, 0, sizeof(dev));
++ strncpy(dev.name, name, sizeof(dev.name));
++ dev.name[sizeof(dev.name)-1] = 0;
++ if(write(fd, &dev, sizeof(dev)) != sizeof(dev))
++ {
++ goto setup_error;
++ }
++
++ if( (ioctl(fd, UI_SET_EVBIT , EV_KEY ) != 0) ||
++ (ioctl(fd, UI_SET_KEYBIT, BTN_LEFT ) != 0) ||
++ (ioctl(fd, UI_SET_KEYBIT, BTN_MIDDLE) != 0) ||
++ (ioctl(fd, UI_SET_KEYBIT, BTN_RIGHT ) != 0) )
++ {
++ goto setup_error;
++ }
++
++ if( (ioctl(fd, UI_SET_EVBIT , EV_REL ) != 0) ||
++ (ioctl(fd, UI_SET_RELBIT, REL_X ) != 0) ||
++ (ioctl(fd, UI_SET_RELBIT, REL_Y ) != 0) ||
++ (ioctl(fd, UI_SET_RELBIT, REL_WHEEL) != 0) )
++ {
++ goto setup_error;
++ }
++
++ if(ioctl(fd, UI_DEV_CREATE) != 0)
++ {
++ goto setup_error;
++ }
++ return fd;
++
++ setup_error:
++ fprintf(stderr, "could not setup %s\n", "uinput");
++ perror(NULL);
++ close(fd);
++#endif
++ return -1;
++}
++
++int usend(__u16 type, __u16 code, __s32 value)
++{
++#ifdef __linux__
++ if(uinputfd != -1)
++ {
++ struct input_event event;
++
++ memset(&event, 0, sizeof(event));
++ event.type = type;
++ event.code = code;
++ event.value = value;
++
++ if(write(uinputfd, &event, sizeof(event)) != sizeof(event))
++ {
++ fprintf(stderr,"%s: writing to uinput
failed\n",progname);
++ perror(progname);
++ }
++ }
++#endif
++}
++
+ void msend(int dx,int dy,int dz,int rep,int buttp,int buttr)
+ {
+ static int buttons=0;
+@@ -290,6 +388,48 @@
+ }
+ break;
+ }
++
++ if((dx != 0) || (dy != 0))
++ {
++ usend(EV_REL, REL_X, dx);
++ usend(EV_REL, REL_Y, dy);
++ usend(EV_SYN, SYN_REPORT, 0);
++ }
++ if(dz != 0)
++ {
++ usend(EV_REL, REL_WHEEL, dz);
++ usend(EV_SYN, SYN_REPORT, 0);
++ }
++ if(buttp == BUTTON1)
++ {
++ usend(EV_KEY, BTN_LEFT, 1 );
++ usend(EV_SYN, SYN_REPORT, 0);
++ }
++ if(buttr == BUTTON1)
++ {
++ usend(EV_KEY, BTN_LEFT, 0 );
++ usend(EV_SYN, SYN_REPORT, 0);
++ }
++ if(buttp == BUTTON2)
++ {
++ usend(EV_KEY, BTN_MIDDLE, 1);
++ usend(EV_SYN, SYN_REPORT, 0);
++ }
++ if(buttr == BUTTON2)
++ {
++ usend(EV_KEY, BTN_MIDDLE, 0);
++ usend(EV_SYN, SYN_REPORT, 0);
++ }
++ if(buttp == BUTTON3)
++ {
++ usend(EV_KEY, BTN_RIGHT, 1);
++ usend(EV_SYN, SYN_REPORT, 0);
++ }
++ if(buttr == BUTTON3)
++ {
++ usend(EV_KEY, BTN_RIGHT, 0);
++ usend(EV_SYN, SYN_REPORT, 0);
++ }
+ }
+
+ void mouse_move(int dx,int dy,int dz,int rep)
+@@ -725,6 +865,9 @@
+ {"help",no_argument,NULL,'h'},
+ {"version",no_argument,NULL,'v'},
+ {"nodaemon",no_argument,NULL,'n'},
++# if defined(__linux__)
++ {"uinput",no_argument,NULL,'u'},
++# endif
+ {0, 0, 0, 0}
+ };
+ c = getopt_long(argc,argv,"hvn",long_options,NULL);
+@@ -737,6 +880,9 @@
+ printf("\t -h --help\t\tdisplay this message\n");
+ printf("\t -v --version\t\tdisplay version\n");
+ printf("\t -n --nodaemon\t\tdon't fork to
background\n");
++# if defined(__linux__)
++ printf("\t -u --uinput\t\tgenerate Linux input
events\n");
++# endif
+ return(EXIT_SUCCESS);
+ case 'v':
+ printf("%s %s\n",progname,VERSION);
+@@ -744,6 +890,11 @@
+ case 'n':
+ nodaemon=1;
+ break;
++# if defined(__linux__)
++ case 'u':
++ useuinput=1;
++ break;
++# endif
+ default:
+ printf("Usage: %s [options] [config-file]\n",progname);
+ return(EXIT_FAILURE);
+@@ -817,6 +968,12 @@
+ {
+ ms=new_ms;
+ }
++
++ if(useuinput)
++ {
++ uinputfd = setup_uinputfd(progname);
++ }
++
+ #ifdef DAEMONIZE
+ if(!nodaemon) daemonize();
+ #endif
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"minimyth-commits" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/minimyth-commits?hl=en
-~----------~----~----~----~------~----~------~--~---