devel
This commit is contained in:
parent
f81c1d69c5
commit
37f548ce46
0
.gitignore
vendored
Normal file → Executable file
0
.gitignore
vendored
Normal file → Executable file
0
Gemfile.lock
Normal file → Executable file
0
Gemfile.lock
Normal file → Executable file
4
app/controllers/application_controller.rb
Normal file → Executable file
4
app/controllers/application_controller.rb
Normal file → Executable file
|
@ -39,4 +39,8 @@ class ApplicationController < ActionController::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def selected_folder
|
||||||
|
session[:selected_folder] ? @selected_folder = session[:selected_folder] : @selected_folder = $defaults['imap_inbox_folder']
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
11
app/controllers/internal_controller.rb
Normal file → Executable file
11
app/controllers/internal_controller.rb
Normal file → Executable file
|
@ -4,9 +4,16 @@ class InternalController < ApplicationController
|
||||||
layout "simple"
|
layout "simple"
|
||||||
|
|
||||||
def error
|
def error
|
||||||
@title = t(:general_error)
|
@title = params[:title] || t(:general_error)
|
||||||
@error = params[:error] || t(:unspecified_error)
|
@error = params[:error] || t(:unspecified_error)
|
||||||
logger.error @error
|
logger.error "!!! InternalControllerError: " + @error
|
||||||
|
end
|
||||||
|
|
||||||
|
def imaperror
|
||||||
|
@title = t(:imap_error)
|
||||||
|
@error = params[:error] || t(:unspecified_error)
|
||||||
|
logger.error "!!! InternalControllerImapError: " + @error
|
||||||
|
render 'error'
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
27
app/controllers/messages_controller.rb
Normal file → Executable file
27
app/controllers/messages_controller.rb
Normal file → Executable file
|
@ -1,14 +1,33 @@
|
||||||
require 'imap_utils'
|
require 'imap_session'
|
||||||
|
require 'imap_mailbox'
|
||||||
|
|
||||||
class MessagesController < ApplicationController
|
class MessagesController < ApplicationController
|
||||||
|
|
||||||
include ImapUtils
|
include ImapMailboxModule
|
||||||
|
include ImapSessionModule
|
||||||
|
|
||||||
|
before_filter :check_current_user ,:selected_folder
|
||||||
|
|
||||||
|
before_filter :open_imap_session, :only => :refresh
|
||||||
|
after_filter :close_imap_session, :only => :refresh
|
||||||
|
|
||||||
before_filter :check_current_user, :info
|
|
||||||
theme :theme_resolver
|
theme :theme_resolver
|
||||||
|
|
||||||
def index
|
def index
|
||||||
logger.info "YYYYYYYYYYYYY #{@m.inspect}"
|
@folders = @current_user.folders.order("name asc")
|
||||||
|
@current_folder = @current_user.folders.current(@selected_folder)
|
||||||
|
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
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
9
app/controllers/user_controller.rb
Normal file → Executable file
9
app/controllers/user_controller.rb
Normal file → Executable file
|
@ -15,7 +15,7 @@ class UserController < ApplicationController
|
||||||
def authenticate
|
def authenticate
|
||||||
user = User.find_by_email(params[:user][:email])
|
user = User.find_by_email(params[:user][:email])
|
||||||
if user.nil?
|
if user.nil?
|
||||||
redirect_to :action => 'unknown'
|
redirect_to :action => 'unknown' ,:email=> params[:user][:email]
|
||||||
else
|
else
|
||||||
auten = true
|
auten = true
|
||||||
if auten == true
|
if auten == true
|
||||||
|
@ -26,7 +26,7 @@ class UserController < ApplicationController
|
||||||
redirect_to(session["return_to"])
|
redirect_to(session["return_to"])
|
||||||
session["return_to"] = nil
|
session["return_to"] = nil
|
||||||
else
|
else
|
||||||
redirect_to :controller=> "messages", :action=>"index"
|
redirect_to :controller=> 'messages', :action=> 'refresh'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -49,12 +49,15 @@ class UserController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
|
||||||
@user = User.new
|
@user = User.new
|
||||||
@server = Server.new
|
|
||||||
@user.email = params["user_email"]
|
@user.email = params["user_email"]
|
||||||
@user.first_name = params["user_first_name"]
|
@user.first_name = params["user_first_name"]
|
||||||
@user.last_name = params["user_last_name"]
|
@user.last_name = params["user_last_name"]
|
||||||
|
|
||||||
|
@server = Server.new
|
||||||
@server.name = params["server_name"]
|
@server.name = params["server_name"]
|
||||||
|
|
||||||
if @user.valid? and @server.valid?
|
if @user.valid? and @server.valid?
|
||||||
@user.save
|
@user.save
|
||||||
@server.user_id = @user.id
|
@server.user_id = @user.id
|
||||||
|
|
4
app/helpers/application_helper.rb
Normal file → Executable file
4
app/helpers/application_helper.rb
Normal file → Executable file
|
@ -1,6 +1,6 @@
|
||||||
module ApplicationHelper
|
module ApplicationHelper
|
||||||
|
|
||||||
def form_field(object,field,flabel,example)
|
def form_field(object,field,flabel,example,val)
|
||||||
|
|
||||||
html = ""
|
html = ""
|
||||||
html << "<div class=\"group\">"
|
html << "<div class=\"group\">"
|
||||||
|
@ -24,7 +24,7 @@ def form_field(object,field,flabel,example)
|
||||||
html << "<input name=\""
|
html << "<input name=\""
|
||||||
html << object.class.name.downcase+"_"+field
|
html << object.class.name.downcase+"_"+field
|
||||||
html << "\" type=\"text\" class=\"text_field\" value=\""
|
html << "\" type=\"text\" class=\"text_field\" value=\""
|
||||||
value = object.instance_eval(field) || ""
|
value = object.instance_eval(field) || val || ""
|
||||||
html << value
|
html << value
|
||||||
html << "\"/>"
|
html << "\"/>"
|
||||||
html << "<span class=\"description\">"
|
html << "<span class=\"description\">"
|
||||||
|
|
0
app/helpers/internal_helper.rb
Normal file → Executable file
0
app/helpers/internal_helper.rb
Normal file → Executable file
16
app/helpers/messages_helper.rb
Normal file → Executable file
16
app/helpers/messages_helper.rb
Normal file → Executable file
|
@ -1,2 +1,18 @@
|
||||||
module MessagesHelper
|
module MessagesHelper
|
||||||
|
|
||||||
|
def folder_link(folder)
|
||||||
|
folder.parent.empty? ? name = folder.name : name = folder.parent.gsub(/\./,'#') + "#" + folder.name
|
||||||
|
s = link_to folder.name.capitalize, :controller => 'messages', :action => 'folder', :id => name
|
||||||
|
if !folder.unseen.zero?
|
||||||
|
s += ' (' + folder.unseen.to_s + ')'
|
||||||
|
end
|
||||||
|
s
|
||||||
|
end
|
||||||
|
|
||||||
|
def pretty_folder_name(folder)
|
||||||
|
#folder = folder.gsub(/#/,".")
|
||||||
|
folder.name.capitalize
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
0
app/helpers/user_helper.rb
Normal file → Executable file
0
app/helpers/user_helper.rb
Normal file → Executable file
41
app/models/folder.rb
Executable file
41
app/models/folder.rb
Executable file
|
@ -0,0 +1,41 @@
|
||||||
|
class Folder < ActiveRecord::Base
|
||||||
|
|
||||||
|
belongs_to :user
|
||||||
|
validates_presence_of :name, :on => :create
|
||||||
|
before_save :check_fill_params, :on => :create
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def check_fill_params
|
||||||
|
self.messages.nil? ? self.messages = 0 : self.messages
|
||||||
|
self.unseen.nil? ? self.unseen = 0 : self.unseen
|
||||||
|
self.msgs_updated_at.nil? ? self.msgs_updated_at = (DateTime.now-1) : self.msgs_updated_at
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.createBulk(user,imapFolders)
|
||||||
|
imapFolders.each do |name,data|
|
||||||
|
data.attribs.find_index(:Haschildren).nil? ? has_children = 0 : has_children = 1
|
||||||
|
name_fields = name.split(data.delim)
|
||||||
|
|
||||||
|
if name_fields.count > 1
|
||||||
|
name = name_fields.delete_at(name_fields.size - 1)
|
||||||
|
parent = name_fields.join(data.delim)
|
||||||
|
else
|
||||||
|
name = name_fields[0]
|
||||||
|
parent = ""
|
||||||
|
end
|
||||||
|
|
||||||
|
user.folders.create(:name=>name,:parent=>parent,:haschildren=>has_children,:delim=>data.delim,:messages => data.messages,:unseen => data.unseen)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
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
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
2
app/models/message.rb
Executable file
2
app/models/message.rb
Executable file
|
@ -0,0 +1,2 @@
|
||||||
|
class Message < ActiveRecord::Base
|
||||||
|
end
|
0
app/models/prefs.rb
Normal file → Executable file
0
app/models/prefs.rb
Normal file → Executable file
14
app/models/server.rb
Normal file → Executable file
14
app/models/server.rb
Normal file → Executable file
|
@ -1,4 +1,18 @@
|
||||||
class Server < ActiveRecord::Base
|
class Server < ActiveRecord::Base
|
||||||
|
|
||||||
validates_presence_of :name
|
validates_presence_of :name
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
|
before_save :fill_params
|
||||||
|
|
||||||
|
def self.primary
|
||||||
|
first
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def fill_params
|
||||||
|
self.port = $defaults['imap_port']
|
||||||
|
$defaults['imap_use_ssl'] == true ? self.use_ssl = 1 : self.use_ssl = 0
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
3
app/models/user.rb
Normal file → Executable file
3
app/models/user.rb
Normal file → Executable file
|
@ -1,11 +1,12 @@
|
||||||
require 'ezcrypto'
|
require 'ezcrypto'
|
||||||
|
|
||||||
class User < ActiveRecord::Base
|
class User < ActiveRecord::Base
|
||||||
validates_presence_of :email, :on => :create
|
|
||||||
validates_presence_of :first_name,:last_name
|
validates_presence_of :first_name,:last_name
|
||||||
validates_uniqueness_of :email
|
validates_uniqueness_of :email
|
||||||
has_many :servers, :dependent => :destroy
|
has_many :servers, :dependent => :destroy
|
||||||
has_one :prefs, :dependent => :destroy
|
has_one :prefs, :dependent => :destroy
|
||||||
|
has_many :folders, :dependent => :destroy
|
||||||
|
|
||||||
def set_cached_password(session,password)
|
def set_cached_password(session,password)
|
||||||
if $defaults['session_encryption']
|
if $defaults['session_encryption']
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
<h1>Messages#index</h1>
|
|
||||||
<p>Find me in app/views/messages/index.html.erb</p>
|
|
0
config/application.rb
Normal file → Executable file
0
config/application.rb
Normal file → Executable file
0
config/boot.rb
Normal file → Executable file
0
config/boot.rb
Normal file → Executable file
7
config/defaults.yml
Normal file → Executable file
7
config/defaults.yml
Normal file → Executable file
|
@ -1,8 +1,15 @@
|
||||||
theme: olive
|
theme: olive
|
||||||
locale: en
|
locale: en
|
||||||
msgs_per_page: 20
|
msgs_per_page: 20
|
||||||
|
msgs_refresh_time: 300
|
||||||
msg_send_type: html
|
msg_send_type: html
|
||||||
imap_debug: true
|
imap_debug: true
|
||||||
|
imap_use_ssl: 'false'
|
||||||
|
imap_port: 143
|
||||||
|
imap_ssl_port: 993
|
||||||
|
imap_bye_timeout_retry_seconds: 2
|
||||||
|
imap_inbox_folder: inbox
|
||||||
session_encryption: true
|
session_encryption: true
|
||||||
session_password: asDD3s2@sAdc983#
|
session_password: asDD3s2@sAdc983#
|
||||||
|
|
||||||
|
|
||||||
|
|
0
config/environment.rb
Normal file → Executable file
0
config/environment.rb
Normal file → Executable file
0
config/environments/development.rb
Normal file → Executable file
0
config/environments/development.rb
Normal file → Executable file
0
config/environments/production.rb
Normal file → Executable file
0
config/environments/production.rb
Normal file → Executable file
0
config/environments/test.rb
Normal file → Executable file
0
config/environments/test.rb
Normal file → Executable file
0
config/initializers/backtrace_silencers.rb
Normal file → Executable file
0
config/initializers/backtrace_silencers.rb
Normal file → Executable file
0
config/initializers/inflections.rb
Normal file → Executable file
0
config/initializers/inflections.rb
Normal file → Executable file
0
config/initializers/mime_types.rb
Normal file → Executable file
0
config/initializers/mime_types.rb
Normal file → Executable file
0
config/initializers/secret_token.rb
Normal file → Executable file
0
config/initializers/secret_token.rb
Normal file → Executable file
0
config/initializers/session_store.rb
Normal file → Executable file
0
config/initializers/session_store.rb
Normal file → Executable file
|
@ -78,3 +78,4 @@ en:
|
||||||
login_failure: Login failure. Bad email or password
|
login_failure: Login failure. Bad email or password
|
||||||
general_error: General error
|
general_error: General error
|
||||||
unspecified_error: Unspecified error occured
|
unspecified_error: Unspecified error occured
|
||||||
|
imap_error: Imap Error
|
||||||
|
|
6
config/routes.rb
Normal file → Executable file
6
config/routes.rb
Normal file → Executable file
|
@ -1,15 +1,19 @@
|
||||||
Mailr::Application.routes.draw do
|
Mailr::Application.routes.draw do
|
||||||
|
|
||||||
get "internal/error"
|
get "internal/error"
|
||||||
post "internal/error"
|
get "internal/imaperror"
|
||||||
|
|
||||||
root :to => "messages#index"
|
root :to => "messages#index"
|
||||||
get "messages/index"
|
get "messages/index"
|
||||||
|
get "messages/refresh"
|
||||||
|
match 'messages/folder/:id' => 'messages#folder'
|
||||||
|
|
||||||
get "user/logout"
|
get "user/logout"
|
||||||
post "user/authenticate"
|
post "user/authenticate"
|
||||||
post "user/create"
|
post "user/create"
|
||||||
get "user/login"
|
get "user/login"
|
||||||
get "user/setup"
|
get "user/setup"
|
||||||
|
match 'user/setup/:id' => 'user#setup'
|
||||||
get "user/unknown"
|
get "user/unknown"
|
||||||
|
|
||||||
themes_for_rails
|
themes_for_rails
|
||||||
|
|
0
db/migrate/20110723115402_create_users.rb
Normal file → Executable file
0
db/migrate/20110723115402_create_users.rb
Normal file → Executable file
0
db/migrate/20110723153214_create_servers.rb
Normal file → Executable file
0
db/migrate/20110723153214_create_servers.rb
Normal file → Executable file
0
db/migrate/20110724125806_create_prefs.rb
Normal file → Executable file
0
db/migrate/20110724125806_create_prefs.rb
Normal file → Executable file
0
db/migrate/20110724134917_add_params_to_prefs.rb
Normal file → Executable file
0
db/migrate/20110724134917_add_params_to_prefs.rb
Normal file → Executable file
9
db/migrate/20110725210440_add_use_ssl_to_servers.rb
Executable file
9
db/migrate/20110725210440_add_use_ssl_to_servers.rb
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
class AddUseSslToServers < ActiveRecord::Migration
|
||||||
|
def self.up
|
||||||
|
add_column :servers, :use_ssl, :boolean
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
remove_column :servers, :use_ssl, :boolean
|
||||||
|
end
|
||||||
|
end
|
17
db/migrate/20110727070907_create_folders.rb
Executable file
17
db/migrate/20110727070907_create_folders.rb
Executable file
|
@ -0,0 +1,17 @@
|
||||||
|
class CreateFolders < ActiveRecord::Migration
|
||||||
|
def self.up
|
||||||
|
create_table :folders do |t|
|
||||||
|
t.string :name
|
||||||
|
t.string :delim
|
||||||
|
t.string :attribs
|
||||||
|
t.integer :messages
|
||||||
|
t.integer :new
|
||||||
|
t.references :user
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
drop_table :folders
|
||||||
|
end
|
||||||
|
end
|
11
db/migrate/20110727074214_rename_attribs_in_folders.rb
Executable file
11
db/migrate/20110727074214_rename_attribs_in_folders.rb
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
class RenameAttribsInFolders < ActiveRecord::Migration
|
||||||
|
def self.up
|
||||||
|
rename_column :folders,:attribs,:haschildren
|
||||||
|
change_column :folders,:haschildren,:boolean
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
change_column :folders,:haschildren,:string
|
||||||
|
rename_column :folders,:haschildren,:attribs
|
||||||
|
end
|
||||||
|
end
|
9
db/migrate/20110727081504_change_new_in_folder.rb
Executable file
9
db/migrate/20110727081504_change_new_in_folder.rb
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
class ChangeNewInFolder < ActiveRecord::Migration
|
||||||
|
def self.up
|
||||||
|
rename_column :folders,:new,:unseen
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
rename_column :folders,:unseen,:new
|
||||||
|
end
|
||||||
|
end
|
9
db/migrate/20110727105240_add_column_to_folder.rb
Executable file
9
db/migrate/20110727105240_add_column_to_folder.rb
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
class AddColumnToFolder < ActiveRecord::Migration
|
||||||
|
def self.up
|
||||||
|
add_column :folders, :parent, :string
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
remove_column :folders, :parent
|
||||||
|
end
|
||||||
|
end
|
9
db/migrate/20110727132531_add_column_msgs_to_folder.rb
Executable file
9
db/migrate/20110727132531_add_column_msgs_to_folder.rb
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
class AddColumnMsgsToFolder < ActiveRecord::Migration
|
||||||
|
def self.up
|
||||||
|
add_column :folders, :msgs_updated_at, :datetime
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
remove_column :folders, :msgs_updated_at
|
||||||
|
end
|
||||||
|
end
|
23
db/migrate/20110727134352_create_messages.rb
Executable file
23
db/migrate/20110727134352_create_messages.rb
Executable file
|
@ -0,0 +1,23 @@
|
||||||
|
class CreateMessages < ActiveRecord::Migration
|
||||||
|
def self.up
|
||||||
|
create_table :messages do |t|
|
||||||
|
t.integer :folder_id
|
||||||
|
t.integer :user_id
|
||||||
|
t.string :msg_id
|
||||||
|
t.string :from
|
||||||
|
t.string :to
|
||||||
|
t.string :subject
|
||||||
|
t.string :content_type
|
||||||
|
t.integer :uid
|
||||||
|
t.integer :size
|
||||||
|
t.boolean :unread
|
||||||
|
t.datetime :date
|
||||||
|
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
drop_table :messages
|
||||||
|
end
|
||||||
|
end
|
32
db/schema.rb
Normal file → Executable file
32
db/schema.rb
Normal file → Executable file
|
@ -10,7 +10,36 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended to check this file into your version control system.
|
# It's strongly recommended to check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(:version => 20110724134917) do
|
ActiveRecord::Schema.define(:version => 20110727134352) do
|
||||||
|
|
||||||
|
create_table "folders", :force => true do |t|
|
||||||
|
t.string "name"
|
||||||
|
t.string "delim"
|
||||||
|
t.boolean "haschildren"
|
||||||
|
t.integer "messages"
|
||||||
|
t.integer "unseen"
|
||||||
|
t.integer "user_id"
|
||||||
|
t.datetime "created_at"
|
||||||
|
t.datetime "updated_at"
|
||||||
|
t.string "parent"
|
||||||
|
t.datetime "msgs_updated_at"
|
||||||
|
end
|
||||||
|
|
||||||
|
create_table "messages", :force => true do |t|
|
||||||
|
t.integer "folder_id"
|
||||||
|
t.integer "user_id"
|
||||||
|
t.string "msg_id"
|
||||||
|
t.string "from"
|
||||||
|
t.string "to"
|
||||||
|
t.string "subject"
|
||||||
|
t.string "content_type"
|
||||||
|
t.integer "uid"
|
||||||
|
t.integer "size"
|
||||||
|
t.boolean "unread"
|
||||||
|
t.datetime "date"
|
||||||
|
t.datetime "created_at"
|
||||||
|
t.datetime "updated_at"
|
||||||
|
end
|
||||||
|
|
||||||
create_table "prefs", :force => true do |t|
|
create_table "prefs", :force => true do |t|
|
||||||
t.string "theme"
|
t.string "theme"
|
||||||
|
@ -28,6 +57,7 @@ ActiveRecord::Schema.define(:version => 20110724134917) do
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
|
t.boolean "use_ssl"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "users", :force => true do |t|
|
create_table "users", :force => true do |t|
|
||||||
|
|
0
db/seeds.rb
Normal file → Executable file
0
db/seeds.rb
Normal file → Executable file
0
doc/README_FOR_APP
Normal file → Executable file
0
doc/README_FOR_APP
Normal file → Executable file
23
lib/imap_folder.rb
Executable file
23
lib/imap_folder.rb
Executable file
|
@ -0,0 +1,23 @@
|
||||||
|
require 'net/imap'
|
||||||
|
|
||||||
|
module ImapFolderModule
|
||||||
|
|
||||||
|
class IMAPFolder
|
||||||
|
|
||||||
|
attr_reader :utf7_name
|
||||||
|
attr_reader :delim
|
||||||
|
attr_reader :attribs
|
||||||
|
attr_reader :name
|
||||||
|
attr_accessor :messages
|
||||||
|
attr_accessor :unseen
|
||||||
|
|
||||||
|
def initialize(utf7_name,delim,attribs)
|
||||||
|
@utf7_name = utf7_name
|
||||||
|
@name = Net::IMAP.decode_utf7 utf7_name
|
||||||
|
@delim = delim
|
||||||
|
@attribs = attribs
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
77
lib/imap_mailbox.rb
Executable file
77
lib/imap_mailbox.rb
Executable file
|
@ -0,0 +1,77 @@
|
||||||
|
require 'net/imap'
|
||||||
|
require 'imap_folder'
|
||||||
|
|
||||||
|
module ImapMailboxModule
|
||||||
|
|
||||||
|
class IMAPError < RuntimeError
|
||||||
|
end
|
||||||
|
|
||||||
|
class IMAPMailbox
|
||||||
|
|
||||||
|
attr_reader :connected
|
||||||
|
attr_accessor :selected_folder
|
||||||
|
attr_accessor :logger
|
||||||
|
|
||||||
|
def initialize(logger)
|
||||||
|
@selected_folder = ''
|
||||||
|
@folders = {}
|
||||||
|
@connected = false
|
||||||
|
@logger = logger
|
||||||
|
end
|
||||||
|
|
||||||
|
def connect(server,username,password)
|
||||||
|
|
||||||
|
server_name = server.name
|
||||||
|
server_port = server.port
|
||||||
|
server_use_ssl = server.use_ssl
|
||||||
|
|
||||||
|
unless @connected
|
||||||
|
begin
|
||||||
|
@imap = Net::IMAP.new(server_name, server_port, server_use_ssl)
|
||||||
|
rescue Net::IMAP::ByeResponseError => bye
|
||||||
|
begin
|
||||||
|
System.sleep($defaults['imap_bye_timeout_retry_seconds'])
|
||||||
|
@imap = Net::IMAP.new(server_name, server_port, server_use_ssl)
|
||||||
|
rescue Exception => ex
|
||||||
|
raise IMAPError, ex.inspect
|
||||||
|
end
|
||||||
|
rescue Exception => ex
|
||||||
|
raise IMAPError, ex.inspect
|
||||||
|
end
|
||||||
|
@username = username
|
||||||
|
begin
|
||||||
|
@imap.login(username, password)
|
||||||
|
@connected = true
|
||||||
|
rescue Exception => ex
|
||||||
|
raise IMAPError, ex.inspect
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def disconnect
|
||||||
|
if @connected
|
||||||
|
@imap.logout
|
||||||
|
@imap.disconnect
|
||||||
|
@imap = nil
|
||||||
|
@connected = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def folders
|
||||||
|
@folders = {}
|
||||||
|
folders = @imap.list('', '*')
|
||||||
|
if folders
|
||||||
|
folders.each do |f|
|
||||||
|
folder = ImapFolderModule::IMAPFolder.new(f.name,f.delim,f.attr)
|
||||||
|
status = @imap.status(folder.name, ["MESSAGES", "UNSEEN"])
|
||||||
|
folder.messages = status["MESSAGES"]
|
||||||
|
folder.unseen = status["UNSEEN"]
|
||||||
|
@folders[folder.name] = folder
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@folders
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
5
lib/imap_message.rb
Executable file
5
lib/imap_message.rb
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
require 'net/imap'
|
||||||
|
|
||||||
|
module ImapMessageModule
|
||||||
|
end
|
||||||
|
|
21
lib/imap_session.rb
Executable file
21
lib/imap_session.rb
Executable file
|
@ -0,0 +1,21 @@
|
||||||
|
require 'net/imap'
|
||||||
|
require 'imap_mailbox'
|
||||||
|
|
||||||
|
module ImapSessionModule
|
||||||
|
|
||||||
|
def open_imap_session
|
||||||
|
begin
|
||||||
|
@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 => 'imaperror' , :error => ex.inspect
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def close_imap_session
|
||||||
|
return if @mailbox.nil? or not(@mailbox.connected)
|
||||||
|
@mailbox.disconnect
|
||||||
|
@mailbox = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -1,48 +0,0 @@
|
||||||
require 'net/imap'
|
|
||||||
|
|
||||||
module ImapUtils
|
|
||||||
|
|
||||||
class IMAPMailbox
|
|
||||||
#
|
|
||||||
# attr_reader :connected
|
|
||||||
# attr_accessor :selected_mailbox
|
|
||||||
# cattr_accessor :logger
|
|
||||||
#
|
|
||||||
def initialize(logger)
|
|
||||||
# @selected_mailbox = ''
|
|
||||||
# @folders = {}
|
|
||||||
# @connected = false
|
|
||||||
@logger = logger
|
|
||||||
@logger.info "XXXXXXXXXX i am in"
|
|
||||||
end
|
|
||||||
#
|
|
||||||
end
|
|
||||||
|
|
||||||
def info
|
|
||||||
@m = IMAPMailbox.new(logger)
|
|
||||||
logger.info "XXXXXXXXXXXXX"
|
|
||||||
logger.info @m.inspect
|
|
||||||
end
|
|
||||||
#
|
|
||||||
#def load_imap_session
|
|
||||||
# begin
|
|
||||||
# @mailbox = IMAPMailbox.new(self.logger)
|
|
||||||
## uname = (get_mail_prefs.check_external_mail == 1 ? user.email : user.local_email)
|
|
||||||
## upass = get_upass
|
|
||||||
## @mailbox.connect(uname, upass)
|
|
||||||
## load_folders
|
|
||||||
# rescue Exception => ex
|
|
||||||
# render :controller => "internal", :action => "error" , :error => ex.inspect
|
|
||||||
# end
|
|
||||||
#end
|
|
||||||
|
|
||||||
# def close_imap_session
|
|
||||||
# return if @mailbox.nil? or not(@mailbox.connected)
|
|
||||||
# @mailbox.disconnect
|
|
||||||
# @mailbox = nil
|
|
||||||
# end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end
|
|
0
lib/tasks/.gitkeep
Normal file → Executable file
0
lib/tasks/.gitkeep
Normal file → Executable file
0
public/404.html
Normal file → Executable file
0
public/404.html
Normal file → Executable file
0
public/422.html
Normal file → Executable file
0
public/422.html
Normal file → Executable file
0
public/500.html
Normal file → Executable file
0
public/500.html
Normal file → Executable file
0
public/favicon.ico
Normal file → Executable file
0
public/favicon.ico
Normal file → Executable file
0
public/images/rails.png
Normal file → Executable file
0
public/images/rails.png
Normal file → Executable file
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
0
public/javascripts/application.js
Normal file → Executable file
0
public/javascripts/application.js
Normal file → Executable file
0
public/javascripts/controls.js
vendored
Normal file → Executable file
0
public/javascripts/controls.js
vendored
Normal file → Executable file
0
public/javascripts/dragdrop.js
vendored
Normal file → Executable file
0
public/javascripts/dragdrop.js
vendored
Normal file → Executable file
0
public/javascripts/effects.js
vendored
Normal file → Executable file
0
public/javascripts/effects.js
vendored
Normal file → Executable file
0
public/javascripts/prototype.js
vendored
Normal file → Executable file
0
public/javascripts/prototype.js
vendored
Normal file → Executable file
0
public/javascripts/rails.js
Normal file → Executable file
0
public/javascripts/rails.js
Normal file → Executable file
0
public/robots.txt
Normal file → Executable file
0
public/robots.txt
Normal file → Executable file
0
public/stylesheets/.gitkeep
Normal file → Executable file
0
public/stylesheets/.gitkeep
Normal file → Executable file
15
test/fixtures/folders.yml
vendored
Executable file
15
test/fixtures/folders.yml
vendored
Executable file
|
@ -0,0 +1,15 @@
|
||||||
|
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
|
||||||
|
|
||||||
|
one:
|
||||||
|
name: MyString
|
||||||
|
delim: MyString
|
||||||
|
attribs: MyString
|
||||||
|
messages: 1
|
||||||
|
new: 1
|
||||||
|
|
||||||
|
two:
|
||||||
|
name: MyString
|
||||||
|
delim: MyString
|
||||||
|
attribs: MyString
|
||||||
|
messages: 1
|
||||||
|
new: 1
|
27
test/fixtures/messages.yml
vendored
Executable file
27
test/fixtures/messages.yml
vendored
Executable file
|
@ -0,0 +1,27 @@
|
||||||
|
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
|
||||||
|
|
||||||
|
one:
|
||||||
|
folder_id: 1
|
||||||
|
user_id: 1
|
||||||
|
msg_id: MyString
|
||||||
|
from: MyString
|
||||||
|
to: MyString
|
||||||
|
subject: MyString
|
||||||
|
content_type: MyString
|
||||||
|
uid: 1
|
||||||
|
size: 1
|
||||||
|
unread: false
|
||||||
|
date: 2011-07-27 15:43:52
|
||||||
|
|
||||||
|
two:
|
||||||
|
folder_id: 1
|
||||||
|
user_id: 1
|
||||||
|
msg_id: MyString
|
||||||
|
from: MyString
|
||||||
|
to: MyString
|
||||||
|
subject: MyString
|
||||||
|
content_type: MyString
|
||||||
|
uid: 1
|
||||||
|
size: 1
|
||||||
|
unread: false
|
||||||
|
date: 2011-07-27 15:43:52
|
0
test/fixtures/prefs.yml
vendored
Normal file → Executable file
0
test/fixtures/prefs.yml
vendored
Normal file → Executable file
0
test/fixtures/servers.yml
vendored
Normal file → Executable file
0
test/fixtures/servers.yml
vendored
Normal file → Executable file
0
test/fixtures/users.yml
vendored
Normal file → Executable file
0
test/fixtures/users.yml
vendored
Normal file → Executable file
0
test/functional/core_controller_test.rb
Normal file → Executable file
0
test/functional/core_controller_test.rb
Normal file → Executable file
0
test/functional/internal_controller_test.rb
Normal file → Executable file
0
test/functional/internal_controller_test.rb
Normal file → Executable file
0
test/functional/messages_controller_test.rb
Normal file → Executable file
0
test/functional/messages_controller_test.rb
Normal file → Executable file
0
test/performance/browsing_test.rb
Normal file → Executable file
0
test/performance/browsing_test.rb
Normal file → Executable file
0
test/test_helper.rb
Normal file → Executable file
0
test/test_helper.rb
Normal file → Executable file
8
test/unit/folder_test.rb
Executable file
8
test/unit/folder_test.rb
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class FolderTest < ActiveSupport::TestCase
|
||||||
|
# Replace this with your real tests.
|
||||||
|
test "the truth" do
|
||||||
|
assert true
|
||||||
|
end
|
||||||
|
end
|
0
test/unit/helpers/core_helper_test.rb
Normal file → Executable file
0
test/unit/helpers/core_helper_test.rb
Normal file → Executable file
0
test/unit/helpers/internal_helper_test.rb
Normal file → Executable file
0
test/unit/helpers/internal_helper_test.rb
Normal file → Executable file
0
test/unit/helpers/messages_helper_test.rb
Normal file → Executable file
0
test/unit/helpers/messages_helper_test.rb
Normal file → Executable file
8
test/unit/message_test.rb
Executable file
8
test/unit/message_test.rb
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class MessageTest < ActiveSupport::TestCase
|
||||||
|
# Replace this with your real tests.
|
||||||
|
test "the truth" do
|
||||||
|
assert true
|
||||||
|
end
|
||||||
|
end
|
0
test/unit/prefs_test.rb
Normal file → Executable file
0
test/unit/prefs_test.rb
Normal file → Executable file
0
test/unit/server_test.rb
Normal file → Executable file
0
test/unit/server_test.rb
Normal file → Executable file
0
test/unit/user_test.rb
Normal file → Executable file
0
test/unit/user_test.rb
Normal file → Executable file
0
themes/olive/images/tick.png
Normal file → Executable file
0
themes/olive/images/tick.png
Normal file → Executable file
Before Width: | Height: | Size: 537 B After Width: | Height: | Size: 537 B |
2
themes/olive/views/internal/error.html.erb
Normal file → Executable file
2
themes/olive/views/internal/error.html.erb
Normal file → Executable file
|
@ -8,7 +8,7 @@
|
||||||
</div>
|
</div>
|
||||||
<h2><%= @title %></h2>
|
<h2><%= @title %></h2>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="flash"><div class="message error"><p><%= @description %></p></div></div>
|
<div class="flash"><div class="message error"><p><%= @error %></p></div></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
26
themes/olive/views/messages/index.html.erb
Executable file
26
themes/olive/views/messages/index.html.erb
Executable file
|
@ -0,0 +1,26 @@
|
||||||
|
|
||||||
|
<%= link_to t(:refresh), :controller => 'messages', :action => 'refresh' %>
|
||||||
|
|
||||||
|
<h1>Current: <%= pretty_folder_name(@current_folder) %></h1>
|
||||||
|
|
||||||
|
<%= @current_folder.inspect %>
|
||||||
|
<%= Time.now - @current_folder.msgs_updated_at %>
|
||||||
|
|
||||||
|
<h1>Folders</h1>
|
||||||
|
<% if @folders.size.zero? %>
|
||||||
|
No folders.
|
||||||
|
<% else %>
|
||||||
|
<ul class="folders">
|
||||||
|
<% @folders.each do |f|%>
|
||||||
|
<% if @selected_folder.upcase == f.name.upcase %>
|
||||||
|
<li class="selected"><%= folder_link(f) %></li>
|
||||||
|
<% else %>
|
||||||
|
<li><%= folder_link(f) %></li>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<%= link_to t(:logout), :controller => 'user', :action => 'logout' %>
|
||||||
|
|
||||||
|
|
|
@ -9,10 +9,10 @@
|
||||||
<h2><%= t(:setup_title) %></h2>
|
<h2><%= t(:setup_title) %></h2>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<form action="<%=url_for(:controller => 'user', :action => 'create')%>" method="post" class="form">
|
<form action="<%=url_for(:controller => 'user', :action => 'create')%>" method="post" class="form">
|
||||||
<%= raw form_field(@user,"email",nil,"joe.doe@domain.domain") %>
|
<%= raw form_field(@user,"email",nil,"joe.doe@domain.domain",params['email']) %>
|
||||||
<%= raw form_field(@user,"first_name",nil,"Joe") %>
|
<%= raw form_field(@user,"first_name",nil,"Joe","") %>
|
||||||
<%= raw form_field(@user,"last_name",nil,"Doe") %>
|
<%= raw form_field(@user,"last_name",nil,"Doe","") %>
|
||||||
<%= raw form_field(@server,"name","server_name","domain.domain") %>
|
<%= raw form_field(@server,"name","server_name","domain.domain","") %>
|
||||||
<%= raw form_button("send") %>
|
<%= raw form_button("send") %>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="flash"><div class="message warning"><p><%= t(:unknown_user_flash) %></p></div></div>
|
<div class="flash"><div class="message warning"><p><%= t(:unknown_user_flash) %></p></div></div>
|
||||||
<p><%= t(:unknown_user_login) %> -> <%= link_to "Login",:controller => "user",:action =>"login" %></p>
|
<p><%= t(:unknown_user_login) %> -> <%= link_to "Login",:controller => "user",:action =>"login" %></p>
|
||||||
<p><%= t(:unknown_user_setup) %> -> <%= link_to "Setup",:controller => "user",:action => "setup" %></p>
|
<p><%= t(:unknown_user_setup) %> -> <%= link_to "Setup",:controller => "user",:action => "setup",:email => params['email'] %></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
0
vendor/plugins/.gitkeep
vendored
Normal file → Executable file
0
vendor/plugins/.gitkeep
vendored
Normal file → Executable file
Loading…
Reference in a new issue