From d6b3132663644b0e97baeb74c7af62e4ee19a31e Mon Sep 17 00:00:00 2001 From: Gustavo Milczwski <garm@inf.ufpr.br> Date: Mon, 16 Oct 2017 14:24:59 -0200 Subject: [PATCH] SCRUM#100 Add local search and a function to update .learning_objects.json. Change search result messages --- package/le-edubar@c3sl.ufpr.br/constants.js | 1 - package/le-edubar@c3sl.ufpr.br/download.sh | 14 ++- package/le-edubar@c3sl.ufpr.br/edu-dbus | 99 ++++++++++++++------- package/le-edubar@c3sl.ufpr.br/edubus.js | 4 +- package/le-edubar@c3sl.ufpr.br/extension.js | 40 ++++++--- 5 files changed, 101 insertions(+), 57 deletions(-) diff --git a/package/le-edubar@c3sl.ufpr.br/constants.js b/package/le-edubar@c3sl.ufpr.br/constants.js index 2b61eb7..a04ca14 100644 --- a/package/le-edubar@c3sl.ufpr.br/constants.js +++ b/package/le-edubar@c3sl.ufpr.br/constants.js @@ -48,7 +48,6 @@ const FIRST_RESULT_MARGIN_TOP = 30; const URL_PLATAFORMA = "https://portalmec.c3sl.ufpr.br/#/recurso?id="; const URL_API = 'http://api.portalmec.c3sl.ufpr.br/v1/search?search_class=LearningObject&results_per_page=' + RESULTS_PER_REQUEST; -const DOWNLOAD_URL = "http://api.portalmec.c3sl.ufpr.br/v1/learning_objects/"; const DOWNLOAD_PATH = "/var/cache/le-edubar/"; /*TAGS*/ diff --git a/package/le-edubar@c3sl.ufpr.br/download.sh b/package/le-edubar@c3sl.ufpr.br/download.sh index e13d225..74c0b2d 100755 --- a/package/le-edubar@c3sl.ufpr.br/download.sh +++ b/package/le-edubar@c3sl.ufpr.br/download.sh @@ -20,10 +20,10 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, # USA. -url=$1 -file_name=$2 -file_ext=$3 -file_id=$4 +file_id="$1" +url="http://api.portalmec.c3sl.ufpr.br/v1/learning_objects/$file_id/download" +file_name="$2" +file_ext="$3" # Download folder fdir="/var/cache/le-edubar" @@ -35,8 +35,6 @@ fi cd "$fdir" -nautilus - #Create file folder if test ! -d "$file_id" ; then mkdir "$file_id" @@ -52,8 +50,8 @@ if test $? -ne 0 ; then exit 4 fi - JSON="`wget -qO- https://api.portalmec.c3sl.ufpr.br/v1/learning_objects/$file_id`" echo $JSON > ".$file_id.json" - +#UPDATE .learning_objects.json +gdbus call --system --dest br.ufpr.c3sl.edubar --object-path /br/ufpr/c3sl/edubar --method br.ufpr.c3sl.edubar.Download.UpdateJSON "$file_id" \ No newline at end of file diff --git a/package/le-edubar@c3sl.ufpr.br/edu-dbus b/package/le-edubar@c3sl.ufpr.br/edu-dbus index a3543e5..3d024b8 100755 --- a/package/le-edubar@c3sl.ufpr.br/edu-dbus +++ b/package/le-edubar@c3sl.ufpr.br/edu-dbus @@ -4,7 +4,8 @@ var exec = require('child_process').exec; var fs = require('fs'); var path = require('path'); -const download_dir = '/var/cache/le-edubar' +const download_dir = '/var/cache/le-edubar'; +const download_script = '/usr/share/gnome-shell/extensions/le-edubar@c3sl.ufpr.br/download.sh'; /* Create a new service, object and interface */ var service = DBus.registerService('system', 'br.ufpr.c3sl.edubar'); @@ -17,6 +18,7 @@ var iface_download = obj.createInterface('br.ufpr.c3sl.edubar.Download'); var download_pipe = { download_queue : new Array(), + on_update : false, create : function () { this.download_queue = new Array(); @@ -25,7 +27,9 @@ var download_pipe = { push : function(id) { if (!this.is_queued(id)) { this.download_queue.push(id); - this.update_json(); + if (!this.on_update) { + this.update_json(this.shift()); + } } }, @@ -45,47 +49,75 @@ var download_pipe = { return this.download_queue; }, - update_json : function() { - if (this.download_queue.length <= 0) { + update_json : function(id) { + if (id == undefined) { + this.on_update = false; return; } - if(fs.existsSync(download_dir + '/.learning_objects.json')) { + this.on_update = true; + if (fs.existsSync(download_dir + '/'+ id +'/.' + id +'.json')){ + if (!fs.existsSync(download_dir + '/.learning_objects.json')) { + fs.writeFileSync(download_dir + '/.learning_objects.json', '[]'); + } + var result_JSON = JSON.parse( fs.readFileSync(download_dir + '/.learning_objects.json'). toString().replace(/(\r\n|\n|\r)/gm,"")); + + var i = result_JSON.length; + + while (i-->0) { + if (result_JSON[i].id == id) { + break; + } + } + + if (i < 0) { + + result_JSON.push(JSON.parse( + fs.readFileSync(download_dir + '/'+ id +'/.' + id +'.json'). + toString().replace(/(\r\n|\n|\r)/gm,""))); + fs.writeFileSync(download_dir + '/.learning_objects.json', JSON.stringify(result_JSON)); + } } - this.shift(); - this.update_json(); + + this.update_json(this.shift()); } } -download_pipe.create(); - /* Add method */ iface_download.addMethod('Start', { in: [DBus.Define(String), - DBus.Define(String), - DBus.Define(String), DBus.Define(String), DBus.Define(String)], out: DBus.Define(Number) - }, function(path,link,name,format,id,callback) { + }, function(id,name,format,callback) { console.log('Fazendo download de id=' + id + ' ' + name); - /*TODO Change to dictionary*/ - exec('sudo ' + path + ' "' + - link + '" "' + - name + '" "' + - format + '" "' + - id + '"'); + if (id == '') { + callback(null,id); + } else { - iface_download.emit('started',id); + exec('sudo ' + download_script + + ' "' + id + '" "' + name + '" "' + + format + '"'); - download_pipe.push(id); + callback(null,id); + } - callback(null,id); }); +iface_download.addMethod('UpdateJSON', { + in: [DBus.Define(Number)], + }, function(id,callback) { + if (download_pipe.download_queue == null) { + download_pipe.create(); + } + download_pipe.push(id); + callback(null); + } +); + iface_download.addMethod('Stop', { out: DBus.Define(String) }, function(callback) { callback('Donwload stopped'); }); @@ -156,7 +188,7 @@ iface_file.addMethod('Size', { iface_file.addMethod('GetLocalFiles',{ in: [ DBus.Define(Number), DBus.Define(String), DBus.Define(String) ], - out: DBus.Define(String) }, + out: DBus.Define(Array) }, function(page, search_text, order_property, callback) { fs.exists(download_dir + '/.learning_objects.json', function (exists) { if (exists) { @@ -165,7 +197,17 @@ iface_file.addMethod('GetLocalFiles',{ fs.readFileSync(download_dir + '/.learning_objects.json'). toString().replace(/(\r\n|\n|\r)/gm,"")); - result_JSON.sort(function(a,b) { + var temp_result = JSON.parse("[]"); + var deleted_itens = 0; + for (i = result_JSON.length - 1; i >= 0; --i) { + if (result_JSON[i].name.toLowerCase().search(search_text.toLowerCase()) >= 0) { + temp_result.push(result_JSON[i]); + } else { + deleted_itens++; + } + } + + temp_result.sort(function(a,b) { switch (order_property) { case 'publicationdesc': return a.updated_at.localeCompare(b.updated_at); @@ -191,16 +233,11 @@ iface_file.addMethod('GetLocalFiles',{ } }); - for (i = result_JSON.length - 1; i >= 0; --i) { - if (result_JSON[i].name.toLowerCase().search(search_text.toLowerCase()) < 0) { - result_JSON[i].name = 'ISSO NÃO DEVIA ESTAR AQUI'; - } - } - var temp_result = result_JSON.splice(page*10,10); + temp_result = temp_result.splice(page*10,10); - callback(null,JSON.stringify(temp_result),result_JSON.length); + callback(null, [ JSON.stringify(temp_result), (result_JSON.length - deleted_itens).toString()]); } else { - callback(null, "[]"); + callback(null,["[]",0]); } }); } diff --git a/package/le-edubar@c3sl.ufpr.br/edubus.js b/package/le-edubar@c3sl.ufpr.br/edubus.js index 9763ce9..861bd86 100644 --- a/package/le-edubar@c3sl.ufpr.br/edubus.js +++ b/package/le-edubar@c3sl.ufpr.br/edubus.js @@ -3,8 +3,6 @@ const Gio = imports.gi.Gio; const download_interface = '<node>\ <interface name="br.ufpr.c3sl.edubar.Download">\ <method name="Start">\ - <arg type="s" direction="in"/>\ - <arg type="s" direction="in"/>\ <arg type="s" direction="in"/>\ <arg type="s" direction="in"/>\ <arg type="s" direction="in"/>\ @@ -37,7 +35,7 @@ const file_interface = '<node>\ <arg type="i" direction="in"/>\ <arg type="s" direction="in"/>\ <arg type="s" direction="in"/>\ - <arg type="s" direction="out" />\ + <arg type="av" direction="out" />\ </method>\ <method name="GetTotalFiles">\ <arg type="d" direction="out" />\ diff --git a/package/le-edubar@c3sl.ufpr.br/extension.js b/package/le-edubar@c3sl.ufpr.br/extension.js index eac8544..a190879 100644 --- a/package/le-edubar@c3sl.ufpr.br/extension.js +++ b/package/le-edubar@c3sl.ufpr.br/extension.js @@ -197,7 +197,7 @@ function send_soup_request (request_message, searching_text, local_text) { searching_text.text = ''; if (message.status_code !== 200) { - searching_text.text = 'Sem resposta do serivdor.'; + searching_text.text = 'Sem resposta do servidor.'; on_going_downloads = new Array(); return; } @@ -303,6 +303,8 @@ function start_search() { } } + +/* This function shows the downloaded results*/ function start_local_search() { search_text = input_edu.get_text(); @@ -317,17 +319,28 @@ function start_local_search() { if (local_text != search_text) { return; } - soup_result = JSON.parse(result_json); + + soup_result = JSON.parse(result_json[0][0].get_string()[0]); if (search_page == 0) { - max_pages = Math.ceil(EduBus.file.GetTotalFilesSync() /Constants.RESULTS_PER_REQUEST); + max_pages = Math.ceil((result_json[0][1].get_string()[0]) /Constants.RESULTS_PER_REQUEST); } if (soup_result.length > 0) { show_results(); - } - }); + } else { + let searching_text = new St.Label ({ + text: 'Não há conteúdo baixado.', + style_class: 'portal-search-text', + }); + let searching_bin = new St.Bin ({ + width: edu_screen.width, + }); + searching_bin.set_child(searching_text); + box_result.add_actor(searching_bin); + } + }); } /* @@ -611,7 +624,9 @@ function send_soup_tags_request(url,tag_filter,checked_group,name,search_box) { function show_results() { for (let i = 0; i < soup_result.length ;i++) { try { - box_result.add_child(create_result(soup_result[i])); + if (soup_result[i] != null){ + box_result.add_child(create_result(soup_result[i])); + } } catch (e) { InternalError("Learning content with id=" + soup_result[i].id + " can't be created."); @@ -848,7 +863,6 @@ function create_result(edu_object) { let edu_name = edu_object.attachments[edu_id].name.split("."); let learning_content = { - link : Constants.DOWNLOAD_URL + edu_object.id + '/download', format : edu_name.pop(), id : edu_object.id.toString(), name : edu_name[0], @@ -1008,16 +1022,14 @@ function download_button(download,file_name) { })); /* Starts download.*/ - var file_path = Constants.DOWNLOAD_PATH + + let file_path = Constants.DOWNLOAD_PATH + download.id + "/" + download.name + "." + download.format; - EduBus.download.StartRemote( - meta_path + '/download.sh', - download.link, + EduBus.download.StartSync( + download.id.toString(), download.name, - download.format, - download.id.toString()); + download.format); if (on_going_downloads.indexOf(download.id) < 0) { on_going_downloads.push(download.id); @@ -1026,7 +1038,7 @@ function download_button(download,file_name) { Mainloop.timeout_add(500, function() { /*Begin inner Mainloop*/ - if (download.size != EduBus.file.SizeSync(file_path)[0] && + if (download.size != EduBus.file.SizeSync(file_path) && on_going_downloads.indexOf(download.id) >= 0) { return true; } else { -- GitLab