fehlerloeschen nutzt get_issues()
Dadurch wird jetzt automatisch P_CURRENTDIR ausgewertet. Ausserdem
werden Code-Duplikate entfernt
Change-Id: Ie7e288a49d789ea0c3138f237b9775b766fca4ee
diff --git a/obj/tools/fehlerteufel.c b/obj/tools/fehlerteufel.c
index 5bb76f1..2e874e2 100644
--- a/obj/tools/fehlerteufel.c
+++ b/obj/tools/fehlerteufel.c
@@ -51,7 +51,7 @@
private varargs int update_issuelist(int lmodus);
private void get_uids();
private struct fullissue_s get_issue(string arg);
-private struct fullissue_s|struct fullissue_s* get_issues(string arg);
+private struct fullissue_s|struct fullissue_s* get_issues(string arg, int parsed = 0);
// irgendeinen Fehler oder Warnung anzeigen.
private int show_entry(struct fullissue_s issue)
@@ -183,85 +183,79 @@
return 0;
}
-// Loescht alle Fehler und Warnungen eines Objekts (soweit per modus
-// ausgewaehlt). Entscheidend ist der _Loadname_!
-private int DeleteErrorsForLoadname(string loadname, string note)
-{
- int sum_deleted;
- // Bei == 0 wird sonst alles geloescht. ;-)
- if (!loadname)
- return 0;
-
- foreach(int m: ALL_ERR_TYPES)
- {
- if (!(m & modus))
- continue;
- < <int|string>* >* list = ({< <int|string>* >*})ERRORD->QueryIssueListByLoadname(loadname,m);
- if (pointerp(list))
- {
- foreach(<int|string>* row : list)
- {
- if (({int})ERRORD->ToggleDeleteError(row[0], note) == 1)
- {
- tell_object(PL,
- row[0] + " als geloescht markiert.\n");
- }
- }
- sum_deleted+=sizeof(list);
- }
- }
- return sum_deleted;
-}
-
public int CmdFehlerLoeschen(string arg)
{
int issueid;
string note;
+ struct fullissue_s|struct fullissue_s* issues;
arg = ({string})this_player()->_unparsed_args(0);
if (stringp(arg) && sizeof(arg))
{
- issueid = to_int(arg);
- // Fuehrende Leerzeichen entfernen, um ID und Notiz zuverlaessig trennen zu
- // koennen.
- arg = trim(arg, TRIM_LEFT);
- // Alles ab dem zweiten Wort sollte eine Notiz sein.
- int spacepos = strstr(arg, " ");
- if(spacepos != -1)
- {
- note = arg[spacepos + 1 ..];
- arg = arg[.. spacepos - 1];
- }
+ // Fuehrende Leerzeichen entfernen, um ID und Notiz zuverlaessig trennen zu
+ // koennen.
+ arg = trim(arg, TRIM_LEFT);
+ // Alles ab dem zweiten Wort sollte eine Notiz sein.
+ int spacepos = strstr(arg, " ");
+ if(spacepos != -1)
+ {
+ note = arg[spacepos + 1 ..];
+ arg = arg[.. spacepos - 1];
+ }
+ issues = get_issues(arg, 1);
+ if(structp(issues))
+ {
+ issueid = issues->id;
+ }
}
else
- issueid = lfehler;
+ issueid = lfehler;
notify_fail("Einen Eintrag mit dieser ID/diesem Loadname gibt es nicht!\n");
- int res = ({int})ERRORD->ToggleDeleteError(issueid, note);
- if (res == 1)
+ if(issueid > 0)
{
- tell_object(PL,
- "Fehler/Warnung wurde zum Loeschen markiert und wird in Kuerze "
- "geloescht.\n");
- lfehler = issueid;
- return 1;
+ int res = ({int})ERRORD->ToggleDeleteError(issueid, note);
+ if (res == 1)
+ {
+ tell_object(PL,
+ "Fehler/Warnung wurde zum Loeschen markiert und wird in Kuerze "
+ "geloescht.\n");
+ lfehler = issueid;
+ return 1;
+ }
+ else if (res==0)
+ {
+ tell_object(PL,"Loeschmarkierung wurde entfernt.\n");
+ lfehler = issueid;
+ return 1;
+ }
+ else if (res < -1)
+ {
+ tell_object(PL, "Irgendwas ist beim Loeschen schiefgegangen. "
+ "Keine Schreibrechte?\n");
+ lfehler = issueid;
+ return 1;
+ }
}
- else if (res==0)
+ else if(pointerp(issues))
{
- tell_object(PL,"Loeschmarkierung wurde entfernt.\n");
- lfehler = issueid;
- return 1;
+ int sum_deleted = 0;
+ string res = "";
+ foreach(struct fullissue_s issue : issues)
+ {
+ issueid = issue->id;
+ if(({int})ERRORD->ToggleDeleteError(issueid, note) == 1)
+ {
+ res += issueid + " als geloescht markiert.\n";
+ ++sum_deleted;
+ }
+ }
+ PL->ReceiveMsg(res, MT_NOTIFICATION | MSG_DONT_WRAP);
+ return sum_deleted;
}
- else if (res < -1)
- {
- tell_object(PL, "Irgendwas ist beim Loeschen schiefgegangen. "
- "Keine Schreibrechte?\n");
- lfehler = issueid;
- return 1;
- }
- // res war == -1 -> Fehler nicht gefunden. Vielleicht ist es nen Loadname
- return DeleteErrorsForLoadname(arg, note);
+ // Offenbar kein Fehler gefunden
+ return 0;
}
public int CmdRefresh(string arg) {
@@ -1135,9 +1129,12 @@
return issue;
}
-private struct fullissue_s|struct fullissue_s* get_issues(string arg)
+private struct fullissue_s|struct fullissue_s* get_issues(string arg, int parsed)
{
- arg=({string})PL->_unparsed_args();
+ // Manche Funktionen kuemmern sich selbst um _unparsed_args((), da z.B.
+ // noch eine Notiz abgeschnitten werden muss.
+ if(!parsed)
+ arg=({string})PL->_unparsed_args();
struct fullissue_s|struct fullissue_s* issues;
// Erstmal schauen, ob arg eine ID ist.