Hello community, here is the log from the commit of package museic for openSUSE:Factory checked in at 2018-08-24 17:11:52 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/museic (Old) and /work/SRC/openSUSE:Factory/.museic.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "museic" Fri Aug 24 17:11:52 2018 rev:5 rq:631169 version:2.0.2 Changes: -------- --- /work/SRC/openSUSE:Factory/museic/museic.changes 2018-07-09 13:27:09.971008557 +0200 +++ /work/SRC/openSUSE:Factory/.museic.new/museic.changes 2018-08-24 17:11:52.906626217 +0200 @@ -1,0 +2,16 @@ +Tue Aug 14 18:26:08 UTC 2018 - avvi...@yandex.by + +- Update to 2.0.2: + * Change screenshots and version + * Add more help + * Avoid ports below 1024 + * Allow server customize port + * Server uses configured ports + * Basic dummy conf menu + * Use granite seekbar as streambar + * revert changes of config.vala file + * design changes +- Remove obsolete macros +- Build with granite >= 0.5 + +------------------------------------------------------------------- Old: ---- MuseIC-2.0.1.tar.gz New: ---- MuseIC-2.0.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ museic.spec ++++++ --- /var/tmp/diff_new_pack.mWSoNo/_old 2018-08-24 17:11:53.346626741 +0200 +++ /var/tmp/diff_new_pack.mWSoNo/_new 2018-08-24 17:11:53.350626746 +0200 @@ -1,7 +1,7 @@ # # spec file for package museic # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,10 +17,10 @@ Name: museic -Version: 2.0.1 +Version: 2.0.2 Release: 0 Summary: Audio player with remote control -License: GPL-3.0 +License: GPL-3.0-only Group: Productivity/Multimedia/Sound/Players URL: https://github.com/bcedu Source: https://github.com/bcedu/MuseIC/archive/%{version}.tar.gz#/MuseIC-%{version}.tar.gz @@ -35,10 +35,9 @@ BuildRequires: pkgconfig(dbus-glib-1) BuildRequires: pkgconfig(gio-2.0) BuildRequires: pkgconfig(gmodule-2.0) -BuildRequires: pkgconfig(granite) +BuildRequires: pkgconfig(granite) >= 0.5 BuildRequires: pkgconfig(gstreamer-1.0) BuildRequires: pkgconfig(gtk+-3.0) -%glib2_gsettings_schema_requires %description MuseIC is a fast and simple music player with remote control from any @@ -47,8 +46,6 @@ %prep %setup -q -n MuseIC-%{version} -sed -i 's/\bmetainfo\b/appdata/' $(grep -rwl 'metainfo') - %build %cmake \ -DGSETTINGS_COMPILE=OFF @@ -63,24 +60,14 @@ %suse_update_desktop_file -r com.github.bcedu.museic GTK AudioVideo Music Player %fdupes %{buildroot}/%{_datadir} -%post -%desktop_database_post -%icon_theme_cache_post -%glib2_gsettings_schema_post - -%postun -%desktop_database_postun -%icon_theme_cache_postun -%glib2_gsettings_schema_postun - %files -%doc AUTHORS LICENSE README.md +%license LICENSE +%doc AUTHORS README.md %{_bindir}/com.github.bcedu.museic -%dir %{_datadir}/appdata -%{_datadir}/appdata/com.github.bcedu.museic.appdata.xml %{_datadir}/applications/com.github.bcedu.museic.desktop %{_datadir}/com.github.bcedu.museic/ %{_datadir}/glib-2.0/schemas/com.github.bcedu.museic.gschema.xml %{_datadir}/icons/hicolor/*/apps/com.github.bcedu.museic.??g +%{_datadir}/metainfo/com.github.bcedu.museic.appdata.xml %changelog ++++++ MuseIC-2.0.1.tar.gz -> MuseIC-2.0.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/MuseIC-2.0.1/.gitignore new/MuseIC-2.0.2/.gitignore --- old/MuseIC-2.0.1/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/MuseIC-2.0.2/.gitignore 2018-08-13 16:05:08.000000000 +0200 @@ -0,0 +1 @@ +/build/* \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/MuseIC-2.0.1/CMakeLists.txt new/MuseIC-2.0.2/CMakeLists.txt --- old/MuseIC-2.0.1/CMakeLists.txt 2018-06-14 20:28:05.000000000 +0200 +++ new/MuseIC-2.0.2/CMakeLists.txt 2018-08-13 16:05:08.000000000 +0200 @@ -17,7 +17,7 @@ set (EXEC_NAME "com.github.bcedu.museic") set (RELEASE_NAME "MuseIC") -set (VERSION "1.2") +set (VERSION "2.0.2") set (VERSION_INFO "MuseIC beta version") set (ICON "${PKGDATADIR}/data/icons/com.github.bcedu.museic.svg") set (HTMLDIR "${PKGDATADIR}/data/html/") Binary files old/MuseIC-2.0.1/data/artists_search.png and new/MuseIC-2.0.2/data/artists_search.png differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/MuseIC-2.0.1/data/com.github.bcedu.museic.appdata.xml new/MuseIC-2.0.2/data/com.github.bcedu.museic.appdata.xml --- old/MuseIC-2.0.1/data/com.github.bcedu.museic.appdata.xml 2018-06-14 20:28:05.000000000 +0200 +++ new/MuseIC-2.0.2/data/com.github.bcedu.museic.appdata.xml 2018-08-13 16:05:08.000000000 +0200 @@ -45,6 +45,24 @@ </screenshot> </screenshots> <releases> + <release version="2.0.2" date="2018-07-13"> + <description> + <p>MuseIC Release</p> + <ul> + <li> UI changes to make it more "elementary style"</li> + <li> Added artists search bar</li> + <li> Added files search bar</li> + <li> Added button to edit metadata: name, artist and album (only for the museic library) </li> + <li> Added button to delete files from the filelist </li> + <li> Improved artists list with scrollbar</li> + <li> Show the duration of each file in the filelist and playlist </li> + <li> Show artist's playlist by clicking current artist </li> + <li> Pressing the name of the current song brings you the current filelist and scrolls you to the song </li> + <li> Hit "space" to make play / pause </li> + <li> Hit right / left change song </li> + </ul> + </description> + </release> <release version="2.0.0" date="2018-05-12"> <description> <p>MuseIC Release</p> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/MuseIC-2.0.1/data/com.github.bcedu.museic.glade new/MuseIC-2.0.2/data/com.github.bcedu.museic.glade --- old/MuseIC-2.0.1/data/com.github.bcedu.museic.glade 2018-06-14 20:28:05.000000000 +0200 +++ new/MuseIC-2.0.2/data/com.github.bcedu.museic.glade 2018-08-13 16:05:08.000000000 +0200 @@ -15,12 +15,59 @@ <property name="step_increment">0.001</property> <property name="page_increment">0.10000000000000001</property> </object> + <object class="GtkScale" id="scalebar"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hexpand">False</property> + <property name="adjustment">adjustment</property> + <property name="round_digits">2</property> + <property name="digits">2</property> + <property name="draw_value">False</property> + <signal name="change-value" handler="museic_gui_action_change_time" swapped="no"/> + </object> <object class="GtkAdjustment" id="adjustment-volum"> <property name="upper">2</property> <property name="value">1</property> <property name="step_increment">0.001</property> <property name="page_increment">0.10000000000000001</property> </object> + <object class="GtkBox" id="boxFileTitle"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="valign">center</property> + <property name="vexpand">True</property> + <child> + <object class="GtkSearchEntry" id="searchentry_files"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="halign">start</property> + <property name="valign">start</property> + <property name="primary_icon_name">edit-find-symbolic</property> + <property name="primary_icon_activatable">False</property> + <property name="primary_icon_sensitive">False</property> + <signal name="activate" handler="museic_gui_action_search_files" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <object class="GtkToolButton" id="config"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">toolbutton1</property> + <property name="use_underline">True</property> + <property name="stock_id">gtk-properties</property> + <signal name="clicked" handler="museic_gui_action_show_config" swapped="no"/> + </object> <object class="GtkGrid" id="editGrid"> <property name="visible">True</property> <property name="can_focus">False</property> @@ -241,8 +288,13 @@ <object class="GtkImage" id="image2"> <property name="visible">True</property> <property name="can_focus">False</property> + <property name="halign">center</property> + <property name="valign">center</property> + <property name="xpad">2</property> + <property name="pixel_size">0</property> <property name="icon_name">format-indent-more-symbolic</property> <property name="use_fallback">True</property> + <property name="icon_size">2</property> </object> <object class="GtkImage" id="image4"> <property name="visible">True</property> @@ -268,53 +320,6 @@ <property name="orientation">vertical</property> <property name="baseline_position">top</property> <child> - <placeholder/> - </child> - <child> - <object class="GtkBox" id="statusBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="valign">start</property> - <property name="margin_top">5</property> - <property name="orientation">vertical</property> - <child> - <object class="GtkLinkButton" id="statusLabel"> - <property name="label" translatable="yes">button</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="relief">half</property> - <signal name="activate-link" handler="museic_gui_action_show_current_song" swapped="no"/> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLinkButton" id="statusLabel1"> - <property name="label" translatable="yes">button</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="relief">half</property> - <signal name="activate-link" handler="museic_gui_action_show_current_artist" swapped="no"/> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> <object class="GtkBox" id="progresBox"> <property name="visible">True</property> <property name="can_focus">False</property> @@ -322,105 +327,142 @@ <property name="margin_left">5</property> <property name="margin_right">5</property> <child> - <object class="GtkScale" id="scalebar"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hexpand">False</property> - <property name="adjustment">adjustment</property> - <property name="round_digits">2</property> - <property name="digits">2</property> - <property name="draw_value">False</property> - <signal name="change-value" handler="museic_gui_action_change_time" swapped="no"/> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="timeLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">end</property> - <property name="margin_left">5</property> - <property name="vexpand">True</property> - <property name="label" translatable="yes">00:00 / 00:00</property> - <property name="justify">right</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="pack_type">end</property> - <property name="position">1</property> - </packing> + <placeholder/> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> - <property name="position">2</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkButtonBox" id="statusButtons"> + <object class="GtkGrid" id="grid1"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="valign">start</property> - <property name="margin_left">5</property> - <property name="margin_right">5</property> - <property name="layout_style">center</property> - <child> - <object class="GtkButton" id="antButton"> - <property name="label">gtk-media-previous</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="use_stock">True</property> - <property name="always_show_image">True</property> - <signal name="clicked" handler="museic_gui_action_ant_file" swapped="no"/> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> + <property name="resize_mode">queue</property> + <property name="row_homogeneous">True</property> + <property name="column_homogeneous">True</property> <child> - <object class="GtkButton" id="playButton"> - <property name="label">gtk-media-play</property> + <object class="GtkBox" id="box4"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="relief">none</property> - <property name="use_stock">True</property> - <property name="always_show_image">True</property> - <signal name="clicked" handler="museic_gui_action_play_file" swapped="no"/> + <property name="can_focus">False</property> + <property name="halign">start</property> + <child> + <object class="GtkGrid" id="grid2"> + <property name="width_request">150</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="margin_left">5</property> + <child> + <object class="GtkScale" id="volumebar"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="margin_right">2</property> + <property name="hexpand">True</property> + <property name="adjustment">adjustment-volum</property> + <property name="digits">2</property> + <property name="draw_value">False</property> + <signal name="change-value" handler="museic_gui_action_change_volume" swapped="no"/> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkImage" id="image3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">5</property> + <property name="margin_right">10</property> + <property name="icon_name">audio-headphones-symbolic</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> </object> <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> + <property name="left_attach">0</property> + <property name="top_attach">0</property> </packing> </child> <child> - <object class="GtkGrid" id="grid1"> + <object class="GtkBox" id="box7"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="margin_right">225</property> + <property name="halign">center</property> <child> - <object class="GtkButton" id="segButton"> - <property name="label">gtk-media-next</property> + <object class="GtkButtonBox" id="statusButtons"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="use_stock">True</property> - <property name="always_show_image">True</property> - <signal name="clicked" handler="museic_gui_action_seg_file" swapped="no"/> + <property name="can_focus">False</property> + <property name="valign">center</property> + <property name="homogeneous">True</property> + <property name="layout_style">center</property> + <child> + <object class="GtkButton" id="antButton"> + <property name="label">gtk-media-previous</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + <property name="always_show_image">True</property> + <signal name="clicked" handler="museic_gui_action_ant_file" swapped="no"/> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="playButton"> + <property name="label">gtk-media-play</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + <property name="always_show_image">True</property> + <signal name="clicked" handler="museic_gui_action_play_file" swapped="no"/> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="segButton"> + <property name="label">gtk-media-next</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + <property name="always_show_image">True</property> + <signal name="clicked" handler="museic_gui_action_seg_file" swapped="no"/> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> </object> <packing> - <property name="left_attach">0</property> - <property name="top_attach">0</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> </packing> </child> <child> @@ -428,70 +470,41 @@ <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> - <property name="halign">end</property> + <property name="halign">start</property> <property name="image">image1</property> <signal name="toggled" handler="museic_gui_action_random" swapped="no"/> </object> <packing> - <property name="left_attach">1</property> - <property name="top_attach">0</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> </packing> </child> </object> <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">2</property> + <property name="left_attach">1</property> + <property name="top_attach">0</property> </packing> </child> <child> - <object class="GtkGrid" id="grid2"> - <property name="width_request">150</property> + <object class="GtkBox" id="box6"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="margin_right">20</property> - <property name="hexpand">True</property> + <property name="orientation">vertical</property> <child> - <object class="GtkScale" id="volumebar"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hexpand">True</property> - <property name="adjustment">adjustment-volum</property> - <property name="digits">2</property> - <property name="draw_value">False</property> - <signal name="change-value" handler="museic_gui_action_change_volume" swapped="no"/> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkImage" id="image3"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_left">5</property> - <property name="margin_right">10</property> - <property name="icon_name">audio-headphones-symbolic</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">0</property> - </packing> + <placeholder/> </child> </object> <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">4</property> - <property name="secondary">True</property> + <property name="left_attach">2</property> + <property name="top_attach">0</property> </packing> </child> </object> <packing> <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">3</property> + <property name="fill">True</property> + <property name="position">1</property> </packing> </child> </object> @@ -504,114 +517,7 @@ <object class="GtkGrid" id="filesGrid"> <property name="visible">True</property> <property name="can_focus">False</property> - <child> - <object class="GtkGrid" id="filesGridHeader"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_bottom">5</property> - <property name="column_homogeneous">True</property> - <child> - <object class="GtkButton" id="addToPlay"> - <property name="label" translatable="yes">Add</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="halign">center</property> - <property name="image">image2</property> - <property name="xalign">0.46000000834465027</property> - <property name="image_position">right</property> - <property name="always_show_image">True</property> - <signal name="clicked" handler="museic_gui_action_add_to_play" swapped="no"/> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label2"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_left">30</property> - <property name="margin_right">30</property> - <property name="label" translatable="yes">Playlist</property> - <property name="angle">0.01</property> - <attributes> - <attribute name="style" value="normal"/> - <attribute name="weight" value="bold"/> - </attributes> - </object> - <packing> - <property name="left_attach">2</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkBox" id="boxFileTitle"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkSearchEntry" id="searchentry_files"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="halign">start</property> - <property name="valign">start</property> - <property name="primary_icon_name">edit-find-symbolic</property> - <property name="primary_icon_activatable">False</property> - <property name="primary_icon_sensitive">False</property> - <signal name="activate" handler="museic_gui_action_search_files" swapped="no"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_left">30</property> - <property name="margin_right">30</property> - <property name="label" translatable="yes">Files</property> - <property name="angle">0.01</property> - <attributes> - <attribute name="style" value="normal"/> - <attribute name="weight" value="bold"/> - </attributes> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkButton" id="artists_button"> - <property name="label" translatable="yes">All Artists</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <signal name="clicked" handler="museic_gui_action_show_filelist_options" swapped="no"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">0</property> - </packing> - </child> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">0</property> - </packing> - </child> + <property name="margin_top">8</property> <child> <object class="GtkGrid" id="filesGridContent"> <property name="visible">True</property> @@ -621,74 +527,207 @@ <property name="row_homogeneous">True</property> <property name="column_homogeneous">True</property> <child> - <object class="GtkScrolledWindow" id="playWindow"> + <object class="GtkPaned" id="paned1"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="margin_top">5</property> - <property name="hexpand">True</property> - <property name="vexpand">True</property> - <property name="min_content_width">0</property> - <property name="min_content_height">55</property> <child> - <object class="GtkTreeView" id="playTree"> + <object class="GtkBox" id="box8"> + <property name="width_request">300</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hexpand">False</property> - <property name="vexpand">False</property> - <property name="hscroll_policy">natural</property> - <property name="vscroll_policy">natural</property> - <property name="rules_hint">True</property> - <property name="enable_search">False</property> - <property name="search_column">0</property> - <property name="fixed_height_mode">True</property> - <property name="hover_expand">True</property> - <property name="rubber_banding">True</property> - <property name="tooltip_column">0</property> - <signal name="row-activated" handler="museic_gui_action_play_selected_file_playlist" swapped="no"/> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="treeview-selection4"> - <property name="mode">multiple</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkBox" id="fileTitle"> + <property name="height_request">40</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="valign">center</property> + <child> + <object class="GtkButton" id="artists_button"> + <property name="label" translatable="yes">All Artists</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="margin_left">5</property> + <property name="margin_top">5</property> + <property name="margin_bottom">5</property> + <signal name="clicked" handler="museic_gui_action_show_filelist_options" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="valign">center</property> + <property name="label" translatable="yes">Files</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="addToPlay"> + <property name="label" translatable="yes">Add</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="margin_right">5</property> + <property name="margin_top">5</property> + <property name="margin_bottom">5</property> + <property name="resize_mode">immediate</property> + <property name="image">image2</property> + <property name="image_position">right</property> + <property name="always_show_image">True</property> + <signal name="clicked" handler="museic_gui_action_add_to_play" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="fileWindow"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="min_content_width">0</property> + <property name="min_content_height">55</property> + <child> + <object class="GtkTreeView" id="fileTree"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hexpand">False</property> + <property name="vexpand">False</property> + <property name="hscroll_policy">natural</property> + <property name="vscroll_policy">natural</property> + <property name="rules_hint">True</property> + <property name="enable_search">False</property> + <property name="search_column">0</property> + <property name="fixed_height_mode">True</property> + <property name="hover_expand">True</property> + <property name="rubber_banding">True</property> + <property name="tooltip_column">0</property> + <signal name="row-activated" handler="museic_gui_action_play_selected_file_filelist" swapped="no"/> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection"> + <property name="mode">multiple</property> + </object> + </child> + </object> + </child> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> </child> </object> + <packing> + <property name="resize">True</property> + <property name="shrink">False</property> + </packing> </child> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="fileWindow"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="margin_top">5</property> - <property name="hexpand">True</property> - <property name="vexpand">True</property> - <property name="min_content_width">0</property> - <property name="min_content_height">55</property> <child> - <object class="GtkTreeView" id="fileTree"> + <object class="GtkBox" id="box9"> + <property name="width_request">300</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hexpand">False</property> - <property name="vexpand">False</property> - <property name="hscroll_policy">natural</property> - <property name="vscroll_policy">natural</property> - <property name="rules_hint">True</property> - <property name="enable_search">False</property> - <property name="search_column">0</property> - <property name="fixed_height_mode">True</property> - <property name="hover_expand">True</property> - <property name="rubber_banding">True</property> - <property name="tooltip_column">0</property> - <signal name="row-activated" handler="museic_gui_action_play_selected_file_filelist" swapped="no"/> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="treeview-selection1"> - <property name="mode">multiple</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkBox" id="playTitle"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkLabel" id="playLabel"> + <property name="height_request">40</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="valign">center</property> + <property name="label" translatable="yes">Playlist</property> + <property name="angle">0.01</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="playWindow"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="min_content_width">0</property> + <property name="min_content_height">55</property> + <child> + <object class="GtkTreeView" id="playTree"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hexpand">False</property> + <property name="vexpand">False</property> + <property name="hscroll_policy">natural</property> + <property name="vscroll_policy">natural</property> + <property name="rules_hint">True</property> + <property name="enable_search">False</property> + <property name="search_column">0</property> + <property name="fixed_height_mode">True</property> + <property name="hover_expand">True</property> + <property name="rubber_banding">True</property> + <property name="tooltip_column">0</property> + <signal name="row-activated" handler="museic_gui_action_play_selected_file_playlist" swapped="no"/> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection1"> + <property name="mode">multiple</property> + </object> + </child> + </object> + </child> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> </child> </object> + <packing> + <property name="resize">True</property> + <property name="shrink">False</property> + </packing> </child> </object> <packing> @@ -699,24 +738,12 @@ </object> <packing> <property name="left_attach">0</property> - <property name="top_attach">1</property> + <property name="top_attach">0</property> </packing> </child> </object> <packing> <property name="left_attach">0</property> - <property name="top_attach">2</property> - </packing> - </child> - <child> - <object class="GtkSeparator" id="separator1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_top">10</property> - <property name="margin_bottom">10</property> - </object> - <packing> - <property name="left_attach">0</property> <property name="top_attach">1</property> </packing> </child> @@ -759,13 +786,10 @@ <property name="top_attach">0</property> </packing> </child> - <child> - <placeholder/> - </child> </object> <packing> <property name="left_attach">0</property> - <property name="top_attach">3</property> + <property name="top_attach">2</property> </packing> </child> </object> @@ -786,4 +810,42 @@ <property name="icon_name">view-refresh</property> <signal name="clicked" handler="museic_gui_action_reload_library" swapped="no"/> </object> + <object class="GtkBox" id="statusBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="valign">start</property> + <property name="margin_top">2</property> + <property name="orientation">vertical</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkLabel" id="statusLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">label</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLinkButton" id="statusLabel1"> + <property name="label" translatable="yes">button</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="halign">center</property> + <property name="resize_mode">queue</property> + <property name="relief">none</property> + <property name="focus_on_click">False</property> + <signal name="activate-link" handler="museic_gui_action_show_current_artist" swapped="no"/> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> </interface> Binary files old/MuseIC-2.0.1/data/file_search.png and new/MuseIC-2.0.2/data/file_search.png differ Binary files old/MuseIC-2.0.1/data/multi_files_editor.png and new/MuseIC-2.0.2/data/multi_files_editor.png differ Binary files old/MuseIC-2.0.1/data/museic_screenshoot.png and new/MuseIC-2.0.2/data/museic_screenshoot.png differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/MuseIC-2.0.1/run.sh new/MuseIC-2.0.2/run.sh --- old/MuseIC-2.0.1/run.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/MuseIC-2.0.2/run.sh 2018-08-13 16:05:08.000000000 +0200 @@ -0,0 +1,18 @@ +#!/bin/bash +if [ -e museic ] +then + echo "Removing old 'museic'" + rm museic +fi +valac src/*.vala --pkg=gtk+-3.0 --pkg=gio-2.0 --pkg=gmodule-2.0 --pkg=gstreamer-1.0 --pkg=dbus-glib-1 --pkg=granite -o museic +if [ -e museic ] +then + echo "####################################" + echo " Successfully complied!! " + echo "####################################" + ./museic +else + echo "------------------------------------" + echo " Compilation failed... " + echo "------------------------------------" +fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/MuseIC-2.0.1/src/css/main.css new/MuseIC-2.0.2/src/css/main.css --- old/MuseIC-2.0.1/src/css/main.css 2018-06-14 20:28:05.000000000 +0200 +++ new/MuseIC-2.0.2/src/css/main.css 2018-08-13 16:05:08.000000000 +0200 @@ -7,52 +7,67 @@ .playListStore { } +.filetitle { + border-bottom-width: 1; + border-bottom-style: solid; + border-bottom-color: #a6a6a6; +} + .songtitle { - font-size: 12px; - padding-bottom: 8px; - background: linear-gradient(#F5F5F5, #F5F5F5); - border-color: #F5F5F5; + font-size: 10px; } .songartist { - font-size: 10px; + font-size: 8px; font-weight: bold; - padding-bottom: 16px; - background: linear-gradient(#F5F5F5, #F5F5F5); - border-color: #F5F5F5; + padding: 0; } -.streamprogresbar { - background-color: white; - border: 0; +.songartist * { + color: #444444; + text-decoration: none; } +.filesGridContent { + border-top-width: 1; + border-top-style: solid; + border-top-color: #cccccc; +} .streamtime { } .antButton{ - border-color: white; - background-color: white; + /*border-color: white;*/ + /*background-color: white;*/ + border-right-width: 0px; + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; } .playButton { - border-color: white; - background-color: white; + /*border-color: white;*/ + /*background-color: white;*/ + border-radius: 0px; + border-right-width: 0px; } .segButton { - border-color: white; - background-color: white; + /*border-color: white;*/ + /*background-color: white;*/ + border-radius: 0px; + border-right-width: 0px; } .randButton { /*border-radius: 50%;*/ - border-color: white; + /*border-color: white;*/ + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; } .volumebar { - background-color: white; - border: 0; + /*background-color: white;*/ + /*border: 0;*/ } .filelisttitle { @@ -69,8 +84,8 @@ .addToPlayButton { /*border-radius: 50%;*/ - border-color: white; - background-color: white; + /*border-color: white;*/ + /*background-color: white;*/ } .separator1{ @@ -88,3 +103,7 @@ .footbar { background-color: white; } + +.conf_btn_label { + font-weight: bold; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/MuseIC-2.0.1/src/museic.vala new/MuseIC-2.0.2/src/museic.vala --- old/MuseIC-2.0.1/src/museic.vala 2018-06-14 20:28:05.000000000 +0200 +++ new/MuseIC-2.0.2/src/museic.vala 2018-08-13 16:05:08.000000000 +0200 @@ -386,4 +386,12 @@ return this.streamplayer.volume; } + public int get_used_port() { + return (int)this.museic_server.get_used_port(); + } + + public void save_used_port(int new_port){ + this.museic_server.save_used_port((uint16)new_port); + } + } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/MuseIC-2.0.1/src/museic_gui.vala new/MuseIC-2.0.2/src/museic_gui.vala --- old/MuseIC-2.0.1/src/museic_gui.vala 2018-06-14 20:28:05.000000000 +0200 +++ new/MuseIC-2.0.2/src/museic_gui.vala 2018-08-13 16:05:08.000000000 +0200 @@ -26,6 +26,7 @@ private Gtk.ListStore fileListStore; private Gtk.ListStore playListStore; private MuseicFileList museic_shown_filelist; + private Granite.SeekBar stream_bar; // Aux variables needed to open files private Gtk.Window files_window; private Gtk.FileChooserWidget chooser; @@ -42,7 +43,7 @@ Object (application: app, title: "MuseIC"); museic_app = app; // Define main window - this.load_window_state(); + // this.load_window_state(); this.delete_event.connect(save_window_state); // Load interface from file this.builder = new Gtk.Builder (); @@ -69,14 +70,24 @@ header_bar.show_close_button = true; header_bar.pack_start ((builder.get_object ("openFile") as Gtk.ToolButton)); header_bar.pack_start ((builder.get_object ("addFile") as Gtk.ToolButton)); + // header_bar.pack_start ((builder.get_object ("reload") as Gtk.ToolButton)); header_bar.pack_start ((builder.get_object ("helpRemote") as Gtk.ToolButton)); - // header_bar.pack_end ((builder.get_object ("reload") as Gtk.ToolButton)); - header_bar.set_title("MuseIC"); + header_bar.pack_start ((builder.get_object ("config") as Gtk.ToolButton)); + header_bar.pack_end ((builder.get_object ("boxFileTitle") as Gtk.Box)); + header_bar.set_custom_title((builder.get_object ("statusBox") as Gtk.Box)); header_bar.get_style_context().add_class ("headerbar"); this.set_titlebar (header_bar); // Add main box to window this.add (builder.get_object ("mainW") as Gtk.Grid); this.height_request = 460; + + // Set stream_bar + this.stream_bar = new Granite.SeekBar(0.0); + this.stream_bar.scale.change_value.connect((slider, scroll, new_value) => { + this.museic_app.set_position((float)new_value); + return true; + }); + (this.builder.get_object ("progresBox") as Gtk.Box).pack_start(this.stream_bar, true, true, 0); // Set fileListStore this.fileListStore = new Gtk.ListStore (6, typeof (string), typeof (string), typeof (string), typeof (string), typeof (string), typeof (Gdk.RGBA)); var tree = (this.builder.get_object ("fileTree") as Gtk.TreeView); @@ -122,26 +133,28 @@ this.show_all (); this.show (); // Set some more css classes - (this.builder.get_object ("statusLabel") as Gtk.LinkButton).get_style_context().add_class ("songtitle"); - (this.builder.get_object ("statusLabel") as Gtk.LinkButton).set_label("Select a file to play"); + (this.builder.get_object ("statusLabel") as Gtk.Label).get_style_context().add_class ("songtitle"); + (this.builder.get_object ("statusLabel") as Gtk.Label).set_label("Select a file to play"); (this.builder.get_object ("statusLabel1") as Gtk.LinkButton).get_style_context().add_class ("songartist"); (this.builder.get_object ("statusLabel1") as Gtk.LinkButton).set_label(""); - (this.builder.get_object ("scalebar") as Gtk.Scale).get_style_context().add_class ("streamprogresbar"); - (this.builder.get_object ("timeLabel") as Gtk.Label).get_style_context().add_class ("streamtime"); + (this.builder.get_object ("statusLabel1") as Gtk.LinkButton).hide(); (this.builder.get_object ("antButton") as Gtk.Button).get_style_context().add_class ("antButton"); (this.builder.get_object ("playButton") as Gtk.Button).get_style_context().add_class ("playButton"); (this.builder.get_object ("segButton") as Gtk.Button).get_style_context().add_class ("segButton"); (this.builder.get_object ("randButton") as Gtk.Button).get_style_context().add_class ("randButton"); (this.builder.get_object ("volumebar") as Gtk.Scale).get_style_context().add_class ("volumebar"); (this.builder.get_object ("label1") as Gtk.Label).get_style_context().add_class ("filelisttitle"); - (this.builder.get_object ("label2") as Gtk.Label).get_style_context().add_class ("playlisttitle"); + (this.builder.get_object ("playLabel") as Gtk.Label).get_style_context().add_class ("playlisttitle"); (this.builder.get_object ("addToPlay") as Gtk.Button).get_style_context().add_class ("addToPlayButton"); (this.builder.get_object ("separator1") as Gtk.Separator).get_style_context().add_class ("separator1"); (this.builder.get_object ("statusBox") as Gtk.Box).get_style_context().add_class ("statusBox"); (this.builder.get_object ("progresBox") as Gtk.Box).get_style_context().add_class ("progresBox"); (this.builder.get_object ("statusButtons") as Gtk.Box).get_style_context().add_class ("statusButtons"); (this.builder.get_object ("filelist_chooser") as Gtk.ComboBoxText).get_style_context().add_class ("filelist_chooser"); + (this.builder.get_object ("filesGridContent") as Gtk.Grid).get_style_context().add_class ("filesGridContent"); (this.builder.get_object ("footer") as Gtk.Toolbar).get_style_context().add_class ("footbar"); + (this.builder.get_object ("fileTitle") as Gtk.Box).get_style_context().add_class ("filetitle"); + (this.builder.get_object ("playTitle") as Gtk.Box).get_style_context().add_class ("filetitle"); this.museic_shown_filelist = this.museic_app.get_active_filelist(); // Start time function to update info about stream duration and position each second GLib.Timeout.add_seconds (1, update_stream_status); @@ -359,13 +372,6 @@ return sfiles; } - [CCode(instance_pos=-1)] - public bool action_change_time (Gtk.Scale slider, Gtk.ScrollType scroll, double new_value) { - this.museic_app.set_position((float)new_value); - slider.adjustment.value = new_value; - return true; - } - public void update_files_to_tree() { this.fileListStore.clear (); Gtk.TreeIter iter; @@ -423,20 +429,25 @@ if (!this.museic_app.has_files()) return true; StreamTimeInfo pos_info = this.museic_app.get_position_str(); StreamTimeInfo dur_info = this.museic_app.get_duration_str(); - // Update time label - (this.builder.get_object ("timeLabel") as Gtk.Label).set_label (pos_info.minutes+"/"+dur_info.minutes); - // Update progres bar - double progres = (double)pos_info.nanoseconds/(double)dur_info.nanoseconds; - (this.builder.get_object ("scalebar") as Gtk.Scale).set_value (progres); + + // Update Seek bar info. It will automaticlly update the scale and the labels + this.stream_bar.playback_duration = (double)(dur_info.nanoseconds / 1000000000.0); + this.stream_bar.playback_progress = (double)(pos_info.nanoseconds / 1000000000.0) / this.stream_bar.playback_duration; + // Update status label with filename and album MuseicFile faux = this.museic_app.get_current_file(); string aux; if (faux.album != "unknown") aux = faux.name +" - "+ faux.album; else aux = faux.name; - (builder.get_object ("statusLabel") as Gtk.LinkButton).set_label (aux); + (builder.get_object ("statusLabel") as Gtk.Label).set_label (aux); // Update status label 2 with artist - if (faux.artist != "unknown") aux = faux.artist; - else aux = ""; + if (faux.artist != "unknown") { + (builder.get_object ("statusLabel1") as Gtk.LinkButton).show(); + aux = faux.artist; + } else { + aux = ""; + (builder.get_object ("statusLabel1") as Gtk.LinkButton).hide(); + } (builder.get_object ("statusLabel1") as Gtk.LinkButton).set_label (aux); // Update volume bar (this.builder.get_object ("volumebar") as Gtk.Scale).set_value (this.museic_app.get_stream_volume()); @@ -539,7 +550,7 @@ [CCode(instance_pos=-1)] public void action_help_remote(Gtk.Button button) { - string help_string = "Control MuseIC from any device!\n1. Open your favourite browser\n2. Type "+this.museic_app.museic_server.get_server_info()+"\n3. Control MuseIC playback: play/pause, next, previous, etc.\n\nIn order to be able to connect to MuseIC, both devices must be in the same Wifi network.\n"; + string help_string = "Control MuseIC from any device!\n1. Open your favourite browser\n2. Type "+this.museic_app.museic_server.get_server_info()+"\n3. Control MuseIC playback: play/pause, next, previous, etc.\n\nIn order to be able to connect to MuseIC, both devices must be in the same Wifi network.\n\n\n(hint: if your device can't connect to MuseIC, try changing the listening port in MuseIC configuration.)\n"; var helpw = new Gtk.Popover(button); @@ -553,6 +564,39 @@ helpw.show_all(); } + + [CCode(instance_pos=-1)] + public void action_show_config(Gtk.Button button) { + var confpw = new Gtk.Popover(button); + confpw.set_position(Gtk.PositionType.BOTTOM); + Gtk.Box vbox = new Gtk.Box (Gtk.Orientation.VERTICAL, 1); + vbox.margin = 10; + + Gtk.Label lb = new Gtk.Label("Configuration"); + lb.get_style_context().add_class ("conf_btn_label"); + Gtk.Box hbox = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 1); + hbox.pack_start(lb, true, true, 0); + vbox.pack_start (hbox, true, true, 10); + + hbox = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 1); + Gtk.Label text = new Gtk.Label("MuseIC is listening on port:"); + text.get_style_context().add_class ("conf_btn_text"); + Gtk.Entry entry1 = new Gtk.Entry(); + entry1.get_style_context().add_class ("conf_btn_entry"); + entry1.set_text(this.museic_app.get_used_port().to_string()); + Gtk.Label text2 = new Gtk.Label(" (1024 < port < 65535)"); + hbox.pack_end(text2, true, true, 10); + hbox.pack_end(entry1, false, false, 0); + hbox.pack_end(text, true, true, 10); + vbox.pack_end (hbox, true, true, 0); + + confpw.add(vbox); + confpw.show_all(); + confpw.closed.connect(() => { + this.museic_app.save_used_port(int.parse(entry1.get_text())); + }); + } + [CCode(instance_pos=-1)] public void action_reload_library(Gtk.Button button) { this.museic_app.reload_library(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/MuseIC-2.0.1/src/museic_remote.vala new/MuseIC-2.0.2/src/museic_remote.vala --- old/MuseIC-2.0.1/src/museic_remote.vala 2018-06-14 20:28:05.000000000 +0200 +++ new/MuseIC-2.0.2/src/museic_remote.vala 2018-08-13 16:05:08.000000000 +0200 @@ -3,17 +3,18 @@ private MuseIC app; private SocketService service; private Cancellable cancellable; + public string conf_path; public MuseicServer(MuseIC app) { this.app = app; + this.conf_path = Environment.get_home_dir()+"/.museic/museic_remote_conf"; // Create a new SocketService: this.service = new SocketService (); - // Listen on port 1024 and 1025. + // Listen on configured port. // Source is used as source-identifier. - service.add_inet_port (1024, new Source (1024)); - service.add_inet_port (1025, new Source (1025)); + service.add_inet_port (this.get_used_port(), new Source (this.get_used_port())); // Used to shutdown the program: this.cancellable = new Cancellable (); @@ -24,6 +25,35 @@ this.service.start (); } + public uint16 get_used_port() { + try { + File file = File.new_for_path(this.conf_path); + DataInputStream reader = new DataInputStream(file.read()); + string info = reader.read_line(null); + uint16 port = (uint16) int.parse(info); + return port; + } catch (Error e) { + stderr.printf(e.message); + } + return 1025; + } + + public void save_used_port(uint16 new_port){ + if (new_port > 1024) { + File file; + try { + file = File.new_for_path(this.conf_path); + if (file.query_exists()) file.delete (); + file.create(FileCreateFlags.NONE); + FileIOStream io = file.open_readwrite(); + io.seek (0, SeekType.END); + var writer = new DataOutputStream(io.output_stream); + writer.put_string(new_port.to_string()); + service.add_inet_port (new_port, new Source (new_port)); + } catch (Error e) {stderr.printf(e.message);} + } + } + private bool accept_connection(SocketConnection connection, Object? source_object) { Source source = source_object as Source; @@ -256,7 +286,7 @@ } public string get_server_info() { - return this.resolve_server_address()+":1025"; + return this.resolve_server_address()+":"+this.get_used_port().to_string(); } public string resolve_server_address() {