spek

Acoustic spectrum analyser
git clone http://git.hanabi.in/repos/spek.git
Log | Files | Refs | README

commit df52ab83b6625328e7853179bbc11d8486f242de
parent 1a3ced87c4ef6a4c03bf5fa7bacbeec0a71af651
Author: Alexander Kojevnikov <alexander@kojevnikov.com>
Date:   Wed,  7 Jul 2010 18:33:56 +1000

Check for a new version on start up (issue 27)

Diffstat:
Mconfigure.ac | 4++--
Msrc/Makefile.am | 1+
Asrc/spek-message-bar.vala | 82+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/spek-window.vala | 35++++++++++++++++++++++++++++++++++-
Mweb/app.yaml | 5+++++
Aweb/version | 1+
6 files changed, 125 insertions(+), 3 deletions(-)

diff --git a/configure.ac b/configure.ac @@ -24,12 +24,12 @@ AM_PROG_VALAC([0.7.0]) AC_PROG_INSTALL AC_PROG_INTLTOOL([0.35]) -pkg_modules="gtk+-2.0 >= 2.14.0 libavformat libavcodec >= 52.23.0" +pkg_modules="gtk+-2.0 >= 2.18.0 libavformat libavcodec >= 52.23.0" PKG_CHECK_MODULES(SPEK, [$pkg_modules]) AC_SUBST(SPEK_CFLAGS) AC_SUBST(SPEK_LIBS) -SPEK_PACKAGES="--pkg gtk+-2.0 --pkg posix" +SPEK_PACKAGES="--pkg gtk+-2.0 --pkg gio-2.0 --pkg posix" AC_SUBST(SPEK_PACKAGES) AC_CHECK_LIB(m, log10f) diff --git a/src/Makefile.am b/src/Makefile.am @@ -4,6 +4,7 @@ spek_SOURCES = \ spek.vala \ spek-audio.c \ spek-fft.c \ + spek-message-bar.vala \ spek-pipeline.vala \ spek-ruler.vala \ spek-spectrogram.vala \ diff --git a/src/spek-message-bar.vala b/src/spek-message-bar.vala @@ -0,0 +1,81 @@ +/* spek-message-bar.vala + * + * Copyright (C) 2010 Alexander Kojevnikov <alexander@kojevnikov.com> + * + * Spek is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Spek 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 General Public License + * along with Spek. If not, see <http://www.gnu.org/licenses/>. + * + * This class is heavily influenced by its namesake from Banshee. + * The original code by Aaron Bockover is (c) 2008 Novell, Inc. + */ + +using Gtk; + +namespace Spek { + public class MessageBar : HBox { + private Label label; + private Gtk.Window win; + + public MessageBar (string message) { + homogeneous = false; + spacing = 0; + border_width = 6; + + win = new Gtk.Window (WindowType.POPUP); + win.name = "gtk-tooltips"; + win.ensure_style (); + win.style_set.connect (() => style = win.style); + + label = new Label (null); + label.use_markup = true; + label.set_markup (message); + label.ellipsize = Pango.EllipsizeMode.END; + label.xalign = 0f; + var button_box = new HBox (false, 0); + button_box.spacing = 3; + var close_button = new Button (); + close_button.image = new Gtk.Image.from_stock (STOCK_CLOSE, IconSize.MENU); + close_button.relief = ReliefStyle.NONE; + close_button.clicked.connect (() => hide ()); + + pack_start (label, true, true, 0); + pack_start (button_box, false, false, 0); + pack_start (close_button, false, false, 0); + } + + private bool changing_style = false; + private override void style_set (Style? previous_style) { + if (changing_style) { + return; + } + + changing_style = true; + style = win.style; + label.style = style; + changing_style = false; + } + + private override bool expose_event (Gdk.EventExpose event) { + if (!is_drawable ()) { + return false; + } + + var cr = Gdk.cairo_create (event.window); + var color = style.bg[StateType.NORMAL]; + cr.set_source_rgb (color.red / 65535.0, color.green / 65535.0, color.blue / 65535.0); + cr.rectangle (allocation.x, allocation.y, allocation.width, allocation.height); + cr.fill (); + return base.expose_event (event); + } + } +} +\ No newline at end of file diff --git a/src/spek-window.vala b/src/spek-window.vala @@ -23,6 +23,7 @@ namespace Spek { public class Window : Gtk.Window { private const string full_title = _("Spek - Acoustic Spectrum Analyser"); + private MessageBar message_bar; private Spectrogram spectrogram; private string cur_dir; private FileFilter filter_all; @@ -79,6 +80,8 @@ namespace Spek { about.clicked.connect (on_about_clicked); toolbar.insert (about, -1); + message_bar = new MessageBar (_("A new version of Spek is available on <a href=\"http://www.spek-project.org\">www.spek-project.org</a>")); + spectrogram = new Spectrogram (); cur_dir = Environment.get_home_dir (); @@ -96,9 +99,13 @@ namespace Spek { var vbox = new VBox (false, 0); vbox.pack_start (toolbar, false, true, 0); + vbox.pack_start (message_bar, false, true, 0); vbox.pack_start (spectrogram, true, true, 0); add (vbox); - show_all (); + toolbar.show_all (); + spectrogram.show_all (); + vbox.show (); + show (); // Set up Drag and Drop drag_dest_set (this, DestDefaults.ALL, DEST_TARGET_ENTRIES, DragAction.COPY); @@ -107,6 +114,11 @@ namespace Spek { if (file_name != null) { open_file (file_name); } + + try { + Thread.create (check_version, false); + } catch (ThreadError e) { + } } void on_dropped (DragContext cx, int x, int y, SelectionData data, uint info, uint time) { @@ -242,5 +254,26 @@ namespace Spek { "*.wma", "*.wv" }; + + private void * check_version () { + // TODO: don't check on each start up. + var file = File.new_for_uri ("http://www.spek-project.org/version"); + if (!file.query_exists (null)) { + return null; + } + + string version; + try { + var stream = new DataInputStream (file.read (null)); + version = stream.read_line (null, null); + } catch (Error e) { + return null; + } + + if (version != null && version > Config.PACKAGE_VERSION) { + Idle.add (() => { message_bar.show_all (); return false; }); + } + return null; + } } } diff --git a/web/app.yaml b/web/app.yaml @@ -14,6 +14,11 @@ handlers: upload: robots.txt mime_type: text/plain +- url: /version + static_files: version + upload: version + mime_type: text/plain + - url: / static_files: index.html upload: index.html diff --git a/web/version b/web/version @@ -0,0 +1 @@ +0.5