diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 689a2bf..4b2899b 100755 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -43,4 +43,9 @@ class ApplicationController < ActionController::Base session[:selected_folder] ? @selected_folder = session[:selected_folder] : @selected_folder = $defaults['mailbox_inbox'] end + def get_current_folders + @folders_shown = @current_user.folders.shown.order("name asc") + @current_folder = @current_user.folders.current(@selected_folder) + end + end diff --git a/app/controllers/contacts_controller.rb b/app/controllers/contacts_controller.rb index 0a6ded9..b7af37b 100755 --- a/app/controllers/contacts_controller.rb +++ b/app/controllers/contacts_controller.rb @@ -1,21 +1,12 @@ -require 'imap_session' -require 'imap_mailbox' - class ContactsController < ApplicationController - include ImapMailboxModule - include ImapSessionModule - before_filter :check_current_user,:selected_folder - before_filter :open_imap_session - after_filter :close_imap_session + before_filter :get_current_folders, :only => [:index] theme :theme_resolver def index - @folders = @current_user.folders.order("name asc") - @current_folder = @current_user.folders.current(@selected_folder) flash[:notice] = 'Not implemented yet' end diff --git a/app/controllers/folders_controller.rb b/app/controllers/folders_controller.rb index a94ce49..a78fb94 100755 --- a/app/controllers/folders_controller.rb +++ b/app/controllers/folders_controller.rb @@ -5,10 +5,10 @@ class FoldersController < ApplicationController before_filter :check_current_user ,:selected_folder - before_filter :open_imap_session - after_filter :close_imap_session + before_filter :open_imap_session, :except => [:index,:refresh_status,:show_hide] + after_filter :close_imap_session, :except => [:index,:refresh_status,:show_hide] - before_filter :get_folders, :except => :manage + before_filter :get_folders theme :theme_resolver @@ -36,7 +36,7 @@ class FoldersController < ApplicationController render 'index' return end - redirect_to :action => 'manage', :flash => t(:folder_was_created), :type => :notice + redirect_to :action => 'refresh', :flash => t(:folder_was_created), :type => :notice end end # FIXME if you delete folder you should change current folder because if you go to messages/index you got nil @@ -61,29 +61,45 @@ class FoldersController < ApplicationController render 'index' return end - redirect_to :action => 'manage', :flash => t(:folder_was_deleted), :type => :notice + redirect_to :action => 'refresh', :flash => t(:folder_was_deleted), :type => :notice end end - def sub_un_scribe - redirect_to :action => 'manage' - end - - def manage - @current_user.folders.destroy_all - folders=@mailbox.folders - Folder.createBulk(@current_user,folders) - if params[:flash] - flash[params[:type]] = params[:flash] - end + def show_hide + @folders.each do |f| + logger.info f.inspect,"\n" + if params["folders_to_show"].include?(f.id.to_s) + f.shown = true + f.save + else + f.shown = false + f.save + end + end redirect_to :action => 'index' end + def refresh + Folder.refresh(@mailbox,@current_user) + if params[:flash] + flash[params[:type]] = params[:flash] + end + redirect_to :action => 'index' + end + protected def get_folders @folders = @current_user.folders.order("name asc") - @current_folder = @current_user.folders.current(@selected_folder) + @folders_shown = [] + @folders.each do |f| + if f.shown == true + @folders_shown << f + end + if f.selected?(@selected_folder) + @current_folder = f + end + end end end diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index f1c7f99..5035202 100755 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -8,33 +8,28 @@ class MessagesController < ApplicationController before_filter :check_current_user ,:selected_folder + before_filter :get_current_folders, :only => [:index,:compose] + before_filter :open_imap_session, :only => :refresh after_filter :close_imap_session, :only => :refresh theme :theme_resolver def index - @folders = @current_user.folders.order("name asc") - @current_folder = @current_user.folders.current(@selected_folder) flash[:notice] = 'Not implemented yet' end - def refresh - @current_user.folders.destroy_all - folders=@mailbox.folders - Folder.createBulk(@current_user,folders) - redirect_to :action => 'index' - end - def folder session[:selected_folder] = params[:id] redirect_to :action => 'index' end def compose - @folders = @current_user.folders.order("name asc") - @current_folder = @current_user.folders.current(@selected_folder) flash[:notice] = 'Not impelented yet' end + def refresh + redirect_to :action => 'index' + end + end diff --git a/app/controllers/prefs_controller.rb b/app/controllers/prefs_controller.rb index 2109370..66af42d 100755 --- a/app/controllers/prefs_controller.rb +++ b/app/controllers/prefs_controller.rb @@ -2,11 +2,11 @@ class PrefsController < ApplicationController before_filter :check_current_user,:selected_folder + before_filter :get_current_folders, :only => [:index,:compose] + theme :theme_resolver def index - @folders = @current_user.folders.order("name asc") - @current_folder = @current_user.folders.current(@selected_folder) flash[:notice] = 'Not implemented yet' end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 2c88042..9dee009 100755 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -89,7 +89,7 @@ end #end def nav_to_folders - link_to( t(:folders), :controller=>:folders, :action=>:manage ) + link_to( t(:folders), :controller=>:folders, :action=>:index ) end def nav_to_messages diff --git a/app/helpers/folder_helper.rb b/app/helpers/folder_helper.rb index 1ac593b..f678764 100755 --- a/app/helpers/folder_helper.rb +++ b/app/helpers/folder_helper.rb @@ -10,8 +10,7 @@ module FolderHelper end def pretty_folder_name(folder) - #folder = folder.gsub(/#/,".") - folder.name.capitalize + folder.nil? ? t(:no_folder_selected) : folder.name.capitalize end def select_for_folders(name,id,object,label,blank) diff --git a/app/models/folder.rb b/app/models/folder.rb index 11eb97c..0f0935f 100755 --- a/app/models/folder.rb +++ b/app/models/folder.rb @@ -16,6 +16,12 @@ class Folder < ActiveRecord::Base parent.split('.').size end + def selected?(session_folder) + fields = session_folder.split("#") + fields[1].nil? ? fields.insert(0,"") : fields + (fields[1].downcase == name.downcase) && (fields[0].downcase == parent.downcase) + end + private def check_fill_params @@ -43,13 +49,19 @@ class Folder < ActiveRecord::Base def self.current(data) folder = data.split("#") - if folder.size > 1 - where(['name = ? and parent = ?',folder[1],folder[0]]).first - else - where(['name = ?',folder[0]]).first - end + nam = folder.delete_at(folder.size - 1) + folder.size.zero? == true ? par = "" : par = folder.join(".") + where(['name = ? and parent = ?',nam,par]).first end + def self.shown + where(['shown = ?',true]) + end + def self.refresh(mailbox,user) + user.folders.destroy_all + folders=mailbox.folders + Folder.createBulk(user,folders) + end end diff --git a/config/defaults.yml b/config/defaults.yml index c87a3bb..84bc8d4 100755 --- a/config/defaults.yml +++ b/config/defaults.yml @@ -15,8 +15,8 @@ session_encryption: true session_password: asDD3s2@sAdc983# mailbox_max_parent_folder_depth: 3 -mailbox_inbox: inbox -mailbox_trash: inbox.trash -mailbox_sent: inbox.sent -mailbox_drafts: inbox.drafts +mailbox_inbox: INBOX +mailbox_trash: Trash +mailbox_sent: Sent +mailbox_drafts: Drafts diff --git a/config/locales/en.yml b/config/locales/en.yml index d1f3036..a67f647 100755 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -92,3 +92,5 @@ en: folder_was_deleted: Folder was deleted can_not_delete_folder: Can not delete folder system_folder: System folder + refresh_folders: Refresh folders + show_hide: Show/Hide diff --git a/config/routes.rb b/config/routes.rb index df77aef..bf93097 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -5,12 +5,11 @@ Mailr::Application.routes.draw do get "contacts/index" get "folders/index" - post "folders/create" post "folders/delete" - post "folders/sub_un_scribe" - - get "folders/manage" + post "folders/show_hide" + get "folders/refresh" + post "folders/refresh" get "internal/error" get "internal/imaperror" @@ -22,6 +21,7 @@ Mailr::Application.routes.draw do match 'messages/folder/:id' => 'messages#folder' post "messages/ops" get "messages/compose" + get"messages/refresh" get "user/logout" post "user/authenticate" diff --git a/db/migrate/20110731185416_add_shown_to_folders.rb b/db/migrate/20110731185416_add_shown_to_folders.rb new file mode 100644 index 0000000..b273b51 --- /dev/null +++ b/db/migrate/20110731185416_add_shown_to_folders.rb @@ -0,0 +1,11 @@ +class AddShownToFolders < ActiveRecord::Migration + def self.up + add_column :folders, :shown, :boolean + add_column :folders, :alter_name, :string + end + + def self.down + remove_column :folders, :alter_name + remove_column :folders, :shown + end +end diff --git a/db/schema.rb b/db/schema.rb index e43ef63..d0a3afe 100755 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20110727134352) do +ActiveRecord::Schema.define(:version => 20110731185416) do create_table "folders", :force => true do |t| t.string "name" @@ -23,6 +23,8 @@ ActiveRecord::Schema.define(:version => 20110727134352) do t.datetime "updated_at" t.string "parent" t.datetime "msgs_updated_at" + t.boolean "shown" + t.string "alter_name" end create_table "messages", :force => true do |t| diff --git a/lib/imap_session.rb b/lib/imap_session.rb index a6386aa..d299823 100755 --- a/lib/imap_session.rb +++ b/lib/imap_session.rb @@ -5,7 +5,7 @@ module ImapSessionModule def open_imap_session begin - @mailbox = ImapMailboxModule::IMAPMailbox.new(logger) + @mailbox ||= ImapMailboxModule::IMAPMailbox.new(logger) @mailbox.connect(@current_user.servers.primary,@current_user.email, @current_user.get_cached_password(session)) rescue Exception => ex redirect_to :controller => 'internal', :action => 'loginfailure' diff --git a/themes/olive/stylesheets/style.css b/themes/olive/stylesheets/style.css index f6365a2..184543c 100755 --- a/themes/olive/stylesheets/style.css +++ b/themes/olive/stylesheets/style.css @@ -365,4 +365,3 @@ input,select { color: grey; } - diff --git a/themes/olive/views/folders/_list.html.erb b/themes/olive/views/folders/_list.html.erb index e75c88b..6e8e22b 100755 --- a/themes/olive/views/folders/_list.html.erb +++ b/themes/olive/views/folders/_list.html.erb @@ -1,11 +1,19 @@

<%=t (:folders) %> <%= link_to t(:refresh), {:controller => 'messages', :action => 'refresh'}, :class=>'minor' %>

+ <% if @folders_shown.size.zero? %> +

<%= t(:no_folders_shown) %>

+ <% else %> + <% end %>
<%= raw form_button_value(t(:logout),'tick.png',url_for(:controller => :user, :action => :logout)) %>
diff --git a/themes/olive/views/folders/index.html.erb b/themes/olive/views/folders/index.html.erb index 528ab45..8c5c14a 100755 --- a/themes/olive/views/folders/index.html.erb +++ b/themes/olive/views/folders/index.html.erb @@ -25,9 +25,12 @@
- <%= form_tag({:controller=>'folders',:action=>'sub_un_scribe'},:class=>'form') %> - <%= raw multi_select("", 'folders_to_subscribe[]', @folders, @folders,t(:folders_subscribed),:id,"",{:text => [:parent,:delim,:name]}) %> - <%= raw form_button(t(:subscribe_unsubscribe),'tick.png') %> + <%= form_tag({:controller=>'folders',:action=>'refresh'},:class=>'form') %> + <%= raw form_button(t(:refresh_folders),'tick.png') %> + + <%= form_tag({:controller=>'folders',:action=>'show_hide'},:class=>'form') %> + <%= raw multi_select("", 'folders_to_show[]', @folders, @folders_shown,t(:folders_shown),:id,"",{:text => [:parent,:delim,:name]}) %> + <%= raw form_button(t(:show_hide),'tick.png') %>
diff --git a/themes/olive/views/messages/index.html.erb b/themes/olive/views/messages/index.html.erb index 96a1c17..d9087b6 100755 --- a/themes/olive/views/messages/index.html.erb +++ b/themes/olive/views/messages/index.html.erb @@ -14,10 +14,21 @@ <%= form_tag({:controller=>'messages', :action=>'ops'})%> - - + + +<% if @current_folder.nil? %> +<%= t(:no_folder_selected) %> +<% else %>

Current: <%= pretty_folder_name(@current_folder) %>

<%= @current_folder.inspect %> <%= Time.now - @current_folder.msgs_updated_at %> + +<% end %> + + + + + +