ayadn 1.5.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -96,6 +96,8 @@ module Ayadn
96
96
  conf[:timeline][:show_spinner] = true if conf[:timeline][:show_spinner].nil?
97
97
  conf[:colors][:debug] = :red if conf[:colors][:debug].nil?
98
98
  conf[:nowplaying] = {} if conf[:nowplaying].nil?
99
+ conf[:movie] = {hashtag: 'nowwatching'} if conf[:movie].nil?
100
+ conf[:tvshow] = {hashtag: 'nowwatching'} if conf[:tvshow].nil?
99
101
 
100
102
  @options = conf
101
103
  self.write_config_file(config_file, @options)
@@ -219,7 +221,13 @@ module Ayadn
219
221
  timer: 3
220
222
  },
221
223
  nicerank: @default_nr,
222
- nowplaying: {}
224
+ nowplaying: {},
225
+ movie: {
226
+ hashtag: 'nowwatching'
227
+ },
228
+ tvshow: {
229
+ hashtag: 'nowwatching'
230
+ }
223
231
  }
224
232
  end
225
233
 
data/lib/ayadn/status.rb CHANGED
@@ -122,6 +122,9 @@ module Ayadn
122
122
  def self.blocked(username)
123
123
  "\nUser #{username} has been blocked.\n".color(:green)
124
124
  end
125
+ def self.error_missing_title
126
+ "\nYou have to specify (part of) a movie title.\n".color(:red)
127
+ end
125
128
  def self.error_missing_username
126
129
  "\nYou have to specify a username.\n".color(:red)
127
130
  end
@@ -155,8 +158,12 @@ module Ayadn
155
158
  def self.yourpost
156
159
  "Your post:\n\n".color(:cyan)
157
160
  end
158
- def self.yourmessage
159
- "Your message:\n\n".color(:cyan)
161
+ def self.yourmessage username = nil
162
+ if username.nil?
163
+ "Your message:\n\n".color(:cyan)
164
+ else
165
+ "Your message to ".color(:cyan) + username.color(:green) + ":\n\n".color(:cyan)
166
+ end
160
167
  end
161
168
  def self.message_from(username)
162
169
  "\nMessage from ".color(:cyan) + "#{Settings.config[:identity][:handle]} ".color(:green) + "to ".color(:cyan) + "#{username[0]}".color(:yellow) + ".".color(:cyan)
@@ -293,5 +300,14 @@ module Ayadn
293
300
  def self.fetching_from source
294
301
  "\nFetching informations from #{source}...\n".color(:green)
295
302
  end
303
+ def self.no_movie
304
+ "\nSorry, can't find this movie.\n".color(:blue)
305
+ end
306
+ def self.no_show
307
+ "\nSorry, can't find this show.\n".color(:blue)
308
+ end
309
+ def self.no_show_infos
310
+ "\nSorry, can't find informations about this show.\n".color(:blue)
311
+ end
296
312
  end
297
313
  end
@@ -0,0 +1,254 @@
1
+ # encoding: utf-8
2
+ module Ayadn
3
+
4
+ class Stream
5
+
6
+ def initialize api, view, workers
7
+ @api = api
8
+ @view = view
9
+ @workers = workers
10
+ end
11
+
12
+ def unified options
13
+ @view.downloading(options)
14
+ stream = @api.get_unified(options)
15
+ Check.no_new_posts(stream, options, 'unified')
16
+ Databases.save_max_id(stream)
17
+ @view.render(stream, options)
18
+ Scroll.new(@api, @view).unified(options) if options[:scroll]
19
+ end
20
+
21
+ def checkins options
22
+ @view.downloading(options)
23
+ stream = @api.get_checkins(options)
24
+ Check.no_new_posts(stream, options, 'explore:checkins')
25
+ Databases.save_max_id(stream)
26
+ @view.render(stream, options)
27
+ Scroll.new(@api, @view).checkins(options) if options[:scroll]
28
+ end
29
+
30
+ def global settings
31
+ options = settings.dup
32
+ options[:filter] = nicerank_true()
33
+ @view.downloading(options)
34
+ stream = @api.get_global(options)
35
+ niceranks = NiceRank.new.get_ranks(stream)
36
+ Check.no_new_posts(stream, options, 'global')
37
+ Databases.save_max_id(stream)
38
+ @view.render(stream, options, niceranks)
39
+ Scroll.new(@api, @view).global(options) if options[:scroll]
40
+ end
41
+
42
+ def trending options
43
+ @view.downloading(options)
44
+ stream = @api.get_trending(options)
45
+ Check.no_new_posts(stream, options, 'explore:trending')
46
+ Databases.save_max_id(stream)
47
+ @view.render(stream, options)
48
+ Scroll.new(@api, @view).trending(options) if options[:scroll]
49
+ end
50
+
51
+ def photos options
52
+ @view.downloading(options)
53
+ stream = @api.get_photos(options)
54
+ Check.no_new_posts(stream, options, 'explore:photos')
55
+ Databases.save_max_id(stream)
56
+ @view.render(stream, options)
57
+ Scroll.new(@api, @view).photos(options) if options[:scroll]
58
+ end
59
+
60
+ def conversations options
61
+ @view.downloading(options)
62
+ stream = @api.get_conversations(options)
63
+ Check.no_new_posts(stream, options, 'explore:replies')
64
+ Databases.save_max_id(stream)
65
+ @view.render(stream, options)
66
+ Scroll.new(@api, @view).replies(options) if options[:scroll]
67
+ end
68
+
69
+ def mentions username, options
70
+ Check.no_username(username)
71
+ username = @workers.add_arobase(username)
72
+ @view.downloading(options)
73
+ stream = @api.get_mentions(username, options)
74
+ Check.no_user(stream, username)
75
+ Databases.save_max_id(stream)
76
+ Check.no_data(stream, 'mentions')
77
+ options = options.dup
78
+ options[:in_mentions] = true
79
+ @view.render(stream, options)
80
+ Scroll.new(@api, @view).mentions(username, options) if options[:scroll]
81
+ end
82
+
83
+ def posts username, options
84
+ Check.no_username(username)
85
+ username = @workers.add_arobase(username)
86
+ @view.downloading(options)
87
+ stream = @api.get_posts(username, options)
88
+ Check.no_user(stream, username)
89
+ Databases.save_max_id(stream)
90
+ Check.no_data(stream, 'mentions')
91
+ @view.render(stream, options)
92
+ Scroll.new(@api, @view).posts(username, options) if options[:scroll]
93
+ end
94
+
95
+ def whatstarred(username, options)
96
+ Check.no_username(username)
97
+ username = @workers.add_arobase(username)
98
+ @view.downloading(options)
99
+ stream = @api.get_whatstarred(username, options)
100
+ Check.no_user(stream, username)
101
+ Check.no_data(stream, 'whatstarred')
102
+ options[:extract] ? @view.all_stars_links(stream) : @view.render(stream, options)
103
+ end
104
+
105
+ def followings(username, options)
106
+ Check.no_username(username)
107
+ username = @workers.add_arobase(username)
108
+ @view.downloading(options)
109
+ show_raw_list(username, :followings, options)
110
+ list = @api.get_followings(username)
111
+ Check.auto_save_followings(list)
112
+ Errors.no_data('followings') if list.empty?
113
+ @view.list(:followings, list, username)
114
+ Databases.add_to_users_db_from_list(list)
115
+ end
116
+
117
+ def followers(username, options)
118
+ Check.no_username(username)
119
+ username = @workers.add_arobase(username)
120
+ @view.downloading(options)
121
+ show_raw_list(username, :followers, options)
122
+ list = @api.get_followers(username)
123
+ Check.auto_save_followers(list)
124
+ Errors.no_data('followers') if list.empty?
125
+ @view.list(:followers, list, username)
126
+ Databases.add_to_users_db_from_list(list)
127
+ end
128
+
129
+ def muted(options)
130
+ @view.downloading(options)
131
+ show_raw_list(nil, :muted, options)
132
+ list = @api.get_muted
133
+ Check.auto_save_muted(list)
134
+ Errors.no_data('muted') if list.empty?
135
+ @view.list(:muted, list, nil)
136
+ Databases.add_to_users_db_from_list(list)
137
+ end
138
+
139
+ def blocked(options)
140
+ @view.downloading(options)
141
+ show_raw_list(nil, :blocked, options)
142
+ list = @api.get_blocked
143
+ Errors.no_data('blocked') if list.empty?
144
+ @view.list(:blocked, list, nil)
145
+ Databases.add_to_users_db_from_list(list)
146
+ end
147
+
148
+ def interactions(options)
149
+ @view.downloading(options)
150
+ stream = @api.get_interactions
151
+ @view.if_raw(stream, options)
152
+ @view.clear_screen
153
+ @view.show_interactions(stream['data'])
154
+ end
155
+
156
+ def whoreposted(post_id, options)
157
+ Check.bad_post_id(post_id)
158
+ @view.downloading(options)
159
+ details = @api.get_details(post_id, options)
160
+ Check.no_post(details, post_id)
161
+ id = @workers.get_original_id(post_id, details)
162
+ list = @api.get_whoreposted(id)
163
+ @view.if_raw(list, options)
164
+ abort(Status.nobody_reposted) if list['data'].empty?
165
+ @view.list(:whoreposted, list['data'], post_id)
166
+ end
167
+
168
+ def whostarred(post_id, options)
169
+ Check.bad_post_id(post_id)
170
+ @view.downloading(options)
171
+ details = @api.get_details(post_id, options)
172
+ Check.no_post(details, post_id)
173
+ id = @workers.get_original_id(post_id, details)
174
+ list = @api.get_whostarred(id)
175
+ @view.if_raw(list, options)
176
+ abort(Status.nobody_starred) if list['data'].empty?
177
+ @view.list(:whostarred, list['data'], id)
178
+ end
179
+
180
+ def convo(post_id, options)
181
+ Check.bad_post_id(post_id)
182
+ @view.downloading(options)
183
+ details = @api.get_details(post_id, options)
184
+ Check.no_post(details, post_id)
185
+ id = @workers.get_original_id(post_id, details)
186
+ stream = @api.get_convo(id, options)
187
+ Check.no_post(stream, id)
188
+ Databases.pagination["replies:#{id}"] = stream['meta']['max_id']
189
+ options = options.dup
190
+ options[:reply_to] = details['data']['reply_to'].to_i unless details['data']['reply_to'].nil?
191
+ options[:post_id] = post_id.to_i
192
+ @view.render(stream, options)
193
+ Scroll.new(@api, @view).convo(id, options) if options[:scroll]
194
+ end
195
+
196
+ def messages(channel_id, options)
197
+ channel_id = @workers.get_channel_id_from_alias(channel_id)
198
+ @view.downloading(options)
199
+ resp = @api.get_messages(channel_id, options)
200
+ Check.no_new_posts(resp, options, "channel:#{channel_id}")
201
+ Databases.save_max_id(resp)
202
+ @view.if_raw(resp, options)
203
+ Check.no_data(resp, 'messages')
204
+ @view.render(resp, options)
205
+ Scroll.new(@api, @view).messages(channel_id, options) if options[:scroll]
206
+ end
207
+
208
+ def random_posts(options)
209
+ #_, cols = @view.winsize
210
+ #max_posts = cols / 16
211
+ max_posts = 6
212
+ @view.clear_screen
213
+ puts "Fetching random posts, please wait...".color(:cyan)
214
+ @max_id = @api.get_global({count: 1})['meta']['max_id'].to_i
215
+ @view.clear_screen
216
+ counter = 1
217
+ wait = options[:wait] || 5
218
+ loop do
219
+ begin
220
+ @random_post_id = rand(@max_id)
221
+ @resp = @api.get_details(@random_post_id, {})
222
+ next if @resp['data']['is_deleted']
223
+ @view.show_simple_post([@resp['data']], {})
224
+ counter += 1
225
+ if counter == max_posts
226
+ wait.downto(1) do |i|
227
+ print "\r#{sprintf("%02d", i)} sec... QUIT WITH [CTRL+C]".color(:cyan)
228
+ sleep 1
229
+ end
230
+ @view.clear_screen
231
+ counter = 1
232
+ end
233
+ rescue Interrupt
234
+ abort(Status.canceled)
235
+ end
236
+ end
237
+ end
238
+
239
+ private
240
+
241
+ def show_raw_list username, what, options
242
+ if options[:raw]
243
+ @view.show_raw(@api.get_raw_list(username, what), options)
244
+ exit
245
+ end
246
+ end
247
+
248
+ def nicerank_true
249
+ return true if Settings.options[:nicerank][:filter] == true
250
+ end
251
+
252
+ end
253
+
254
+ end
data/lib/ayadn/switch.rb CHANGED
@@ -32,7 +32,7 @@ module Ayadn
32
32
  exit
33
33
  end
34
34
  #puts "\e[H\e[2J"
35
- username = Workers.remove_arobase_if_present([user.first])[0]
35
+ username = Workers.new.remove_arobase_if_present([user.first])[0]
36
36
  home_path = Dir.home + "/ayadn"
37
37
  if File.exist?("#{home_path}/accounts.db")
38
38
  accounts_db = Databases.init("#{home_path}/accounts.db")
@@ -0,0 +1,123 @@
1
+ # encoding: utf-8
2
+ module Ayadn
3
+
4
+ class TvShow
5
+
6
+ require 'tvdb_party'
7
+
8
+ AYADN_TVDB_API_KEY = '3F21527FE4C9C274'
9
+
10
+ attr_accessor :language, :name, :poster_url, :banner_url, :plot, :text, :imdb_link, :tag, :link, :date
11
+
12
+ def initialize
13
+ @language = 'en'
14
+ @view = View.new
15
+ @tvdb = TvdbParty::Search.new(AYADN_TVDB_API_KEY)
16
+ end
17
+
18
+ def find title
19
+ res = find_all(title)
20
+ abort(Status.no_show) if res[0].nil?
21
+ if res[0].has_key?('FirstAired')
22
+ return @tvdb.get_series_by_id(res[0]['seriesid'])
23
+ else
24
+ return @tvdb.get_series_by_id(res[1]['seriesid']) unless res[1].nil?
25
+ end
26
+ abort(Status.no_show)
27
+ end
28
+
29
+ def find_alt title
30
+ res = find_all(title)
31
+ abort(Status.no_show) if res[0].nil?
32
+ if res[0].has_key?('FirstAired')
33
+ return @tvdb.get_series_by_id(res[1]['seriesid']) unless res[1].nil?
34
+ else
35
+ return @tvdb.get_series_by_id(res[2]['seriesid']) unless res[2].nil?
36
+ end
37
+ abort(Status.no_show)
38
+ end
39
+
40
+ def create_details show_obj
41
+ @name = show_obj.name
42
+ @poster_url = find_poster_url(show_obj)
43
+ @banner_url = find_banner_url(show_obj)
44
+ @plot = find_plot(show_obj)
45
+ @date = show_obj.first_aired.year
46
+ @imdb_link = "http://imdb.com/title/#{show_obj.imdb_id}/"
47
+ create_text()
48
+ return self
49
+ end
50
+
51
+ def create_text
52
+ @link = "[IMDb](#{@imdb_link})"
53
+ @tag = Settings.options[:tvshow][:hashtag]
54
+ @date.nil? ? date = '' : date = "(#{@date})"
55
+ pre = "#{@name} #{date}\n \n"
56
+ presize = pre.length + @tag.length + 4 + @plot.length
57
+ max = 241
58
+ if presize > max
59
+ plot_max = max - (pre.length + @tag.length)
60
+ @text = "#{pre}#{@plot[0..plot_max]}...\n \n#{@link}\n \n##{@tag}"
61
+ else
62
+ @text = "#{pre}#{@plot}\n \n#{@link}\n \n##{@tag}"
63
+ end
64
+ end
65
+
66
+ def ok
67
+ @view.clear_screen
68
+ puts "\nYour post:\n\n".color(:cyan)
69
+ puts @text
70
+ puts "\n\nIs it ok? (y/N)".color(:yellow)
71
+ STDIN.getch == ("y" || "Y") ? true : false
72
+ end
73
+
74
+ def post options = {}
75
+ reg = /[~:-;,?!\'&`^=+<>*%()\/"“”’°£$€.…]/
76
+ filename = "#{@name.downcase.strip.gsub(reg, '_').split(' ').join('_')}.jpg"
77
+ if options['banner']
78
+ FileOps.download_url(filename, @banner_url)
79
+ else
80
+ FileOps.download_url(filename, @poster_url)
81
+ end
82
+ @view.clear_screen
83
+ puts "\nPosting and uploading the show poster...\n".color(:green)
84
+ file = ["#{Settings.config[:paths][:downloads]}/#{filename}"]
85
+ dic = {
86
+ 'text' => @text,
87
+ 'data' => FileOps.upload_files(file),
88
+ 'title' => @name,
89
+ 'source' => 'TVDb'
90
+ }
91
+ resp = Post.new.send_tvshow(dic)
92
+ FileOps.save_post(resp) if Settings.options[:backup][:auto_save_sent_posts]
93
+ @view.clear_screen
94
+ puts Status.yourpost
95
+ @view.show_posted(resp)
96
+ end
97
+
98
+ def cancel
99
+ abort(Status.canceled)
100
+ end
101
+
102
+ private
103
+
104
+ def find_all title
105
+ @tvdb.search(title)
106
+ end
107
+
108
+ def find_poster_url show_obj
109
+ poster = show_obj.posters(@language).first
110
+ poster.nil? ? abort(Status.no_show_infos) : poster.url
111
+ end
112
+
113
+ def find_banner_url show_obj
114
+ banner = show_obj.series_banners(@language).first
115
+ banner.nil? ? abort(Status.no_show_infos) : banner.url
116
+ end
117
+
118
+ def find_plot show_obj
119
+ show_obj.overview
120
+ end
121
+
122
+ end
123
+ end