commit b55e77cec74d05468c5cde83d2364711c1b19bd7 Author: Carlos Martín Nieto Date: 2013-06-21 10:42:26 +0200 Bump version to 1.8.12 NEWS | 10 ++++++++++ configure.ac | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) commit c521f5b62c2cdec26a25568742c2e0157ebf56d5 Author: Carlos Martín Nieto Date: 2013-06-21 02:59:03 +0200 Channel: don't artificially make downloading async Wrap the feed downloading in a task, but don't do it in a method that doesn't call any async methods. src/Channel.cs | 6 +++--- src/ChannelGroup.cs | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) commit c77aa7523bb08546fe539d6eeb87c0354b2f9e6e Merge: a7f6b85 4050b70 Author: Carlos Martín Nieto Date: 2013-06-21 01:42:59 +0200 Merge branch 'groups' commit 4050b706ac8ea2a20b43d33c55e2266ed0939a61 Author: Carlos Martín Nieto Date: 2013-06-21 01:42:02 +0200 ChanneList: refactor drag and drop src/ChannelList.cs | 86 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 45 insertions(+), 41 deletions(-) commit 3bdbe3c5ee81b2470d4bd0a422406f05dc039d5a Author: Carlos Martín Nieto Date: 2013-06-18 23:49:02 +0200 ChannelCollection: only remove a channel's item on explicit removal Moving a channel into a group used to cause us to remove all the items for that channel, causing an NRE when we then try to access the items we assume are there. Make ChannelCollection.Remove() delete these items instead of the ChannelList, as that's not its job. src/Application.cs | 9 +++--- src/ChannelCollection.cs | 76 ++++++++++++++++++++++++++++++------------------ src/ChannelList.cs | 18 +++++------- 3 files changed, 59 insertions(+), 44 deletions(-) commit 9148e521ac54cd17bbdc6bdbb4b16ddcc03883d9 Author: Carlos Martín Nieto Date: 2013-06-18 19:30:54 +0200 ChannelList: fix path comparison Use Path.Equals() instead of '==' to check if two paths are the same. This stops us from removing and re-adding a channel that's dropped at the level where it already was. src/ChannelList.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 290b94de0906a3565c7378ba1e40828ad09e080b Author: Carlos Martín Nieto Date: 2013-06-18 19:04:25 +0200 ChannelList: use our reference to the collection src/ChannelList.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit a7f6b8551653d16bc6b883e6a25c257d21244a78 Author: Carlos Martín Nieto Date: 2013-06-18 15:18:40 +0200 Make sure signals are acted upon on the UI thread Some signals can be made by background threads doing work, such as refreshing a feed. Make sure the Gtk signaling happens inside the UI thread. src/Application.cs | 3 ++- src/ChannelList.cs | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) commit dbfd819817bb157c548f023de8e8324a47103fd1 Author: Carlos Martín Nieto Date: 2013-06-18 14:44:56 +0200 Further reduce the amount of signaling through Application Make the tray icon, item list and item view talk directly instead of setting values through a callback in Application. src/Application.cs | 30 +++++---------------- src/ChannelCollection.cs | 2 +- src/ItemList.cs | 69 ++++++++++++++++++++++++++++++------------------ src/ItemView.cs | 64 ++++++++++++++++++++++++++------------------ src/TrayIcon.cs | 29 +++++++++++++++++++- 5 files changed, 118 insertions(+), 76 deletions(-) commit c7f4fb3904be1248de6c77bfa6cc71c03dea692e Author: Carlos Martín Nieto Date: 2013-06-18 01:21:44 +0200 ItemStore: do away with instance and locking Use a ConcurrentDictionary instead of locking when we want to perform an operation, and load the data explicitly on program start src/Application.cs | 1 + src/Channel.cs | 27 +++++++--------- src/ItemList.cs | 3 +- src/ItemStore.cs | 93 +++++++++++++++++++----------------------------------- 4 files changed, 46 insertions(+), 78 deletions(-) commit 8d07c7e7461c456ce76e0a6d7b042d7c666e8548 Merge: 450d3a4 7b20ec9 Author: Carlos Martín Nieto Date: 2013-06-17 19:43:39 +0200 Merge branch 'notification' commit 7b20ec94c90aa15f4a8cd390c6d7da87eee22749 Author: Carlos Martín Nieto Date: 2013-06-17 19:11:49 +0200 ChannelList, ChannelCollection: communicate directly It's silly for changes in ChannelCollection to go through a myriad of events through Application to affect what the ChannelList shows. Pass the collection directly to the list and set up the notifications so they can talk directly. blam.csproj | 1 + src/Application.cs | 29 +------------ src/ChannelCollection.cs | 62 +++++++++++++++------------ src/ChannelList.cs | 108 +++++++++++++++++++++++++++++++---------------- src/Makefile.am | 1 + 5 files changed, 112 insertions(+), 89 deletions(-) commit 4a82bf8531f4ac1a610df559a03d5501eb181901 Author: Carlos Martín Nieto Date: 2013-06-17 17:57:59 +0200 Channel: implement INotifyPropertyChanged This will hopefully lead to more fine-grained update notifications and less signaling spaghetti. src/Application.cs | 2 - src/Channel.cs | 114 +++++++++++++++++++++++++++-------------------- src/ChannelCollection.cs | 24 ++++++---- src/ChannelDialog.cs | 1 - src/ChannelGroup.cs | 20 ++++++++- src/ChannelList.cs | 23 +++++----- 6 files changed, 113 insertions(+), 71 deletions(-) commit 62648800328e815524af76b1631e1b68f6d0cfe3 Author: Carlos Martín Nieto Date: 2013-06-17 17:01:57 +0200 Item: make unread a property Make it a property and implement INotifyPropertyChanged so we can do more fine-grained updating. src/Application.cs | 2 +- src/Channel.cs | 15 ++++++++------- src/Item.cs | 41 +++++++++++++++++++++++++---------------- src/ItemList.cs | 4 ++-- 4 files changed, 36 insertions(+), 26 deletions(-) commit 450d3a4219bff949ec64091211532bbd34d17cf3 Author: Carlos Martín Nieto Date: 2013-06-16 02:06:55 +0200 ItemView: set the ignore return value earlier Setting it after we attempt to open the url will cause errors to exit the try block without setting it, letting webkit think it should display the target inside out window. Reverse the order to avoid this. src/ItemView.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f97c0c8a57e9d281f71bbefa05bfea44834ecfb6 Author: Carlos Martín Nieto Date: 2013-06-16 02:05:22 +0200 Channel: streamline Update() Use LINQ to express the operations better and give a better overview of what we're doing. src/Channel.cs | 63 +++++++++++++++++++++++++--------------------------------- 1 file changed, 27 insertions(+), 36 deletions(-) commit f2c3938faf7c8aec4785beb87b6708a174b96348 Author: Andrés G. Aragoneses Date: 2013-06-16 13:04:26 +0200 build: add a "run" target It uses the "--debug" flag when using Mono, so if any crashes happen, we can get line numbers. Makefile.am | 3 +++ 1 file changed, 3 insertions(+) commit 43af92499d7b87aae4dc661f39153ec60daea7c6 Author: Andrés G. Aragoneses Date: 2013-06-16 11:17:03 +0200 ChannelCollection: fix NRE that could happen when logging an exception The Console.WriteLine was deferrencing e.InnerException without checking if it was null first. Instead of doing this, we can just use "e.ToString()" which will print inner exceptions by default if they exist. The crash was: Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object at Imendio.Blam.ChannelCollection.LoadFromFile (System.String file) [0x00026] in /home/knocte/Code/blam/src/ChannelCollection.cs:96 at Imendio.Blam.Application..ctor (System.String[] args) [0x000bc] in /home/knocte/Code/blam/src/Application.cs:158 at Imendio.Blam.Application.Main (System.String[] args) [0x0001a] in /home/knocte/Code/blam/src/Application.cs:895 src/ChannelCollection.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 40297efd5e5b5df10a3ca6eb8c6831117b8eaecf Author: Carlos Martín Nieto Date: 2013-06-15 22:45:38 +0200 AddChannelDialog: make OK button sensitive when url comes from the clipboard The button needs to be sensitive if the text comes from the the clipboard as well, instead of only when the user types something. src/AddChannelDialog.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit 43d2b83d9a329ca0bc7f023206a09fdfc4982c59 Author: Carlos Martín Nieto Date: 2013-06-15 21:15:03 +0200 Channel: better handling of downloading the feed Downloading the feed and giving the string to XmlReader doesn't work when the feed is not in utf-8, as the characters have already been interpreted then. As the reason we wanted to have the string was to filter it for invalid characters, tell the XmlReader to not to check characters via options, which provides a much better solution than the ad-hoc one we had until now. blam.csproj | 2 -- src/Channel.cs | 44 +++++++++++++------------------------------- src/Filter.cs | 17 ----------------- src/Makefile.am | 2 -- 4 files changed, 13 insertions(+), 52 deletions(-) commit 2e06c67e54b060835c168931bb5bf482f4409fcc Author: Carlos Martín Nieto Date: 2013-06-15 21:14:07 +0200 ChannelGroup: don't use Parallel That waits synchronously for all the threads to return. Use Thread.WhenAll() which is awaitable. src/ChannelGroup.cs | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) commit bb1142495ea99d343374d5d537686fe5d40cff81 Author: Carlos Martín Nieto Date: 2013-06-15 18:04:08 +0200 ChannelCollection: remove a couple of debug statements src/ChannelCollection.cs | 2 -- 1 file changed, 2 deletions(-) commit c4a47e975f2427e6b1ed08029fec7bb1d000b77c Author: Carlos Martín Nieto Date: 2013-06-15 16:29:50 +0200 Channel: move the update logic into the class Reduce the amount of try-catch blocks we need and simplify the logic. This also brings back ignoring SSL errors which got lost at some point in the past. blam.csproj | 2 +- src/Channel.cs | 48 +++++++++++++++++++++++++++++++++----- src/ChannelGroup.cs | 2 +- src/FeedUpdater.cs | 66 ----------------------------------------------------- src/Filter.cs | 26 +++++++-------------- src/Makefile.am | 2 +- 6 files changed, 53 insertions(+), 93 deletions(-) commit 62f28885734dc3b7eb965414a8e1169a01ebf74d Author: Carlos Martín Nieto Date: 2013-06-15 15:25:19 +0200 ItemList: change save semantics not to restart the timer Switch the databse save semantics from restarting the timer every time something is changed to batching updates in five-minute blocks. If the delayed task already exists, we let it write out our updates as well. src/ChannelCollection.cs | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) commit 5bab70b47d0d9efc20349e9419430b0a1080fc76 Author: Carlos Martín Nieto Date: 2013-06-15 15:25:09 +0200 Don't forget to add GLibSynchronizationContext.cs to automake rules src/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 6902974b58bba3b79c664c5e61a78d055ba1da8e Author: Carlos Martín Nieto Date: 2013-06-15 14:06:14 +0200 ItemList: signal row update when toggling read status Gtk needs to be told that we've updated the item, so do it. blam.csproj | 1 + src/Application.cs | 1 + src/ItemList.cs | 21 +++++++++++++-------- src/Makefile.am | 1 + src/TreeSelectionExtensions.cs | 33 +++++++++++++++++++++++++++++++++ 5 files changed, 49 insertions(+), 8 deletions(-) commit a61384172528ed8651ff8a2c7c8546dd87bbcccc Author: Carlos Martín Nieto Date: 2013-06-15 13:43:33 +0200 Backport GLibSynchronizationContext from gtk-sharp The unreleased version of gtk-sharp provides this class (and automatically set this synchronization context) so C# can use the right context to continue executing after 'await'. Copy this file so we can use it and set the synchronization context after initializing the app so await works correctly. blam.csproj | 1 + src/Application.cs | 2 +- src/GLibSynchronizationContext.cs | 71 +++++++++++++++++++++++++++++++++++++++ src/ItemList.cs | 7 ++-- 4 files changed, 75 insertions(+), 6 deletions(-) commit d42bca857f7daadaa858fd08dd9100cd2edcd8d8 Author: Carlos Martín Nieto Date: 2013-06-15 12:45:04 +0200 build: get distcheck to pass Add the source dir prefix to the sources, make blam out of blam.in with autotools instead of sed and remove blam.exe{,.mdb} when uninstalling. Makefile.am | 3 --- configure.ac | 1 + src/Makefile.am | 12 +++++++++--- 3 files changed, 10 insertions(+), 6 deletions(-) commit 099477340981d5f76f07186a84997112cad0461b Author: Carlos Martín Nieto Date: 2013-06-15 04:08:05 +0200 ItemList: simplify SelectionChanged Use a delay task instead of turning a timer on and off and use early returns instead of using so many levels of if. I'm unsure why the last part causes an error unless put into Glib.Idle, as we should be running in the UI thread. src/ItemList.cs | 82 +++++++++++++++++++++++++++++++-------------------------- 1 file changed, 44 insertions(+), 38 deletions(-) commit fe5b8323d5b44d4988b2517e79a537f8684d76dc Author: Carlos Martín Nieto Date: 2013-06-14 22:24:38 +0200 Get rid of MainLoopEmitter Go explicitly through GLib.Idle.Add when we need it. As a bit of a side-effect, we now actually try to update all the feeds. blam.csproj | 1 - src/Application.cs | 9 ++++++--- src/ChannelCollection.cs | 45 +++++++++++++++++++++++---------------------- src/MainloopEmitter.cs | 45 --------------------------------------------- src/Makefile.am | 1 - src/Opml.cs | 5 ++++- 6 files changed, 33 insertions(+), 73 deletions(-) commit 93d694dc52a4248808dde3a464a0b7f79b94f461 Author: Carlos Martín Nieto Date: 2013-06-15 00:08:03 +0200 Filter: filter ^N (SO) as well This occurs in Dan Kaminski's feed at least. This lets us see it. src/Filter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 06f98a6db95cfc5bb4f5bfc2dfc62d7c623fe65e Author: Carlos Martín Nieto Date: 2013-06-15 00:07:13 +0200 ItemStore: create the XML reader from XmlReader.Create() Doing new XmlTextReader() won't throw an exception if the file doesn't exist. src/ItemStore.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d77bc74a89498d3640927e44c7315bc80984e85c Author: Carlos Martín Nieto Date: 2013-06-14 19:28:14 +0200 Get rid of more GLib.Timeout uses The runtime provides better ways of doing timers and delays than going over to glib. src/Application.cs | 38 +++++++++++--------------- src/ChannelCollection.cs | 70 +++++++++++++++++++++--------------------------- src/ItemStore.cs | 1 - 3 files changed, 45 insertions(+), 64 deletions(-) commit 3f6d90fa86b970a21d3cfab4b5e9f31a8ad3e3ea Author: Carlos Martín Nieto Date: 2013-06-14 14:34:08 +0200 build: use automake to replace the constants in Define.cs This is preferrable to a sed script, and lets distcheck get further. configure.ac | 1 + src/Defines.cs.in | 4 ++-- src/Makefile.am | 6 ------ 3 files changed, 3 insertions(+), 8 deletions(-) commit d0223cc8e6840d327574d21efbe3fda49ae54ca2 Author: Carlos Martín Nieto Date: 2013-06-14 14:13:55 +0200 configure.ac: use mcs if available configure.ac | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 3ad552e168b1f2c05a013cccfa3f182f0f0cb38e Author: Carlos Martín Nieto Date: 2013-06-14 14:00:59 +0200 autogen.sh: set DIE=0 initially A typo had made us set IE=0. This fixes the other side of 487f217366e4. autogen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3d8104d6a40ec2cc1dfd3f2bcc213b1e13663855 Author: Carlos Martín Nieto Date: 2013-06-14 13:56:36 +0200 Update gconf-sharp reference to 2.24 Which currently ships with Debian blam.csproj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 74d2dad4ed4e654ac7f91887f81e3ac7db2667d7 Author: Andrés G. Aragoneses Date: 2013-06-14 17:29:37 +0200 blam.csproj: update, to include configure.ac instead of configure.in Sync with the change in e19655638098a15bd82ac586371fd3f3c25f165e blam.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 50ecdcd4495057a25a9c8267d0bb094c18887115 Author: Andrés G. Aragoneses Date: 2013-06-14 10:04:03 +0200 configure.ac: avoid deprecated use of AM_INIT_AUTOMAKE The way AM_INIT_AUTOMAKE was being used was causing this warning: AM_INIT_AUTOMAKE: two- and three-arguments forms are deprecated. For more info, see: configure.ac:3: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation We now then use AC_INIT and AM_INIT_AUTOMAKE the RightWay(TM). configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e19655638098a15bd82ac586371fd3f3c25f165e Author: Andrés G. Aragoneses Date: 2013-06-14 09:56:04 +0200 autogen.sh: rename configure.in to configure.ac to avoid automake warning The following warning was being thrown by automake: automake: warning: autoconf input should be named 'configure.ac', not 'configure.in' By simply renaming the configure.in script to configure.ac we get rid of it, but we also need to rename the $CONFIGURE variable in autogen.sh so everything keeps working as expected. autogen.sh | 2 +- configure.ac | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ configure.in | 122 ----------------------------------------------------------- 3 files changed, 123 insertions(+), 123 deletions(-) commit 72f2961120875969cf5538b592dba37dddfdf1ac Author: Andrés G. Aragoneses Date: 2013-06-14 09:51:54 +0200 autogen.sh: avoid sed error "read error on stdin: Is a directory" The following line in autogen.sh was causing an error: macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < $coin` "sed: read error on stdin: Is a directory" This line is supposed to look for occurrences of this macro in the configure script, however the $coin variable contained the value ".", not "./configure.in", so the $macrodirs variable was not being populated. After fixing this, however, the $macrodirs variable is still empty (because we don't use AM_ACLOCAL_INCLUDE in 'configure.in') but at least we removed the red herring caused by the unique real usage of the $coin variable (it is also used to extract $dr, which is the dirname of $coin, which maps to "." regardless if $coin is "." or "./configure.in", so everything keeps working as before). autogen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 487f217366e418f3e927cf3611581eb61fcc034c Author: Andrés G. Aragoneses Date: 2013-06-14 08:42:46 +0200 autogen.sh: fix syntax error when checking the $DIE variable This line was throwing this error: "122: test: Illegal number: " Now we use simple concatenation with "x", which is also a good practice in case the variable to check has spaces in it. autogen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7dcc6f20d27d7656511ecefdb4c59f9e8735c2e2 Author: Andrés G. Aragoneses Date: 2013-06-14 08:54:59 +0200 autogen.sh: use the $CONFIGURE variable for "configure.in" occurrences There is already a $CONFIGURE variable set to "configure.in", which we can reuse in some places. This will come in handy in the near future when we rename configure.in to configure.ac (because it's giving a warning about this now). autogen.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 502c3af7b007adef192c66b4dbc09ba84b5770f5 Author: Andrés G. Aragoneses Date: 2013-06-14 08:58:11 +0200 autogen.sh: fix typo made in 0a36f0864e899fff8f03763164725b94c4256cc2 autogen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 37d85d36c84ee285ffc2096b1e4fb5207aca1445 Author: Carlos Martín Nieto Date: 2013-06-14 01:59:12 +0200 Use Task and await for RefreshAsync() and RefreshAllAsync() This is much nicer to work with and keep us in the right context, getting rid of the model and view mismatch. This needs us to increase the sdk level to 4.5. blam.csproj | 1 + src/Application.cs | 3 ++- src/Channel.cs | 13 ++++--------- src/ChannelCollection.cs | 40 ++++++++++++++++++---------------------- src/ChannelGroup.cs | 9 ++------- src/FeedUpdater.cs | 2 -- src/Makefile.am | 2 +- 7 files changed, 28 insertions(+), 42 deletions(-) commit c7382d52c0d1e4264f8f30954d9637acf8970a62 Author: Carlos Martín Nieto Date: 2013-06-13 05:52:20 +0200 Use the runtime's timers instead of glib's src/ItemList.cs | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) commit 27abf522ba42a1ddb462a774878019ddfe780581 Author: Carlos Martín Nieto Date: 2013-06-13 05:49:12 +0200 Compilation fix src/ItemList.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 7920254cfed90d3c9b9a0c64231dcc972a6e944d Author: Andrés G. Aragoneses Date: 2013-06-13 22:35:39 +0200 autogen.sh: don't use the $PROJECT variable This was a left-over from banshee's check_autotool_version() function. (We don't use this variable in this project.) autogen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0a36f0864e899fff8f03763164725b94c4256cc2 Author: Andrés G. Aragoneses Date: 2013-06-13 22:32:52 +0200 autogen.sh: better check for automake and aclocal versions Using the "-x.y" suffix when calling these tools is not a very good way to do this because the user might have higher versions which also work. So we bring the function check_autotools_version() from banshee's autogen.sh script [1], but slightly modified to work with /bin/sh instead of bash. [1] https://git.gnome.org/browse/banshee/tree/autogen.sh Signed-off-by: Carlos Martín Nieto autogen.sh | 54 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 10 deletions(-) commit afcf1d511e1f75ce38ea5d2d29b37db99df02c9f Author: Dimitris Spingos Date: 2013-04-11 07:34:11 +0300 Updated Greek translation po/el.po | 508 ++++++++++++++++++++++++++++++++------------------------------- 1 file changed, 255 insertions(+), 253 deletions(-)