Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

We’re showing branches in this repository, but you can also compare across forks.

...
  • 10 commits
  • 123 files changed
  • 0 commit comments
  • 3 contributors
Commits on Jul 04, 2012
Christian Stadelmann genodeftest Merge pull request #2 from allati/master
[core] Bugfix for Google Reader sync 400 error on too much requests at a time
9e8143d
Commits on Jul 10, 2012
Christian Stadelmann genodeftest [info] updated Readme, section "related projects" ef5deb5
Christian Stadelmann genodeftest Merge branch 'master' of https://github.com/rssowl/RSSOwl.git e2ca9c7
Commits on Mar 15, 2013
Benjamin Pasero bpasero update to 2.1.6 and additional changes 90d38e1
Commits on Mar 22, 2013
Benjamin Pasero bpasero Update README.md edacb68
Benjamin Pasero bpasero Update README.md 8e7198a
Commits on Apr 27, 2013
Benjamin Pasero bpasero udate to latest 6ab45f8
Benjamin Pasero bpasero update 8a078cc
Commits on May 03, 2013
Benjamin Pasero bpasero Release 2.2 4d0d11d
Commits on Dec 30, 2013
Benjamin Pasero bpasero Update for 2.2.1 3069197
Showing with 1,699 additions and 666 deletions.
  1. +15 −7 README.md
  2. +10 −10 org.rssowl.build/build-files/fetchSvnAll.xml
  3. +0 −185 org.rssowl.build/build-files/svn/SVNCLIENTADAPTER-LICENSE
  4. BIN  org.rssowl.build/build-files/svn/ganymed.jar
  5. BIN  org.rssowl.build/build-files/svn/svnClientAdapter.jar
  6. BIN  org.rssowl.build/build-files/svn/svnant.jar
  7. BIN  org.rssowl.build/build-files/svn/svnjavahl.jar
  8. BIN  org.rssowl.build/build-files/svn/svnkit.jar
  9. +2 −2 org.rssowl.build/pluginbuilder.config
  10. +2 −2 org.rssowl.build/releases/HEAD.properties
  11. +9 −9 org.rssowl.build/rssowl.product
  12. +3 −2 org.rssowl.core.tests/Launch RSSOwl 2.0 Tests.launch
  13. +1 −1  org.rssowl.core.tests/META-INF/MANIFEST.MF
  14. +0 −2  org.rssowl.core.tests/src/org/rssowl/core/tests/NetworkTests.java
  15. +3 −1 org.rssowl.core.tests/src/org/rssowl/core/tests/connection/ConnectionTests.java
  16. +31 −6 org.rssowl.core.tests/src/org/rssowl/core/tests/model/ApplicationLayerTest.java
  17. +20 −20 org.rssowl.core.tests/src/org/rssowl/core/tests/model/NewsFilterTest.java
  18. +2 −0  org.rssowl.core.tests/src/org/rssowl/core/tests/ui/CleanUpTests.java
  19. +7 −3 org.rssowl.core.tests/src/org/rssowl/core/tests/ui/FolderNewsMarkTest.java
  20. +1 −1  org.rssowl.core/META-INF/MANIFEST.MF
  21. +3 −1 org.rssowl.core/src/org/rssowl/core/IApplicationService.java
  22. +50 −7 org.rssowl.core/src/org/rssowl/core/connection/PlatformCredentialsProvider.java
  23. +3 −3 org.rssowl.core/src/org/rssowl/core/internal/ApplicationServiceImpl.java
  24. +96 −18 org.rssowl.core/src/org/rssowl/core/internal/LogBridge.java
  25. +9 −1 org.rssowl.core/src/org/rssowl/core/internal/connection/DefaultProtocolHandler.java
  26. +1 −1  org.rssowl.core/src/org/rssowl/core/internal/connection/EasySSLProtocolSocketFactory.java
  27. +8 −0 org.rssowl.core/src/org/rssowl/core/internal/interpreter/DublinCoreNamespaceHandler.java
  28. +6 −3 org.rssowl.core/src/org/rssowl/core/internal/interpreter/RDFInterpreter.java
  29. +6 −3 org.rssowl.core/src/org/rssowl/core/internal/interpreter/RSSInterpreter.java
  30. +7 −2 org.rssowl.core/src/org/rssowl/core/internal/interpreter/json/JSONInterpreter.java
  31. +1 −1  org.rssowl.core/src/org/rssowl/core/internal/interpreter/json/JSONObject.java
  32. +3 −3 org.rssowl.core/src/org/rssowl/core/internal/persist/Feed.java
  33. +19 −1 org.rssowl.core/src/org/rssowl/core/internal/persist/News.java
  34. +1 −1  org.rssowl.core/src/org/rssowl/core/internal/persist/Persistable.java
  35. +2 −1  org.rssowl.core/src/org/rssowl/core/internal/persist/Preference.java
  36. +3 −0  org.rssowl.core/src/org/rssowl/core/internal/persist/pref/DefaultPreferences.java
  37. +1 −2  org.rssowl.core/src/org/rssowl/core/internal/persist/service/DBManager.java
  38. +3 −0  org.rssowl.core/src/org/rssowl/core/persist/pref/Preference.java
  39. +13 −3 org.rssowl.core/src/org/rssowl/core/util/CoreUtils.java
  40. +2 −7 org.rssowl.core/src/org/rssowl/core/util/DateUtils.java
  41. +1 −1  org.rssowl.core/src/org/rssowl/core/util/HTMLFilterReader.java
  42. +0 −1  org.rssowl.core/src/org/rssowl/core/util/Messages.java
  43. +3 −0  org.rssowl.core/src/org/rssowl/core/util/SyncUtils.java
  44. +0 −1  org.rssowl.core/src/org/rssowl/core/util/messages.properties
  45. +1 −1  org.rssowl.feature.eclipse/feature.xml
  46. +1 −1  org.rssowl.feature.tests/feature.xml
  47. +1 −1  org.rssowl.feature/feature.xml
  48. +1 −1  org.rssowl.lib.db4o/META-INF/MANIFEST.MF
  49. +1 −1  org.rssowl.lib.httpclient/META-INF/MANIFEST.MF
  50. +0 −1  org.rssowl.lib.jdom/.settings/org.eclipse.core.resources.prefs
  51. +1 −1  org.rssowl.lib.jdom/META-INF/MANIFEST.MF
  52. +1 −1  org.rssowl.lib.lucene/META-INF/MANIFEST.MF
  53. +4 −4 org.rssowl.ui/Launch RSSOwl 2.0.launch
  54. +1 −1  org.rssowl.ui/META-INF/MANIFEST.MF
  55. +2 −2 org.rssowl.ui/about.ini
  56. +2 −2 org.rssowl.ui/config.ini
  57. BIN  org.rssowl.ui/icons/elcl16/languages.gif
  58. BIN  org.rssowl.ui/icons/obj16/classic_layout.gif
  59. BIN  org.rssowl.ui/icons/obj16/fav_vimeo.png
  60. BIN  org.rssowl.ui/icons/obj16/headlines_layout.gif
  61. BIN  org.rssowl.ui/icons/obj16/list_layout.gif
  62. BIN  org.rssowl.ui/icons/obj16/mono_archive.gif
  63. BIN  org.rssowl.ui/icons/obj16/mono_label.gif
  64. BIN  org.rssowl.ui/icons/obj16/mono_share.gif
  65. BIN  org.rssowl.ui/icons/obj16/mono_sticky.gif
  66. BIN  org.rssowl.ui/icons/obj16/newspaper_layout.gif
  67. BIN  org.rssowl.ui/icons/obj16/share_google_plus.gif
  68. BIN  org.rssowl.ui/icons/obj16/share_pocket.gif
  69. BIN  org.rssowl.ui/icons/obj16/share_readability.gif
  70. BIN  org.rssowl.ui/icons/obj16/vertical_layout.gif
  71. +81 −41 org.rssowl.ui/pack200jars.bat
  72. +5 −1 org.rssowl.ui/plugin.eclipse.properties
  73. +4 −4 org.rssowl.ui/plugin.eclipse.xml
  74. +10 −2 org.rssowl.ui/plugin.properties
  75. +76 −17 org.rssowl.ui/plugin.xml
  76. +6 −5 org.rssowl.ui/rssowl.product
  77. +15 −15 org.rssowl.ui/rssowl_installer.nsi
  78. +24 −8 org.rssowl.ui/src/org/rssowl/ui/internal/ApplicationActionBarAdvisor.java
  79. +4 −1 org.rssowl.ui/src/org/rssowl/ui/internal/ApplicationWorkbenchWindowAdvisor.java
  80. +42 −2 org.rssowl.ui/src/org/rssowl/ui/internal/Controller.java
  81. +22 −0 org.rssowl.ui/src/org/rssowl/ui/internal/FolderNewsMark.java
  82. +18 −0 org.rssowl.ui/src/org/rssowl/ui/internal/OwlUI.java
  83. +1 −1  org.rssowl.ui/src/org/rssowl/ui/internal/PreferencesInitializer.java
  84. +1 −1  org.rssowl.ui/src/org/rssowl/ui/internal/SplashHandler.java
  85. +30 −3 org.rssowl.ui/src/org/rssowl/ui/internal/actions/CopyLinkAction.java
  86. +66 −0 org.rssowl.ui/src/org/rssowl/ui/internal/actions/DownloadLanguagesAction.java
  87. +13 −1 org.rssowl.ui/src/org/rssowl/ui/internal/actions/FindExtensionsAction.java
  88. +1 −1  org.rssowl.ui/src/org/rssowl/ui/internal/actions/MakeNewsStickyAction.java
  89. +9 −0 org.rssowl.ui/src/org/rssowl/ui/internal/actions/MarkTypesReadAction.java
  90. +5 −0 org.rssowl.ui/src/org/rssowl/ui/internal/actions/Messages.java
  91. +5 −2 org.rssowl.ui/src/org/rssowl/ui/internal/actions/ToggleReadStateAction.java
  92. +61 −0 org.rssowl.ui/src/org/rssowl/ui/internal/actions/TranslateRSSOwlAction.java
  93. +195 −0 org.rssowl.ui/src/org/rssowl/ui/internal/actions/UnsubscribeGoogleReaderAction.java
  94. +5 −0 org.rssowl.ui/src/org/rssowl/ui/internal/actions/messages.properties
  95. +9 −1 org.rssowl.ui/src/org/rssowl/ui/internal/dialogs/ConfirmDialog.java
  96. +0 −4 org.rssowl.ui/src/org/rssowl/ui/internal/dialogs/Messages.java
  97. +1 −1  org.rssowl.ui/src/org/rssowl/ui/internal/dialogs/cleanup/CleanUpOptionsPage.java
  98. +9 −4 org.rssowl.ui/src/org/rssowl/ui/internal/dialogs/importer/ImportSourcePage.java
  99. +0 −4 org.rssowl.ui/src/org/rssowl/ui/internal/dialogs/messages.properties
  100. +46 −31 org.rssowl.ui/src/org/rssowl/ui/internal/dialogs/preferences/BrowserPreferencePage.java
  101. +13 −1 org.rssowl.ui/src/org/rssowl/ui/internal/dialogs/preferences/FeedsPreferencePage.java
  102. +1 −0  org.rssowl.ui/src/org/rssowl/ui/internal/dialogs/preferences/Messages.java
  103. +0 −13 org.rssowl.ui/src/org/rssowl/ui/internal/dialogs/preferences/MiscPreferencePage.java
  104. +2 −1  org.rssowl.ui/src/org/rssowl/ui/internal/dialogs/preferences/messages.properties
  105. +11 −0 org.rssowl.ui/src/org/rssowl/ui/internal/dialogs/properties/RetentionPropertyPage.java
  106. +3 −1 org.rssowl.ui/src/org/rssowl/ui/internal/dialogs/welcome/TutorialWizard.java
  107. +13 −13 org.rssowl.ui/src/org/rssowl/ui/internal/dialogs/welcome/messages.properties
  108. +2 −2 org.rssowl.ui/src/org/rssowl/ui/internal/editors/browser/WebBrowserView.java
  109. +116 −4 org.rssowl.ui/src/org/rssowl/ui/internal/editors/feed/FeedView.java
  110. +102 −16 org.rssowl.ui/src/org/rssowl/ui/internal/editors/feed/FilterBar.java
  111. +0 −1  org.rssowl.ui/src/org/rssowl/ui/internal/editors/feed/Messages.java
  112. +52 −6 org.rssowl.ui/src/org/rssowl/ui/internal/editors/feed/NewsBrowserLabelProvider.java
  113. +1 −0  org.rssowl.ui/src/org/rssowl/ui/internal/editors/feed/NewsBrowserViewer.java
  114. +7 −0 org.rssowl.ui/src/org/rssowl/ui/internal/editors/feed/NewsTableViewer.java
  115. +1 −2  org.rssowl.ui/src/org/rssowl/ui/internal/editors/feed/messages.properties
  116. +6 −0 org.rssowl.ui/src/org/rssowl/ui/internal/services/DownloadService.java
  117. +95 −89 org.rssowl.ui/src/org/rssowl/ui/internal/services/SyncService.java
  118. +106 −34 org.rssowl.ui/src/org/rssowl/ui/internal/util/CBrowser.java
  119. +3 −0  org.rssowl.update.sites/addons/site.xml
  120. +1 −1  org.rssowl.update.sites/eclipse/site.xml
  121. +1 −1  org.rssowl.update.sites/nightly/site.xml
  122. +34 −0 org.rssowl.update.sites/nls/site.xml
  123. +2 −2 org.rssowl.update.sites/program/site.xml
22 README.md
View
@@ -4,29 +4,37 @@ RSS Owl is a powerful application to organize, search and read your RSS, RDF & A
Highlights are saved searches, google reader sync, notifications, filters, fast fulltext search and a flexible, clean user interface.
http://rssowl.org/
+Build RSSOwl:
+-------------
+
+Please refer to the description at https://github.com/bpasero/rssowl-target
+
RSSOwl links:
-------------
* SVN: https://rssowl.svn.sourceforge.net/svnroot/rssowl (browse online at http://rssowl.svn.sourceforge.net/viewvc/rssowl/ )
* Web: http://rssowl.org/
* FAQ: http://www.rssowl.org/help
* Forum: https://sourceforge.net/projects/rssowl/forums
-* Site for 2.0 release: http://boreal.rssowl.org/
* Wiki: http://wiki.rssowl.org/index.php/Main_Page
* Tutorials: http://tutorial.rssowl.org/ now obsolete since integrated to RSSOwl under "Help | Tutorial"
-* Auto-generated latest/nightly builds: http://rssowl.pluginbuilder.org/ (usage?)
-* Translations HowTo: http://wiki.rssowl.org/index.php/Translation
-* Build HowTo: http://wiki.rssowl.org/index.php/Build_RSSOwl_2.0
+* Build HowTo: https://github.com/bpasero/rssowl-target
* Eclipse Marketplace: http://marketplace.eclipse.org/content/rssowl-powerful-rss-rdf-atom-news-feed-reader-google-reader-synchronization
-* obsolete RSSOwl 1.* Docs: http://rssowl.org/docs/api/index.html
* Freecode.com: http://freecode.com/projects/rssowl
related projects:
-----------------
* some files for debian: https://github.com/resmo/rssowl-debian
+ * outdated: for RSSOwl 2.0.4
* RSSOwl on getdeb.net: http://www.getdeb.net/software/RSSOwl
+ * maintained by Christoph Korn, https://launchpad.net/~c-korn
+ * http://archive.getdeb.net/getdeb/ubuntu/pool/apps/r/rssowl/
+ * http://www.getdeb.net/software/RSSOwl
* Integration for facebook and Google mail: https://github.com/adv0r/rssowl-integration-fb-gmail
+ * status? contact?
* german translation: https://bitbucket.org/KindOfAutomatic/rssowl-german-translation
-* ? https://code.google.com/p/rssowlspm/
+ * see translation repository here
+* https://code.google.com/p/rssowlspm/
+ * completed/finshed: added some features to RSSOwl and did some academic coding
* forks on github.com: https://github.com/rssowl/RSSOwl/network/members
-See LICENSE file for RSSOwl's License, Eclipse Public License v1.0
+See LICENSE file for RSSOwl's License, Eclipse Public License v1.0
20 org.rssowl.build/build-files/fetchSvnAll.xml
View
@@ -3,43 +3,43 @@
<antcall target="svn.co">
<param name="target" value="features"/>
<param name="element.id" value="org.rssowl"/>
- <param name="project.name" value="/trunk/org.rssowl.feature"/>
+ <param name="project.name" value="/branches/2.1.x/org.rssowl.feature"/>
<param name="url" value="https://rssowl.svn.sourceforge.net/svnroot/rssowl"/>
</antcall>
<antcall target="svn.co">
<param name="target" value="plugins"/>
<param name="element.id" value="org.rssowl.lib.jdom"/>
- <param name="project.name" value="/trunk/org.rssowl.lib.jdom"/>
+ <param name="project.name" value="/branches/2.1.x/org.rssowl.lib.jdom"/>
<param name="url" value="https://rssowl.svn.sourceforge.net/svnroot/rssowl"/>
</antcall>
<antcall target="svn.co">
<param name="target" value="plugins"/>
<param name="element.id" value="org.rssowl.ui"/>
- <param name="project.name" value="/trunk/org.rssowl.ui"/>
+ <param name="project.name" value="/branches/2.1.x/org.rssowl.ui"/>
<param name="url" value="https://rssowl.svn.sourceforge.net/svnroot/rssowl"/>
</antcall>
<antcall target="svn.co">
<param name="target" value="plugins"/>
<param name="element.id" value="org.rssowl.lib.db4o"/>
- <param name="project.name" value="/trunk/org.rssowl.lib.db4o"/>
+ <param name="project.name" value="/branches/2.1.x/org.rssowl.lib.db4o"/>
<param name="url" value="https://rssowl.svn.sourceforge.net/svnroot/rssowl"/>
</antcall>
<antcall target="svn.co">
<param name="target" value="plugins"/>
<param name="element.id" value="org.rssowl.core"/>
- <param name="project.name" value="/trunk/org.rssowl.core"/>
+ <param name="project.name" value="/branches/2.1.x/org.rssowl.core"/>
<param name="url" value="https://rssowl.svn.sourceforge.net/svnroot/rssowl"/>
</antcall>
<antcall target="svn.co">
<param name="target" value="plugins"/>
<param name="element.id" value="org.rssowl.lib.httpclient"/>
- <param name="project.name" value="/trunk/org.rssowl.lib.httpclient"/>
+ <param name="project.name" value="/branches/2.1.x/org.rssowl.lib.httpclient"/>
<param name="url" value="https://rssowl.svn.sourceforge.net/svnroot/rssowl"/>
</antcall>
<antcall target="svn.co">
<param name="target" value="plugins"/>
<param name="element.id" value="org.rssowl.lib.lucene"/>
- <param name="project.name" value="/trunk/org.rssowl.lib.lucene"/>
+ <param name="project.name" value="/branches/2.1.x/org.rssowl.lib.lucene"/>
<param name="url" value="https://rssowl.svn.sourceforge.net/svnroot/rssowl"/>
</antcall>
<antcall target="svn.co">
@@ -57,19 +57,19 @@
<antcall target="svn.co">
<param name="target" value="features"/>
<param name="element.id" value="org.rssowl.tests"/>
- <param name="project.name" value="/trunk/org.rssowl.feature.tests"/>
+ <param name="project.name" value="/branches/2.1.x/org.rssowl.feature.tests"/>
<param name="url" value="https://rssowl.svn.sourceforge.net/svnroot/rssowl"/>
</antcall>
<antcall target="svn.co">
<param name="target" value="plugins"/>
<param name="element.id" value="org.rssowl.core.tests"/>
- <param name="project.name" value="/trunk/org.rssowl.core.tests"/>
+ <param name="project.name" value="/branches/2.1.x/org.rssowl.core.tests"/>
<param name="url" value="https://rssowl.svn.sourceforge.net/svnroot/rssowl"/>
</antcall>
<antcall target="svn.co">
<param name="target" value="features"/>
<param name="element.id" value="org.rssowl.dependencies"/>
- <param name="project.name" value="/trunk/org.rssowl.feature.dependencies"/>
+ <param name="project.name" value="/branches/2.1.x/org.rssowl.feature.dependencies"/>
<param name="url" value="https://rssowl.svn.sourceforge.net/svnroot/rssowl"/>
</antcall>
<antcall target="svn.co">
185 org.rssowl.build/build-files/svn/SVNCLIENTADAPTER-LICENSE
View
@@ -1,185 +0,0 @@
-SVNClientAdapter Library License
-
-This license applies to all portions of SVNClientAdapter library, which
-are not externally-maintained libraries (e.g. JavaHL or JavaSVN).
-
-Such libraries have their own licenses; we recommend you read them, as
-their terms may differ from the terms below.
-
-=============================================================================
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
BIN  org.rssowl.build/build-files/svn/ganymed.jar
View
Binary file not shown
BIN  org.rssowl.build/build-files/svn/svnClientAdapter.jar
View
Binary file not shown
BIN  org.rssowl.build/build-files/svn/svnant.jar
View
Binary file not shown
BIN  org.rssowl.build/build-files/svn/svnjavahl.jar
View
Binary file not shown
BIN  org.rssowl.build/build-files/svn/svnkit.jar
View
Binary file not shown
4 org.rssowl.build/pluginbuilder.config
View
@@ -1,4 +1,4 @@
-#Tue May 17 11:01:29 CEST 2011
+#Fri Aug 19 10:02:04 CEST 2011
autotestsuite.class.exclusions=.*All(Tests|PDE_Tests|_Tests|PDETests).*;.*PerformanceTest.*
pluginbuilder.eclipse.url=http\://www.rssowl.org/dl/target/eclipse-SDK-3.4.2_3.5.2-linux-gtk-x86_64_3.zip
pluginbuilder.feature.urls=http\://www.rssowl.org/dl/target/eclipse-3.4.2_3.5.2-delta-pack_2.zip
@@ -7,7 +7,7 @@ pluginbuilder.server.user=rssowl
pluginbuilder.is.svn=true
autotestsuite.class.inclusions=.*
pluginbuilder.is.runtests=true
-pluginbuilder.svn.url=https\://rssowl.svn.sourceforge.net/svnroot/rssowl/trunk
+pluginbuilder.svn.url=https\://rssowl.svn.sourceforge.net/svnroot/rssowl/branches/2.1.x
autotestsuite.plugin.inclusions=.*(test|tests)$
pluginbuilder.is.cvs=false
pluginbuilder.is.copy=false
4 org.rssowl.build/releases/HEAD.properties
View
@@ -1,6 +1,6 @@
#Written from Plug-in Builder Editor
-#Sun Apr 17 18:43:12 CEST 2011
+#Fri Aug 19 10:02:01 CEST 2011
buildType=N
-version=2.1.0
+version=2.1.2
fetchTag=HEAD
buildTypePresentation=
18 org.rssowl.build/rssowl.product
View
@@ -6,14 +6,14 @@
<aboutInfo>
<image path="/org.rssowl.ui/icons/product/about.gif"/>
<text>
- RSSOwl
-
-Version: 2.1
-Build Id: 2011-07-15
-
-RSSOwl is licensed under the terms of the Eclipse Public License version 1.0.
-http://www.rssowl.org/legal/epl-v10.html
-
+ RSSOwl
+
+Version: 2.1
+Build Id: 2011-07-15
+
+RSSOwl is licensed under the terms of the Eclipse Public License version 1.0.
+http://www.rssowl.org/legal/epl-v10.html
+
(c) Copyright RSSOwl contributors and others 2005, 2011. All rights reserved.
</text>
</aboutInfo>
@@ -73,7 +73,7 @@ RSSOwl Development Team - initial API and implementation
<features>
<feature id="org.eclipse.rcp" version="3.4.200.R342_v20090122-989JESTEbig-SVaL8UJHcYBr4A63"/>
<feature id="org.rssowl.dependencies" version="2.0.0"/>
- <feature id="org.rssowl" version="2.1.0.qualifier"/>
+ <feature id="org.rssowl" version="2.1.2.qualifier"/>
</features>
5 org.rssowl.core.tests/Launch RSSOwl 2.0 Tests.launch
View
@@ -33,11 +33,12 @@
<stringAttribute key="pde.version" value="3.3"/>
<stringAttribute key="product" value="org.rssowl.ui.product"/>
<booleanAttribute key="run_in_ui_thread" value="true"/>
-<stringAttribute key="selected_target_plugins" value="org.eclipse.text@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.core.resources.compatibility@default:false,org.eclipse.ecf.identity@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.eclipse.osgi.services@default:default,org.eclipse.core.resources.win32.x86@default:false,org.eclipse.jface@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.net@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.ecf@default:default,org.eclipse.core.filesystem@default:default,com.ibm.icu@default:default,org.hamcrest.core@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.osgi,org.eclipse.core.databinding.property@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.equinox.security@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.help@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.ui.views@default:default,javax.servlet@default:default,org.eclipse.core.resources@default:default,org.eclipse.update.core.win32@default:false,org.eclipse.core.filesystem.win32.x86@default:false,org.eclipse.equinox.common@default:default,org.eclipse.core.commands@default:default,org.eclipse.equinox.security.win32.x86@default:false,org.eclipse.core.net.win32.x86@default:false,org.eclipse.equinox.preferences@default:default,org.eclipse.core.jobs@default:default,org.eclipse.swt.win32.win32.x86@default:false,org.eclipse.ui.win32@default:false,org.eclipse.swt@default:default,org.eclipse.ui.forms@default:default,org.eclipse.core.runtime@default:true,org.eclipse.equinox.p2.engine@default:default,org.eclipse.update.ui@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.ui@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.update.configurator@default:default,org.eclipse.jface.text@default:default,org.eclipse.equinox.concurrent@default:default,org.junit4@default:default,org.eclipse.ant.core@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.app@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.variables@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.update.core@default:default,org.eclipse.ui.ide@default:default"/>
-<stringAttribute key="selected_workspace_plugins" value="org.rssowl.lib.httpclient@default:default,org.rssowl.ui@default:default,org.rssowl.core@default:default,org.rssowl.core.tests@default:default,org.rssowl.lib.db4o@default:default,org.rssowl.lib.lucene@default:default,org.rssowl.lib.jdom@default:default"/>
+<stringAttribute key="selected_target_plugins" value="com.ibm.icu.base@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.net.win32.x86@default:false,org.eclipse.core.net@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime@default:true,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security.win32.x86@default:false,org.eclipse.equinox.security@default:default,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt.win32.win32.x86@default:false,org.eclipse.swt@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.eclipse.update.configurator@3:true,org.eclipse.update.core.win32@default:false,org.eclipse.update.core@default:default,org.eclipse.update.ui@default:default,org.junit4@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.rssowl.core.tests@default:default,org.rssowl.core@default:default,org.rssowl.lib.db4o@default:default,org.rssowl.lib.httpclient@default:default,org.rssowl.lib.jdom@default:default,org.rssowl.lib.lucene@default:default,org.rssowl.ui@default:default"/>
<booleanAttribute key="show_selected_only" value="false"/>
<stringAttribute key="templateConfig" value="${target_home}\configuration\config.ini"/>
<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfig" value="true"/>
<booleanAttribute key="useDefaultConfigArea" value="false"/>
<booleanAttribute key="useProduct" value="false"/>
2  org.rssowl.core.tests/META-INF/MANIFEST.MF
View
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Tests Plug-in
Bundle-SymbolicName: org.rssowl.core.tests;singleton:=true
-Bundle-Version: 2.1.0.qualifier
+Bundle-Version: 2.2.1.qualifier
Bundle-Vendor: RSSOwl.org
Require-Bundle: org.eclipse.core.runtime,
org.rssowl.lib.jdom,
2  org.rssowl.core.tests/src/org/rssowl/core/tests/NetworkTests.java
View
@@ -28,7 +28,6 @@
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import org.rssowl.core.tests.connection.ConnectionTests;
-import org.rssowl.core.tests.connection.SyncConnectionTests;
import org.rssowl.core.tests.controller.ControllerTestNetwork;
/**
@@ -40,7 +39,6 @@
@RunWith(Suite.class)
@SuiteClasses({
ConnectionTests.class,
- SyncConnectionTests.class,
ControllerTestNetwork.class
})
public class NetworkTests {}
4 org.rssowl.core.tests/src/org/rssowl/core/tests/connection/ConnectionTests.java
View
@@ -37,6 +37,7 @@
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.rssowl.core.Owl;
import org.rssowl.core.connection.AuthenticationRequiredException;
@@ -667,6 +668,7 @@ public void testWebsite() throws Exception {
* @throws Exception
*/
@Test
+ @Ignore
public void testGoogleReaderSync() throws Exception {
String authToken = SyncUtils.getGoogleAuthToken("rssowl@mailinator.com", "rssowl.org", true, new NullProgressMonitor());
assertNotNull(authToken);
@@ -727,7 +729,7 @@ public void testNewsTransformer() throws Exception {
*/
@Test
public void testNewsTransformerEmbedded() throws Exception {
- String link = "http://www.rssowl.org/node/258";
+ String link = "http://www.rssowl.org/help";
String transformedUrl = Controller.getDefault().getEmbeddedTransformedUrl(link);
InputStream inS = Owl.getConnectionService().getHandler(new URI(transformedUrl)).openStream(new URI(transformedUrl), null, new HashMap<Object, Object>());
37 org.rssowl.core.tests/src/org/rssowl/core/tests/model/ApplicationLayerTest.java
View
@@ -129,7 +129,7 @@ public void testHandleReloadedWithAsyncLoadingOfEquivalentNews() throws Exceptio
feed1 = fFactory.createFeed(null, new URI("http://www.feed1.com"));
INews news1 = fFactory.createNews(null, feed1, new Date());
news1.setLink(newsLink);
- fAppService.handleFeedReload(mark1, feed1, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(mark1, feed1, null, false, true, new NullProgressMonitor());
assertEquals(INews.State.READ, DynamicDAO.load(INews.class, news1.getId()).getState());
}
@@ -152,13 +152,13 @@ public void testBookMarkLastNewNewsDateIsSetDuringReload() throws Exception {
long time = System.currentTimeMillis();
feed1 = fFactory.createFeed(null, new URI("http://www.feed1.com"));
fFactory.createNews(null, feed1, new Date());
- fAppService.handleFeedReload(mark1, feed1, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(mark1, feed1, null, false, true, new NullProgressMonitor());
assertNotNull(mark1.getMostRecentNewsDate());
long lastUpdatedDate = mark1.getMostRecentNewsDate().getTime();
assertTrue(time <= lastUpdatedDate);
feed1 = fFactory.createFeed(null, new URI("http://www.feed1.com"));
- fAppService.handleFeedReload(mark1, feed1, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(mark1, feed1, null, false, true, new NullProgressMonitor());
assertEquals(lastUpdatedDate, mark1.getMostRecentNewsDate().getTime());
}
@@ -182,7 +182,7 @@ public void testHandleFeedReloadWithRetentionStrategy() throws Exception {
news.setState(INews.State.READ);
Owl.getPreferenceService().getEntityScope(mark).putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);
- fAppService.handleFeedReload(mark, emptyFeed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(mark, emptyFeed, null, false, true, new NullProgressMonitor());
feed = null;
System.gc();
@@ -193,6 +193,31 @@ public void testHandleFeedReloadWithRetentionStrategy() throws Exception {
assertEquals(INews.State.DELETED, DynamicDAO.load(INews.class, news.getId()).getState());
}
+ @Test
+ public void testHandleFeedReloadWithoutRetentionStrategy() throws Exception {
+ IFeed feed = fFactory.createFeed(null, new URI("http://www.rssowl.org"));
+ IFolder folder = fFactory.createFolder(null, null, "Folder");
+ IBookMark mark = fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "Mark");
+ DynamicDAO.save(feed);
+ FeedReference feedRef = new FeedReference(feed.getId());
+ DynamicDAO.save(folder);
+
+ IFeed emptyFeed = fFactory.createFeed(null, feed.getLink());
+ INews news = fFactory.createNews(null, emptyFeed, new Date());
+ news.setState(INews.State.READ);
+
+ Owl.getPreferenceService().getEntityScope(mark).putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);
+ fAppService.handleFeedReload(mark, emptyFeed, null, false, false, new NullProgressMonitor());
+
+ feed = null;
+ System.gc();
+
+ feed = feedRef.resolve();
+ assertEquals(1, feed.getNews().size());
+ assertEquals(1, feed.getVisibleNews().size());
+ assertEquals(INews.State.READ, DynamicDAO.load(INews.class, news.getId()).getState());
+ }
+
/**
* Tests that Feed#mergeNews(List, boolean) works properly during
* handleFeedReload in the fast path when there are many news to be removed.
@@ -225,7 +250,7 @@ public void testHandleFeedReloadWithNewsToCleanUpBiggerThanTwenty() throws Excep
IFeed emptyFeed = fFactory.createFeed(null, feed.getLink());
- fAppService.handleFeedReload(mark, emptyFeed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(mark, emptyFeed, null, false, true, new NullProgressMonitor());
feed = null;
System.gc();
@@ -267,7 +292,7 @@ public void entitiesUpdated(Set<NewsEvent> events) {
}
};
DynamicDAO.addEntityListener(INews.class, newsListener);
- fAppService.handleFeedReload(mark, emptyFeed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(mark, emptyFeed, null, false, true, new NullProgressMonitor());
} finally {
if (newsListener != null)
DynamicDAO.removeEntityListener(INews.class, newsListener);
40 org.rssowl.core.tests/src/org/rssowl/core/tests/model/NewsFilterTest.java
View
@@ -133,7 +133,7 @@ public void filterApplied(ISearchFilter f, Collection<INews> news) {
DynamicDAO.addEntityListener(ISearchFilter.class, listener);
try {
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
assertTrue(listenerCalled.get());
@@ -174,7 +174,7 @@ public void test_MarkUnread_MatchAll() throws Exception {
DynamicDAO.save(filter);
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm.getFeedLinkReference().resolve().getNews();
assertEquals(3, bm.getNewsCount(EnumSet.of(INews.State.UNREAD)));
@@ -210,7 +210,7 @@ public void test_MarkSticky_MatchAll() throws Exception {
DynamicDAO.save(filter);
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm.getFeedLinkReference().resolve().getNews();
assertEquals(3, bm.getNewsCount(EnumSet.of(INews.State.NEW)));
@@ -250,7 +250,7 @@ public void test_AddLabel_MatchAll() throws Exception {
DynamicDAO.save(filter);
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm.getFeedLinkReference().resolve().getNews();
assertEquals(3, news.size());
@@ -288,7 +288,7 @@ public void test_Delete_MatchAll() throws Exception {
DynamicDAO.save(filter);
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm.getFeedLinkReference().resolve().getNews();
assertEquals(3, news.size());
@@ -329,7 +329,7 @@ public void test_CopyNews_MatchAll() throws Exception {
DynamicDAO.save(filter);
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm.getFeedLinkReference().resolve().getNews();
assertEquals(3, news.size());
@@ -379,7 +379,7 @@ public void test_MoveNews_MatchAll() throws Exception {
DynamicDAO.save(filter);
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm.getFeedLinkReference().resolve().getNews();
assertEquals(3, news.size());
@@ -430,7 +430,7 @@ public void test_MoveNews_MatchAll_RunAllActions() throws Exception {
DynamicDAO.save(filter);
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm.getFeedLinkReference().resolve().getNews();
assertEquals(3, news.size());
@@ -495,7 +495,7 @@ public void testStopFilter() throws Exception {
DynamicDAO.save(filter);
}
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm.getFeedLinkReference().resolve().getNews();
assertEquals(3, news.size());
@@ -558,7 +558,7 @@ public void testDisabledFilter() throws Exception {
DynamicDAO.save(filter);
}
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm.getFeedLinkReference().resolve().getNews();
assertEquals(3, news.size());
@@ -619,7 +619,7 @@ public void testFilterOrder_AllNews() throws Exception {
DynamicDAO.save(filter);
}
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm.getFeedLinkReference().resolve().getNews();
assertEquals(3, news.size());
@@ -726,7 +726,7 @@ public void filterApplied(ISearchFilter f, Collection<INews> news) {
DynamicDAO.addEntityListener(ISearchFilter.class, listener);
try {
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
} finally {
DynamicDAO.removeEntityListener(ISearchFilter.class, listener);
}
@@ -836,7 +836,7 @@ public void testFilterAndRetention_Count() throws Exception {
DynamicDAO.save(filter);
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm.getFeedLinkReference().resolve().getNews();
assertEquals(3, news.size());
@@ -899,7 +899,7 @@ public void testFilterAndRetention_Age() throws Exception {
DynamicDAO.save(filter);
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm.getFeedLinkReference().resolve().getNews();
assertEquals(3, news.size());
@@ -943,7 +943,7 @@ public void testSimpleFilterOnNewsWithDescription() throws Exception {
DynamicDAO.save(filter);
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm.getFeedLinkReference().resolve().getNews();
assertEquals(3, news.size());
@@ -987,7 +987,7 @@ public void testComplexFilterOnNewsWithDescription() throws Exception {
DynamicDAO.save(filter);
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm.getFeedLinkReference().resolve().getNews();
assertEquals(3, news.size());
@@ -1037,7 +1037,7 @@ public void testFilterOnDuplicateNews() throws Exception {
DynamicDAO.save(filter);
- fAppService.handleFeedReload(bm2, feed2, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm2, feed2, null, false, true, new NullProgressMonitor());
List<INews> news = bm2.getFeedLinkReference().resolve().getNews();
assertEquals(1, news.size());
@@ -1081,7 +1081,7 @@ public void testScopeFilter_Matching() throws Exception {
DynamicDAO.save(filter);
- fAppService.handleFeedReload(bm1, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm1, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm1.getFeedLinkReference().resolve().getNews();
assertEquals(3, bm1.getNewsCount(EnumSet.of(INews.State.READ)));
@@ -1122,7 +1122,7 @@ public void testScopeFilter_NotMatching() throws Exception {
DynamicDAO.save(filter);
- fAppService.handleFeedReload(bm1, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm1, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm1.getFeedLinkReference().resolve().getNews();
assertEquals(0, bm1.getNewsCount(EnumSet.of(INews.State.READ)));
@@ -1162,7 +1162,7 @@ public void test_MoveNewsToInvalidLocation_MatchAll() throws Exception {
DynamicDAO.save(filter);
- fAppService.handleFeedReload(bm, feed, null, false, new NullProgressMonitor());
+ fAppService.handleFeedReload(bm, feed, null, false, true, new NullProgressMonitor());
List<INews> news = bm.getFeedLinkReference().resolve().getNews();
assertEquals(3, news.size());
2  org.rssowl.core.tests/src/org/rssowl/core/tests/ui/CleanUpTests.java
View
@@ -28,6 +28,7 @@
import org.eclipse.core.runtime.NullProgressMonitor;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.rssowl.core.Owl;
import org.rssowl.core.internal.persist.service.PersistenceServiceImpl;
@@ -974,6 +975,7 @@ public void testCleanUpNewsByAgeAndCount() throws Exception {
* @throws Exception
*/
@Test
+ @Ignore
public void testCleanUpBookmarksBySynchronization() throws Exception {
IFolder rootFolder = fFactory.createFolder(null, null, "Root");
DynamicDAO.save(rootFolder);
10 org.rssowl.core.tests/src/org/rssowl/core/tests/ui/FolderNewsMarkTest.java
View
@@ -33,6 +33,7 @@
import org.rssowl.core.Owl;
import org.rssowl.core.internal.persist.News;
import org.rssowl.core.internal.persist.service.PersistenceServiceImpl;
+import org.rssowl.core.persist.IBookMark;
import org.rssowl.core.persist.IFeed;
import org.rssowl.core.persist.IFolder;
import org.rssowl.core.persist.ILabel;
@@ -91,7 +92,7 @@ public void testSimpleFolderNewsMark() throws Exception {
news.setState(INews.State.READ);
DynamicDAO.save(feed);
- fFactory.createBookMark(null, childFolder, new FeedLinkReference(feed.getLink()), "Mark");
+ IBookMark bookMark = fFactory.createBookMark(null, childFolder, new FeedLinkReference(feed.getLink()), "Mark");
folder = DynamicDAO.save(folder);
FolderNewsMark mark = new FolderNewsMark(childFolder);
@@ -99,6 +100,7 @@ public void testSimpleFolderNewsMark() throws Exception {
assertEquals(childFolder, mark.getFolder());
assertEquals("bar", mark.getProperty("foo"));
assertTrue(Long.valueOf(mark.toReference().getId()).equals(childFolder.getId()));
+ assertTrue(mark.contains(bookMark));
waitForIndexer();
mark.resolve(NewsFilter.Type.SHOW_ALL, null);
@@ -123,7 +125,7 @@ public void testComplexFolderNewsMark() throws Exception {
news3.setState(INews.State.READ);
DynamicDAO.save(feed);
- fFactory.createBookMark(null, childFolder, new FeedLinkReference(feed.getLink()), "Mark");
+ IBookMark bookMark1 = fFactory.createBookMark(null, childFolder, new FeedLinkReference(feed.getLink()), "Mark");
IFeed otherFeed = fFactory.createFeed(null, new URI("otherfeed"));
INews othernews1 = fFactory.createNews(null, otherFeed, new Date());
@@ -134,7 +136,7 @@ public void testComplexFolderNewsMark() throws Exception {
othernews3.setState(INews.State.READ);
DynamicDAO.save(otherFeed);
- fFactory.createBookMark(null, folder, new FeedLinkReference(otherFeed.getLink()), "Other Mark");
+ IBookMark bookMark2 = fFactory.createBookMark(null, folder, new FeedLinkReference(otherFeed.getLink()), "Other Mark");
INewsBin bin = fFactory.createNewsBin(null, childFolder, "bin");
DynamicDAO.save(bin);
@@ -156,6 +158,8 @@ public void testComplexFolderNewsMark() throws Exception {
Controller.getDefault().getSavedSearchService().updateSavedSearches(true);
FolderNewsMark mark = new FolderNewsMark(childFolder);
+ assertTrue(mark.contains(bookMark1));
+ assertFalse(mark.contains(bookMark2));
mark.resolve(NewsFilter.Type.SHOW_ALL, null);
{
2  org.rssowl.core/META-INF/MANIFEST.MF
View
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: org.rssowl.core;singleton:=true
-Bundle-Version: 2.1.0.qualifier
+Bundle-Version: 2.2.1.qualifier
Bundle-Activator: org.rssowl.core.internal.Activator
Eclipse-RegisterBuddy: org.rssowl.lib.db4o, org.rssowl.lib.httpclient
Require-Bundle: org.eclipse.core.runtime,
4 org.rssowl.core/src/org/rssowl/core/IApplicationService.java
View
@@ -57,7 +57,9 @@
* @param deleteConditionalGet if <code>true</code> an existing
* IConditionalGet object associated with the IFeed will be deleted as part of
* this operation.
+ * @param runRetention if <code>true</code> causes the method to perform clean
+ * up of the feed and false otherwise.
* @param monitor a monitor to show progress and react on cancellation.
*/
- void handleFeedReload(IBookMark bookMark, IFeed interpretedFeed, IConditionalGet conditionalGet, boolean deleteConditionalGet, IProgressMonitor monitor);
+ void handleFeedReload(IBookMark bookMark, IFeed interpretedFeed, IConditionalGet conditionalGet, boolean deleteConditionalGet, boolean runRetention, IProgressMonitor monitor);
}
57 org.rssowl.core/src/org/rssowl/core/connection/PlatformCredentialsProvider.java
View
@@ -39,6 +39,8 @@
import org.rssowl.core.internal.InternalOwl;
import org.rssowl.core.internal.persist.pref.DefaultPreferences;
import org.rssowl.core.persist.pref.IPreferenceScope;
+import org.rssowl.core.util.Pair;
+import org.rssowl.core.util.StringUtils;
import org.rssowl.core.util.URIUtils;
import java.io.IOException;
@@ -50,6 +52,7 @@
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import java.util.StringTokenizer;
/**
* The default implementation of the ICredentialsProvider retrieves
@@ -84,6 +87,15 @@
/* Unique Key to store Domains */
private static final String DOMAIN = "org.rssowl.core.connection.auth.Domain"; //$NON-NLS-1$
+ /* Separator between Domain and Username */
+ private static final String DOMAIN_SEPARATOR = "\\"; //$NON-NLS-1$
+
+ /* System Property to enable NTLM Proxy support */
+ private static final String ENABLE_NTLM_PROXY = "enableNtlmProxy"; //$NON-NLS-1$
+
+ /* Flag for NTLM Proxy Support controlled through System Property */
+ private static final boolean NTLM_PROXY_ENABLED = (System.getProperty(ENABLE_NTLM_PROXY) != null);
+
/* Default Realm being used to store credentials */
private static final String REALM = ""; //$NON-NLS-1$
@@ -273,25 +285,33 @@ public IProxyCredentials getProxyCredentials(URI link) {
/* Retrieve Proxy Data */
final IProxyData proxyData = proxyService.getProxyDataForHost(host, isSSL ? IProxyData.HTTPS_PROXY_TYPE : IProxyData.HTTP_PROXY_TYPE);
if (proxyData != null) {
+
+ /* Look for Domain as part of Username to support NTLM Proxy */
+ final String proxyHost = proxyData.getHost();
+ final int proxyPort = proxyData.getPort();
+ final Pair<String /* Username */, String /* Domain */> proxyUserAndDomain = splitUserAndDomain(proxyData.getUserId());
+ final String proxyPassword = proxyData.getPassword();
+
+ /* Return as IProxyCredentials Object */
return new IProxyCredentials() {
public String getHost() {
- return proxyData.getHost();
+ return proxyHost;
}
public int getPort() {
- return proxyData.getPort();
+ return proxyPort;
}
- public String getDomain() {
- return null;
+ public String getUsername() {
+ return proxyUserAndDomain.getFirst();
}
public String getPassword() {
- return proxyData.getPassword();
+ return proxyPassword;
}
- public String getUsername() {
- return proxyData.getUserId();
+ public String getDomain() {
+ return proxyUserAndDomain.getSecond();
}
};
}
@@ -300,6 +320,29 @@ public String getUsername() {
return null;
}
+ private Pair<String /* Username */, String /* Domain */> splitUserAndDomain(String username) {
+ if (NTLM_PROXY_ENABLED && StringUtils.isSet(username) && username.contains(DOMAIN_SEPARATOR)) {
+ String user = null;
+ String domain = null;
+
+ StringTokenizer tokenizer = new StringTokenizer(username, DOMAIN_SEPARATOR);
+ while (tokenizer.hasMoreTokens()) {
+ String token = tokenizer.nextToken();
+ if (StringUtils.isSet(token)) {
+ if (domain == null)
+ domain = token;
+ else if (user == null)
+ user = token;
+ }
+ }
+
+ if (StringUtils.isSet(user) && StringUtils.isSet(domain))
+ return Pair.create(user, domain);
+ }
+
+ return Pair.create(username, null);
+ }
+
/*
* @see
* org.rssowl.core.connection.ICredentialsProvider#setAuthCredentials(org.
6 org.rssowl.core/src/org/rssowl/core/internal/ApplicationServiceImpl.java
View
@@ -160,10 +160,10 @@ private void loadNewsActions() {
* @see
* org.rssowl.core.IApplicationService#handleFeedReload(org.rssowl.core.persist
* .IBookMark, org.rssowl.core.persist.IFeed,
- * org.rssowl.core.persist.IConditionalGet, boolean,
+ * org.rssowl.core.persist.IConditionalGet, boolean, boolean,
* org.eclipse.core.runtime.IProgressMonitor)
*/
- public final void handleFeedReload(final IBookMark bookMark, IFeed interpretedFeed, IConditionalGet conditionalGet, boolean deleteConditionalGet, final IProgressMonitor monitor) {
+ public final void handleFeedReload(final IBookMark bookMark, IFeed interpretedFeed, IConditionalGet conditionalGet, boolean deleteConditionalGet, boolean runRetention, final IProgressMonitor monitor) {
fWriteLock.lock();
MergeResult mergeResult = null;
try {
@@ -326,7 +326,7 @@ public void run() throws Exception { //See Bug 1216 (NPE in ModelSearchImpl.getC
return;
/* Retention Policy */
- final List<INews> deletedNews = RetentionStrategy.process(bookMark, feed);
+ final List<INews> deletedNews = runRetention ? RetentionStrategy.process(bookMark, feed) : Collections.<INews>emptyList();
for (INews news : deletedNews)
mergeResult.addUpdatedObject(news);
114 org.rssowl.core/src/org/rssowl/core/internal/LogBridge.java
View
@@ -26,6 +26,8 @@
import org.apache.commons.logging.Log;
import org.eclipse.core.runtime.IStatus;
+import org.rssowl.core.util.CoreUtils;
+import org.rssowl.core.util.StringUtils;
/**
* Implementation of <code>Log</code> that writes error and fatal messages to
@@ -35,15 +37,44 @@
*/
public class LogBridge implements Log {
+ /* System Properties to Control Logging Levels */
+ private static final String DEBUG_PROPERTY = "rssowl.http.debug"; //$NON-NLS-1$
+ private static final String TRACE_PROPERTY = "rssowl.http.trace"; //$NON-NLS-1$
+ private static final String INFO_PROPERTY = "rssowl.http.info"; //$NON-NLS-1$
+ private static final String WARN_PROPERTY = "rssowl.http.warn"; //$NON-NLS-1$
+
+ private final boolean fDebug;
+ private final boolean fTrace;
+ private final boolean fInfo;
+ private final boolean fWarn;
+ private final String fNl;
+
+ private enum Level {
+ INFO, WARNING, ERROR
+ }
+
/** Keep for reflection */
- public LogBridge() {}
+ public LogBridge() {
+ this(null);
+ }
/**
* Keep for reflection
*
* @param str the class using this log
*/
- public LogBridge(String str) {}
+ public LogBridge(String str) {
+ fDebug = System.getProperty(DEBUG_PROPERTY) != null;
+ fTrace = System.getProperty(TRACE_PROPERTY) != null;
+ fInfo = System.getProperty(INFO_PROPERTY) != null;
+ fWarn = System.getProperty(WARN_PROPERTY) != null;
+
+ String nl = System.getProperty("line.separator"); //$NON-NLS-1$
+ if (!StringUtils.isSet(nl))
+ nl = "\n"; //$NON-NLS-1$
+
+ fNl = nl;
+ }
/*
* @see org.apache.commons.logging.impl.NoOpLog#error(java.lang.Object,
@@ -75,7 +106,19 @@ public void fatal(Object message) {
logError(message, null);
}
+ private void logInfo(Object message, Throwable t) {
+ logStatus(message, t, Level.INFO);
+ }
+
+ private void logWarning(Object message, Throwable t) {
+ logStatus(message, t, Level.WARNING);
+ }
+
private void logError(Object message, Throwable t) {
+ logStatus(message, t, Level.ERROR);
+ }
+
+ private void logStatus(Object message, Throwable t, Level level) {
if (message instanceof String || t instanceof Exception) {
String msg = null;
if (message instanceof String)
@@ -88,10 +131,21 @@ private void logError(Object message, Throwable t) {
if (msg == null && e != null && e.getMessage() != null)
msg = e.getMessage();
- Activator activator = Activator.getDefault();
- if (activator != null) {
- IStatus status = activator.createErrorStatus(msg, e);
- activator.getLog().log(status);
+ /* Write Info and Warning to Log Directly */
+ if (level == Level.INFO || level == Level.WARNING) {
+ if (StringUtils.isSet(msg)) {
+ CoreUtils.appendLogMessage(msg);
+ CoreUtils.appendLogMessage(fNl);
+ }
+ }
+
+ /* Log Error Status for Errors */
+ else {
+ Activator activator = Activator.getDefault();
+ if (activator != null) {
+ IStatus status = activator.createErrorStatus(msg, e);
+ activator.getLog().log(status);
+ }
}
}
}
@@ -99,52 +153,76 @@ private void logError(Object message, Throwable t) {
/*
* @see org.apache.commons.logging.Log#debug(java.lang.Object)
*/
- public void debug(Object message) {}
+ public void debug(Object message) {
+ if (isDebugEnabled())
+ logInfo(message, null);
+ }
/*
* @see org.apache.commons.logging.Log#debug(java.lang.Object,
* java.lang.Throwable)
*/
- public void debug(Object message, Throwable t) {}
+ public void debug(Object message, Throwable t) {
+ if (isDebugEnabled())
+ logInfo(message, t);
+ }
/*
* @see org.apache.commons.logging.Log#info(java.lang.Object)
*/
- public void info(Object message) {}
+ public void info(Object message) {
+ if (isInfoEnabled())
+ logInfo(message, null);
+ }
/*
* @see org.apache.commons.logging.Log#info(java.lang.Object,
* java.lang.Throwable)
*/
- public void info(Object message, Throwable t) {}
+ public void info(Object message, Throwable t) {
+ if (isInfoEnabled())
+ logInfo(message, t);
+ }
/*
* @see org.apache.commons.logging.Log#warn(java.lang.Object)
*/
- public void warn(Object message) {}
+ public void warn(Object message) {
+ if (isWarnEnabled())
+ logWarning(message, null);
+ }
/*
* @see org.apache.commons.logging.Log#warn(java.lang.Object,
* java.lang.Throwable)
*/
- public void warn(Object message, Throwable t) {}
+ public void warn(Object message, Throwable t) {
+ if (isWarnEnabled())
+ logWarning(message, t);
+ }
/*
* @see org.apache.commons.logging.Log#trace(java.lang.Object)
*/
- public void trace(Object message) {}
+ public void trace(Object message) {
+ if (isTraceEnabled())
+ logInfo(message, null);
+ }
/*
* @see org.apache.commons.logging.Log#trace(java.lang.Object,
* java.lang.Throwable)
*/
- public void trace(Object message, Throwable t) {}
+ public void trace(Object message, Throwable t) {
+ if (isTraceEnabled())
+ logInfo(message, t);
+ }
/*
* @see org.apache.commons.logging.Log#isDebugEnabled()
*/
public boolean isDebugEnabled() {
- return false;
+ return fDebug;
}
/*
@@ -165,20 +243,20 @@ public boolean isFatalEnabled() {
* @see org.apache.commons.logging.Log#isInfoEnabled()
*/
public boolean isInfoEnabled() {
- return false;
+ return fInfo;
}
/*
* @see org.apache.commons.logging.Log#isTraceEnabled()
*/
public boolean isTraceEnabled() {
- return false;
+ return fTrace;
}
/*
* @see org.apache.commons.logging.Log#isWarnEnabled()
*/
public boolean isWarnEnabled() {
- return false;
+ return fWarn;
}
}
10 org.rssowl.core/src/org/rssowl/core/internal/connection/DefaultProtocolHandler.java
View
@@ -145,6 +145,9 @@
/* Timeout for loading a Favicon */
private static final int FAVICON_CON_TIMEOUT = 5000;
+ /* Set a limit for titles that are looked up from feeds */
+ private static final int MAX_DETECTED_TITLE_LENGTH = 1024;
+
private static final String USER_AGENT = CoreUtils.getUserAgent();
private static boolean fgSSLInitialized;
private static boolean fgFeedProtocolInitialized;
@@ -899,7 +902,12 @@ public String getLabel(URI link, IProgressMonitor monitor) throws ConnectionExce
closeStream(inS, true); //Abort the stream to avoid downloading the full content
}
- return StringUtils.stripTags(title.trim(), true);
+ // Have an upper maximum of title length to protect against issues
+ String result = StringUtils.stripTags(title.trim(), true);
+ if (result.length() > MAX_DETECTED_TITLE_LENGTH)
+ result = result.substring(0, MAX_DETECTED_TITLE_LENGTH);
+
+ return result;
}
/* Tries to read the encoding information from the given InputReader */
2  org.rssowl.core/src/org/rssowl/core/internal/connection/EasySSLProtocolSocketFactory.java
View
@@ -124,7 +124,7 @@ public Socket createSocket(final String host, final int port, final InetAddress
*/
@Override
public boolean equals(Object obj) {
- return ((obj != null) && obj.getClass().equals(this.getClass()));
+ return ((obj != null) && obj.getClass().equals(EasySSLProtocolSocketFactory.class));
}
/*
8 org.rssowl.core/src/org/rssowl/core/internal/interpreter/DublinCoreNamespaceHandler.java
View
@@ -91,6 +91,14 @@ else if (type instanceof INews)
((INews) type).setPublishDate(DateUtils.parseDate(element.getText()));
}
+ /* Modified date */
+ else if ("modified".equals(name)) { //$NON-NLS-1$
+ if (type instanceof IFeed)
+ ((IFeed) type).setLastModifiedDate(DateUtils.parseDate(element.getText()));
+ else if (type instanceof INews)
+ ((INews) type).setModifiedDate(DateUtils.parseDate(element.getText()));
+ }
+
/* Creator */
else if ("creator".equals(name)) { //$NON-NLS-1$
IPerson person = Owl.getModelFactory().createPerson(null, type);
9 org.rssowl.core/src/org/rssowl/core/internal/interpreter/RDFInterpreter.java
View
@@ -258,9 +258,12 @@ else if ("title".equals(name)) { //$NON-NLS-1$
/* Link */
else if ("link".equals(name)) { //$NON-NLS-1$
- URI uri = URIUtils.createURI(child.getText());
- if (uri != null)
- news.setLink(uri);
+ if (child.getText().length() > 0) {
+ URI uri = URIUtils.createURI(child.getText());
+ if (uri != null)
+ news.setLink(uri);
+ }
+
processNamespaceAttributes(child, news);
}
9 org.rssowl.core/src/org/rssowl/core/internal/interpreter/RSSInterpreter.java
View
@@ -415,9 +415,12 @@ else if ("title".equals(name)) { //$NON-NLS-1$
/* Link */
else if ("link".equals(name)) { //$NON-NLS-1$
- URI uri = URIUtils.createURI(child.getText());
- if (uri != null)
- news.setLink(uri);
+ if (child.getText().length() > 0) {
+ URI uri = URIUtils.createURI(child.getText());
+ if (uri != null)
+ news.setLink(uri);
+ }
+
processNamespaceAttributes(child, news);
}
9 org.rssowl.core/src/org/rssowl/core/internal/interpreter/json/JSONInterpreter.java
View
@@ -167,8 +167,13 @@ private void processItem(JSONObject item, IFeed feed) throws JSONException, URIS
IAttachment att = factory.createAttachment(null, news);
att.setLink(new URI(attachment.getString(HREF)));
- if (attachment.has(LENGTH))
- att.setLength(attachment.getInt(LENGTH));
+ if (attachment.has(LENGTH)) {
+ try {
+ att.setLength(attachment.getInt(LENGTH));
+ } catch (JSONException e) {
+ // Can happen if the length is larger than Integer.MAX_VALUE, in that case just ignore
+ }
+ }
if (attachment.has(TYPE))
att.setType(attachment.getString(TYPE));
2  org.rssowl.core/src/org/rssowl/core/internal/interpreter/json/JSONObject.java
View
@@ -1374,7 +1374,7 @@ String toString(int indentFactor, int indent) throws JSONException {
* @throws JSONException If the value is or contains an invalid number.
*/
public static String valueToString(Object value) throws JSONException {
- if (value == null) {
+ if (value == null || value.equals(null)) {
return "null"; //$NON-NLS-1$
}
if (value instanceof JSONString) {
6 org.rssowl.core/src/org/rssowl/core/internal/persist/Feed.java
View
@@ -673,15 +673,15 @@ public void setUpdatePeriod(int updatePeriod) {}
*/
public synchronized MergeResult mergeAndCleanUp(IFeed objectToMerge) {
Assert.isNotNull(objectToMerge);
- Assert.isLegal(this != objectToMerge, "Trying to merge the same feed. This is most likely a mistake: " + objectToMerge); //$NON-NLS-1$
+ if (this == objectToMerge)
+ Assert.isLegal(this != objectToMerge, "Trying to merge the same feed. This is most likely a mistake: " + objectToMerge); //$NON-NLS-1$
synchronized (objectToMerge) {
return merge(objectToMerge, true);
}
}
private MergeResult merge(IFeed objectToMerge, boolean cleanUp) {
- Assert.isLegal(getLink().toString().equals(objectToMerge.getLink().toString()),
- "Only feeds with the same link can be merged."); //$NON-NLS-1$
+ Assert.isLegal(getLink().toString().equals(objectToMerge.getLink().toString()), "Only feeds with the same link can be merged."); //$NON-NLS-1$
MergeResult result = new MergeResult();
boolean updated = processListMergeResult(result, mergeNews(objectToMerge.getNews(), cleanUp));
20 org.rssowl.core/src/org/rssowl/core/internal/persist/News.java
View
@@ -721,6 +721,23 @@ public Date getModifiedDate() {
}
}
+ /**
+ * Provides lock free fast access to the date of this news so that algorithms
+ * with O(n^2) are scaling well.
+ *
+ * @return Either Modified-Date, Publish-Date or Received-Date if the formers
+ * are NULL.
+ */
+ public Date fastGetRecentDate() {
+ if (fModifiedDate != null)
+ return fModifiedDate;
+
+ if (fPublishDate != null)
+ return fPublishDate;
+
+ return fReceiveDate;
+ }
+
/*
* @see org.rssowl.core.model.types.INews#addCategory(org.rssowl.core.model.types.ICategory)
*/
@@ -1045,7 +1062,8 @@ private boolean simpleFieldsEqual(News news) {
*/
public MergeResult merge(INews news) {
Assert.isNotNull(news, "news cannot be null"); //$NON-NLS-1$
- Assert.isLegal(this != news, "Trying to merge the same news, this is most likely a mistake, news: " + news); //$NON-NLS-1$
+ if (this == news)
+ Assert.isLegal(this != news, "Trying to merge the same news, this is most likely a mistake, news: " + news); //$NON-NLS-1$
News n = (News) news;
n.fLock.acquireReadLock();
2  org.rssowl.core/src/org/rssowl/core/internal/persist/Persistable.java
View
@@ -65,7 +65,7 @@ protected final URI createURI(String uri) {
try {
return new URI(uri);
} catch (URISyntaxException e) {
- throw new IllegalStateException("Somehow an invalid URI was stored", e); //$NON-NLS-1$
+ throw new IllegalStateException("Somehow an invalid URI was stored with the value of '" + uri + "'", e); //$NON-NLS-1$ //$NON-NLS-2$
}
}
3  org.rssowl.core/src/org/rssowl/core/internal/persist/Preference.java
View
@@ -100,7 +100,8 @@ public synchronized final Boolean getBoolean() {
}
private void checkType(Type type) {
- Assert.isLegal(fType == type, "The type of the Preference is not of the expected " + "type. It should be: " + fType + ", but it is: " + type); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ if (fType != type)
+ Assert.isLegal(fType == type, "The type of the Preference is not of the expected " + "type. It should be: " + fType + ", but it is: " + type); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
private boolean[] copyOf(boolean[] original) {
3  org.rssowl.core/src/org/rssowl/core/internal/persist/pref/DefaultPreferences.java
View
@@ -250,6 +250,9 @@
/** Global: Always reuse Browser */
public static final String ALWAYS_REUSE_BROWSER = Preference.ALWAYS_REUSE_BROWSER.id();
+ /** Global: Open Links in New Tab */
+ public static final String OPEN_LINKS_IN_NEW_TAB = Preference.OPEN_LINKS_NEW_TAB.id();
+
/** Global: Clean Up: Delete BMs by last visit (state) */
public static final String CLEAN_UP_BM_BY_LAST_VISIT_STATE = Preference.CLEAN_UP_BM_BY_LAST_VISIT_STATE.id();
3  org.rssowl.core/src/org/rssowl/core/internal/persist/service/DBManager.java
View
@@ -801,8 +801,7 @@ private int getWorkspaceFormatVersion() {
try {
reader = new BufferedReader(new FileReader(getOldDBFormatFile()));
String text = reader.readLine();
- if (text != null)
- DBHelper.writeToFile(formatFile, text);
+ DBHelper.writeToFile(formatFile, text);
formatFileExists = true;
} catch (IOException e) {
throw new PersistenceException(e);
3  org.rssowl.core/src/org/rssowl/core/persist/pref/Preference.java
View
@@ -247,6 +247,9 @@
/** Global: Always reuse Browser */
ALWAYS_REUSE_BROWSER("org.rssowl.pref.AlwaysReuseBrowser", IPreferenceType.BOOLEAN), //$NON-NLS-1$
+ /** Global: Open Links in New Tab */
+ OPEN_LINKS_NEW_TAB("org.rssowl.pref.OpenLinksInNewTab", IPreferenceType.BOOLEAN), //$NON-NLS-1$
+
/** Global: Clean Up: Delete BMs by last visit (state) */
CLEAN_UP_BM_BY_LAST_VISIT_STATE("org.rssowl.pref.CleanUpBMByLastVisitState", IPreferenceType.BOOLEAN), //$NON-NLS-1$
16 org.rssowl.core/src/org/rssowl/core/util/CoreUtils.java
View
@@ -469,7 +469,9 @@ public static void normalize(IFolder folder, List<? extends IEntity> entities) {
public static String getHeadline(INews news, boolean replaceEntities) {
/* Title provided */
- String title = StringUtils.stripTags(news.getTitle(), replaceEntities);
+ String title = news.getTitle();
+ if (shouldStripTags(title, replaceEntities))
+ title = StringUtils.stripTags(title, replaceEntities);
title = StringUtils.normalizeString(title);
if (StringUtils.isSet(title))
return title;
@@ -477,7 +479,8 @@ public static String getHeadline(INews news, boolean replaceEntities) {
/* Try Content instead */
String content = news.getDescription();
if (StringUtils.isSet(content)) {
- content = StringUtils.stripTags(content, replaceEntities);
+ if (shouldStripTags(content, replaceEntities))
+ content = StringUtils.stripTags(content, replaceEntities);
content = StringUtils.normalizeString(content);
content = StringUtils.smartTrim(content, 50);
@@ -488,6 +491,13 @@ public static String getHeadline(INews news, boolean replaceEntities) {
return Messages.CoreUtils_NO_HEADLINE;
}
+ private static boolean shouldStripTags(String str, boolean replaceEntities) {
+ if (StringUtils.isSet(str))
+ return str.contains("<") || (replaceEntities && str.contains("&")); //$NON-NLS-1$ //$NON-NLS-2$
+
+ return false;
+ }
+
/**
* @param news the news to obtain the link from. Will fall back to the
* {@link IGuid} if necessary.
@@ -1789,7 +1799,7 @@ public static String toMessage(Throwable ex) {
* such as a TCP error
*/
if (cause instanceof SocketException)
- return Messages.CoreUtils_UNNABLE_CONNECT;
+ return Messages.CoreUtils_UNABLE_CONNECT;
}
return ex.getMessage();
9 org.rssowl.core/src/org/rssowl/core/util/DateUtils.java
View
@@ -25,6 +25,7 @@
package org.rssowl.core.util;
import org.eclipse.core.runtime.Assert;
+import org.rssowl.core.internal.persist.News;
import org.rssowl.core.persist.INews;
import java.text.DateFormat;
@@ -90,13 +91,7 @@ public static boolean isAfterIncludingToday(Date date, long todayMidnightInMilli
* are NULL.
*/
public static Date getRecentDate(INews news) {
- if (news.getModifiedDate() != null)
- return news.getModifiedDate();
-
- if (news.getPublishDate() != null)
- return news.getPublishDate();
-
- return news.getReceiveDate();
+ return ((News)news).fastGetRecentDate();
}
/**
2  org.rssowl.core/src/org/rssowl/core/util/HTMLFilterReader.java
View
@@ -112,7 +112,7 @@
fgEntityTable.put(entityName[i], new Character(entityVal[i]));
/* Special-case nbsp to a simple space instead of 0xa0 */
- fgEntityTable.put("nbsp", Character.valueOf(' ')); //$NON-NLS-1$
+ fgEntityTable.put("nbsp", new Character(' ')); //$NON-NLS-1$
}
/**
1  org.rssowl.core/src/org/rssowl/core/util/Messages.java
View
@@ -44,7 +44,6 @@
public static String CoreUtils_OR;
public static String CoreUtils_UNABLE_CONNECT;
public static String CoreUtils_UNABLE_RESOLVE_HOST;
- public static String CoreUtils_UNNABLE_CONNECT;
public static String CoreUtils_UNSUPPORTED_FORMAT;
public static String CoreUtils_UNSUPPORTED_PROTOCOL;
public static String JobQueue_TASK_NAME;
3  org.rssowl.core/src/org/rssowl/core/util/SyncUtils.java
View
@@ -52,6 +52,9 @@
*/
public class SyncUtils {
+ /** Flag to control enablement of Google Reader Sync */
+ public static final boolean ENABLED = false;
+
/** Google Client Login Site */
public static final String GOOGLE_LOGIN_URL = "https://www.google.com/accounts/ClientLogin"; //$NON-NLS-1$
1  org.rssowl.core/src/org/rssowl/core/util/messages.properties
View
@@ -29,7 +29,6 @@ CoreUtils_N_MINUTE={0} Minute
CoreUtils_N_MINUTES={0} Minutes
CoreUtils_UNABLE_CONNECT=Unable to Connect
CoreUtils_UNABLE_RESOLVE_HOST=Unable to Resolve the Host
-CoreUtils_UNNABLE_CONNECT=Unable to Connect
CoreUtils_UNSUPPORTED_FORMAT=Unsupported Format ''{0}''
CoreUtils_UNSUPPORTED_PROTOCOL=Unsupported Communication Protocol ''{0}''
JobQueue_TASK_NAME={0} {1} of {2}: {3}
2  org.rssowl.feature.eclipse/feature.xml
View
@@ -2,7 +2,7 @@
<feature
id="org.rssowl.eclipse"
label="RSSOwl in Eclipse"
- version="2.1.0.qualifier"
+ version="2.2.1.qualifier"
provider-name="RSSOwl.org"
plugin="org.rssowl.ui">
2  org.rssowl.feature.tests/feature.xml
View
@@ -2,7 +2,7 @@
<feature
id="org.rssowl.tests"
label="RSSOwl Tests Feature"
- version="2.1.0.qualifier"
+ version="2.2.1.qualifier"
provider-name="RSSOwl.org">
<description url="http://www.example.com/description">
2  org.rssowl.feature/feature.xml
View
@@ -2,7 +2,7 @@
<feature
id="org.rssowl"
label="RSSOwl"
- version="2.1.0.qualifier"
+ version="2.2.1.qualifier"
provider-name="RSSOwl.org"
plugin="org.rssowl.ui">
2  org.rssowl.lib.db4o/META-INF/MANIFEST.MF
View
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: org.rssowl.lib.db4o
-Bundle-Version: 2.1.0.qualifier
+Bundle-Version: 2.2.1.qualifier
Eclipse-BuddyPolicy: registered
Bundle-Vendor: %Bundle-Vendor
Export-Package: com.db4o,
2  org.rssowl.lib.httpclient/META-INF/MANIFEST.MF
View
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: org.rssowl.lib.httpclient
-Bundle-Version: 2.1.0.qualifier
+Bundle-Version: 2.2.1.qualifier
Eclipse-BuddyPolicy: registered
Export-Package: org.apache.commons.codec,
org.apache.commons.codec.binary,
1  org.rssowl.lib.jdom/.settings/org.eclipse.core.resources.prefs
View
@@ -1,3 +1,2 @@
-#Thu Apr 06 21:17:18 CEST 2006
eclipse.preferences.version=1
encoding/<project>=UTF-8
2  org.rssowl.lib.jdom/META-INF/MANIFEST.MF
View
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: org.rssowl.lib.jdom
-Bundle-Version: 2.1.0.qualifier
+Bundle-Version: 2.2.1.qualifier
Eclipse-BuddyPolicy: registered
Bundle-Vendor: %Bundle-Vendor
Export-Package: .,
2  org.rssowl.lib.lucene/META-INF/MANIFEST.MF
View
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: org.rssowl.lib.lucene
-Bundle-Version: 2.1.0.qualifier
+Bundle-Version: 2.2.1.qualifier
Export-Package: org.apache.lucene,
org.apache.lucene.analysis,
org.apache.lucene.analysis.standard,
8 org.rssowl.ui/Launch RSSOwl 2.0.launch
View
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
<stringAttribute key="application" value="org.rssowl.ui.rssowl"/>
<booleanAttribute key="askclear" value="true"/>
@@ -11,7 +11,6 @@
<booleanAttribute key="clearwslog" value="false"/>
<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Launch RSSOwl 2.0"/>
<booleanAttribute key="default" value="false"/>
-<stringAttribute key="deselected_workspace_plugins" value="org.rssowl.core.tests"/>
<booleanAttribute key="includeOptional" value="true"/>
<stringAttribute key="location" value="${workspace_loc}/../runtime-RSSOwl_configuration"/>
<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
@@ -20,11 +19,12 @@
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx96m -DmultiInstance"/>
<stringAttribute key="pde.version" value="3.3"/>
<stringAttribute key="product" value="org.rssowl.ui.product"/>
-<stringAttribute key="selected_target_plugins" value="org.eclipse.ui.views.log,com.ibm.icu,org.eclipse.jface.databinding,org.eclipse.core.net.win32.x86,org.eclipse.equinox.security.macosx,org.eclipse.equinox.security.win32.x86,org.eclipse.ui.workbench,org.eclipse.swt.gtk.linux.x86,org.eclipse.swt.carbon.macosx,org.eclipse.swt,org.eclipse.core.expressions,org.eclipse.core.runtime.compatibility.auth,org.eclipse.update.scheduler,org.eclipse.help,org.eclipse.core.jobs,org.eclipse.equinox.app,org.eclipse.equinox.preferences,org.eclipse.update.configurator,org.eclipse.core.contenttype,org.eclipse.swt.gtk.linux.x86_64,org.eclipse.core.databinding,org.eclipse.ui,org.eclipse.update.ui,org.eclipse.core.net.linux.x86,org.eclipse.core.net,org.eclipse.ui.net,org.eclipse.core.runtime,org.eclipse.equinox.registry,org.eclipse.swt.win32.win32.x86,org.eclipse.update.core,org.eclipse.osgi,org.eclipse.jface,org.eclipse.core.commands,org.eclipse.equinox.security,org.eclipse.pde.runtime,org.eclipse.ui.forms,org.eclipse.equinox.common"/>
-<stringAttribute key="selected_workspace_plugins" value="org.rssowl.core,org.rssowl.lib.jdom,org.rssowl.lib.httpclient,org.rssowl.contrib.nntp,org.rssowl.lib.db4o,org.rssowl.lib.lucene,org.rssowl.ui"/>
+<stringAttribute key="selected_target_plugins" value="com.ibm.icu.base@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.net.win32.x86@default:false,org.eclipse.core.net@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime@default:true,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security.win32.x86@default:false,org.eclipse.equinox.security@default:default,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt.win32.win32.x86@default:false,org.eclipse.swt@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.eclipse.update.configurator@3:true,org.eclipse.update.core.win32@default:false,org.eclipse.update.core@default:default,org.eclipse.update.ui@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.rssowl.core@default:default,org.rssowl.lib.db4o@default:default,org.rssowl.lib.httpclient@default:default,org.rssowl.lib.jdom@default:default,org.rssowl.lib.lucene@default:default,org.rssowl.ui@default:default"/>
<booleanAttribute key="show_selected_only" value="false"/>
<stringAttribute key="templateConfig" value="${workspace_loc:org.rssowl.ui/config.ini}"/>
<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfig" value="true"/>
<booleanAttribute key="useDefaultConfigArea" value="true"/>
<booleanAttribute key="useNamedJRE" value="true"/>
2  org.rssowl.ui/META-INF/MANIFEST.MF
View
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: org.rssowl.ui; singleton:=true
-Bundle-Version: 2.1.0.qualifier
+Bundle-Version: 2.2.1.qualifier
Bundle-Activator: org.rssowl.ui.internal.Activator
Bundle-Vendor: %Bundle-Vendor
Require-Bundle: org.eclipse.ui,
4 org.rssowl.ui/about.ini
View
@@ -7,8 +7,8 @@
# Property "aboutText" contains blurb for "About" dialog (translated)
aboutText=RSSOwl\n\
\n\
-Version: 2.1.0\n\
-Build id: 2011-07-15\n\
+Version: 2.2.1\n\
+Build id: 2013-12-30\n\
\n\
(c) Copyright RSSOwl contributors and others 2005, 2011. All rights reserved.\n\
Visit http://www.rssowl.org\n\
4 org.rssowl.ui/config.ini
View
@@ -32,10 +32,10 @@ eclipse.product=org.rssowl.ui.product
osgi.instance.area.default=@user.home/.rssowl2
# The default configuration location
-osgi.configuration.area=@user.home/.rssowl2/config210
+osgi.configuration.area=@user.home/.rssowl2/config221
# Version Information
-rssowl.buildId=2.1
+rssowl.buildId=2.2.1
# End of file marker - must be here
eof=eof
BIN  org.rssowl.ui/icons/elcl16/languages.gif
View